Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: test/mjsunit/asm/embenchen/zlib.js

Issue 704653004: Add test cases based on the programs from the Embenchen benchmark suite. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Mark certain tests as slow. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/mjsunit/asm/embenchen/primes.js ('k') | test/mjsunit/mjsunit.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 var EXPECTED_OUTPUT = 'sizes: 100000,25906\nok.\n';
6 var Module = {
7 arguments: [1],
8 print: function(x) {Module.printBuffer += x + '\n';},
9 preRun: [function() {Module.printBuffer = ''}],
10 postRun: [function() {
11 assertEquals(EXPECTED_OUTPUT, Module.printBuffer);
12 }],
13 };
14 // The Module object: Our interface to the outside world. We import
15 // and export values on it, and do the work to get that through
16 // closure compiler if necessary. There are various ways Module can be used:
17 // 1. Not defined. We create it here
18 // 2. A function parameter, function(Module) { ..generated code.. }
19 // 3. pre-run appended it, var Module = {}; ..generated code..
20 // 4. External script tag defines var Module.
21 // We need to do an eval in order to handle the closure compiler
22 // case, where this code here is minified but Module was defined
23 // elsewhere (e.g. case 4 above). We also need to check if Module
24 // already exists (e.g. case 3 above).
25 // Note that if you want to run closure, and also to use Module
26 // after the generated code, you will need to define var Module = {};
27 // before the code. Then that object will be used in the code, and you
28 // can continue to use Module afterwards as well.
29 var Module;
30 if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
31
32 // Sometimes an existing Module object exists with properties
33 // meant to overwrite the default module functionality. Here
34 // we collect those properties and reapply _after_ we configure
35 // the current environment's defaults to avoid having to be so
36 // defensive during initialization.
37 var moduleOverrides = {};
38 for (var key in Module) {
39 if (Module.hasOwnProperty(key)) {
40 moduleOverrides[key] = Module[key];
41 }
42 }
43
44 // The environment setup code below is customized to use Module.
45 // *** Environment setup code ***
46 var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'fun ction';
47 var ENVIRONMENT_IS_WEB = typeof window === 'object';
48 var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
49 var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR ONMENT_IS_WORKER;
50
51 if (ENVIRONMENT_IS_NODE) {
52 // Expose functionality in the same simple way that the shells work
53 // Note that we pollute the global namespace here, otherwise we break in node
54 if (!Module['print']) Module['print'] = function print(x) {
55 process['stdout'].write(x + '\n');
56 };
57 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
58 process['stderr'].write(x + '\n');
59 };
60
61 var nodeFS = require('fs');
62 var nodePath = require('path');
63
64 Module['read'] = function read(filename, binary) {
65 filename = nodePath['normalize'](filename);
66 var ret = nodeFS['readFileSync'](filename);
67 // The path is absolute if the normalized version is the same as the resolve d.
68 if (!ret && filename != nodePath['resolve'](filename)) {
69 filename = path.join(__dirname, '..', 'src', filename);
70 ret = nodeFS['readFileSync'](filename);
71 }
72 if (ret && !binary) ret = ret.toString();
73 return ret;
74 };
75
76 Module['readBinary'] = function readBinary(filename) { return Module['read'](f ilename, true) };
77
78 Module['load'] = function load(f) {
79 globalEval(read(f));
80 };
81
82 Module['arguments'] = process['argv'].slice(2);
83
84 module['exports'] = Module;
85 }
86 else if (ENVIRONMENT_IS_SHELL) {
87 if (!Module['print']) Module['print'] = print;
88 if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not pres ent in v8 or older sm
89
90 if (typeof read != 'undefined') {
91 Module['read'] = read;
92 } else {
93 Module['read'] = function read() { throw 'no read() available (jsc?)' };
94 }
95
96 Module['readBinary'] = function readBinary(f) {
97 return read(f, 'binary');
98 };
99
100 if (typeof scriptArgs != 'undefined') {
101 Module['arguments'] = scriptArgs;
102 } else if (typeof arguments != 'undefined') {
103 Module['arguments'] = arguments;
104 }
105
106 this['Module'] = Module;
107
108 eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, whic h can confuse closure (uses it as a minified name, and it is then initted to a n on-falsey value unexpectedly)
109 }
110 else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
111 Module['read'] = function read(url) {
112 var xhr = new XMLHttpRequest();
113 xhr.open('GET', url, false);
114 xhr.send(null);
115 return xhr.responseText;
116 };
117
118 if (typeof arguments != 'undefined') {
119 Module['arguments'] = arguments;
120 }
121
122 if (typeof console !== 'undefined') {
123 if (!Module['print']) Module['print'] = function print(x) {
124 console.log(x);
125 };
126 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
127 console.log(x);
128 };
129 } else {
130 // Probably a worker, and without console.log. We can do very little here...
131 var TRY_USE_DUMP = false;
132 if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== " undefined") ? (function(x) {
133 dump(x);
134 }) : (function(x) {
135 // self.postMessage(x); // enable this if you want stdout to be sent as me ssages
136 }));
137 }
138
139 if (ENVIRONMENT_IS_WEB) {
140 window['Module'] = Module;
141 } else {
142 Module['load'] = importScripts;
143 }
144 }
145 else {
146 // Unreachable because SHELL is dependant on the others
147 throw 'Unknown runtime environment. Where are we?';
148 }
149
150 function globalEval(x) {
151 eval.call(null, x);
152 }
153 if (!Module['load'] == 'undefined' && Module['read']) {
154 Module['load'] = function load(f) {
155 globalEval(Module['read'](f));
156 };
157 }
158 if (!Module['print']) {
159 Module['print'] = function(){};
160 }
161 if (!Module['printErr']) {
162 Module['printErr'] = Module['print'];
163 }
164 if (!Module['arguments']) {
165 Module['arguments'] = [];
166 }
167 // *** Environment setup code ***
168
169 // Closure helpers
170 Module.print = Module['print'];
171 Module.printErr = Module['printErr'];
172
173 // Callbacks
174 Module['preRun'] = [];
175 Module['postRun'] = [];
176
177 // Merge back in the overrides
178 for (var key in moduleOverrides) {
179 if (moduleOverrides.hasOwnProperty(key)) {
180 Module[key] = moduleOverrides[key];
181 }
182 }
183
184
185
186 // === Auto-generated preamble library stuff ===
187
188 //========================================
189 // Runtime code shared with compiler
190 //========================================
191
192 var Runtime = {
193 stackSave: function () {
194 return STACKTOP;
195 },
196 stackRestore: function (stackTop) {
197 STACKTOP = stackTop;
198 },
199 forceAlign: function (target, quantum) {
200 quantum = quantum || 4;
201 if (quantum == 1) return target;
202 if (isNumber(target) && isNumber(quantum)) {
203 return Math.ceil(target/quantum)*quantum;
204 } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
205 return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
206 }
207 return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
208 },
209 isNumberType: function (type) {
210 return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
211 },
212 isPointerType: function isPointerType(type) {
213 return type[type.length-1] == '*';
214 },
215 isStructType: function isStructType(type) {
216 if (isPointerType(type)) return false;
217 if (isArrayType(type)) return true;
218 if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymo us struct types
219 // See comment in isStructPointerType()
220 return type[0] == '%';
221 },
222 INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
223 FLOAT_TYPES: {"float":0,"double":0},
224 or64: function (x, y) {
225 var l = (x | 0) | (y | 0);
226 var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 42949672 96;
227 return l + h;
228 },
229 and64: function (x, y) {
230 var l = (x | 0) & (y | 0);
231 var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 42949672 96;
232 return l + h;
233 },
234 xor64: function (x, y) {
235 var l = (x | 0) ^ (y | 0);
236 var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 42949672 96;
237 return l + h;
238 },
239 getNativeTypeSize: function (type) {
240 switch (type) {
241 case 'i1': case 'i8': return 1;
242 case 'i16': return 2;
243 case 'i32': return 4;
244 case 'i64': return 8;
245 case 'float': return 4;
246 case 'double': return 8;
247 default: {
248 if (type[type.length-1] === '*') {
249 return Runtime.QUANTUM_SIZE; // A pointer
250 } else if (type[0] === 'i') {
251 var bits = parseInt(type.substr(1));
252 assert(bits % 8 === 0);
253 return bits/8;
254 } else {
255 return 0;
256 }
257 }
258 }
259 },
260 getNativeFieldSize: function (type) {
261 return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
262 },
263 dedup: function dedup(items, ident) {
264 var seen = {};
265 if (ident) {
266 return items.filter(function(item) {
267 if (seen[item[ident]]) return false;
268 seen[item[ident]] = true;
269 return true;
270 });
271 } else {
272 return items.filter(function(item) {
273 if (seen[item]) return false;
274 seen[item] = true;
275 return true;
276 });
277 }
278 },
279 set: function set() {
280 var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
281 var ret = {};
282 for (var i = 0; i < args.length; i++) {
283 ret[args[i]] = 0;
284 }
285 return ret;
286 },
287 STACK_ALIGN: 8,
288 getAlignSize: function (type, size, vararg) {
289 // we align i64s and doubles on 64-bit boundaries, unlike x86
290 if (!vararg && (type == 'i64' || type == 'double')) return 8;
291 if (!type) return Math.min(size, 8); // align structures internally to 64 bi ts
292 return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runti me.QUANTUM_SIZE);
293 },
294 calculateStructAlignment: function calculateStructAlignment(type) {
295 type.flatSize = 0;
296 type.alignSize = 0;
297 var diffs = [];
298 var prev = -1;
299 var index = 0;
300 type.flatIndexes = type.fields.map(function(field) {
301 index++;
302 var size, alignSize;
303 if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
304 size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
305 alignSize = Runtime.getAlignSize(field, size);
306 } else if (Runtime.isStructType(field)) {
307 if (field[1] === '0') {
308 // this is [0 x something]. When inside another structure like here, i t must be at the end,
309 // and it adds no size
310 // XXX this happens in java-nbody for example... assert(index === type .fields.length, 'zero-length in the middle!');
311 size = 0;
312 if (Types.types[field]) {
313 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize) ;
314 } else {
315 alignSize = type.alignSize || QUANTUM_SIZE;
316 }
317 } else {
318 size = Types.types[field].flatSize;
319 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
320 }
321 } else if (field[0] == 'b') {
322 // bN, large number field, like a [N x i8]
323 size = field.substr(1)|0;
324 alignSize = 1;
325 } else if (field[0] === '<') {
326 // vector type
327 size = alignSize = Types.types[field].flatSize; // fully aligned
328 } else if (field[0] === 'i') {
329 // illegal integer field, that could not be legalized because it is an i nternal structure field
330 // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
331 size = alignSize = parseInt(field.substr(1))/8;
332 assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
333 } else {
334 assert(false, 'invalid type for calculateStructAlignment');
335 }
336 if (type.packed) alignSize = 1;
337 type.alignSize = Math.max(type.alignSize, alignSize);
338 var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
339 type.flatSize = curr + size;
340 if (prev >= 0) {
341 diffs.push(curr-prev);
342 }
343 prev = curr;
344 return curr;
345 });
346 if (type.name_ && type.name_[0] === '[') {
347 // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
348 // allocating a potentially huge array for [999999 x i8] etc.
349 type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
350 }
351 type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
352 if (diffs.length == 0) {
353 type.flatFactor = type.flatSize;
354 } else if (Runtime.dedup(diffs).length == 1) {
355 type.flatFactor = diffs[0];
356 }
357 type.needsFlattening = (type.flatFactor != 1);
358 return type.flatIndexes;
359 },
360 generateStructInfo: function (struct, typeName, offset) {
361 var type, alignment;
362 if (typeName) {
363 offset = offset || 0;
364 type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typ eName];
365 if (!type) return null;
366 if (type.fields.length != struct.length) {
367 printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
368 return null;
369 }
370 alignment = type.flatIndexes;
371 } else {
372 var type = { fields: struct.map(function(item) { return item[0] }) };
373 alignment = Runtime.calculateStructAlignment(type);
374 }
375 var ret = {
376 __size__: type.flatSize
377 };
378 if (typeName) {
379 struct.forEach(function(item, i) {
380 if (typeof item === 'string') {
381 ret[item] = alignment[i] + offset;
382 } else {
383 // embedded struct
384 var key;
385 for (var k in item) key = k;
386 ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], align ment[i]);
387 }
388 });
389 } else {
390 struct.forEach(function(item, i) {
391 ret[item[1]] = alignment[i];
392 });
393 }
394 return ret;
395 },
396 dynCall: function (sig, ptr, args) {
397 if (args && args.length) {
398 if (!args.splice) args = Array.prototype.slice.call(args);
399 args.splice(0, 0, ptr);
400 return Module['dynCall_' + sig].apply(null, args);
401 } else {
402 return Module['dynCall_' + sig].call(null, ptr);
403 }
404 },
405 functionPointers: [],
406 addFunction: function (func) {
407 for (var i = 0; i < Runtime.functionPointers.length; i++) {
408 if (!Runtime.functionPointers[i]) {
409 Runtime.functionPointers[i] = func;
410 return 2*(1 + i);
411 }
412 }
413 throw 'Finished up all reserved function pointers. Use a higher value for RE SERVED_FUNCTION_POINTERS.';
414 },
415 removeFunction: function (index) {
416 Runtime.functionPointers[(index-2)/2] = null;
417 },
418 getAsmConst: function (code, numArgs) {
419 // code is a constant string on the heap, so we can cache these
420 if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
421 var func = Runtime.asmConstCache[code];
422 if (func) return func;
423 var args = [];
424 for (var i = 0; i < numArgs; i++) {
425 args.push(String.fromCharCode(36) + i); // $0, $1 etc
426 }
427 var source = Pointer_stringify(code);
428 if (source[0] === '"') {
429 // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
430 if (source.indexOf('"', 1) === source.length-1) {
431 source = source.substr(1, source.length-2);
432 } else {
433 // something invalid happened, e.g. EM_ASM("..code($0)..", input)
434 abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code.. ) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
435 }
436 }
437 try {
438 var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })') ; // new Function does not allow upvars in node
439 } catch(e) {
440 Module.printErr('error in executing inline EM_ASM code: ' + e + ' on: \n\n ' + source + '\n\nwith args |' + args + '| (make sure to use the right one out o f EM_ASM, EM_ASM_ARGS, etc.)');
441 throw e;
442 }
443 return Runtime.asmConstCache[code] = evalled;
444 },
445 warnOnce: function (text) {
446 if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
447 if (!Runtime.warnOnce.shown[text]) {
448 Runtime.warnOnce.shown[text] = 1;
449 Module.printErr(text);
450 }
451 },
452 funcWrappers: {},
453 getFuncWrapper: function (func, sig) {
454 assert(sig);
455 if (!Runtime.funcWrappers[func]) {
456 Runtime.funcWrappers[func] = function dynCall_wrapper() {
457 return Runtime.dynCall(sig, func, arguments);
458 };
459 }
460 return Runtime.funcWrappers[func];
461 },
462 UTF8Processor: function () {
463 var buffer = [];
464 var needed = 0;
465 this.processCChar = function (code) {
466 code = code & 0xFF;
467
468 if (buffer.length == 0) {
469 if ((code & 0x80) == 0x00) { // 0xxxxxxx
470 return String.fromCharCode(code);
471 }
472 buffer.push(code);
473 if ((code & 0xE0) == 0xC0) { // 110xxxxx
474 needed = 1;
475 } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
476 needed = 2;
477 } else { // 11110xxx
478 needed = 3;
479 }
480 return '';
481 }
482
483 if (needed) {
484 buffer.push(code);
485 needed--;
486 if (needed > 0) return '';
487 }
488
489 var c1 = buffer[0];
490 var c2 = buffer[1];
491 var c3 = buffer[2];
492 var c4 = buffer[3];
493 var ret;
494 if (buffer.length == 2) {
495 ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F));
496 } else if (buffer.length == 3) {
497 ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c 3 & 0x3F));
498 } else {
499 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
500 var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
501 ((c3 & 0x3F) << 6) | (c4 & 0x3F);
502 ret = String.fromCharCode(
503 Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
504 (codePoint - 0x10000) % 0x400 + 0xDC00);
505 }
506 buffer.length = 0;
507 return ret;
508 }
509 this.processJSString = function processJSString(string) {
510 /* TODO: use TextEncoder when present,
511 var encoder = new TextEncoder();
512 encoder['encoding'] = "utf-8";
513 var utf8Array = encoder['encode'](aMsg.data);
514 */
515 string = unescape(encodeURIComponent(string));
516 var ret = [];
517 for (var i = 0; i < string.length; i++) {
518 ret.push(string.charCodeAt(i));
519 }
520 return ret;
521 }
522 },
523 getCompilerSetting: function (name) {
524 throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getComp ilerSetting or emscripten_get_compiler_setting to work';
525 },
526 stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)| 0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
527 staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + si ze)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
528 dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) en largeMemory();; return ret; },
529 alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quan tum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
530 makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0) ))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+429496729 6)))); return ret; },
531 GLOBAL_BASE: 8,
532 QUANTUM_SIZE: 4,
533 __dummy__: 0
534 }
535
536
537 Module['Runtime'] = Runtime;
538
539
540
541
542
543
544
545
546
547 //========================================
548 // Runtime essentials
549 //========================================
550
551 var __THREW__ = 0; // Used in checking for thrown exceptions.
552
553 var ABORT = false; // whether we are quitting the application. no code should ru n after this. set in exit() and abort()
554 var EXITSTATUS = 0;
555
556 var undef = 0;
557 // tempInt is used for 32-bit signed values or smaller. tempBigInt is used
558 // for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of temp Int
559 var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI , tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
560 var tempI64, tempI64b;
561 var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRe t7, tempRet8, tempRet9;
562
563 function assert(condition, text) {
564 if (!condition) {
565 abort('Assertion failed: ' + text);
566 }
567 }
568
569 var globalScope = this;
570
571 // C calling interface. A convenient way to call C functions (in C files, or
572 // defined with extern "C").
573 //
574 // Note: LLVM optimizations can inline and remove functions, after which you wil l not be
575 // able to call them. Closure can also do so. To avoid that, add your func tion to
576 // the exports using something like
577 //
578 // -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
579 //
580 // @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
581 // @param returnType The return type of the function, one of the JS types 'numbe r', 'string' or 'array' (use 'number' for any C pointer, and
582 // 'array' for JavaScript arrays and typed arrays; note that a rrays are 8-bit).
583 // @param argTypes An array of the types of arguments for the function (if the re are no arguments, this can be ommitted). Types are as in returnType,
584 // except that 'array' is not possible (there is no way for us to know the length of the array)
585 // @param args An array of the arguments to the function, as native JS val ues (as in returnType)
586 // Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
587 // @return The return value, as a native JS value (as in returnType)
588 function ccall(ident, returnType, argTypes, args) {
589 return ccallFunc(getCFunc(ident), returnType, argTypes, args);
590 }
591 Module["ccall"] = ccall;
592
593 // Returns the C function with a specified identifier (for C++, you need to do m anual name mangling)
594 function getCFunc(ident) {
595 try {
596 var func = Module['_' + ident]; // closure exported function
597 if (!func) func = eval('_' + ident); // explicit lookup
598 } catch(e) {
599 }
600 assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimiz ations or closure removed it?)');
601 return func;
602 }
603
604 // Internal function that does a C call using a function, not an identifier
605 function ccallFunc(func, returnType, argTypes, args) {
606 var stack = 0;
607 function toC(value, type) {
608 if (type == 'string') {
609 if (value === null || value === undefined || value === 0) return 0; // nul l string
610 value = intArrayFromString(value);
611 type = 'array';
612 }
613 if (type == 'array') {
614 if (!stack) stack = Runtime.stackSave();
615 var ret = Runtime.stackAlloc(value.length);
616 writeArrayToMemory(value, ret);
617 return ret;
618 }
619 return value;
620 }
621 function fromC(value, type) {
622 if (type == 'string') {
623 return Pointer_stringify(value);
624 }
625 assert(type != 'array');
626 return value;
627 }
628 var i = 0;
629 var cArgs = args ? args.map(function(arg) {
630 return toC(arg, argTypes[i++]);
631 }) : [];
632 var ret = fromC(func.apply(null, cArgs), returnType);
633 if (stack) Runtime.stackRestore(stack);
634 return ret;
635 }
636
637 // Returns a native JS wrapper for a C function. This is similar to ccall, but
638 // returns a function you can call repeatedly in a normal way. For example:
639 //
640 // var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
641 // alert(my_function(5, 22));
642 // alert(my_function(99, 12));
643 //
644 function cwrap(ident, returnType, argTypes) {
645 var func = getCFunc(ident);
646 return function() {
647 return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(argu ments));
648 }
649 }
650 Module["cwrap"] = cwrap;
651
652 // Sets a value in memory in a dynamic way at run-time. Uses the
653 // type data. This is the same as makeSetValue, except that
654 // makeSetValue is done at compile-time and generates the needed
655 // code then, whereas this function picks the right code at
656 // run-time.
657 // Note that setValue and getValue only do *aligned* writes and reads!
658 // Note that ccall uses JS types as for defining types, while setValue and
659 // getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
660 function setValue(ptr, value, type, noSafe) {
661 type = type || 'i8';
662 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
663 switch(type) {
664 case 'i1': HEAP8[(ptr)]=value; break;
665 case 'i8': HEAP8[(ptr)]=value; break;
666 case 'i16': HEAP16[((ptr)>>1)]=value; break;
667 case 'i32': HEAP32[((ptr)>>2)]=value; break;
668 case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble ))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+42949 67296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDo uble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32 [(((ptr)+(4))>>2)]=tempI64[1]); break;
669 case 'float': HEAPF32[((ptr)>>2)]=value; break;
670 case 'double': HEAPF64[((ptr)>>3)]=value; break;
671 default: abort('invalid type for setValue: ' + type);
672 }
673 }
674 Module['setValue'] = setValue;
675
676 // Parallel to setValue.
677 function getValue(ptr, type, noSafe) {
678 type = type || 'i8';
679 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
680 switch(type) {
681 case 'i1': return HEAP8[(ptr)];
682 case 'i8': return HEAP8[(ptr)];
683 case 'i16': return HEAP16[((ptr)>>1)];
684 case 'i32': return HEAP32[((ptr)>>2)];
685 case 'i64': return HEAP32[((ptr)>>2)];
686 case 'float': return HEAPF32[((ptr)>>2)];
687 case 'double': return HEAPF64[((ptr)>>3)];
688 default: abort('invalid type for setValue: ' + type);
689 }
690 return null;
691 }
692 Module['getValue'] = getValue;
693
694 var ALLOC_NORMAL = 0; // Tries to use _malloc()
695 var ALLOC_STACK = 1; // Lives for the duration of the current function call
696 var ALLOC_STATIC = 2; // Cannot be freed
697 var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
698 var ALLOC_NONE = 4; // Do not allocate
699 Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
700 Module['ALLOC_STACK'] = ALLOC_STACK;
701 Module['ALLOC_STATIC'] = ALLOC_STATIC;
702 Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
703 Module['ALLOC_NONE'] = ALLOC_NONE;
704
705 // allocate(): This is for internal use. You can use it yourself as well, but th e interface
706 // is a little tricky (see docs right below). The reason is that it is optimized
707 // for multiple syntaxes to save space in generated code. So you sho uld
708 // normally not use allocate(), and instead allocate memory using _m alloc(),
709 // initialize it with setValue(), and so forth.
710 // @slab: An array of data, or a number. If a number, then the size of the block to allocate,
711 // in *bytes* (note that this is sometimes confusing: the next parameter does not
712 // affect this!)
713 // @types: Either an array of types, one for each byte (or 0 if no type at that position),
714 // or a single type which is used for the entire block. This only matter s if there
715 // is initial data - if @slab is a number, then this does not matter at all and is
716 // ignored.
717 // @allocator: How to allocate memory, see ALLOC_*
718 function allocate(slab, types, allocator, ptr) {
719 var zeroinit, size;
720 if (typeof slab === 'number') {
721 zeroinit = true;
722 size = slab;
723 } else {
724 zeroinit = false;
725 size = slab.length;
726 }
727
728 var singleType = typeof types === 'string' ? types : null;
729
730 var ret;
731 if (allocator == ALLOC_NONE) {
732 ret = ptr;
733 } else {
734 ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAllo c][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
735 }
736
737 if (zeroinit) {
738 var ptr = ret, stop;
739 assert((ret & 3) == 0);
740 stop = ret + (size & ~3);
741 for (; ptr < stop; ptr += 4) {
742 HEAP32[((ptr)>>2)]=0;
743 }
744 stop = ret + size;
745 while (ptr < stop) {
746 HEAP8[((ptr++)|0)]=0;
747 }
748 return ret;
749 }
750
751 if (singleType === 'i8') {
752 if (slab.subarray || slab.slice) {
753 HEAPU8.set(slab, ret);
754 } else {
755 HEAPU8.set(new Uint8Array(slab), ret);
756 }
757 return ret;
758 }
759
760 var i = 0, type, typeSize, previousType;
761 while (i < size) {
762 var curr = slab[i];
763
764 if (typeof curr === 'function') {
765 curr = Runtime.getFunctionIndex(curr);
766 }
767
768 type = singleType || types[i];
769 if (type === 0) {
770 i++;
771 continue;
772 }
773
774 if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
775
776 setValue(ret+i, curr, type);
777
778 // no need to look up size unless type changes, so cache it
779 if (previousType !== type) {
780 typeSize = Runtime.getNativeTypeSize(type);
781 previousType = type;
782 }
783 i += typeSize;
784 }
785
786 return ret;
787 }
788 Module['allocate'] = allocate;
789
790 function Pointer_stringify(ptr, /* optional */ length) {
791 // TODO: use TextDecoder
792 // Find the length, and check for UTF while doing so
793 var hasUtf = false;
794 var t;
795 var i = 0;
796 while (1) {
797 t = HEAPU8[(((ptr)+(i))|0)];
798 if (t >= 128) hasUtf = true;
799 else if (t == 0 && !length) break;
800 i++;
801 if (length && i == length) break;
802 }
803 if (!length) length = i;
804
805 var ret = '';
806
807 if (!hasUtf) {
808 var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge stri ng can overflow the stack
809 var curr;
810 while (length > 0) {
811 curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.m in(length, MAX_CHUNK)));
812 ret = ret ? ret + curr : curr;
813 ptr += MAX_CHUNK;
814 length -= MAX_CHUNK;
815 }
816 return ret;
817 }
818
819 var utf8 = new Runtime.UTF8Processor();
820 for (i = 0; i < length; i++) {
821 t = HEAPU8[(((ptr)+(i))|0)];
822 ret += utf8.processCChar(t);
823 }
824 return ret;
825 }
826 Module['Pointer_stringify'] = Pointer_stringify;
827
828 // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emsc ripten HEAP, returns
829 // a copy of that string as a Javascript String object.
830 function UTF16ToString(ptr) {
831 var i = 0;
832
833 var str = '';
834 while (1) {
835 var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
836 if (codeUnit == 0)
837 return str;
838 ++i;
839 // fromCharCode constructs a character from a UTF-16 code unit, so we can pa ss the UTF16 string right through.
840 str += String.fromCharCode(codeUnit);
841 }
842 }
843 Module['UTF16ToString'] = UTF16ToString;
844
845 // Copies the given Javascript String object 'str' to the emscripten HEAP at add ress 'outPtr',
846 // null-terminated and encoded in UTF16LE form. The copy will require at most (s tr.length*2+1)*2 bytes of space in the HEAP.
847 function stringToUTF16(str, outPtr) {
848 for(var i = 0; i < str.length; ++i) {
849 // charCodeAt returns a UTF-16 encoded code unit, so it can be directly writ ten to the HEAP.
850 var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
851 HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
852 }
853 // Null-terminate the pointer to the HEAP.
854 HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
855 }
856 Module['stringToUTF16'] = stringToUTF16;
857
858 // Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emsc ripten HEAP, returns
859 // a copy of that string as a Javascript String object.
860 function UTF32ToString(ptr) {
861 var i = 0;
862
863 var str = '';
864 while (1) {
865 var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
866 if (utf32 == 0)
867 return str;
868 ++i;
869 // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (p air), not from a Unicode code point! So encode the code point to UTF-16 for cons tructing.
870 if (utf32 >= 0x10000) {
871 var ch = utf32 - 0x10000;
872 str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
873 } else {
874 str += String.fromCharCode(utf32);
875 }
876 }
877 }
878 Module['UTF32ToString'] = UTF32ToString;
879
880 // Copies the given Javascript String object 'str' to the emscripten HEAP at add ress 'outPtr',
881 // null-terminated and encoded in UTF32LE form. The copy will require at most (s tr.length+1)*4 bytes of space in the HEAP,
882 // but can use less, since str.length does not return the number of characters i n the string, but the number of UTF-16 code units in the string.
883 function stringToUTF32(str, outPtr) {
884 var iChar = 0;
885 for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
886 // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code un it, not a Unicode code point of the character! We must decode the string to UTF- 32 to the heap.
887 var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
888 if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
889 var trailSurrogate = str.charCodeAt(++iCodeUnit);
890 codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF) ;
891 }
892 HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
893 ++iChar;
894 }
895 // Null-terminate the pointer to the HEAP.
896 HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
897 }
898 Module['stringToUTF32'] = stringToUTF32;
899
900 function demangle(func) {
901 var i = 3;
902 // params, etc.
903 var basicTypes = {
904 'v': 'void',
905 'b': 'bool',
906 'c': 'char',
907 's': 'short',
908 'i': 'int',
909 'l': 'long',
910 'f': 'float',
911 'd': 'double',
912 'w': 'wchar_t',
913 'a': 'signed char',
914 'h': 'unsigned char',
915 't': 'unsigned short',
916 'j': 'unsigned int',
917 'm': 'unsigned long',
918 'x': 'long long',
919 'y': 'unsigned long long',
920 'z': '...'
921 };
922 var subs = [];
923 var first = true;
924 function dump(x) {
925 //return;
926 if (x) Module.print(x);
927 Module.print(func);
928 var pre = '';
929 for (var a = 0; a < i; a++) pre += ' ';
930 Module.print (pre + '^');
931 }
932 function parseNested() {
933 i++;
934 if (func[i] === 'K') i++; // ignore const
935 var parts = [];
936 while (func[i] !== 'E') {
937 if (func[i] === 'S') { // substitution
938 i++;
939 var next = func.indexOf('_', i);
940 var num = func.substring(i, next) || 0;
941 parts.push(subs[num] || '?');
942 i = next+1;
943 continue;
944 }
945 if (func[i] === 'C') { // constructor
946 parts.push(parts[parts.length-1]);
947 i += 2;
948 continue;
949 }
950 var size = parseInt(func.substr(i));
951 var pre = size.toString().length;
952 if (!size || !pre) { i--; break; } // counter i++ below us
953 var curr = func.substr(i + pre, size);
954 parts.push(curr);
955 subs.push(curr);
956 i += pre + size;
957 }
958 i++; // skip E
959 return parts;
960 }
961 function parse(rawList, limit, allowVoid) { // main parser
962 limit = limit || Infinity;
963 var ret = '', list = [];
964 function flushList() {
965 return '(' + list.join(', ') + ')';
966 }
967 var name;
968 if (func[i] === 'N') {
969 // namespaced N-E
970 name = parseNested().join('::');
971 limit--;
972 if (limit === 0) return rawList ? [name] : name;
973 } else {
974 // not namespaced
975 if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const an d first 'L'
976 var size = parseInt(func.substr(i));
977 if (size) {
978 var pre = size.toString().length;
979 name = func.substr(i + pre, size);
980 i += pre + size;
981 }
982 }
983 first = false;
984 if (func[i] === 'I') {
985 i++;
986 var iList = parse(true);
987 var iRet = parse(true, 1, true);
988 ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
989 } else {
990 ret = name;
991 }
992 paramLoop: while (i < func.length && limit-- > 0) {
993 //dump('paramLoop');
994 var c = func[i++];
995 if (c in basicTypes) {
996 list.push(basicTypes[c]);
997 } else {
998 switch (c) {
999 case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
1000 case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // referenc e
1001 case 'L': { // literal
1002 i++; // skip basic type
1003 var end = func.indexOf('E', i);
1004 var size = end - i;
1005 list.push(func.substr(i, size));
1006 i += size + 2; // size + 'EE'
1007 break;
1008 }
1009 case 'A': { // array
1010 var size = parseInt(func.substr(i));
1011 i += size.toString().length;
1012 if (func[i] !== '_') throw '?';
1013 i++; // skip _
1014 list.push(parse(true, 1, true)[0] + ' [' + size + ']');
1015 break;
1016 }
1017 case 'E': break paramLoop;
1018 default: ret += '?' + c; break paramLoop;
1019 }
1020 }
1021 }
1022 if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avo id (void)
1023 if (rawList) {
1024 if (ret) {
1025 list.push(ret + '?');
1026 }
1027 return list;
1028 } else {
1029 return ret + flushList();
1030 }
1031 }
1032 try {
1033 // Special-case the entry point, since its name differs from other name mang ling.
1034 if (func == 'Object._main' || func == '_main') {
1035 return 'main()';
1036 }
1037 if (typeof func === 'number') func = Pointer_stringify(func);
1038 if (func[0] !== '_') return func;
1039 if (func[1] !== '_') return func; // C function
1040 if (func[2] !== 'Z') return func;
1041 switch (func[3]) {
1042 case 'n': return 'operator new()';
1043 case 'd': return 'operator delete()';
1044 }
1045 return parse();
1046 } catch(e) {
1047 return func;
1048 }
1049 }
1050
1051 function demangleAll(text) {
1052 return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
1053 }
1054
1055 function stackTrace() {
1056 var stack = new Error().stack;
1057 return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack tra ce is not available at least on IE10 and Safari 6.
1058 }
1059
1060 // Memory management
1061
1062 var PAGE_SIZE = 4096;
1063 function alignMemoryPage(x) {
1064 return (x+4095)&-4096;
1065 }
1066
1067 var HEAP;
1068 var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
1069
1070 var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
1071 var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
1072 var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
1073
1074 function enlargeMemory() {
1075 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 ALL OW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizatio ns, or (3) set Module.TOTAL_MEMORY before the program runs.');
1076 }
1077
1078 var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
1079 var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
1080 var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
1081
1082 var totalMemory = 4096;
1083 while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
1084 if (totalMemory < 16*1024*1024) {
1085 totalMemory *= 2;
1086 } else {
1087 totalMemory += 16*1024*1024
1088 }
1089 }
1090 if (totalMemory !== TOTAL_MEMORY) {
1091 Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more rea sonable');
1092 TOTAL_MEMORY = totalMemory;
1093 }
1094
1095 // Initialize the runtime's memory
1096 // check for full engine support (use string 'subarray' to avoid closure compile r confusion)
1097 assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
1098 'JS engine does not provide full typed array support');
1099
1100 var buffer = new ArrayBuffer(TOTAL_MEMORY);
1101 HEAP8 = new Int8Array(buffer);
1102 HEAP16 = new Int16Array(buffer);
1103 HEAP32 = new Int32Array(buffer);
1104 HEAPU8 = new Uint8Array(buffer);
1105 HEAPU16 = new Uint16Array(buffer);
1106 HEAPU32 = new Uint32Array(buffer);
1107 HEAPF32 = new Float32Array(buffer);
1108 HEAPF64 = new Float64Array(buffer);
1109
1110 // Endianness check (note: assumes compiler arch was little-endian)
1111 HEAP32[0] = 255;
1112 assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a li ttle-endian system');
1113
1114 Module['HEAP'] = HEAP;
1115 Module['HEAP8'] = HEAP8;
1116 Module['HEAP16'] = HEAP16;
1117 Module['HEAP32'] = HEAP32;
1118 Module['HEAPU8'] = HEAPU8;
1119 Module['HEAPU16'] = HEAPU16;
1120 Module['HEAPU32'] = HEAPU32;
1121 Module['HEAPF32'] = HEAPF32;
1122 Module['HEAPF64'] = HEAPF64;
1123
1124 function callRuntimeCallbacks(callbacks) {
1125 while(callbacks.length > 0) {
1126 var callback = callbacks.shift();
1127 if (typeof callback == 'function') {
1128 callback();
1129 continue;
1130 }
1131 var func = callback.func;
1132 if (typeof func === 'number') {
1133 if (callback.arg === undefined) {
1134 Runtime.dynCall('v', func);
1135 } else {
1136 Runtime.dynCall('vi', func, [callback.arg]);
1137 }
1138 } else {
1139 func(callback.arg === undefined ? null : callback.arg);
1140 }
1141 }
1142 }
1143
1144 var __ATPRERUN__ = []; // functions called before the runtime is initialized
1145 var __ATINIT__ = []; // functions called during startup
1146 var __ATMAIN__ = []; // functions called when main() is to be run
1147 var __ATEXIT__ = []; // functions called during shutdown
1148 var __ATPOSTRUN__ = []; // functions called after the runtime has exited
1149
1150 var runtimeInitialized = false;
1151
1152 function preRun() {
1153 // compatibility - merge in anything from Module['preRun'] at this time
1154 if (Module['preRun']) {
1155 if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRu n']];
1156 while (Module['preRun'].length) {
1157 addOnPreRun(Module['preRun'].shift());
1158 }
1159 }
1160 callRuntimeCallbacks(__ATPRERUN__);
1161 }
1162
1163 function ensureInitRuntime() {
1164 if (runtimeInitialized) return;
1165 runtimeInitialized = true;
1166 callRuntimeCallbacks(__ATINIT__);
1167 }
1168
1169 function preMain() {
1170 callRuntimeCallbacks(__ATMAIN__);
1171 }
1172
1173 function exitRuntime() {
1174 callRuntimeCallbacks(__ATEXIT__);
1175 }
1176
1177 function postRun() {
1178 // compatibility - merge in anything from Module['postRun'] at this time
1179 if (Module['postRun']) {
1180 if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['pos tRun']];
1181 while (Module['postRun'].length) {
1182 addOnPostRun(Module['postRun'].shift());
1183 }
1184 }
1185 callRuntimeCallbacks(__ATPOSTRUN__);
1186 }
1187
1188 function addOnPreRun(cb) {
1189 __ATPRERUN__.unshift(cb);
1190 }
1191 Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
1192
1193 function addOnInit(cb) {
1194 __ATINIT__.unshift(cb);
1195 }
1196 Module['addOnInit'] = Module.addOnInit = addOnInit;
1197
1198 function addOnPreMain(cb) {
1199 __ATMAIN__.unshift(cb);
1200 }
1201 Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
1202
1203 function addOnExit(cb) {
1204 __ATEXIT__.unshift(cb);
1205 }
1206 Module['addOnExit'] = Module.addOnExit = addOnExit;
1207
1208 function addOnPostRun(cb) {
1209 __ATPOSTRUN__.unshift(cb);
1210 }
1211 Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
1212
1213 // Tools
1214
1215 // This processes a JS string into a C-line array of numbers, 0-terminated.
1216 // For LLVM-originating strings, see parser.js:parseLLVMString function
1217 function intArrayFromString(stringy, dontAddNull, length /* optional */) {
1218 var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
1219 if (length) {
1220 ret.length = length;
1221 }
1222 if (!dontAddNull) {
1223 ret.push(0);
1224 }
1225 return ret;
1226 }
1227 Module['intArrayFromString'] = intArrayFromString;
1228
1229 function intArrayToString(array) {
1230 var ret = [];
1231 for (var i = 0; i < array.length; i++) {
1232 var chr = array[i];
1233 if (chr > 0xFF) {
1234 chr &= 0xFF;
1235 }
1236 ret.push(String.fromCharCode(chr));
1237 }
1238 return ret.join('');
1239 }
1240 Module['intArrayToString'] = intArrayToString;
1241
1242 // Write a Javascript array to somewhere in the heap
1243 function writeStringToMemory(string, buffer, dontAddNull) {
1244 var array = intArrayFromString(string, dontAddNull);
1245 var i = 0;
1246 while (i < array.length) {
1247 var chr = array[i];
1248 HEAP8[(((buffer)+(i))|0)]=chr;
1249 i = i + 1;
1250 }
1251 }
1252 Module['writeStringToMemory'] = writeStringToMemory;
1253
1254 function writeArrayToMemory(array, buffer) {
1255 for (var i = 0; i < array.length; i++) {
1256 HEAP8[(((buffer)+(i))|0)]=array[i];
1257 }
1258 }
1259 Module['writeArrayToMemory'] = writeArrayToMemory;
1260
1261 function writeAsciiToMemory(str, buffer, dontAddNull) {
1262 for (var i = 0; i < str.length; i++) {
1263 HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
1264 }
1265 if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
1266 }
1267 Module['writeAsciiToMemory'] = writeAsciiToMemory;
1268
1269 function unSign(value, bits, ignore) {
1270 if (value >= 0) {
1271 return value;
1272 }
1273 return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, s ince if bits == 32, we are right at the limit of the bits JS uses in bitshifts
1274 : Math.pow(2, bits) + value;
1275 }
1276 function reSign(value, bits, ignore) {
1277 if (value <= 0) {
1278 return value;
1279 }
1280 var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
1281 : Math.pow(2, bits-1);
1282 if (value >= half && (bits <= 32 || value > half)) { // for huge values, we ca n hit the precision limit and always get true here. so don't do that
1283 // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
1284 // TODO: In i64 mode 1, r esign the two parts separately and safely
1285 value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
1286 }
1287 return value;
1288 }
1289
1290 // check for imul support, and also for correctness ( https://bugs.webkit.org/sh ow_bug.cgi?id=126345 )
1291 if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
1292 var ah = a >>> 16;
1293 var al = a & 0xffff;
1294 var bh = b >>> 16;
1295 var bl = b & 0xffff;
1296 return (al*bl + ((ah*bl + al*bh) << 16))|0;
1297 };
1298 Math.imul = Math['imul'];
1299
1300
1301 var Math_abs = Math.abs;
1302 var Math_cos = Math.cos;
1303 var Math_sin = Math.sin;
1304 var Math_tan = Math.tan;
1305 var Math_acos = Math.acos;
1306 var Math_asin = Math.asin;
1307 var Math_atan = Math.atan;
1308 var Math_atan2 = Math.atan2;
1309 var Math_exp = Math.exp;
1310 var Math_log = Math.log;
1311 var Math_sqrt = Math.sqrt;
1312 var Math_ceil = Math.ceil;
1313 var Math_floor = Math.floor;
1314 var Math_pow = Math.pow;
1315 var Math_imul = Math.imul;
1316 var Math_fround = Math.fround;
1317 var Math_min = Math.min;
1318
1319 // A counter of dependencies for calling run(). If we need to
1320 // do asynchronous work before running, increment this and
1321 // decrement it. Incrementing must happen in a place like
1322 // PRE_RUN_ADDITIONS (used by emcc to add file preloading).
1323 // Note that you can add dependencies in preRun, even though
1324 // it happens right before run - run will be postponed until
1325 // the dependencies are met.
1326 var runDependencies = 0;
1327 var runDependencyWatcher = null;
1328 var dependenciesFulfilled = null; // overridden to take different actions when a ll run dependencies are fulfilled
1329
1330 function addRunDependency(id) {
1331 runDependencies++;
1332 if (Module['monitorRunDependencies']) {
1333 Module['monitorRunDependencies'](runDependencies);
1334 }
1335 }
1336 Module['addRunDependency'] = addRunDependency;
1337 function removeRunDependency(id) {
1338 runDependencies--;
1339 if (Module['monitorRunDependencies']) {
1340 Module['monitorRunDependencies'](runDependencies);
1341 }
1342 if (runDependencies == 0) {
1343 if (runDependencyWatcher !== null) {
1344 clearInterval(runDependencyWatcher);
1345 runDependencyWatcher = null;
1346 }
1347 if (dependenciesFulfilled) {
1348 var callback = dependenciesFulfilled;
1349 dependenciesFulfilled = null;
1350 callback(); // can add another dependenciesFulfilled
1351 }
1352 }
1353 }
1354 Module['removeRunDependency'] = removeRunDependency;
1355
1356 Module["preloadedImages"] = {}; // maps url to image data
1357 Module["preloadedAudios"] = {}; // maps url to audio data
1358
1359
1360 var memoryInitializer = null;
1361
1362 // === Body ===
1363
1364
1365
1366
1367
1368 STATIC_BASE = 8;
1369
1370 STATICTOP = STATIC_BASE + Runtime.alignMemory(14963);
1371 /* global initializers */ __ATINIT__.push();
1372
1373
1374 /* memory initializer */ allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,105,122,1 01,115,58,32,37,100,44,37,100,10,0,0,0,100,101,99,111,109,112,114,101,115,115,10 1,100,83,105,122,101,32,61,61,32,115,105,122,101,0,0,0,0,0,0,0,0,47,116,109,112, 47,101,109,115,99,114,105,112,116,101,110,95,116,101,109,112,47,122,108,105,98,4 6,99,0,0,0,0,0,100,111,105,116,0,0,0,0,115,116,114,99,109,112,40,98,117,102,102, 101,114,44,32,98,117,102,102,101,114,51,41,32,61,61,32,48,0,0,0,0,101,114,114,11 1,114,58,32,37,100,92,110,0,0,0,0,0,111,107,46,0,0,0,0,0,49,46,50,46,53,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,4,0,4,0,8,0,4,0,2,0,0,0,4,0,5,0,16,0,8,0,2,0,0,0,4,0,6,0,3 2,0,32,0,2,0,0,0,4,0,4,0,16,0,16,0,3,0,0,0,8,0,16,0,32,0,32,0,3,0,0,0,8,0,16,0,1 28,0,128,0,3,0,0,0,8,0,32,0,128,0,0,1,3,0,0,0,32,0,128,0,2,1,0,4,3,0,0,0,32,0,2, 1,2,1,0,16,3,0,0,0,0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9 ,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1 2,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1 4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, 14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 ,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,1 5,15,15,15,15,15,15,15,15,15,15,15,0,0,16,17,18,18,19,19,20,20,20,20,21,21,21,21 ,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,2 4,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26, 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26 ,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,2 7,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28 ,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,2 9,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 ,0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,1 5,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19, 19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21 ,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,2 2,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24, 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25 ,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,2 5,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, 26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27 ,27,27,27,27,27,27,27,27,27,27,27,28,112,4,0,0,104,9,0,0,1,1,0,0,30,1,0,0,15,0,0 ,0,0,0,0,0,240,8,0,0,88,10,0,0,0,0,0,0,30,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,96,11,0 ,0,0,0,0,0,19,0,0,0,7,0,0,0,0,0,0,0,12,0,8,0,140,0,8,0,76,0,8,0,204,0,8,0,44,0,8 ,0,172,0,8,0,108,0,8,0,236,0,8,0,28,0,8,0,156,0,8,0,92,0,8,0,220,0,8,0,60,0,8,0, 188,0,8,0,124,0,8,0,252,0,8,0,2,0,8,0,130,0,8,0,66,0,8,0,194,0,8,0,34,0,8,0,162, 0,8,0,98,0,8,0,226,0,8,0,18,0,8,0,146,0,8,0,82,0,8,0,210,0,8,0,50,0,8,0,178,0,8, 0,114,0,8,0,242,0,8,0,10,0,8,0,138,0,8,0,74,0,8,0,202,0,8,0,42,0,8,0,170,0,8,0,1 06,0,8,0,234,0,8,0,26,0,8,0,154,0,8,0,90,0,8,0,218,0,8,0,58,0,8,0,186,0,8,0,122, 0,8,0,250,0,8,0,6,0,8,0,134,0,8,0,70,0,8,0,198,0,8,0,38,0,8,0,166,0,8,0,102,0,8, 0,230,0,8,0,22,0,8,0,150,0,8,0,86,0,8,0,214,0,8,0,54,0,8,0,182,0,8,0,118,0,8,0,2 46,0,8,0,14,0,8,0,142,0,8,0,78,0,8,0,206,0,8,0,46,0,8,0,174,0,8,0,110,0,8,0,238, 0,8,0,30,0,8,0,158,0,8,0,94,0,8,0,222,0,8,0,62,0,8,0,190,0,8,0,126,0,8,0,254,0,8 ,0,1,0,8,0,129,0,8,0,65,0,8,0,193,0,8,0,33,0,8,0,161,0,8,0,97,0,8,0,225,0,8,0,17 ,0,8,0,145,0,8,0,81,0,8,0,209,0,8,0,49,0,8,0,177,0,8,0,113,0,8,0,241,0,8,0,9,0,8 ,0,137,0,8,0,73,0,8,0,201,0,8,0,41,0,8,0,169,0,8,0,105,0,8,0,233,0,8,0,25,0,8,0, 153,0,8,0,89,0,8,0,217,0,8,0,57,0,8,0,185,0,8,0,121,0,8,0,249,0,8,0,5,0,8,0,133, 0,8,0,69,0,8,0,197,0,8,0,37,0,8,0,165,0,8,0,101,0,8,0,229,0,8,0,21,0,8,0,149,0,8 ,0,85,0,8,0,213,0,8,0,53,0,8,0,181,0,8,0,117,0,8,0,245,0,8,0,13,0,8,0,141,0,8,0, 77,0,8,0,205,0,8,0,45,0,8,0,173,0,8,0,109,0,8,0,237,0,8,0,29,0,8,0,157,0,8,0,93, 0,8,0,221,0,8,0,61,0,8,0,189,0,8,0,125,0,8,0,253,0,8,0,19,0,9,0,19,1,9,0,147,0,9 ,0,147,1,9,0,83,0,9,0,83,1,9,0,211,0,9,0,211,1,9,0,51,0,9,0,51,1,9,0,179,0,9,0,1 79,1,9,0,115,0,9,0,115,1,9,0,243,0,9,0,243,1,9,0,11,0,9,0,11,1,9,0,139,0,9,0,139 ,1,9,0,75,0,9,0,75,1,9,0,203,0,9,0,203,1,9,0,43,0,9,0,43,1,9,0,171,0,9,0,171,1,9 ,0,107,0,9,0,107,1,9,0,235,0,9,0,235,1,9,0,27,0,9,0,27,1,9,0,155,0,9,0,155,1,9,0 ,91,0,9,0,91,1,9,0,219,0,9,0,219,1,9,0,59,0,9,0,59,1,9,0,187,0,9,0,187,1,9,0,123 ,0,9,0,123,1,9,0,251,0,9,0,251,1,9,0,7,0,9,0,7,1,9,0,135,0,9,0,135,1,9,0,71,0,9, 0,71,1,9,0,199,0,9,0,199,1,9,0,39,0,9,0,39,1,9,0,167,0,9,0,167,1,9,0,103,0,9,0,1 03,1,9,0,231,0,9,0,231,1,9,0,23,0,9,0,23,1,9,0,151,0,9,0,151,1,9,0,87,0,9,0,87,1 ,9,0,215,0,9,0,215,1,9,0,55,0,9,0,55,1,9,0,183,0,9,0,183,1,9,0,119,0,9,0,119,1,9 ,0,247,0,9,0,247,1,9,0,15,0,9,0,15,1,9,0,143,0,9,0,143,1,9,0,79,0,9,0,79,1,9,0,2 07,0,9,0,207,1,9,0,47,0,9,0,47,1,9,0,175,0,9,0,175,1,9,0,111,0,9,0,111,1,9,0,239 ,0,9,0,239,1,9,0,31,0,9,0,31,1,9,0,159,0,9,0,159,1,9,0,95,0,9,0,95,1,9,0,223,0,9 ,0,223,1,9,0,63,0,9,0,63,1,9,0,191,0,9,0,191,1,9,0,127,0,9,0,127,1,9,0,255,0,9,0 ,255,1,9,0,0,0,7,0,64,0,7,0,32,0,7,0,96,0,7,0,16,0,7,0,80,0,7,0,48,0,7,0,112,0,7 ,0,8,0,7,0,72,0,7,0,40,0,7,0,104,0,7,0,24,0,7,0,88,0,7,0,56,0,7,0,120,0,7,0,4,0, 7,0,68,0,7,0,36,0,7,0,100,0,7,0,20,0,7,0,84,0,7,0,52,0,7,0,116,0,7,0,3,0,8,0,131 ,0,8,0,67,0,8,0,195,0,8,0,35,0,8,0,163,0,8,0,99,0,8,0,227,0,8,0,0,0,5,0,16,0,5,0 ,8,0,5,0,24,0,5,0,4,0,5,0,20,0,5,0,12,0,5,0,28,0,5,0,2,0,5,0,18,0,5,0,10,0,5,0,2 6,0,5,0,6,0,5,0,22,0,5,0,14,0,5,0,30,0,5,0,1,0,5,0,17,0,5,0,9,0,5,0,25,0,5,0,5,0 ,5,0,21,0,5,0,13,0,5,0,29,0,5,0,3,0,5,0,19,0,5,0,11,0,5,0,27,0,5,0,7,0,5,0,23,0, 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, 0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0, 0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,10,0 ,0,0,12,0,0,0,14,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,28,0,0,0,32,0,0,0,40,0,0,0,48, 0,0,0,56,0,0,0,64,0,0,0,80,0,0,0,96,0,0,0,112,0,0,0,128,0,0,0,160,0,0,0,192,0,0, 0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0, 0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0, 0,0,7,0,0,0,8,0,0,0,8,0,0,0,9,0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,11,0,0,0,11,0,0,0, 12,0,0,0,12,0,0,0,13,0,0,0,13,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0, 0,0,8,0,0,0,12,0,0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,96,0,0,0,128,0 ,0,0,192,0,0,0,0,1,0,0,128,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0,12,0, 0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,96,0,0,16,17,18,0,8,7,9,6,10,5, 11,4,12,3,13,2,14,1,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,2,0,0,0,3,0,0,0,7,0,0,0,0,0,0,0,49,46,50,46,53,0,0,0,110,101,101,100,32,100,105 ,99,116,105,111,110,97,114,121,0,115,116,114,101,97,109,32,101,110,100,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,102,105,108,101,32,101,114,114,111,114,0,0,0,0,0,0,115,116,11 4,101,97,109,32,101,114,114,111,114,0,0,0,0,100,97,116,97,32,101,114,114,111,114 ,0,0,0,0,0,0,105,110,115,117,102,102,105,99,105,101,110,116,32,109,101,109,111,1 14,121,0,0,0,0,0,98,117,102,102,101,114,32,101,114,114,111,114,0,0,0,0,105,110,9 9,111,109,112,97,116,105,98,108,101,32,118,101,114,115,105,111,110,0,0,0,0,184,1 1,0,0,200,11,0,0,216,11,0,0,224,11,0,0,240,11,0,0,0,12,0,0,16,12,0,0,40,12,0,0,5 6,12,0,0,216,11,0,0,0,0,0,0,150,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7, 143,244,106,112,53,165,99,233,163,149,100,158,50,136,219,14,164,184,220,121,30,2 33,213,224,136,217,210,151,43,76,182,9,189,124,177,126,7,45,184,231,145,29,191,1 44,100,16,183,29,242,32,176,106,72,113,185,243,222,65,190,132,125,212,218,26,235 ,228,221,109,81,181,212,244,199,133,211,131,86,152,108,19,192,168,107,100,122,24 9,98,253,236,201,101,138,79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,141,200,3 2,110,59,94,16,105,76,228,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253 ,133,13,210,107,181,10,165,250,168,181,53,108,152,178,66,214,201,187,219,64,249, 188,172,227,108,216,50,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38, 58,0,222,81,128,81,215,200,22,97,208,191,181,244,180,33,35,196,179,86,153,149,18 6,207,15,165,189,184,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,12 4,111,47,17,76,104,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188 ,32,210,152,42,16,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,18 4,232,162,201,7,120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61 ,109,8,151,108,100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78 ,0,98,242,237,149,6,108,123,165,1,27,193,244,8,130,87,196,15,245,198,217,176,101 ,80,233,183,18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,12 4,211,140,101,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212 ,65,165,223,74,215,149,216,61,109,196,209,164,251,244,214,211,106,233,105,67,252 ,217,110,52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,2 01,124,13,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,1 79,133,111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41,34,152,2 08,176,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192, 32,131,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,11 9,210,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,100,148,62,106,109,13,1 68,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,24 0,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,1 08,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,1 11,223,185,249,249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,126, 147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,6,18 1,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,239,96, 223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102,188,1 60,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,5,85,19 0,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49,207,208 ,181,139,158,217,44,29,174,222,91,176,194,100,155,38,242,99,236,156,163,106,117, 10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,191,149,20, 122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,229,183,239,2 20,124,33,223,219,11,212,210,211,134,66,226,212,241,248,179,221,104,110,131,218, 31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,90,8,136,112,1 06,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,211,255,107,97, 69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194,179,3,57,97,38,103,1 67,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,220,90,214,217,102,1 1,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207,178,71,233,255,181 ,48,28,242,189,189,138,194,186,202,48,147,179,83,166,163,180,36,5,54,208,186,147 ,6,215,205,41,87,222,84,191,103,217,35,46,122,102,179,184,74,97,196,2,27,104,93, 148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141,239,2,45,0,0,0,0,65,4 9,27,25,130,98,54,50,195,83,45,43,4,197,108,100,69,244,119,125,134,167,90,86,199 ,150,65,79,8,138,217,200,73,187,194,209,138,232,239,250,203,217,244,227,12,79,18 1,172,77,126,174,181,142,45,131,158,207,28,152,135,81,18,194,74,16,35,217,83,211 ,112,244,120,146,65,239,97,85,215,174,46,20,230,181,55,215,181,152,28,150,132,13 1,5,89,152,27,130,24,169,0,155,219,250,45,176,154,203,54,169,93,93,119,230,28,10 8,108,255,223,63,65,212,158,14,90,205,162,36,132,149,227,21,159,140,32,70,178,16 7,97,119,169,190,166,225,232,241,231,208,243,232,36,131,222,195,101,178,197,218, 170,174,93,93,235,159,70,68,40,204,107,111,105,253,112,118,174,107,49,57,239,90, 42,32,44,9,7,11,109,56,28,18,243,54,70,223,178,7,93,198,113,84,112,237,48,101,10 7,244,247,243,42,187,182,194,49,162,117,145,28,137,52,160,7,144,251,188,159,23,1 86,141,132,14,121,222,169,37,56,239,178,60,255,121,243,115,190,72,232,106,125,27 ,197,65,60,42,222,88,5,79,121,240,68,126,98,233,135,45,79,194,198,28,84,219,1,13 8,21,148,64,187,14,141,131,232,35,166,194,217,56,191,13,197,160,56,76,244,187,33 ,143,167,150,10,206,150,141,19,9,0,204,92,72,49,215,69,139,98,250,110,202,83,225 ,119,84,93,187,186,21,108,160,163,214,63,141,136,151,14,150,145,80,152,215,222,1 7,169,204,199,210,250,225,236,147,203,250,245,92,215,98,114,29,230,121,107,222,1 81,84,64,159,132,79,89,88,18,14,22,25,35,21,15,218,112,56,36,155,65,35,61,167,10 7,253,101,230,90,230,124,37,9,203,87,100,56,208,78,163,174,145,1,226,159,138,24, 33,204,167,51,96,253,188,42,175,225,36,173,238,208,63,180,45,131,18,159,108,178, 9,134,171,36,72,201,234,21,83,208,41,70,126,251,104,119,101,226,246,121,63,47,18 3,72,36,54,116,27,9,29,53,42,18,4,242,188,83,75,179,141,72,82,112,222,101,121,49 ,239,126,96,254,243,230,231,191,194,253,254,124,145,208,213,61,160,203,204,250,5 4,138,131,187,7,145,154,120,84,188,177,57,101,167,168,75,152,131,59,10,169,152,3 4,201,250,181,9,136,203,174,16,79,93,239,95,14,108,244,70,205,63,217,109,140,14, 194,116,67,18,90,243,2,35,65,234,193,112,108,193,128,65,119,216,71,215,54,151,6, 230,45,142,197,181,0,165,132,132,27,188,26,138,65,113,91,187,90,104,152,232,119, 67,217,217,108,90,30,79,45,21,95,126,54,12,156,45,27,39,221,28,0,62,18,0,152,185 ,83,49,131,160,144,98,174,139,209,83,181,146,22,197,244,221,87,244,239,196,148,1 67,194,239,213,150,217,246,233,188,7,174,168,141,28,183,107,222,49,156,42,239,42 ,133,237,121,107,202,172,72,112,211,111,27,93,248,46,42,70,225,225,54,222,102,16 0,7,197,127,99,84,232,84,34,101,243,77,229,243,178,2,164,194,169,27,103,145,132, 48,38,160,159,41,184,174,197,228,249,159,222,253,58,204,243,214,123,253,232,207, 188,107,169,128,253,90,178,153,62,9,159,178,127,56,132,171,176,36,28,44,241,21,7 ,53,50,70,42,30,115,119,49,7,180,225,112,72,245,208,107,81,54,131,70,122,119,178 ,93,99,78,215,250,203,15,230,225,210,204,181,204,249,141,132,215,224,74,18,150,1 75,11,35,141,182,200,112,160,157,137,65,187,132,70,93,35,3,7,108,56,26,196,63,21 ,49,133,14,14,40,66,152,79,103,3,169,84,126,192,250,121,85,129,203,98,76,31,197, 56,129,94,244,35,152,157,167,14,179,220,150,21,170,27,0,84,229,90,49,79,252,153, 98,98,215,216,83,121,206,23,79,225,73,86,126,250,80,149,45,215,123,212,28,204,98 ,19,138,141,45,82,187,150,52,145,232,187,31,208,217,160,6,236,243,126,94,173,194 ,101,71,110,145,72,108,47,160,83,117,232,54,18,58,169,7,9,35,106,84,36,8,43,101, 63,17,228,121,167,150,165,72,188,143,102,27,145,164,39,42,138,189,224,188,203,24 2,161,141,208,235,98,222,253,192,35,239,230,217,189,225,188,20,252,208,167,13,63 ,131,138,38,126,178,145,63,185,36,208,112,248,21,203,105,59,70,230,66,122,119,25 3,91,181,107,101,220,244,90,126,197,55,9,83,238,118,56,72,247,177,174,9,184,240, 159,18,161,51,204,63,138,114,253,36,147,0,0,0,0,55,106,194,1,110,212,132,3,89,19 0,70,2,220,168,9,7,235,194,203,6,178,124,141,4,133,22,79,5,184,81,19,14,143,59,2 09,15,214,133,151,13,225,239,85,12,100,249,26,9,83,147,216,8,10,45,158,10,61,71, 92,11,112,163,38,28,71,201,228,29,30,119,162,31,41,29,96,30,172,11,47,27,155,97, 237,26,194,223,171,24,245,181,105,25,200,242,53,18,255,152,247,19,166,38,177,17, 145,76,115,16,20,90,60,21,35,48,254,20,122,142,184,22,77,228,122,23,224,70,77,56 ,215,44,143,57,142,146,201,59,185,248,11,58,60,238,68,63,11,132,134,62,82,58,192 ,60,101,80,2,61,88,23,94,54,111,125,156,55,54,195,218,53,1,169,24,52,132,191,87, 49,179,213,149,48,234,107,211,50,221,1,17,51,144,229,107,36,167,143,169,37,254,4 9,239,39,201,91,45,38,76,77,98,35,123,39,160,34,34,153,230,32,21,243,36,33,40,18 0,120,42,31,222,186,43,70,96,252,41,113,10,62,40,244,28,113,45,195,118,179,44,15 4,200,245,46,173,162,55,47,192,141,154,112,247,231,88,113,174,89,30,115,153,51,2 20,114,28,37,147,119,43,79,81,118,114,241,23,116,69,155,213,117,120,220,137,126, 79,182,75,127,22,8,13,125,33,98,207,124,164,116,128,121,147,30,66,120,202,160,4, 122,253,202,198,123,176,46,188,108,135,68,126,109,222,250,56,111,233,144,250,110 ,108,134,181,107,91,236,119,106,2,82,49,104,53,56,243,105,8,127,175,98,63,21,109 ,99,102,171,43,97,81,193,233,96,212,215,166,101,227,189,100,100,186,3,34,102,141 ,105,224,103,32,203,215,72,23,161,21,73,78,31,83,75,121,117,145,74,252,99,222,79 ,203,9,28,78,146,183,90,76,165,221,152,77,152,154,196,70,175,240,6,71,246,78,64, 69,193,36,130,68,68,50,205,65,115,88,15,64,42,230,73,66,29,140,139,67,80,104,241 ,84,103,2,51,85,62,188,117,87,9,214,183,86,140,192,248,83,187,170,58,82,226,20,1 24,80,213,126,190,81,232,57,226,90,223,83,32,91,134,237,102,89,177,135,164,88,52 ,145,235,93,3,251,41,92,90,69,111,94,109,47,173,95,128,27,53,225,183,113,247,224 ,238,207,177,226,217,165,115,227,92,179,60,230,107,217,254,231,50,103,184,229,5, 13,122,228,56,74,38,239,15,32,228,238,86,158,162,236,97,244,96,237,228,226,47,23 2,211,136,237,233,138,54,171,235,189,92,105,234,240,184,19,253,199,210,209,252,1 58,108,151,254,169,6,85,255,44,16,26,250,27,122,216,251,66,196,158,249,117,174,9 2,248,72,233,0,243,127,131,194,242,38,61,132,240,17,87,70,241,148,65,9,244,163,4 3,203,245,250,149,141,247,205,255,79,246,96,93,120,217,87,55,186,216,14,137,252, 218,57,227,62,219,188,245,113,222,139,159,179,223,210,33,245,221,229,75,55,220,2 16,12,107,215,239,102,169,214,182,216,239,212,129,178,45,213,4,164,98,208,51,206 ,160,209,106,112,230,211,93,26,36,210,16,254,94,197,39,148,156,196,126,42,218,19 8,73,64,24,199,204,86,87,194,251,60,149,195,162,130,211,193,149,232,17,192,168,1 75,77,203,159,197,143,202,198,123,201,200,241,17,11,201,116,7,68,204,67,109,134, 205,26,211,192,207,45,185,2,206,64,150,175,145,119,252,109,144,46,66,43,146,25,4 0,233,147,156,62,166,150,171,84,100,151,242,234,34,149,197,128,224,148,248,199,1 88,159,207,173,126,158,150,19,56,156,161,121,250,157,36,111,181,152,19,5,119,153 ,74,187,49,155,125,209,243,154,48,53,137,141,7,95,75,140,94,225,13,142,105,139,2 07,143,236,157,128,138,219,247,66,139,130,73,4,137,181,35,198,136,136,100,154,13 1,191,14,88,130,230,176,30,128,209,218,220,129,84,204,147,132,99,166,81,133,58,2 4,23,135,13,114,213,134,160,208,226,169,151,186,32,168,206,4,102,170,249,110,164 ,171,124,120,235,174,75,18,41,175,18,172,111,173,37,198,173,172,24,129,241,167,4 7,235,51,166,118,85,117,164,65,63,183,165,196,41,248,160,243,67,58,161,170,253,1 24,163,157,151,190,162,208,115,196,181,231,25,6,180,190,167,64,182,137,205,130,1 83,12,219,205,178,59,177,15,179,98,15,73,177,85,101,139,176,104,34,215,187,95,72 ,21,186,6,246,83,184,49,156,145,185,180,138,222,188,131,224,28,189,218,94,90,191 ,237,52,152,190,0,0,0,0,101,103,188,184,139,200,9,170,238,175,181,18,87,151,98,1 43,50,240,222,55,220,95,107,37,185,56,215,157,239,40,180,197,138,79,8,125,100,22 4,189,111,1,135,1,215,184,191,214,74,221,216,106,242,51,119,223,224,86,16,99,88, 159,87,25,80,250,48,165,232,20,159,16,250,113,248,172,66,200,192,123,223,173,167 ,199,103,67,8,114,117,38,111,206,205,112,127,173,149,21,24,17,45,251,183,164,63, 158,208,24,135,39,232,207,26,66,143,115,162,172,32,198,176,201,71,122,8,62,175,5 0,160,91,200,142,24,181,103,59,10,208,0,135,178,105,56,80,47,12,95,236,151,226,2 40,89,133,135,151,229,61,209,135,134,101,180,224,58,221,90,79,143,207,63,40,51,1 19,134,16,228,234,227,119,88,82,13,216,237,64,104,191,81,248,161,248,43,240,196, 159,151,72,42,48,34,90,79,87,158,226,246,111,73,127,147,8,245,199,125,167,64,213 ,24,192,252,109,78,208,159,53,43,183,35,141,197,24,150,159,160,127,42,39,25,71,2 53,186,124,32,65,2,146,143,244,16,247,232,72,168,61,88,20,155,88,63,168,35,182,1 44,29,49,211,247,161,137,106,207,118,20,15,168,202,172,225,7,127,190,132,96,195, 6,210,112,160,94,183,23,28,230,89,184,169,244,60,223,21,76,133,231,194,209,224,1 28,126,105,14,47,203,123,107,72,119,195,162,15,13,203,199,104,177,115,41,199,4,9 7,76,160,184,217,245,152,111,68,144,255,211,252,126,80,102,238,27,55,218,86,77,3 9,185,14,40,64,5,182,198,239,176,164,163,136,12,28,26,176,219,129,127,215,103,57 ,145,120,210,43,244,31,110,147,3,247,38,59,102,144,154,131,136,63,47,145,237,88, 147,41,84,96,68,180,49,7,248,12,223,168,77,30,186,207,241,166,236,223,146,254,13 7,184,46,70,103,23,155,84,2,112,39,236,187,72,240,113,222,47,76,201,48,128,249,2 19,85,231,69,99,156,160,63,107,249,199,131,211,23,104,54,193,114,15,138,121,203, 55,93,228,174,80,225,92,64,255,84,78,37,152,232,246,115,136,139,174,22,239,55,22 ,248,64,130,4,157,39,62,188,36,31,233,33,65,120,85,153,175,215,224,139,202,176,9 2,51,59,182,89,237,94,209,229,85,176,126,80,71,213,25,236,255,108,33,59,98,9,70, 135,218,231,233,50,200,130,142,142,112,212,158,237,40,177,249,81,144,95,86,228,1 30,58,49,88,58,131,9,143,167,230,110,51,31,8,193,134,13,109,166,58,181,164,225,6 4,189,193,134,252,5,47,41,73,23,74,78,245,175,243,118,34,50,150,17,158,138,120,1 90,43,152,29,217,151,32,75,201,244,120,46,174,72,192,192,1,253,210,165,102,65,10 6,28,94,150,247,121,57,42,79,151,150,159,93,242,241,35,229,5,25,107,77,96,126,21 5,245,142,209,98,231,235,182,222,95,82,142,9,194,55,233,181,122,217,70,0,104,188 ,33,188,208,234,49,223,136,143,86,99,48,97,249,214,34,4,158,106,154,189,166,189, 7,216,193,1,191,54,110,180,173,83,9,8,21,154,78,114,29,255,41,206,165,17,134,123 ,183,116,225,199,15,205,217,16,146,168,190,172,42,70,17,25,56,35,118,165,128,117 ,102,198,216,16,1,122,96,254,174,207,114,155,201,115,202,34,241,164,87,71,150,24 ,239,169,57,173,253,204,94,17,69,6,238,77,118,99,137,241,206,141,38,68,220,232,6 5,248,100,81,121,47,249,52,30,147,65,218,177,38,83,191,214,154,235,233,198,249,1 79,140,161,69,11,98,14,240,25,7,105,76,161,190,81,155,60,219,54,39,132,53,153,14 6,150,80,254,46,46,153,185,84,38,252,222,232,158,18,113,93,140,119,22,225,52,206 ,46,54,169,171,73,138,17,69,230,63,3,32,129,131,187,118,145,224,227,19,246,92,91 ,253,89,233,73,152,62,85,241,33,6,130,108,68,97,62,212,170,206,139,198,207,169,5 5,126,56,65,127,214,93,38,195,110,179,137,118,124,214,238,202,196,111,214,29,89, 10,177,161,225,228,30,20,243,129,121,168,75,215,105,203,19,178,14,119,171,92,161 ,194,185,57,198,126,1,128,254,169,156,229,153,21,36,11,54,160,54,110,81,28,142,1 67,22,102,134,194,113,218,62,44,222,111,44,73,185,211,148,240,129,4,9,149,230,18 4,177,123,73,13,163,30,46,177,27,72,62,210,67,45,89,110,251,195,246,219,233,166, 145,103,81,31,169,176,204,122,206,12,116,148,97,185,102,241,6,5,222,0,0,0,0,119, 7,48,150,238,14,97,44,153,9,81,186,7,109,196,25,112,106,244,143,233,99,165,53,15 8,100,149,163,14,219,136,50,121,220,184,164,224,213,233,30,151,210,217,136,9,182 ,76,43,126,177,124,189,231,184,45,7,144,191,29,145,29,183,16,100,106,176,32,242, 243,185,113,72,132,190,65,222,26,218,212,125,109,221,228,235,244,212,181,81,131, 211,133,199,19,108,152,86,100,107,168,192,253,98,249,122,138,101,201,236,20,1,92 ,79,99,6,108,217,250,15,61,99,141,8,13,245,59,110,32,200,76,105,16,94,213,96,65, 228,162,103,113,114,60,3,228,209,75,4,212,71,210,13,133,253,165,10,181,107,53,18 1,168,250,66,178,152,108,219,187,201,214,172,188,249,64,50,216,108,227,69,223,92 ,117,220,214,13,207,171,209,61,89,38,217,48,172,81,222,0,58,200,215,81,128,191,2 08,97,22,33,180,244,181,86,179,196,35,207,186,149,153,184,189,165,15,40,2,184,15 8,95,5,136,8,198,12,217,178,177,11,233,36,47,111,124,135,88,104,76,17,193,97,29, 171,182,102,45,61,118,220,65,144,1,219,113,6,152,210,32,188,239,213,16,42,113,17 7,133,137,6,182,181,31,159,191,228,165,232,184,212,51,120,7,201,162,15,0,249,52, 150,9,168,142,225,14,152,24,127,106,13,187,8,109,61,45,145,100,108,151,230,99,92 ,1,107,107,81,244,28,108,97,98,133,101,48,216,242,98,0,78,108,6,149,237,27,1,165 ,123,130,8,244,193,245,15,196,87,101,176,217,198,18,183,233,80,139,190,184,234,2 52,185,136,124,98,221,29,223,21,218,45,73,140,211,124,243,251,212,76,101,77,178, 97,88,58,181,81,206,163,188,0,116,212,187,48,226,74,223,165,65,61,216,149,215,16 4,209,196,109,211,214,244,251,67,105,233,106,52,110,217,252,173,103,136,70,218,9 6,184,208,68,4,45,115,51,3,29,229,170,10,76,95,221,13,124,201,80,5,113,60,39,2,6 5,170,190,11,16,16,201,12,32,134,87,104,181,37,32,111,133,179,185,102,212,9,206, 97,228,159,94,222,249,14,41,217,201,152,176,208,152,34,199,215,168,180,89,179,61 ,23,46,180,13,129,183,189,92,59,192,186,108,173,237,184,131,32,154,191,179,182,3 ,182,226,12,116,177,210,154,234,213,71,57,157,210,119,175,4,219,38,21,115,220,22 ,131,227,99,11,18,148,100,59,132,13,109,106,62,122,106,90,168,228,14,207,11,147, 9,255,157,10,0,174,39,125,7,158,177,240,15,147,68,135,8,163,210,30,1,242,104,105 ,6,194,254,247,98,87,93,128,101,103,203,25,108,54,113,110,107,6,231,254,212,27,1 18,137,211,43,224,16,218,122,90,103,221,74,204,249,185,223,111,142,190,239,249,2 3,183,190,67,96,176,142,213,214,214,163,232,161,209,147,126,56,216,194,196,79,22 3,242,82,209,187,103,241,166,188,87,103,63,181,6,221,72,178,54,75,216,13,43,218, 175,10,27,76,54,3,74,246,65,4,122,96,223,96,239,195,168,103,223,85,49,110,142,23 9,70,105,190,121,203,97,179,140,188,102,131,26,37,111,210,160,82,104,226,54,204, 12,119,149,187,11,71,3,34,2,22,185,85,5,38,47,197,186,59,190,178,189,11,40,43,18 0,90,146,92,179,106,4,194,215,255,167,181,208,207,49,44,217,158,139,91,222,174,2 9,155,100,194,176,236,99,242,38,117,106,163,156,2,109,147,10,156,9,6,169,235,14, 54,63,114,7,103,133,5,0,87,19,149,191,74,130,226,184,122,20,123,177,43,174,12,18 2,27,56,146,210,142,155,229,213,190,13,124,220,239,183,11,219,223,33,134,211,210 ,212,241,212,226,66,104,221,179,248,31,218,131,110,129,190,22,205,246,185,38,91, 111,176,119,225,24,183,71,119,136,8,90,230,255,15,106,112,102,6,59,202,17,1,11,9 2,143,101,158,255,248,98,174,105,97,107,255,211,22,108,207,69,160,10,226,120,215 ,13,210,238,78,4,131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,71,77,62 ,110,119,219,174,209,106,74,217,214,90,220,64,223,11,102,55,216,59,240,169,188,1 74,83,222,187,158,197,71,178,207,127,48,181,255,233,189,189,242,28,202,186,194,1 38,83,179,147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222,87,41,35,217,1 03,191,179,102,122,46,196,97,74,184,93,104,27,2,42,111,43,148,180,11,190,55,195, 12,142,161,90,5,223,27,45,2,239,141,0,0,0,0,25,27,49,65,50,54,98,130,43,45,83,19 5,100,108,197,4,125,119,244,69,86,90,167,134,79,65,150,199,200,217,138,8,209,194 ,187,73,250,239,232,138,227,244,217,203,172,181,79,12,181,174,126,77,158,131,45, 142,135,152,28,207,74,194,18,81,83,217,35,16,120,244,112,211,97,239,65,146,46,17 4,215,85,55,181,230,20,28,152,181,215,5,131,132,150,130,27,152,89,155,0,169,24,1 76,45,250,219,169,54,203,154,230,119,93,93,255,108,108,28,212,65,63,223,205,90,1 4,158,149,132,36,162,140,159,21,227,167,178,70,32,190,169,119,97,241,232,225,166 ,232,243,208,231,195,222,131,36,218,197,178,101,93,93,174,170,68,70,159,235,111, 107,204,40,118,112,253,105,57,49,107,174,32,42,90,239,11,7,9,44,18,28,56,109,223 ,70,54,243,198,93,7,178,237,112,84,113,244,107,101,48,187,42,243,247,162,49,194, 182,137,28,145,117,144,7,160,52,23,159,188,251,14,132,141,186,37,169,222,121,60, 178,239,56,115,243,121,255,106,232,72,190,65,197,27,125,88,222,42,60,240,121,79, 5,233,98,126,68,194,79,45,135,219,84,28,198,148,21,138,1,141,14,187,64,166,35,23 2,131,191,56,217,194,56,160,197,13,33,187,244,76,10,150,167,143,19,141,150,206,9 2,204,0,9,69,215,49,72,110,250,98,139,119,225,83,202,186,187,93,84,163,160,108,2 1,136,141,63,214,145,150,14,151,222,215,152,80,199,204,169,17,236,225,250,210,24 5,250,203,147,114,98,215,92,107,121,230,29,64,84,181,222,89,79,132,159,22,14,18, 88,15,21,35,25,36,56,112,218,61,35,65,155,101,253,107,167,124,230,90,230,87,203, 9,37,78,208,56,100,1,145,174,163,24,138,159,226,51,167,204,33,42,188,253,96,173, 36,225,175,180,63,208,238,159,18,131,45,134,9,178,108,201,72,36,171,208,83,21,23 4,251,126,70,41,226,101,119,104,47,63,121,246,54,36,72,183,29,9,27,116,4,18,42,5 3,75,83,188,242,82,72,141,179,121,101,222,112,96,126,239,49,231,230,243,254,254, 253,194,191,213,208,145,124,204,203,160,61,131,138,54,250,154,145,7,187,177,188, 84,120,168,167,101,57,59,131,152,75,34,152,169,10,9,181,250,201,16,174,203,136,9 5,239,93,79,70,244,108,14,109,217,63,205,116,194,14,140,243,90,18,67,234,65,35,2 ,193,108,112,193,216,119,65,128,151,54,215,71,142,45,230,6,165,0,181,197,188,27, 132,132,113,65,138,26,104,90,187,91,67,119,232,152,90,108,217,217,21,45,79,30,12 ,54,126,95,39,27,45,156,62,0,28,221,185,152,0,18,160,131,49,83,139,174,98,144,14 6,181,83,209,221,244,197,22,196,239,244,87,239,194,167,148,246,217,150,213,174,7 ,188,233,183,28,141,168,156,49,222,107,133,42,239,42,202,107,121,237,211,112,72, 172,248,93,27,111,225,70,42,46,102,222,54,225,127,197,7,160,84,232,84,99,77,243, 101,34,2,178,243,229,27,169,194,164,48,132,145,103,41,159,160,38,228,197,174,184 ,253,222,159,249,214,243,204,58,207,232,253,123,128,169,107,188,153,178,90,253,1 78,159,9,62,171,132,56,127,44,28,36,176,53,7,21,241,30,42,70,50,7,49,119,115,72, 112,225,180,81,107,208,245,122,70,131,54,99,93,178,119,203,250,215,78,210,225,23 0,15,249,204,181,204,224,215,132,141,175,150,18,74,182,141,35,11,157,160,112,200 ,132,187,65,137,3,35,93,70,26,56,108,7,49,21,63,196,40,14,14,133,103,79,152,66,1 26,84,169,3,85,121,250,192,76,98,203,129,129,56,197,31,152,35,244,94,179,14,167, 157,170,21,150,220,229,84,0,27,252,79,49,90,215,98,98,153,206,121,83,216,73,225, 79,23,80,250,126,86,123,215,45,149,98,204,28,212,45,141,138,19,52,150,187,82,31, 187,232,145,6,160,217,208,94,126,243,236,71,101,194,173,108,72,145,110,117,83,16 0,47,58,18,54,232,35,9,7,169,8,36,84,106,17,63,101,43,150,167,121,228,143,188,72 ,165,164,145,27,102,189,138,42,39,242,203,188,224,235,208,141,161,192,253,222,98 ,217,230,239,35,20,188,225,189,13,167,208,252,38,138,131,63,63,145,178,126,112,2 08,36,185,105,203,21,248,66,230,70,59,91,253,119,122,220,101,107,181,197,126,90, 244,238,83,9,55,247,72,56,118,184,9,174,177,161,18,159,240,138,63,204,51,147,36, 253,114,0,0,0,0,1,194,106,55,3,132,212,110,2,70,190,89,7,9,168,220,6,203,194,235 ,4,141,124,178,5,79,22,133,14,19,81,184,15,209,59,143,13,151,133,214,12,85,239,2 25,9,26,249,100,8,216,147,83,10,158,45,10,11,92,71,61,28,38,163,112,29,228,201,7 1,31,162,119,30,30,96,29,41,27,47,11,172,26,237,97,155,24,171,223,194,25,105,181 ,245,18,53,242,200,19,247,152,255,17,177,38,166,16,115,76,145,21,60,90,20,20,254 ,48,35,22,184,142,122,23,122,228,77,56,77,70,224,57,143,44,215,59,201,146,142,58 ,11,248,185,63,68,238,60,62,134,132,11,60,192,58,82,61,2,80,101,54,94,23,88,55,1 56,125,111,53,218,195,54,52,24,169,1,49,87,191,132,48,149,213,179,50,211,107,234 ,51,17,1,221,36,107,229,144,37,169,143,167,39,239,49,254,38,45,91,201,35,98,77,7 6,34,160,39,123,32,230,153,34,33,36,243,21,42,120,180,40,43,186,222,31,41,252,96 ,70,40,62,10,113,45,113,28,244,44,179,118,195,46,245,200,154,47,55,162,173,112,1 54,141,192,113,88,231,247,115,30,89,174,114,220,51,153,119,147,37,28,118,81,79,4 3,116,23,241,114,117,213,155,69,126,137,220,120,127,75,182,79,125,13,8,22,124,20 7,98,33,121,128,116,164,120,66,30,147,122,4,160,202,123,198,202,253,108,188,46,1 76,109,126,68,135,111,56,250,222,110,250,144,233,107,181,134,108,106,119,236,91, 104,49,82,2,105,243,56,53,98,175,127,8,99,109,21,63,97,43,171,102,96,233,193,81, 101,166,215,212,100,100,189,227,102,34,3,186,103,224,105,141,72,215,203,32,73,21 ,161,23,75,83,31,78,74,145,117,121,79,222,99,252,78,28,9,203,76,90,183,146,77,15 2,221,165,70,196,154,152,71,6,240,175,69,64,78,246,68,130,36,193,65,205,50,68,64 ,15,88,115,66,73,230,42,67,139,140,29,84,241,104,80,85,51,2,103,87,117,188,62,86 ,183,214,9,83,248,192,140,82,58,170,187,80,124,20,226,81,190,126,213,90,226,57,2 32,91,32,83,223,89,102,237,134,88,164,135,177,93,235,145,52,92,41,251,3,94,111,6 9,90,95,173,47,109,225,53,27,128,224,247,113,183,226,177,207,238,227,115,165,217 ,230,60,179,92,231,254,217,107,229,184,103,50,228,122,13,5,239,38,74,56,238,228, 32,15,236,162,158,86,237,96,244,97,232,47,226,228,233,237,136,211,235,171,54,138 ,234,105,92,189,253,19,184,240,252,209,210,199,254,151,108,158,255,85,6,169,250, 26,16,44,251,216,122,27,249,158,196,66,248,92,174,117,243,0,233,72,242,194,131,1 27,240,132,61,38,241,70,87,17,244,9,65,148,245,203,43,163,247,141,149,250,246,79 ,255,205,217,120,93,96,216,186,55,87,218,252,137,14,219,62,227,57,222,113,245,18 8,223,179,159,139,221,245,33,210,220,55,75,229,215,107,12,216,214,169,102,239,21 2,239,216,182,213,45,178,129,208,98,164,4,209,160,206,51,211,230,112,106,210,36, 26,93,197,94,254,16,196,156,148,39,198,218,42,126,199,24,64,73,194,87,86,204,195 ,149,60,251,193,211,130,162,192,17,232,149,203,77,175,168,202,143,197,159,200,20 1,123,198,201,11,17,241,204,68,7,116,205,134,109,67,207,192,211,26,206,2,185,45, 145,175,150,64,144,109,252,119,146,43,66,46,147,233,40,25,150,166,62,156,151,100 ,84,171,149,34,234,242,148,224,128,197,159,188,199,248,158,126,173,207,156,56,19 ,150,157,250,121,161,152,181,111,36,153,119,5,19,155,49,187,74,154,243,209,125,1 41,137,53,48,140,75,95,7,142,13,225,94,143,207,139,105,138,128,157,236,139,66,24 7,219,137,4,73,130,136,198,35,181,131,154,100,136,130,88,14,191,128,30,176,230,1 29,220,218,209,132,147,204,84,133,81,166,99,135,23,24,58,134,213,114,13,169,226, 208,160,168,32,186,151,170,102,4,206,171,164,110,249], "i8", ALLOC_NONE, Runtime .GLOBAL_BASE);
1375 /* memory initializer */ allocate([174,235,120,124,175,41,18,75,173,111,172,18,1 72,173,198,37,167,241,129,24,166,51,235,47,164,117,85,118,165,183,63,65,160,248, 41,196,161,58,67,243,163,124,253,170,162,190,151,157,181,196,115,208,180,6,25,23 1,182,64,167,190,183,130,205,137,178,205,219,12,179,15,177,59,177,73,15,98,176,1 39,101,85,187,215,34,104,186,21,72,95,184,83,246,6,185,145,156,49,188,222,138,18 0,189,28,224,131,191,90,94,218,190,152,52,237,0,0,0,0,184,188,103,101,170,9,200, 139,18,181,175,238,143,98,151,87,55,222,240,50,37,107,95,220,157,215,56,185,197, 180,40,239,125,8,79,138,111,189,224,100,215,1,135,1,74,214,191,184,242,106,216,2 21,224,223,119,51,88,99,16,86,80,25,87,159,232,165,48,250,250,16,159,20,66,172,2 48,113,223,123,192,200,103,199,167,173,117,114,8,67,205,206,111,38,149,173,127,1 12,45,17,24,21,63,164,183,251,135,24,208,158,26,207,232,39,162,115,143,66,176,19 8,32,172,8,122,71,201,160,50,175,62,24,142,200,91,10,59,103,181,178,135,0,208,47 ,80,56,105,151,236,95,12,133,89,240,226,61,229,151,135,101,134,135,209,221,58,22 4,180,207,143,79,90,119,51,40,63,234,228,16,134,82,88,119,227,64,237,216,13,248, 81,191,104,240,43,248,161,72,151,159,196,90,34,48,42,226,158,87,79,127,73,111,24 6,199,245,8,147,213,64,167,125,109,252,192,24,53,159,208,78,141,35,183,43,159,15 0,24,197,39,42,127,160,186,253,71,25,2,65,32,124,16,244,143,146,168,72,232,247,1 55,20,88,61,35,168,63,88,49,29,144,182,137,161,247,211,20,118,207,106,172,202,16 8,15,190,127,7,225,6,195,96,132,94,160,112,210,230,28,23,183,244,169,184,89,76,2 1,223,60,209,194,231,133,105,126,128,224,123,203,47,14,195,119,72,107,203,13,15, 162,115,177,104,199,97,4,199,41,217,184,160,76,68,111,152,245,252,211,255,144,23 8,102,80,126,86,218,55,27,14,185,39,77,182,5,64,40,164,176,239,198,28,12,136,163 ,129,219,176,26,57,103,215,127,43,210,120,145,147,110,31,244,59,38,247,3,131,154 ,144,102,145,47,63,136,41,147,88,237,180,68,96,84,12,248,7,49,30,77,168,223,166, 241,207,186,254,146,223,236,70,46,184,137,84,155,23,103,236,39,112,2,113,240,72, 187,201,76,47,222,219,249,128,48,99,69,231,85,107,63,160,156,211,131,199,249,193 ,54,104,23,121,138,15,114,228,93,55,203,92,225,80,174,78,84,255,64,246,232,152,3 7,174,139,136,115,22,55,239,22,4,130,64,248,188,62,39,157,33,233,31,36,153,85,12 0,65,139,224,215,175,51,92,176,202,237,89,182,59,85,229,209,94,71,80,126,176,255 ,236,25,213,98,59,33,108,218,135,70,9,200,50,233,231,112,142,142,130,40,237,158, 212,144,81,249,177,130,228,86,95,58,88,49,58,167,143,9,131,31,51,110,230,13,134, 193,8,181,58,166,109,189,64,225,164,5,252,134,193,23,73,41,47,175,245,78,74,50,3 4,118,243,138,158,17,150,152,43,190,120,32,151,217,29,120,244,201,75,192,72,174, 46,210,253,1,192,106,65,102,165,247,150,94,28,79,42,57,121,93,159,150,151,229,35 ,241,242,77,107,25,5,245,215,126,96,231,98,209,142,95,222,182,235,194,9,142,82,1 22,181,233,55,104,0,70,217,208,188,33,188,136,223,49,234,48,99,86,143,34,214,249 ,97,154,106,158,4,7,189,166,189,191,1,193,216,173,180,110,54,21,8,9,83,29,114,78 ,154,165,206,41,255,183,123,134,17,15,199,225,116,146,16,217,205,42,172,190,168, 56,25,17,70,128,165,118,35,216,198,102,117,96,122,1,16,114,207,174,254,202,115,2 01,155,87,164,241,34,239,24,150,71,253,173,57,169,69,17,94,204,118,77,238,6,206, 241,137,99,220,68,38,141,100,248,65,232,249,47,121,81,65,147,30,52,83,38,177,218 ,235,154,214,191,179,249,198,233,11,69,161,140,25,240,14,98,161,76,105,7,60,155, 81,190,132,39,54,219,150,146,153,53,46,46,254,80,38,84,185,153,158,232,222,252,1 40,93,113,18,52,225,22,119,169,54,46,206,17,138,73,171,3,63,230,69,187,131,129,3 2,227,224,145,118,91,92,246,19,73,233,89,253,241,85,62,152,108,130,6,33,212,62,9 7,68,198,139,206,170,126,55,169,207,214,127,65,56,110,195,38,93,124,118,137,179, 196,202,238,214,89,29,214,111,225,161,177,10,243,20,30,228,75,168,121,129,19,203 ,105,215,171,119,14,178,185,194,161,92,1,126,198,57,156,169,254,128,36,21,153,22 9,54,160,54,11,142,28,81,110,134,102,22,167,62,218,113,194,44,111,222,44,148,211 ,185,73,9,4,129,240,177,184,230,149,163,13,73,123,27,177,46,30,67,210,62,72,251, 110,89,45,233,219,246,195,81,103,145,166,204,176,169,31,116,12,206,122,102,185,9 7,148,222,5,6,241,16,0,17,0,18,0,0,0,8,0,7,0,9,0,6,0,10,0,5,0,11,0,4,0,12,0,3,0, 13,0,2,0,14,0,1,0,15,0,0,0,105,110,99,111,114,114,101,99,116,32,104,101,97,100,1 01,114,32,99,104,101,99,107,0,0,117,110,107,110,111,119,110,32,99,111,109,112,11 4,101,115,115,105,111,110,32,109,101,116,104,111,100,0,0,0,0,0,0,105,110,118,97, 108,105,100,32,119,105,110,100,111,119,32,115,105,122,101,0,0,0,0,0,117,110,107, 110,111,119,110,32,104,101,97,100,101,114,32,102,108,97,103,115,32,115,101,116,0 ,0,0,0,0,0,0,0,104,101,97,100,101,114,32,99,114,99,32,109,105,115,109,97,116,99, 104,0,0,0,0,0,105,110,118,97,108,105,100,32,98,108,111,99,107,32,116,121,112,101 ,0,0,0,0,0,0,105,110,118,97,108,105,100,32,115,116,111,114,101,100,32,98,108,111 ,99,107,32,108,101,110,103,116,104,115,0,0,0,0,116,111,111,32,109,97,110,121,32, 108,101,110,103,116,104,32,111,114,32,100,105,115,116,97,110,99,101,32,115,121,1 09,98,111,108,115,0,0,0,0,0,105,110,118,97,108,105,100,32,99,111,100,101,32,108, 101,110,103,116,104,115,32,115,101,116,0,0,0,0,0,0,0,0,105,110,118,97,108,105,10 0,32,98,105,116,32,108,101,110,103,116,104,32,114,101,112,101,97,116,0,0,0,0,0,0 ,0,105,110,118,97,108,105,100,32,99,111,100,101,32,45,45,32,109,105,115,115,105, 110,103,32,101,110,100,45,111,102,45,98,108,111,99,107,0,0,0,0,105,110,118,97,10 8,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,115,32,115,10 1,116,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,115, 32,115,101,116,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47 ,108,101,110,103,116,104,32,99,111,100,101,0,0,0,0,0,105,110,118,97,108,105,100, 32,100,105,115,116,97,110,99,101,32,99,111,100,101,0,0,0,105,110,118,97,108,105, 100,32,100,105,115,116,97,110,99,101,32,116,111,111,32,102,97,114,32,98,97,99,10 7,0,0,0,105,110,99,111,114,114,101,99,116,32,100,97,116,97,32,99,104,101,99,107, 0,0,0,0,105,110,99,111,114,114,101,99,116,32,108,101,110,103,116,104,32,99,104,1 01,99,107,0,0,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0,18,7,31,0,0,8,112,0,0,8,48,0 ,0,9,192,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,160,0,0,8,0,0,0,8,128,0,0,8,64,0,0,9, 224,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,144,0,19,7,59,0,0,8,120,0,0,8,56,0,0,9,208, 0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,176,0,0,8,8,0,0,8,136,0,0,8,72,0,0,9,240,0,16 ,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,0,8,116,0,0,8,52,0,0,9,200,0,17,7, 13,0,0,8,100,0,0,8,36,0,0,9,168,0,0,8,4,0,0,8,132,0,0,8,68,0,0,9,232,0,16,7,8,0, 0,8,92,0,0,8,28,0,0,9,152,0,20,7,83,0,0,8,124,0,0,8,60,0,0,9,216,0,18,7,23,0,0,8 ,108,0,0,8,44,0,0,9,184,0,0,8,12,0,0,8,140,0,0,8,76,0,0,9,248,0,16,7,3,0,0,8,82, 0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0,0,8,50,0,0,9,196,0,17,7,11,0,0,8,98,0, 0,8,34,0,0,9,164,0,0,8,2,0,0,8,130,0,0,8,66,0,0,9,228,0,16,7,7,0,0,8,90,0,0,8,26 ,0,0,9,148,0,20,7,67,0,0,8,122,0,0,8,58,0,0,9,212,0,18,7,19,0,0,8,106,0,0,8,42,0 ,0,9,180,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,244,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8 ,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,204,0,17,7,15,0,0,8,102,0,0,8,38,0,0,9,172 ,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,236,0,16,7,9,0,0,8,94,0,0,8,30,0,0,9,156,0,20, 7,99,0,0,8,126,0,0,8,62,0,0,9,220,0,18,7,27,0,0,8,110,0,0,8,46,0,0,9,188,0,0,8,1 4,0,0,8,142,0,0,8,78,0,0,9,252,0,96,7,0,0,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0 ,0,8,113,0,0,8,49,0,0,9,194,0,16,7,10,0,0,8,97,0,0,8,33,0,0,9,162,0,0,8,1,0,0,8, 129,0,0,8,65,0,0,9,226,0,16,7,6,0,0,8,89,0,0,8,25,0,0,9,146,0,19,7,59,0,0,8,121, 0,0,8,57,0,0,9,210,0,17,7,17,0,0,8,105,0,0,8,41,0,0,9,178,0,0,8,9,0,0,8,137,0,0, 8,73,0,0,9,242,0,16,7,4,0,0,8,85,0,0,8,21,0,16,8,2,1,19,7,43,0,0,8,117,0,0,8,53, 0,0,9,202,0,17,7,13,0,0,8,101,0,0,8,37,0,0,9,170,0,0,8,5,0,0,8,133,0,0,8,69,0,0, 9,234,0,16,7,8,0,0,8,93,0,0,8,29,0,0,9,154,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,21 8,0,18,7,23,0,0,8,109,0,0,8,45,0,0,9,186,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,250,0 ,16,7,3,0,0,8,83,0,0,8,19,0,21,8,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,198,0,17 ,7,11,0,0,8,99,0,0,8,35,0,0,9,166,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,230,0,16,7,7, 0,0,8,91,0,0,8,27,0,0,9,150,0,20,7,67,0,0,8,123,0,0,8,59,0,0,9,214,0,18,7,19,0,0 ,8,107,0,0,8,43,0,0,9,182,0,0,8,11,0,0,8,139,0,0,8,75,0,0,9,246,0,16,7,5,0,0,8,8 7,0,0,8,23,0,64,8,0,0,19,7,51,0,0,8,119,0,0,8,55,0,0,9,206,0,17,7,15,0,0,8,103,0 ,0,8,39,0,0,9,174,0,0,8,7,0,0,8,135,0,0,8,71,0,0,9,238,0,16,7,9,0,0,8,95,0,0,8,3 1,0,0,9,158,0,20,7,99,0,0,8,127,0,0,8,63,0,0,9,222,0,18,7,27,0,0,8,111,0,0,8,47, 0,0,9,190,0,0,8,15,0,0,8,143,0,0,8,79,0,0,9,254,0,96,7,0,0,0,8,80,0,0,8,16,0,20, 8,115,0,18,7,31,0,0,8,112,0,0,8,48,0,0,9,193,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,1 61,0,0,8,0,0,0,8,128,0,0,8,64,0,0,9,225,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,145,0,1 9,7,59,0,0,8,120,0,0,8,56,0,0,9,209,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,177,0,0,8 ,8,0,0,8,136,0,0,8,72,0,0,9,241,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43, 0,0,8,116,0,0,8,52,0,0,9,201,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,169,0,0,8,4,0,0, 8,132,0,0,8,68,0,0,9,233,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,153,0,20,7,83,0,0,8,12 4,0,0,8,60,0,0,9,217,0,18,7,23,0,0,8,108,0,0,8,44,0,0,9,185,0,0,8,12,0,0,8,140,0 ,0,8,76,0,0,9,249,0,16,7,3,0,0,8,82,0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0,0, 8,50,0,0,9,197,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,165,0,0,8,2,0,0,8,130,0,0,8,66, 0,0,9,229,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,149,0,20,7,67,0,0,8,122,0,0,8,58,0,0, 9,213,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,181,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,2 45,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,205,0, 17,7,15,0,0,8,102,0,0,8,38,0,0,9,173,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,237,0,16,7 ,9,0,0,8,94,0,0,8,30,0,0,9,157,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,221,0,18,7,27, 0,0,8,110,0,0,8,46,0,0,9,189,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,253,0,96,7,0,0,0, 8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,195,0,16,7,10,0,0,8, 97,0,0,8,33,0,0,9,163,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,227,0,16,7,6,0,0,8,89,0,0 ,8,25,0,0,9,147,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,211,0,17,7,17,0,0,8,105,0,0,8 ,41,0,0,9,179,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,243,0,16,7,4,0,0,8,85,0,0,8,21,0, 16,8,2,1,19,7,43,0,0,8,117,0,0,8,53,0,0,9,203,0,17,7,13,0,0,8,101,0,0,8,37,0,0,9 ,171,0,0,8,5,0,0,8,133,0,0,8,69,0,0,9,235,0,16,7,8,0,0,8,93,0,0,8,29,0,0,9,155,0 ,20,7,83,0,0,8,125,0,0,8,61,0,0,9,219,0,18,7,23,0,0,8,109,0,0,8,45,0,0,9,187,0,0 ,8,13,0,0,8,141,0,0,8,77,0,0,9,251,0,16,7,3,0,0,8,83,0,0,8,19,0,21,8,195,0,19,7, 35,0,0,8,115,0,0,8,51,0,0,9,199,0,17,7,11,0,0,8,99,0,0,8,35,0,0,9,167,0,0,8,3,0, 0,8,131,0,0,8,67,0,0,9,231,0,16,7,7,0,0,8,91,0,0,8,27,0,0,9,151,0,20,7,67,0,0,8, 123,0,0,8,59,0,0,9,215,0,18,7,19,0,0,8,107,0,0,8,43,0,0,9,183,0,0,8,11,0,0,8,139 ,0,0,8,75,0,0,9,247,0,16,7,5,0,0,8,87,0,0,8,23,0,64,8,0,0,19,7,51,0,0,8,119,0,0, 8,55,0,0,9,207,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,175,0,0,8,7,0,0,8,135,0,0,8,71 ,0,0,9,239,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,159,0,20,7,99,0,0,8,127,0,0,8,63,0,0 ,9,223,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,191,0,0,8,15,0,0,8,143,0,0,8,79,0,0,9, 255,0,16,5,1,0,23,5,1,1,19,5,17,0,27,5,1,16,17,5,5,0,25,5,1,4,21,5,65,0,29,5,1,6 4,16,5,3,0,24,5,1,2,20,5,33,0,28,5,1,32,18,5,9,0,26,5,1,8,22,5,129,0,64,5,0,0,16 ,5,2,0,23,5,129,1,19,5,25,0,27,5,1,24,17,5,7,0,25,5,1,6,21,5,97,0,29,5,1,96,16,5 ,4,0,24,5,1,3,20,5,49,0,28,5,1,48,18,5,13,0,26,5,1,12,22,5,193,0,64,5,0,0,3,0,4, 0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,13,0,15,0,17,0,19,0,23,0,27,0,31,0,35,0,43,0,51, 0,59,0,67,0,83,0,99,0,115,0,131,0,163,0,195,0,227,0,2,1,0,0,0,0,0,0,16,0,16,0,16 ,0,16,0,16,0,16,0,16,0,16,0,17,0,17,0,17,0,17,0,18,0,18,0,18,0,18,0,19,0,19,0,19 ,0,19,0,20,0,20,0,20,0,20,0,21,0,21,0,21,0,21,0,16,0,73,0,195,0,0,0,1,0,2,0,3,0, 4,0,5,0,7,0,9,0,13,0,17,0,25,0,33,0,49,0,65,0,97,0,129,0,193,0,1,1,129,1,1,2,1,3 ,1,4,1,6,1,8,1,12,1,16,1,24,1,32,1,48,1,64,1,96,0,0,0,0,16,0,16,0,16,0,16,0,17,0 ,17,0,18,0,18,0,19,0,19,0,20,0,20,0,21,0,21,0,22,0,22,0,23,0,23,0,24,0,24,0,25,0 ,25,0,26,0,26,0,27,0,27,0,28,0,28,0,29,0,29,0,64,0,64,0,105,110,118,97,108,105,1 00,32,100,105,115,116,97,110,99,101,32,116,111,111,32,102,97,114,32,98,97,99,107 ,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100 ,101,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,1 10,103,116,104,32,99,111,100,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8 ", ALLOC_NONE, Runtime.GLOBAL_BASE+10240);
1376
1377
1378
1379
1380 var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
1381
1382 assert(tempDoublePtr % 8 == 0);
1383
1384 function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
1385
1386 HEAP8[tempDoublePtr] = HEAP8[ptr];
1387
1388 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1389
1390 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1391
1392 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1393
1394 }
1395
1396 function copyTempDouble(ptr) {
1397
1398 HEAP8[tempDoublePtr] = HEAP8[ptr];
1399
1400 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1401
1402 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1403
1404 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1405
1406 HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
1407
1408 HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
1409
1410 HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
1411
1412 HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
1413
1414 }
1415
1416
1417
1418
1419
1420
1421 var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXE C:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENO TBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENF ILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLI NK: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,EBAD E:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,E NOSTR: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,E CONNRESET: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,EALRE ADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRN OTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQ UOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125 ,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};
1422
1423 var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or director y",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such devi ce or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",1 0:"No children",11:"No more processes",12:"Not enough core",13:"Permission denie d",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File e xists",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:"N o space left on device",29:"Illegal seek",30:"Read only file system",31:"Too man y links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result no t 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:"Identif ier 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 dr iver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Inval id 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 r esources",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:"Srmoun t error",70:"Communication error on send",71:"Protocol error",72:"Multihop attem pted",73:"Cross mount point (not really error)",74:"Trying to read unreadable me ssage",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 acc ess 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 e xec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address require d",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not av ailable",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 int erface 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:"Connectio n timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachabl e",114:"Socket already connected",115:"Connection already in progress",116:"Stal e file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operati on canceled",130:"Previous owner died",131:"State not recoverable"};
1424
1425
1426 var ___errno_state=0;function ___setErrNo(value) {
1427 // For convenient setting and returning of errno.
1428 HEAP32[((___errno_state)>>2)]=value;
1429 return value;
1430 }
1431
1432 var PATH={splitPath:function (filename) {
1433 var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(? :[\/]*)$/;
1434 return splitPathRe.exec(filename).slice(1);
1435 },normalizeArray:function (parts, allowAboveRoot) {
1436 // if the path tries to go above the root, `up` ends up > 0
1437 var up = 0;
1438 for (var i = parts.length - 1; i >= 0; i--) {
1439 var last = parts[i];
1440 if (last === '.') {
1441 parts.splice(i, 1);
1442 } else if (last === '..') {
1443 parts.splice(i, 1);
1444 up++;
1445 } else if (up) {
1446 parts.splice(i, 1);
1447 up--;
1448 }
1449 }
1450 // if the path is allowed to go above the root, restore leading ..s
1451 if (allowAboveRoot) {
1452 for (; up--; up) {
1453 parts.unshift('..');
1454 }
1455 }
1456 return parts;
1457 },normalize:function (path) {
1458 var isAbsolute = path.charAt(0) === '/',
1459 trailingSlash = path.substr(-1) === '/';
1460 // Normalize the path
1461 path = PATH.normalizeArray(path.split('/').filter(function(p) {
1462 return !!p;
1463 }), !isAbsolute).join('/');
1464 if (!path && !isAbsolute) {
1465 path = '.';
1466 }
1467 if (path && trailingSlash) {
1468 path += '/';
1469 }
1470 return (isAbsolute ? '/' : '') + path;
1471 },dirname:function (path) {
1472 var result = PATH.splitPath(path),
1473 root = result[0],
1474 dir = result[1];
1475 if (!root && !dir) {
1476 // No dirname whatsoever
1477 return '.';
1478 }
1479 if (dir) {
1480 // It has a dirname, strip trailing slash
1481 dir = dir.substr(0, dir.length - 1);
1482 }
1483 return root + dir;
1484 },basename:function (path) {
1485 // EMSCRIPTEN return '/'' for '/', not an empty string
1486 if (path === '/') return '/';
1487 var lastSlash = path.lastIndexOf('/');
1488 if (lastSlash === -1) return path;
1489 return path.substr(lastSlash+1);
1490 },extname:function (path) {
1491 return PATH.splitPath(path)[3];
1492 },join:function () {
1493 var paths = Array.prototype.slice.call(arguments, 0);
1494 return PATH.normalize(paths.join('/'));
1495 },join2:function (l, r) {
1496 return PATH.normalize(l + '/' + r);
1497 },resolve:function () {
1498 var resolvedPath = '',
1499 resolvedAbsolute = false;
1500 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
1501 var path = (i >= 0) ? arguments[i] : FS.cwd();
1502 // Skip empty and invalid entries
1503 if (typeof path !== 'string') {
1504 throw new TypeError('Arguments to path.resolve must be strings');
1505 } else if (!path) {
1506 continue;
1507 }
1508 resolvedPath = path + '/' + resolvedPath;
1509 resolvedAbsolute = path.charAt(0) === '/';
1510 }
1511 // At this point the path should be resolved to a full absolute path, bu t
1512 // handle relative paths to be safe (might happen when process.cwd() fai ls)
1513 resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(functi on(p) {
1514 return !!p;
1515 }), !resolvedAbsolute).join('/');
1516 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
1517 },relative:function (from, to) {
1518 from = PATH.resolve(from).substr(1);
1519 to = PATH.resolve(to).substr(1);
1520 function trim(arr) {
1521 var start = 0;
1522 for (; start < arr.length; start++) {
1523 if (arr[start] !== '') break;
1524 }
1525 var end = arr.length - 1;
1526 for (; end >= 0; end--) {
1527 if (arr[end] !== '') break;
1528 }
1529 if (start > end) return [];
1530 return arr.slice(start, end - start + 1);
1531 }
1532 var fromParts = trim(from.split('/'));
1533 var toParts = trim(to.split('/'));
1534 var length = Math.min(fromParts.length, toParts.length);
1535 var samePartsLength = length;
1536 for (var i = 0; i < length; i++) {
1537 if (fromParts[i] !== toParts[i]) {
1538 samePartsLength = i;
1539 break;
1540 }
1541 }
1542 var outputParts = [];
1543 for (var i = samePartsLength; i < fromParts.length; i++) {
1544 outputParts.push('..');
1545 }
1546 outputParts = outputParts.concat(toParts.slice(samePartsLength));
1547 return outputParts.join('/');
1548 }};
1549
1550 var TTY={ttys:[],init:function () {
1551 // https://github.com/kripken/emscripten/pull/1555
1552 // if (ENVIRONMENT_IS_NODE) {
1553 // // currently, FS.init does not distinguish if process.stdin is a fi le or TTY
1554 // // device, it always assumes it's a TTY device. because of this, we 're forcing
1555 // // process.stdin to UTF8 encoding to at least make stdin reading co mpatible
1556 // // with text files until FS.init can be refactored.
1557 // process['stdin']['setEncoding']('utf8');
1558 // }
1559 },shutdown:function () {
1560 // https://github.com/kripken/emscripten/pull/1555
1561 // if (ENVIRONMENT_IS_NODE) {
1562 // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn 't exit immediately (with process.stdin being a tty)?
1563 // // isaacs: because now it's reading from the stream, you've express ed interest in it, so that read() kicks off a _read() which creates a ReadReq op eration
1564 // // inolen: I thought read() in that case was a synchronous operatio n that just grabbed some amount of buffered data if it exists?
1565 // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
1566 // // isaacs: do process.stdin.pause() and i'd think it'd probably clo se the pending call
1567 // process['stdin']['pause']();
1568 // }
1569 },register:function (dev, ops) {
1570 TTY.ttys[dev] = { input: [], output: [], ops: ops };
1571 FS.registerDevice(dev, TTY.stream_ops);
1572 },stream_ops:{open:function (stream) {
1573 var tty = TTY.ttys[stream.node.rdev];
1574 if (!tty) {
1575 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1576 }
1577 stream.tty = tty;
1578 stream.seekable = false;
1579 },close:function (stream) {
1580 // flush any pending line data
1581 if (stream.tty.output.length) {
1582 stream.tty.ops.put_char(stream.tty, 10);
1583 }
1584 },read:function (stream, buffer, offset, length, pos /* ignored */) {
1585 if (!stream.tty || !stream.tty.ops.get_char) {
1586 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1587 }
1588 var bytesRead = 0;
1589 for (var i = 0; i < length; i++) {
1590 var result;
1591 try {
1592 result = stream.tty.ops.get_char(stream.tty);
1593 } catch (e) {
1594 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1595 }
1596 if (result === undefined && bytesRead === 0) {
1597 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
1598 }
1599 if (result === null || result === undefined) break;
1600 bytesRead++;
1601 buffer[offset+i] = result;
1602 }
1603 if (bytesRead) {
1604 stream.node.timestamp = Date.now();
1605 }
1606 return bytesRead;
1607 },write:function (stream, buffer, offset, length, pos) {
1608 if (!stream.tty || !stream.tty.ops.put_char) {
1609 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1610 }
1611 for (var i = 0; i < length; i++) {
1612 try {
1613 stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
1614 } catch (e) {
1615 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1616 }
1617 }
1618 if (length) {
1619 stream.node.timestamp = Date.now();
1620 }
1621 return i;
1622 }},default_tty_ops:{get_char:function (tty) {
1623 if (!tty.input.length) {
1624 var result = null;
1625 if (ENVIRONMENT_IS_NODE) {
1626 result = process['stdin']['read']();
1627 if (!result) {
1628 if (process['stdin']['_readableState'] && process['stdin']['_rea dableState']['ended']) {
1629 return null; // EOF
1630 }
1631 return undefined; // no data available
1632 }
1633 } else if (typeof window != 'undefined' &&
1634 typeof window.prompt == 'function') {
1635 // Browser.
1636 result = window.prompt('Input: '); // returns null on cancel
1637 if (result !== null) {
1638 result += '\n';
1639 }
1640 } else if (typeof readline == 'function') {
1641 // Command line.
1642 result = readline();
1643 if (result !== null) {
1644 result += '\n';
1645 }
1646 }
1647 if (!result) {
1648 return null;
1649 }
1650 tty.input = intArrayFromString(result, true);
1651 }
1652 return tty.input.shift();
1653 },put_char:function (tty, val) {
1654 if (val === null || val === 10) {
1655 Module['print'](tty.output.join(''));
1656 tty.output = [];
1657 } else {
1658 tty.output.push(TTY.utf8.processCChar(val));
1659 }
1660 }},default_tty1_ops:{put_char:function (tty, val) {
1661 if (val === null || val === 10) {
1662 Module['printErr'](tty.output.join(''));
1663 tty.output = [];
1664 } else {
1665 tty.output.push(TTY.utf8.processCChar(val));
1666 }
1667 }}};
1668
1669 var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3, mount:function (mount) {
1670 return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
1671 },createNode:function (parent, name, mode, dev) {
1672 if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
1673 // no supported
1674 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
1675 }
1676 if (!MEMFS.ops_table) {
1677 MEMFS.ops_table = {
1678 dir: {
1679 node: {
1680 getattr: MEMFS.node_ops.getattr,
1681 setattr: MEMFS.node_ops.setattr,
1682 lookup: MEMFS.node_ops.lookup,
1683 mknod: MEMFS.node_ops.mknod,
1684 rename: MEMFS.node_ops.rename,
1685 unlink: MEMFS.node_ops.unlink,
1686 rmdir: MEMFS.node_ops.rmdir,
1687 readdir: MEMFS.node_ops.readdir,
1688 symlink: MEMFS.node_ops.symlink
1689 },
1690 stream: {
1691 llseek: MEMFS.stream_ops.llseek
1692 }
1693 },
1694 file: {
1695 node: {
1696 getattr: MEMFS.node_ops.getattr,
1697 setattr: MEMFS.node_ops.setattr
1698 },
1699 stream: {
1700 llseek: MEMFS.stream_ops.llseek,
1701 read: MEMFS.stream_ops.read,
1702 write: MEMFS.stream_ops.write,
1703 allocate: MEMFS.stream_ops.allocate,
1704 mmap: MEMFS.stream_ops.mmap
1705 }
1706 },
1707 link: {
1708 node: {
1709 getattr: MEMFS.node_ops.getattr,
1710 setattr: MEMFS.node_ops.setattr,
1711 readlink: MEMFS.node_ops.readlink
1712 },
1713 stream: {}
1714 },
1715 chrdev: {
1716 node: {
1717 getattr: MEMFS.node_ops.getattr,
1718 setattr: MEMFS.node_ops.setattr
1719 },
1720 stream: FS.chrdev_stream_ops
1721 },
1722 };
1723 }
1724 var node = FS.createNode(parent, name, mode, dev);
1725 if (FS.isDir(node.mode)) {
1726 node.node_ops = MEMFS.ops_table.dir.node;
1727 node.stream_ops = MEMFS.ops_table.dir.stream;
1728 node.contents = {};
1729 } else if (FS.isFile(node.mode)) {
1730 node.node_ops = MEMFS.ops_table.file.node;
1731 node.stream_ops = MEMFS.ops_table.file.stream;
1732 node.contents = [];
1733 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1734 } else if (FS.isLink(node.mode)) {
1735 node.node_ops = MEMFS.ops_table.link.node;
1736 node.stream_ops = MEMFS.ops_table.link.stream;
1737 } else if (FS.isChrdev(node.mode)) {
1738 node.node_ops = MEMFS.ops_table.chrdev.node;
1739 node.stream_ops = MEMFS.ops_table.chrdev.stream;
1740 }
1741 node.timestamp = Date.now();
1742 // add the new node to the parent
1743 if (parent) {
1744 parent.contents[name] = node;
1745 }
1746 return node;
1747 },ensureFlexible:function (node) {
1748 if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
1749 var contents = node.contents;
1750 node.contents = Array.prototype.slice.call(contents);
1751 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1752 }
1753 },node_ops:{getattr:function (node) {
1754 var attr = {};
1755 // device numbers reuse inode numbers.
1756 attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
1757 attr.ino = node.id;
1758 attr.mode = node.mode;
1759 attr.nlink = 1;
1760 attr.uid = 0;
1761 attr.gid = 0;
1762 attr.rdev = node.rdev;
1763 if (FS.isDir(node.mode)) {
1764 attr.size = 4096;
1765 } else if (FS.isFile(node.mode)) {
1766 attr.size = node.contents.length;
1767 } else if (FS.isLink(node.mode)) {
1768 attr.size = node.link.length;
1769 } else {
1770 attr.size = 0;
1771 }
1772 attr.atime = new Date(node.timestamp);
1773 attr.mtime = new Date(node.timestamp);
1774 attr.ctime = new Date(node.timestamp);
1775 // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksi ze),
1776 // but this is not required by the standard.
1777 attr.blksize = 4096;
1778 attr.blocks = Math.ceil(attr.size / attr.blksize);
1779 return attr;
1780 },setattr:function (node, attr) {
1781 if (attr.mode !== undefined) {
1782 node.mode = attr.mode;
1783 }
1784 if (attr.timestamp !== undefined) {
1785 node.timestamp = attr.timestamp;
1786 }
1787 if (attr.size !== undefined) {
1788 MEMFS.ensureFlexible(node);
1789 var contents = node.contents;
1790 if (attr.size < contents.length) contents.length = attr.size;
1791 else while (attr.size > contents.length) contents.push(0);
1792 }
1793 },lookup:function (parent, name) {
1794 throw FS.genericErrors[ERRNO_CODES.ENOENT];
1795 },mknod:function (parent, name, mode, dev) {
1796 return MEMFS.createNode(parent, name, mode, dev);
1797 },rename:function (old_node, new_dir, new_name) {
1798 // if we're overwriting a directory at new_name, make sure it's empty.
1799 if (FS.isDir(old_node.mode)) {
1800 var new_node;
1801 try {
1802 new_node = FS.lookupNode(new_dir, new_name);
1803 } catch (e) {
1804 }
1805 if (new_node) {
1806 for (var i in new_node.contents) {
1807 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
1808 }
1809 }
1810 }
1811 // do the internal rewiring
1812 delete old_node.parent.contents[old_node.name];
1813 old_node.name = new_name;
1814 new_dir.contents[new_name] = old_node;
1815 old_node.parent = new_dir;
1816 },unlink:function (parent, name) {
1817 delete parent.contents[name];
1818 },rmdir:function (parent, name) {
1819 var node = FS.lookupNode(parent, name);
1820 for (var i in node.contents) {
1821 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
1822 }
1823 delete parent.contents[name];
1824 },readdir:function (node) {
1825 var entries = ['.', '..']
1826 for (var key in node.contents) {
1827 if (!node.contents.hasOwnProperty(key)) {
1828 continue;
1829 }
1830 entries.push(key);
1831 }
1832 return entries;
1833 },symlink:function (parent, newname, oldpath) {
1834 var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0 );
1835 node.link = oldpath;
1836 return node;
1837 },readlink:function (node) {
1838 if (!FS.isLink(node.mode)) {
1839 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
1840 }
1841 return node.link;
1842 }},stream_ops:{read:function (stream, buffer, offset, length, position) {
1843 var contents = stream.node.contents;
1844 if (position >= contents.length)
1845 return 0;
1846 var size = Math.min(contents.length - position, length);
1847 assert(size >= 0);
1848 if (size > 8 && contents.subarray) { // non-trivial, and typed array
1849 buffer.set(contents.subarray(position, position + size), offset);
1850 } else
1851 {
1852 for (var i = 0; i < size; i++) {
1853 buffer[offset + i] = contents[position + i];
1854 }
1855 }
1856 return size;
1857 },write:function (stream, buffer, offset, length, position, canOwn) {
1858 var node = stream.node;
1859 node.timestamp = Date.now();
1860 var contents = node.contents;
1861 if (length && contents.length === 0 && position === 0 && buffer.subarr ay) {
1862 // just replace it with the new data
1863 if (canOwn && offset === 0) {
1864 node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
1865 node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTEN T_OWNING : MEMFS.CONTENT_FIXED;
1866 } else {
1867 node.contents = new Uint8Array(buffer.subarray(offset, offset+leng th));
1868 node.contentMode = MEMFS.CONTENT_FIXED;
1869 }
1870 return length;
1871 }
1872 MEMFS.ensureFlexible(node);
1873 var contents = node.contents;
1874 while (contents.length < position) contents.push(0);
1875 for (var i = 0; i < length; i++) {
1876 contents[position + i] = buffer[offset + i];
1877 }
1878 return length;
1879 },llseek:function (stream, offset, whence) {
1880 var position = offset;
1881 if (whence === 1) { // SEEK_CUR.
1882 position += stream.position;
1883 } else if (whence === 2) { // SEEK_END.
1884 if (FS.isFile(stream.node.mode)) {
1885 position += stream.node.contents.length;
1886 }
1887 }
1888 if (position < 0) {
1889 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
1890 }
1891 stream.ungotten = [];
1892 stream.position = position;
1893 return position;
1894 },allocate:function (stream, offset, length) {
1895 MEMFS.ensureFlexible(stream.node);
1896 var contents = stream.node.contents;
1897 var limit = offset + length;
1898 while (limit > contents.length) contents.push(0);
1899 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
1900 if (!FS.isFile(stream.node.mode)) {
1901 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1902 }
1903 var ptr;
1904 var allocated;
1905 var contents = stream.node.contents;
1906 // Only make a new copy when MAP_PRIVATE is specified.
1907 if ( !(flags & 2) &&
1908 (contents.buffer === buffer || contents.buffer === buffer.buffer ) ) {
1909 // We can't emulate MAP_SHARED when the file is not backed by the bu ffer
1910 // we're mapping to (e.g. the HEAP buffer).
1911 allocated = false;
1912 ptr = contents.byteOffset;
1913 } else {
1914 // Try to avoid unnecessary slices.
1915 if (position > 0 || position + length < contents.length) {
1916 if (contents.subarray) {
1917 contents = contents.subarray(position, position + length);
1918 } else {
1919 contents = Array.prototype.slice.call(contents, position, positi on + length);
1920 }
1921 }
1922 allocated = true;
1923 ptr = _malloc(length);
1924 if (!ptr) {
1925 throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
1926 }
1927 buffer.set(contents, ptr);
1928 }
1929 return { ptr: ptr, allocated: allocated };
1930 }}};
1931
1932 var IDBFS={dbs:{},indexedDB:function () {
1933 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
1934 },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
1935 // reuse all of the core MEMFS functionality
1936 return MEMFS.mount.apply(null, arguments);
1937 },syncfs:function (mount, populate, callback) {
1938 IDBFS.getLocalSet(mount, function(err, local) {
1939 if (err) return callback(err);
1940
1941 IDBFS.getRemoteSet(mount, function(err, remote) {
1942 if (err) return callback(err);
1943
1944 var src = populate ? remote : local;
1945 var dst = populate ? local : remote;
1946
1947 IDBFS.reconcile(src, dst, callback);
1948 });
1949 });
1950 },getDB:function (name, callback) {
1951 // check the cache first
1952 var db = IDBFS.dbs[name];
1953 if (db) {
1954 return callback(null, db);
1955 }
1956
1957 var req;
1958 try {
1959 req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
1960 } catch (e) {
1961 return callback(e);
1962 }
1963 req.onupgradeneeded = function(e) {
1964 var db = e.target.result;
1965 var transaction = e.target.transaction;
1966
1967 var fileStore;
1968
1969 if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
1970 fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
1971 } else {
1972 fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
1973 }
1974
1975 fileStore.createIndex('timestamp', 'timestamp', { unique: false });
1976 };
1977 req.onsuccess = function() {
1978 db = req.result;
1979
1980 // add to the cache
1981 IDBFS.dbs[name] = db;
1982 callback(null, db);
1983 };
1984 req.onerror = function() {
1985 callback(this.error);
1986 };
1987 },getLocalSet:function (mount, callback) {
1988 var entries = {};
1989
1990 function isRealDir(p) {
1991 return p !== '.' && p !== '..';
1992 };
1993 function toAbsolute(root) {
1994 return function(p) {
1995 return PATH.join2(root, p);
1996 }
1997 };
1998
1999 var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolut e(mount.mountpoint));
2000
2001 while (check.length) {
2002 var path = check.pop();
2003 var stat;
2004
2005 try {
2006 stat = FS.stat(path);
2007 } catch (e) {
2008 return callback(e);
2009 }
2010
2011 if (FS.isDir(stat.mode)) {
2012 check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbs olute(path)));
2013 }
2014
2015 entries[path] = { timestamp: stat.mtime };
2016 }
2017
2018 return callback(null, { type: 'local', entries: entries });
2019 },getRemoteSet:function (mount, callback) {
2020 var entries = {};
2021
2022 IDBFS.getDB(mount.mountpoint, function(err, db) {
2023 if (err) return callback(err);
2024
2025 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
2026 transaction.onerror = function() { callback(this.error); };
2027
2028 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2029 var index = store.index('timestamp');
2030
2031 index.openKeyCursor().onsuccess = function(event) {
2032 var cursor = event.target.result;
2033
2034 if (!cursor) {
2035 return callback(null, { type: 'remote', db: db, entries: entries } );
2036 }
2037
2038 entries[cursor.primaryKey] = { timestamp: cursor.key };
2039
2040 cursor.continue();
2041 };
2042 });
2043 },loadLocalEntry:function (path, callback) {
2044 var stat, node;
2045
2046 try {
2047 var lookup = FS.lookupPath(path);
2048 node = lookup.node;
2049 stat = FS.stat(path);
2050 } catch (e) {
2051 return callback(e);
2052 }
2053
2054 if (FS.isDir(stat.mode)) {
2055 return callback(null, { timestamp: stat.mtime, mode: stat.mode });
2056 } else if (FS.isFile(stat.mode)) {
2057 return callback(null, { timestamp: stat.mtime, mode: stat.mode, conten ts: node.contents });
2058 } else {
2059 return callback(new Error('node type not supported'));
2060 }
2061 },storeLocalEntry:function (path, entry, callback) {
2062 try {
2063 if (FS.isDir(entry.mode)) {
2064 FS.mkdir(path, entry.mode);
2065 } else if (FS.isFile(entry.mode)) {
2066 FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: tru e });
2067 } else {
2068 return callback(new Error('node type not supported'));
2069 }
2070
2071 FS.utime(path, entry.timestamp, entry.timestamp);
2072 } catch (e) {
2073 return callback(e);
2074 }
2075
2076 callback(null);
2077 },removeLocalEntry:function (path, callback) {
2078 try {
2079 var lookup = FS.lookupPath(path);
2080 var stat = FS.stat(path);
2081
2082 if (FS.isDir(stat.mode)) {
2083 FS.rmdir(path);
2084 } else if (FS.isFile(stat.mode)) {
2085 FS.unlink(path);
2086 }
2087 } catch (e) {
2088 return callback(e);
2089 }
2090
2091 callback(null);
2092 },loadRemoteEntry:function (store, path, callback) {
2093 var req = store.get(path);
2094 req.onsuccess = function(event) { callback(null, event.target.result); } ;
2095 req.onerror = function() { callback(this.error); };
2096 },storeRemoteEntry:function (store, path, entry, callback) {
2097 var req = store.put(entry, path);
2098 req.onsuccess = function() { callback(null); };
2099 req.onerror = function() { callback(this.error); };
2100 },removeRemoteEntry:function (store, path, callback) {
2101 var req = store.delete(path);
2102 req.onsuccess = function() { callback(null); };
2103 req.onerror = function() { callback(this.error); };
2104 },reconcile:function (src, dst, callback) {
2105 var total = 0;
2106
2107 var create = [];
2108 Object.keys(src.entries).forEach(function (key) {
2109 var e = src.entries[key];
2110 var e2 = dst.entries[key];
2111 if (!e2 || e.timestamp > e2.timestamp) {
2112 create.push(key);
2113 total++;
2114 }
2115 });
2116
2117 var remove = [];
2118 Object.keys(dst.entries).forEach(function (key) {
2119 var e = dst.entries[key];
2120 var e2 = src.entries[key];
2121 if (!e2) {
2122 remove.push(key);
2123 total++;
2124 }
2125 });
2126
2127 if (!total) {
2128 return callback(null);
2129 }
2130
2131 var errored = false;
2132 var completed = 0;
2133 var db = src.type === 'remote' ? src.db : dst.db;
2134 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
2135 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2136
2137 function done(err) {
2138 if (err) {
2139 if (!done.errored) {
2140 done.errored = true;
2141 return callback(err);
2142 }
2143 return;
2144 }
2145 if (++completed >= total) {
2146 return callback(null);
2147 }
2148 };
2149
2150 transaction.onerror = function() { done(this.error); };
2151
2152 // sort paths in ascending order so directory entries are created
2153 // before the files inside them
2154 create.sort().forEach(function (path) {
2155 if (dst.type === 'local') {
2156 IDBFS.loadRemoteEntry(store, path, function (err, entry) {
2157 if (err) return done(err);
2158 IDBFS.storeLocalEntry(path, entry, done);
2159 });
2160 } else {
2161 IDBFS.loadLocalEntry(path, function (err, entry) {
2162 if (err) return done(err);
2163 IDBFS.storeRemoteEntry(store, path, entry, done);
2164 });
2165 }
2166 });
2167
2168 // sort paths in descending order so files are deleted before their
2169 // parent directories
2170 remove.sort().reverse().forEach(function(path) {
2171 if (dst.type === 'local') {
2172 IDBFS.removeLocalEntry(path, done);
2173 } else {
2174 IDBFS.removeRemoteEntry(store, path, done);
2175 }
2176 });
2177 }};
2178
2179 var NODEFS={isWindows:false,staticInit:function () {
2180 NODEFS.isWindows = !!process.platform.match(/^win/);
2181 },mount:function (mount) {
2182 assert(ENVIRONMENT_IS_NODE);
2183 return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
2184 },createNode:function (parent, name, mode, dev) {
2185 if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
2186 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2187 }
2188 var node = FS.createNode(parent, name, mode);
2189 node.node_ops = NODEFS.node_ops;
2190 node.stream_ops = NODEFS.stream_ops;
2191 return node;
2192 },getMode:function (path) {
2193 var stat;
2194 try {
2195 stat = fs.lstatSync(path);
2196 if (NODEFS.isWindows) {
2197 // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
2198 // propagate write bits to execute bits.
2199 stat.mode = stat.mode | ((stat.mode & 146) >> 1);
2200 }
2201 } catch (e) {
2202 if (!e.code) throw e;
2203 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2204 }
2205 return stat.mode;
2206 },realPath:function (node) {
2207 var parts = [];
2208 while (node.parent !== node) {
2209 parts.push(node.name);
2210 node = node.parent;
2211 }
2212 parts.push(node.mount.opts.root);
2213 parts.reverse();
2214 return PATH.join.apply(null, parts);
2215 },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",1 29:"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:"r s",4098:"rs+"},flagsToPermissionString:function (flags) {
2216 if (flags in NODEFS.flagsToPermissionStringMap) {
2217 return NODEFS.flagsToPermissionStringMap[flags];
2218 } else {
2219 return flags;
2220 }
2221 },node_ops:{getattr:function (node) {
2222 var path = NODEFS.realPath(node);
2223 var stat;
2224 try {
2225 stat = fs.lstatSync(path);
2226 } catch (e) {
2227 if (!e.code) throw e;
2228 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2229 }
2230 // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
2231 // See http://support.microsoft.com/kb/140365
2232 if (NODEFS.isWindows && !stat.blksize) {
2233 stat.blksize = 4096;
2234 }
2235 if (NODEFS.isWindows && !stat.blocks) {
2236 stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
2237 }
2238 return {
2239 dev: stat.dev,
2240 ino: stat.ino,
2241 mode: stat.mode,
2242 nlink: stat.nlink,
2243 uid: stat.uid,
2244 gid: stat.gid,
2245 rdev: stat.rdev,
2246 size: stat.size,
2247 atime: stat.atime,
2248 mtime: stat.mtime,
2249 ctime: stat.ctime,
2250 blksize: stat.blksize,
2251 blocks: stat.blocks
2252 };
2253 },setattr:function (node, attr) {
2254 var path = NODEFS.realPath(node);
2255 try {
2256 if (attr.mode !== undefined) {
2257 fs.chmodSync(path, attr.mode);
2258 // update the common node structure mode as well
2259 node.mode = attr.mode;
2260 }
2261 if (attr.timestamp !== undefined) {
2262 var date = new Date(attr.timestamp);
2263 fs.utimesSync(path, date, date);
2264 }
2265 if (attr.size !== undefined) {
2266 fs.truncateSync(path, attr.size);
2267 }
2268 } catch (e) {
2269 if (!e.code) throw e;
2270 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2271 }
2272 },lookup:function (parent, name) {
2273 var path = PATH.join2(NODEFS.realPath(parent), name);
2274 var mode = NODEFS.getMode(path);
2275 return NODEFS.createNode(parent, name, mode);
2276 },mknod:function (parent, name, mode, dev) {
2277 var node = NODEFS.createNode(parent, name, mode, dev);
2278 // create the backing node for this in the fs root as well
2279 var path = NODEFS.realPath(node);
2280 try {
2281 if (FS.isDir(node.mode)) {
2282 fs.mkdirSync(path, node.mode);
2283 } else {
2284 fs.writeFileSync(path, '', { mode: node.mode });
2285 }
2286 } catch (e) {
2287 if (!e.code) throw e;
2288 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2289 }
2290 return node;
2291 },rename:function (oldNode, newDir, newName) {
2292 var oldPath = NODEFS.realPath(oldNode);
2293 var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
2294 try {
2295 fs.renameSync(oldPath, newPath);
2296 } catch (e) {
2297 if (!e.code) throw e;
2298 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2299 }
2300 },unlink:function (parent, name) {
2301 var path = PATH.join2(NODEFS.realPath(parent), name);
2302 try {
2303 fs.unlinkSync(path);
2304 } catch (e) {
2305 if (!e.code) throw e;
2306 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2307 }
2308 },rmdir:function (parent, name) {
2309 var path = PATH.join2(NODEFS.realPath(parent), name);
2310 try {
2311 fs.rmdirSync(path);
2312 } catch (e) {
2313 if (!e.code) throw e;
2314 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2315 }
2316 },readdir:function (node) {
2317 var path = NODEFS.realPath(node);
2318 try {
2319 return fs.readdirSync(path);
2320 } catch (e) {
2321 if (!e.code) throw e;
2322 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2323 }
2324 },symlink:function (parent, newName, oldPath) {
2325 var newPath = PATH.join2(NODEFS.realPath(parent), newName);
2326 try {
2327 fs.symlinkSync(oldPath, newPath);
2328 } catch (e) {
2329 if (!e.code) throw e;
2330 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2331 }
2332 },readlink:function (node) {
2333 var path = NODEFS.realPath(node);
2334 try {
2335 return fs.readlinkSync(path);
2336 } catch (e) {
2337 if (!e.code) throw e;
2338 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2339 }
2340 }},stream_ops:{open:function (stream) {
2341 var path = NODEFS.realPath(stream.node);
2342 try {
2343 if (FS.isFile(stream.node.mode)) {
2344 stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stre am.flags));
2345 }
2346 } catch (e) {
2347 if (!e.code) throw e;
2348 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2349 }
2350 },close:function (stream) {
2351 try {
2352 if (FS.isFile(stream.node.mode) && stream.nfd) {
2353 fs.closeSync(stream.nfd);
2354 }
2355 } catch (e) {
2356 if (!e.code) throw e;
2357 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2358 }
2359 },read:function (stream, buffer, offset, length, position) {
2360 // FIXME this is terrible.
2361 var nbuffer = new Buffer(length);
2362 var res;
2363 try {
2364 res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
2365 } catch (e) {
2366 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2367 }
2368 if (res > 0) {
2369 for (var i = 0; i < res; i++) {
2370 buffer[offset + i] = nbuffer[i];
2371 }
2372 }
2373 return res;
2374 },write:function (stream, buffer, offset, length, position) {
2375 // FIXME this is terrible.
2376 var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
2377 var res;
2378 try {
2379 res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
2380 } catch (e) {
2381 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2382 }
2383 return res;
2384 },llseek:function (stream, offset, whence) {
2385 var position = offset;
2386 if (whence === 1) { // SEEK_CUR.
2387 position += stream.position;
2388 } else if (whence === 2) { // SEEK_END.
2389 if (FS.isFile(stream.node.mode)) {
2390 try {
2391 var stat = fs.fstatSync(stream.nfd);
2392 position += stat.size;
2393 } catch (e) {
2394 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2395 }
2396 }
2397 }
2398
2399 if (position < 0) {
2400 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2401 }
2402
2403 stream.position = position;
2404 return position;
2405 }}};
2406
2407 var _stdin=allocate(1, "i32*", ALLOC_STATIC);
2408
2409 var _stdout=allocate(1, "i32*", ALLOC_STATIC);
2410
2411 var _stderr=allocate(1, "i32*", ALLOC_STATIC);
2412
2413 function _fflush(stream) {
2414 // int fflush(FILE *stream);
2415 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
2416 // we don't currently perform any user-space buffering of data
2417 }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable :null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,g enericErrors:{},handleFSError:function (e) {
2418 if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
2419 return ___setErrNo(e.errno);
2420 },lookupPath:function (path, opts) {
2421 path = PATH.resolve(FS.cwd(), path);
2422 opts = opts || {};
2423
2424 var defaults = {
2425 follow_mount: true,
2426 recurse_count: 0
2427 };
2428 for (var key in defaults) {
2429 if (opts[key] === undefined) {
2430 opts[key] = defaults[key];
2431 }
2432 }
2433
2434 if (opts.recurse_count > 8) { // max recursive lookup of 8
2435 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2436 }
2437
2438 // split the path
2439 var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
2440 return !!p;
2441 }), false);
2442
2443 // start at the root
2444 var current = FS.root;
2445 var current_path = '/';
2446
2447 for (var i = 0; i < parts.length; i++) {
2448 var islast = (i === parts.length-1);
2449 if (islast && opts.parent) {
2450 // stop resolving
2451 break;
2452 }
2453
2454 current = FS.lookupNode(current, parts[i]);
2455 current_path = PATH.join2(current_path, parts[i]);
2456
2457 // jump to the mount's root node if this is a mountpoint
2458 if (FS.isMountpoint(current)) {
2459 if (!islast || (islast && opts.follow_mount)) {
2460 current = current.mounted.root;
2461 }
2462 }
2463
2464 // by default, lookupPath will not follow a symlink if it is the final path component.
2465 // setting opts.follow = true will override this behavior.
2466 if (!islast || opts.follow) {
2467 var count = 0;
2468 while (FS.isLink(current.mode)) {
2469 var link = FS.readlink(current_path);
2470 current_path = PATH.resolve(PATH.dirname(current_path), link);
2471
2472 var lookup = FS.lookupPath(current_path, { recurse_count: opts.rec urse_count });
2473 current = lookup.node;
2474
2475 if (count++ > 40) { // limit max consecutive symlinks to 40 (SYML OOP_MAX).
2476 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2477 }
2478 }
2479 }
2480 }
2481
2482 return { path: current_path, node: current };
2483 },getPath:function (node) {
2484 var path;
2485 while (true) {
2486 if (FS.isRoot(node)) {
2487 var mount = node.mount.mountpoint;
2488 if (!path) return mount;
2489 return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
2490 }
2491 path = path ? node.name + '/' + path : node.name;
2492 node = node.parent;
2493 }
2494 },hashName:function (parentid, name) {
2495 var hash = 0;
2496
2497
2498 for (var i = 0; i < name.length; i++) {
2499 hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
2500 }
2501 return ((parentid + hash) >>> 0) % FS.nameTable.length;
2502 },hashAddNode:function (node) {
2503 var hash = FS.hashName(node.parent.id, node.name);
2504 node.name_next = FS.nameTable[hash];
2505 FS.nameTable[hash] = node;
2506 },hashRemoveNode:function (node) {
2507 var hash = FS.hashName(node.parent.id, node.name);
2508 if (FS.nameTable[hash] === node) {
2509 FS.nameTable[hash] = node.name_next;
2510 } else {
2511 var current = FS.nameTable[hash];
2512 while (current) {
2513 if (current.name_next === node) {
2514 current.name_next = node.name_next;
2515 break;
2516 }
2517 current = current.name_next;
2518 }
2519 }
2520 },lookupNode:function (parent, name) {
2521 var err = FS.mayLookup(parent);
2522 if (err) {
2523 throw new FS.ErrnoError(err);
2524 }
2525 var hash = FS.hashName(parent.id, name);
2526 for (var node = FS.nameTable[hash]; node; node = node.name_next) {
2527 var nodeName = node.name;
2528 if (node.parent.id === parent.id && nodeName === name) {
2529 return node;
2530 }
2531 }
2532 // if we failed to find it in the cache, call into the VFS
2533 return FS.lookup(parent, name);
2534 },createNode:function (parent, name, mode, rdev) {
2535 if (!FS.FSNode) {
2536 FS.FSNode = function(parent, name, mode, rdev) {
2537 if (!parent) {
2538 parent = this; // root node sets parent to itself
2539 }
2540 this.parent = parent;
2541 this.mount = parent.mount;
2542 this.mounted = null;
2543 this.id = FS.nextInode++;
2544 this.name = name;
2545 this.mode = mode;
2546 this.node_ops = {};
2547 this.stream_ops = {};
2548 this.rdev = rdev;
2549 };
2550
2551 FS.FSNode.prototype = {};
2552
2553 // compatibility
2554 var readMode = 292 | 73;
2555 var writeMode = 146;
2556
2557 // NOTE we must use Object.defineProperties instead of individual call s to
2558 // Object.defineProperty in order to make closure compiler happy
2559 Object.defineProperties(FS.FSNode.prototype, {
2560 read: {
2561 get: function() { return (this.mode & readMode) === readMode; },
2562 set: function(val) { val ? this.mode |= readMode : this.mode &= ~r eadMode; }
2563 },
2564 write: {
2565 get: function() { return (this.mode & writeMode) === writeMode; },
2566 set: function(val) { val ? this.mode |= writeMode : this.mode &= ~ writeMode; }
2567 },
2568 isFolder: {
2569 get: function() { return FS.isDir(this.mode); },
2570 },
2571 isDevice: {
2572 get: function() { return FS.isChrdev(this.mode); },
2573 },
2574 });
2575 }
2576
2577 var node = new FS.FSNode(parent, name, mode, rdev);
2578
2579 FS.hashAddNode(node);
2580
2581 return node;
2582 },destroyNode:function (node) {
2583 FS.hashRemoveNode(node);
2584 },isRoot:function (node) {
2585 return node === node.parent;
2586 },isMountpoint:function (node) {
2587 return !!node.mounted;
2588 },isFile:function (mode) {
2589 return (mode & 61440) === 32768;
2590 },isDir:function (mode) {
2591 return (mode & 61440) === 16384;
2592 },isLink:function (mode) {
2593 return (mode & 61440) === 40960;
2594 },isChrdev:function (mode) {
2595 return (mode & 61440) === 8192;
2596 },isBlkdev:function (mode) {
2597 return (mode & 61440) === 24576;
2598 },isFIFO:function (mode) {
2599 return (mode & 61440) === 4096;
2600 },isSocket:function (mode) {
2601 return (mode & 49152) === 49152;
2602 },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) {
2603 var flags = FS.flagModes[str];
2604 if (typeof flags === 'undefined') {
2605 throw new Error('Unknown file open mode: ' + str);
2606 }
2607 return flags;
2608 },flagsToPermissionString:function (flag) {
2609 var accmode = flag & 2097155;
2610 var perms = ['r', 'w', 'rw'][accmode];
2611 if ((flag & 512)) {
2612 perms += 'w';
2613 }
2614 return perms;
2615 },nodePermissions:function (node, perms) {
2616 if (FS.ignorePermissions) {
2617 return 0;
2618 }
2619 // return 0 if any user, group or owner bits are set.
2620 if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
2621 return ERRNO_CODES.EACCES;
2622 } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
2623 return ERRNO_CODES.EACCES;
2624 } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
2625 return ERRNO_CODES.EACCES;
2626 }
2627 return 0;
2628 },mayLookup:function (dir) {
2629 return FS.nodePermissions(dir, 'x');
2630 },mayCreate:function (dir, name) {
2631 try {
2632 var node = FS.lookupNode(dir, name);
2633 return ERRNO_CODES.EEXIST;
2634 } catch (e) {
2635 }
2636 return FS.nodePermissions(dir, 'wx');
2637 },mayDelete:function (dir, name, isdir) {
2638 var node;
2639 try {
2640 node = FS.lookupNode(dir, name);
2641 } catch (e) {
2642 return e.errno;
2643 }
2644 var err = FS.nodePermissions(dir, 'wx');
2645 if (err) {
2646 return err;
2647 }
2648 if (isdir) {
2649 if (!FS.isDir(node.mode)) {
2650 return ERRNO_CODES.ENOTDIR;
2651 }
2652 if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
2653 return ERRNO_CODES.EBUSY;
2654 }
2655 } else {
2656 if (FS.isDir(node.mode)) {
2657 return ERRNO_CODES.EISDIR;
2658 }
2659 }
2660 return 0;
2661 },mayOpen:function (node, flags) {
2662 if (!node) {
2663 return ERRNO_CODES.ENOENT;
2664 }
2665 if (FS.isLink(node.mode)) {
2666 return ERRNO_CODES.ELOOP;
2667 } else if (FS.isDir(node.mode)) {
2668 if ((flags & 2097155) !== 0 || // opening for write
2669 (flags & 512)) {
2670 return ERRNO_CODES.EISDIR;
2671 }
2672 }
2673 return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
2674 },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
2675 fd_start = fd_start || 0;
2676 fd_end = fd_end || FS.MAX_OPEN_FDS;
2677 for (var fd = fd_start; fd <= fd_end; fd++) {
2678 if (!FS.streams[fd]) {
2679 return fd;
2680 }
2681 }
2682 throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
2683 },getStream:function (fd) {
2684 return FS.streams[fd];
2685 },createStream:function (stream, fd_start, fd_end) {
2686 if (!FS.FSStream) {
2687 FS.FSStream = function(){};
2688 FS.FSStream.prototype = {};
2689 // compatibility
2690 Object.defineProperties(FS.FSStream.prototype, {
2691 object: {
2692 get: function() { return this.node; },
2693 set: function(val) { this.node = val; }
2694 },
2695 isRead: {
2696 get: function() { return (this.flags & 2097155) !== 1; }
2697 },
2698 isWrite: {
2699 get: function() { return (this.flags & 2097155) !== 0; }
2700 },
2701 isAppend: {
2702 get: function() { return (this.flags & 1024); }
2703 }
2704 });
2705 }
2706 if (0) {
2707 // reuse the object
2708 stream.__proto__ = FS.FSStream.prototype;
2709 } else {
2710 var newStream = new FS.FSStream();
2711 for (var p in stream) {
2712 newStream[p] = stream[p];
2713 }
2714 stream = newStream;
2715 }
2716 var fd = FS.nextfd(fd_start, fd_end);
2717 stream.fd = fd;
2718 FS.streams[fd] = stream;
2719 return stream;
2720 },closeStream:function (fd) {
2721 FS.streams[fd] = null;
2722 },getStreamFromPtr:function (ptr) {
2723 return FS.streams[ptr - 1];
2724 },getPtrForStream:function (stream) {
2725 return stream ? stream.fd + 1 : 0;
2726 },chrdev_stream_ops:{open:function (stream) {
2727 var device = FS.getDevice(stream.node.rdev);
2728 // override node's stream ops with the device's
2729 stream.stream_ops = device.stream_ops;
2730 // forward the open call
2731 if (stream.stream_ops.open) {
2732 stream.stream_ops.open(stream);
2733 }
2734 },llseek:function () {
2735 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
2736 }},major:function (dev) {
2737 return ((dev) >> 8);
2738 },minor:function (dev) {
2739 return ((dev) & 0xff);
2740 },makedev:function (ma, mi) {
2741 return ((ma) << 8 | (mi));
2742 },registerDevice:function (dev, ops) {
2743 FS.devices[dev] = { stream_ops: ops };
2744 },getDevice:function (dev) {
2745 return FS.devices[dev];
2746 },getMounts:function (mount) {
2747 var mounts = [];
2748 var check = [mount];
2749
2750 while (check.length) {
2751 var m = check.pop();
2752
2753 mounts.push(m);
2754
2755 check.push.apply(check, m.mounts);
2756 }
2757
2758 return mounts;
2759 },syncfs:function (populate, callback) {
2760 if (typeof(populate) === 'function') {
2761 callback = populate;
2762 populate = false;
2763 }
2764
2765 var mounts = FS.getMounts(FS.root.mount);
2766 var completed = 0;
2767
2768 function done(err) {
2769 if (err) {
2770 if (!done.errored) {
2771 done.errored = true;
2772 return callback(err);
2773 }
2774 return;
2775 }
2776 if (++completed >= mounts.length) {
2777 callback(null);
2778 }
2779 };
2780
2781 // sync all mounts
2782 mounts.forEach(function (mount) {
2783 if (!mount.type.syncfs) {
2784 return done(null);
2785 }
2786 mount.type.syncfs(mount, populate, done);
2787 });
2788 },mount:function (type, opts, mountpoint) {
2789 var root = mountpoint === '/';
2790 var pseudo = !mountpoint;
2791 var node;
2792
2793 if (root && FS.root) {
2794 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2795 } else if (!root && !pseudo) {
2796 var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
2797
2798 mountpoint = lookup.path; // use the absolute path
2799 node = lookup.node;
2800
2801 if (FS.isMountpoint(node)) {
2802 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2803 }
2804
2805 if (!FS.isDir(node.mode)) {
2806 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
2807 }
2808 }
2809
2810 var mount = {
2811 type: type,
2812 opts: opts,
2813 mountpoint: mountpoint,
2814 mounts: []
2815 };
2816
2817 // create a root node for the fs
2818 var mountRoot = type.mount(mount);
2819 mountRoot.mount = mount;
2820 mount.root = mountRoot;
2821
2822 if (root) {
2823 FS.root = mountRoot;
2824 } else if (node) {
2825 // set as a mountpoint
2826 node.mounted = mount;
2827
2828 // add the new mount to the current mount's children
2829 if (node.mount) {
2830 node.mount.mounts.push(mount);
2831 }
2832 }
2833
2834 return mountRoot;
2835 },unmount:function (mountpoint) {
2836 var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
2837
2838 if (!FS.isMountpoint(lookup.node)) {
2839 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2840 }
2841
2842 // destroy the nodes for this mount, and all its child mounts
2843 var node = lookup.node;
2844 var mount = node.mounted;
2845 var mounts = FS.getMounts(mount);
2846
2847 Object.keys(FS.nameTable).forEach(function (hash) {
2848 var current = FS.nameTable[hash];
2849
2850 while (current) {
2851 var next = current.name_next;
2852
2853 if (mounts.indexOf(current.mount) !== -1) {
2854 FS.destroyNode(current);
2855 }
2856
2857 current = next;
2858 }
2859 });
2860
2861 // no longer a mountpoint
2862 node.mounted = null;
2863
2864 // remove this mount from the child mounts
2865 var idx = node.mount.mounts.indexOf(mount);
2866 assert(idx !== -1);
2867 node.mount.mounts.splice(idx, 1);
2868 },lookup:function (parent, name) {
2869 return parent.node_ops.lookup(parent, name);
2870 },mknod:function (path, mode, dev) {
2871 var lookup = FS.lookupPath(path, { parent: true });
2872 var parent = lookup.node;
2873 var name = PATH.basename(path);
2874 var err = FS.mayCreate(parent, name);
2875 if (err) {
2876 throw new FS.ErrnoError(err);
2877 }
2878 if (!parent.node_ops.mknod) {
2879 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2880 }
2881 return parent.node_ops.mknod(parent, name, mode, dev);
2882 },create:function (path, mode) {
2883 mode = mode !== undefined ? mode : 438 /* 0666 */;
2884 mode &= 4095;
2885 mode |= 32768;
2886 return FS.mknod(path, mode, 0);
2887 },mkdir:function (path, mode) {
2888 mode = mode !== undefined ? mode : 511 /* 0777 */;
2889 mode &= 511 | 512;
2890 mode |= 16384;
2891 return FS.mknod(path, mode, 0);
2892 },mkdev:function (path, mode, dev) {
2893 if (typeof(dev) === 'undefined') {
2894 dev = mode;
2895 mode = 438 /* 0666 */;
2896 }
2897 mode |= 8192;
2898 return FS.mknod(path, mode, dev);
2899 },symlink:function (oldpath, newpath) {
2900 var lookup = FS.lookupPath(newpath, { parent: true });
2901 var parent = lookup.node;
2902 var newname = PATH.basename(newpath);
2903 var err = FS.mayCreate(parent, newname);
2904 if (err) {
2905 throw new FS.ErrnoError(err);
2906 }
2907 if (!parent.node_ops.symlink) {
2908 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2909 }
2910 return parent.node_ops.symlink(parent, newname, oldpath);
2911 },rename:function (old_path, new_path) {
2912 var old_dirname = PATH.dirname(old_path);
2913 var new_dirname = PATH.dirname(new_path);
2914 var old_name = PATH.basename(old_path);
2915 var new_name = PATH.basename(new_path);
2916 // parents must exist
2917 var lookup, old_dir, new_dir;
2918 try {
2919 lookup = FS.lookupPath(old_path, { parent: true });
2920 old_dir = lookup.node;
2921 lookup = FS.lookupPath(new_path, { parent: true });
2922 new_dir = lookup.node;
2923 } catch (e) {
2924 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2925 }
2926 // need to be part of the same mount
2927 if (old_dir.mount !== new_dir.mount) {
2928 throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
2929 }
2930 // source must exist
2931 var old_node = FS.lookupNode(old_dir, old_name);
2932 // old path should not be an ancestor of the new path
2933 var relative = PATH.relative(old_path, new_dirname);
2934 if (relative.charAt(0) !== '.') {
2935 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2936 }
2937 // new path should not be an ancestor of the old path
2938 relative = PATH.relative(new_path, old_dirname);
2939 if (relative.charAt(0) !== '.') {
2940 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2941 }
2942 // see if the new path already exists
2943 var new_node;
2944 try {
2945 new_node = FS.lookupNode(new_dir, new_name);
2946 } catch (e) {
2947 // not fatal
2948 }
2949 // early out if nothing needs to change
2950 if (old_node === new_node) {
2951 return;
2952 }
2953 // we'll need to delete the old entry
2954 var isdir = FS.isDir(old_node.mode);
2955 var err = FS.mayDelete(old_dir, old_name, isdir);
2956 if (err) {
2957 throw new FS.ErrnoError(err);
2958 }
2959 // need delete permissions if we'll be overwriting.
2960 // need create permissions if new doesn't already exist.
2961 err = new_node ?
2962 FS.mayDelete(new_dir, new_name, isdir) :
2963 FS.mayCreate(new_dir, new_name);
2964 if (err) {
2965 throw new FS.ErrnoError(err);
2966 }
2967 if (!old_dir.node_ops.rename) {
2968 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2969 }
2970 if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node)) ) {
2971 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2972 }
2973 // if we are going to change the parent, check write permissions
2974 if (new_dir !== old_dir) {
2975 err = FS.nodePermissions(old_dir, 'w');
2976 if (err) {
2977 throw new FS.ErrnoError(err);
2978 }
2979 }
2980 // remove the node from the lookup hash
2981 FS.hashRemoveNode(old_node);
2982 // do the underlying fs rename
2983 try {
2984 old_dir.node_ops.rename(old_node, new_dir, new_name);
2985 } catch (e) {
2986 throw e;
2987 } finally {
2988 // add the node back to the hash (in case node_ops.rename
2989 // changed its name)
2990 FS.hashAddNode(old_node);
2991 }
2992 },rmdir:function (path) {
2993 var lookup = FS.lookupPath(path, { parent: true });
2994 var parent = lookup.node;
2995 var name = PATH.basename(path);
2996 var node = FS.lookupNode(parent, name);
2997 var err = FS.mayDelete(parent, name, true);
2998 if (err) {
2999 throw new FS.ErrnoError(err);
3000 }
3001 if (!parent.node_ops.rmdir) {
3002 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3003 }
3004 if (FS.isMountpoint(node)) {
3005 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3006 }
3007 parent.node_ops.rmdir(parent, name);
3008 FS.destroyNode(node);
3009 },readdir:function (path) {
3010 var lookup = FS.lookupPath(path, { follow: true });
3011 var node = lookup.node;
3012 if (!node.node_ops.readdir) {
3013 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3014 }
3015 return node.node_ops.readdir(node);
3016 },unlink:function (path) {
3017 var lookup = FS.lookupPath(path, { parent: true });
3018 var parent = lookup.node;
3019 var name = PATH.basename(path);
3020 var node = FS.lookupNode(parent, name);
3021 var err = FS.mayDelete(parent, name, false);
3022 if (err) {
3023 // POSIX says unlink should set EPERM, not EISDIR
3024 if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
3025 throw new FS.ErrnoError(err);
3026 }
3027 if (!parent.node_ops.unlink) {
3028 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3029 }
3030 if (FS.isMountpoint(node)) {
3031 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3032 }
3033 parent.node_ops.unlink(parent, name);
3034 FS.destroyNode(node);
3035 },readlink:function (path) {
3036 var lookup = FS.lookupPath(path);
3037 var link = lookup.node;
3038 if (!link.node_ops.readlink) {
3039 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3040 }
3041 return link.node_ops.readlink(link);
3042 },stat:function (path, dontFollow) {
3043 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3044 var node = lookup.node;
3045 if (!node.node_ops.getattr) {
3046 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3047 }
3048 return node.node_ops.getattr(node);
3049 },lstat:function (path) {
3050 return FS.stat(path, true);
3051 },chmod:function (path, mode, dontFollow) {
3052 var node;
3053 if (typeof path === 'string') {
3054 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3055 node = lookup.node;
3056 } else {
3057 node = path;
3058 }
3059 if (!node.node_ops.setattr) {
3060 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3061 }
3062 node.node_ops.setattr(node, {
3063 mode: (mode & 4095) | (node.mode & ~4095),
3064 timestamp: Date.now()
3065 });
3066 },lchmod:function (path, mode) {
3067 FS.chmod(path, mode, true);
3068 },fchmod:function (fd, mode) {
3069 var stream = FS.getStream(fd);
3070 if (!stream) {
3071 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3072 }
3073 FS.chmod(stream.node, mode);
3074 },chown:function (path, uid, gid, dontFollow) {
3075 var node;
3076 if (typeof path === 'string') {
3077 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3078 node = lookup.node;
3079 } else {
3080 node = path;
3081 }
3082 if (!node.node_ops.setattr) {
3083 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3084 }
3085 node.node_ops.setattr(node, {
3086 timestamp: Date.now()
3087 // we ignore the uid / gid for now
3088 });
3089 },lchown:function (path, uid, gid) {
3090 FS.chown(path, uid, gid, true);
3091 },fchown:function (fd, uid, gid) {
3092 var stream = FS.getStream(fd);
3093 if (!stream) {
3094 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3095 }
3096 FS.chown(stream.node, uid, gid);
3097 },truncate:function (path, len) {
3098 if (len < 0) {
3099 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3100 }
3101 var node;
3102 if (typeof path === 'string') {
3103 var lookup = FS.lookupPath(path, { follow: true });
3104 node = lookup.node;
3105 } else {
3106 node = path;
3107 }
3108 if (!node.node_ops.setattr) {
3109 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3110 }
3111 if (FS.isDir(node.mode)) {
3112 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3113 }
3114 if (!FS.isFile(node.mode)) {
3115 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3116 }
3117 var err = FS.nodePermissions(node, 'w');
3118 if (err) {
3119 throw new FS.ErrnoError(err);
3120 }
3121 node.node_ops.setattr(node, {
3122 size: len,
3123 timestamp: Date.now()
3124 });
3125 },ftruncate:function (fd, len) {
3126 var stream = FS.getStream(fd);
3127 if (!stream) {
3128 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3129 }
3130 if ((stream.flags & 2097155) === 0) {
3131 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3132 }
3133 FS.truncate(stream.node, len);
3134 },utime:function (path, atime, mtime) {
3135 var lookup = FS.lookupPath(path, { follow: true });
3136 var node = lookup.node;
3137 node.node_ops.setattr(node, {
3138 timestamp: Math.max(atime, mtime)
3139 });
3140 },open:function (path, flags, mode, fd_start, fd_end) {
3141 flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
3142 mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
3143 if ((flags & 64)) {
3144 mode = (mode & 4095) | 32768;
3145 } else {
3146 mode = 0;
3147 }
3148 var node;
3149 if (typeof path === 'object') {
3150 node = path;
3151 } else {
3152 path = PATH.normalize(path);
3153 try {
3154 var lookup = FS.lookupPath(path, {
3155 follow: !(flags & 131072)
3156 });
3157 node = lookup.node;
3158 } catch (e) {
3159 // ignore
3160 }
3161 }
3162 // perhaps we need to create the node
3163 if ((flags & 64)) {
3164 if (node) {
3165 // if O_CREAT and O_EXCL are set, error out if the node already exis ts
3166 if ((flags & 128)) {
3167 throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
3168 }
3169 } else {
3170 // node doesn't exist, try to create it
3171 node = FS.mknod(path, mode, 0);
3172 }
3173 }
3174 if (!node) {
3175 throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
3176 }
3177 // can't truncate a device
3178 if (FS.isChrdev(node.mode)) {
3179 flags &= ~512;
3180 }
3181 // check permissions
3182 var err = FS.mayOpen(node, flags);
3183 if (err) {
3184 throw new FS.ErrnoError(err);
3185 }
3186 // do truncation if necessary
3187 if ((flags & 512)) {
3188 FS.truncate(node, 0);
3189 }
3190 // we've already handled these, don't pass down to the underlying vfs
3191 flags &= ~(128 | 512);
3192
3193 // register the stream with the filesystem
3194 var stream = FS.createStream({
3195 node: node,
3196 path: FS.getPath(node), // we want the absolute path to the node
3197 flags: flags,
3198 seekable: true,
3199 position: 0,
3200 stream_ops: node.stream_ops,
3201 // used by the file family libc calls (fopen, fwrite, ferror, etc.)
3202 ungotten: [],
3203 error: false
3204 }, fd_start, fd_end);
3205 // call the new stream's open function
3206 if (stream.stream_ops.open) {
3207 stream.stream_ops.open(stream);
3208 }
3209 if (Module['logReadFiles'] && !(flags & 1)) {
3210 if (!FS.readFiles) FS.readFiles = {};
3211 if (!(path in FS.readFiles)) {
3212 FS.readFiles[path] = 1;
3213 Module['printErr']('read file: ' + path);
3214 }
3215 }
3216 return stream;
3217 },close:function (stream) {
3218 try {
3219 if (stream.stream_ops.close) {
3220 stream.stream_ops.close(stream);
3221 }
3222 } catch (e) {
3223 throw e;
3224 } finally {
3225 FS.closeStream(stream.fd);
3226 }
3227 },llseek:function (stream, offset, whence) {
3228 if (!stream.seekable || !stream.stream_ops.llseek) {
3229 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3230 }
3231 return stream.stream_ops.llseek(stream, offset, whence);
3232 },read:function (stream, buffer, offset, length, position) {
3233 if (length < 0 || position < 0) {
3234 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3235 }
3236 if ((stream.flags & 2097155) === 1) {
3237 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3238 }
3239 if (FS.isDir(stream.node.mode)) {
3240 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3241 }
3242 if (!stream.stream_ops.read) {
3243 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3244 }
3245 var seeking = true;
3246 if (typeof position === 'undefined') {
3247 position = stream.position;
3248 seeking = false;
3249 } else if (!stream.seekable) {
3250 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3251 }
3252 var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, p osition);
3253 if (!seeking) stream.position += bytesRead;
3254 return bytesRead;
3255 },write:function (stream, buffer, offset, length, position, canOwn) {
3256 if (length < 0 || position < 0) {
3257 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3258 }
3259 if ((stream.flags & 2097155) === 0) {
3260 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3261 }
3262 if (FS.isDir(stream.node.mode)) {
3263 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3264 }
3265 if (!stream.stream_ops.write) {
3266 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3267 }
3268 var seeking = true;
3269 if (typeof position === 'undefined') {
3270 position = stream.position;
3271 seeking = false;
3272 } else if (!stream.seekable) {
3273 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3274 }
3275 if (stream.flags & 1024) {
3276 // seek to the end before writing in append mode
3277 FS.llseek(stream, 0, 2);
3278 }
3279 var bytesWritten = stream.stream_ops.write(stream, buffer, offset, lengt h, position, canOwn);
3280 if (!seeking) stream.position += bytesWritten;
3281 return bytesWritten;
3282 },allocate:function (stream, offset, length) {
3283 if (offset < 0 || length <= 0) {
3284 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3285 }
3286 if ((stream.flags & 2097155) === 0) {
3287 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3288 }
3289 if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
3290 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3291 }
3292 if (!stream.stream_ops.allocate) {
3293 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
3294 }
3295 stream.stream_ops.allocate(stream, offset, length);
3296 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
3297 // TODO if PROT is PROT_WRITE, make sure we have write access
3298 if ((stream.flags & 2097155) === 1) {
3299 throw new FS.ErrnoError(ERRNO_CODES.EACCES);
3300 }
3301 if (!stream.stream_ops.mmap) {
3302 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3303 }
3304 return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
3305 },ioctl:function (stream, cmd, arg) {
3306 if (!stream.stream_ops.ioctl) {
3307 throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
3308 }
3309 return stream.stream_ops.ioctl(stream, cmd, arg);
3310 },readFile:function (path, opts) {
3311 opts = opts || {};
3312 opts.flags = opts.flags || 'r';
3313 opts.encoding = opts.encoding || 'binary';
3314 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3315 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3316 }
3317 var ret;
3318 var stream = FS.open(path, opts.flags);
3319 var stat = FS.stat(path);
3320 var length = stat.size;
3321 var buf = new Uint8Array(length);
3322 FS.read(stream, buf, 0, length, 0);
3323 if (opts.encoding === 'utf8') {
3324 ret = '';
3325 var utf8 = new Runtime.UTF8Processor();
3326 for (var i = 0; i < length; i++) {
3327 ret += utf8.processCChar(buf[i]);
3328 }
3329 } else if (opts.encoding === 'binary') {
3330 ret = buf;
3331 }
3332 FS.close(stream);
3333 return ret;
3334 },writeFile:function (path, data, opts) {
3335 opts = opts || {};
3336 opts.flags = opts.flags || 'w';
3337 opts.encoding = opts.encoding || 'utf8';
3338 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3339 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3340 }
3341 var stream = FS.open(path, opts.flags, opts.mode);
3342 if (opts.encoding === 'utf8') {
3343 var utf8 = new Runtime.UTF8Processor();
3344 var buf = new Uint8Array(utf8.processJSString(data));
3345 FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
3346 } else if (opts.encoding === 'binary') {
3347 FS.write(stream, data, 0, data.length, 0, opts.canOwn);
3348 }
3349 FS.close(stream);
3350 },cwd:function () {
3351 return FS.currentPath;
3352 },chdir:function (path) {
3353 var lookup = FS.lookupPath(path, { follow: true });
3354 if (!FS.isDir(lookup.node.mode)) {
3355 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3356 }
3357 var err = FS.nodePermissions(lookup.node, 'x');
3358 if (err) {
3359 throw new FS.ErrnoError(err);
3360 }
3361 FS.currentPath = lookup.path;
3362 },createDefaultDirectories:function () {
3363 FS.mkdir('/tmp');
3364 },createDefaultDevices:function () {
3365 // create /dev
3366 FS.mkdir('/dev');
3367 // setup /dev/null
3368 FS.registerDevice(FS.makedev(1, 3), {
3369 read: function() { return 0; },
3370 write: function() { return 0; }
3371 });
3372 FS.mkdev('/dev/null', FS.makedev(1, 3));
3373 // setup /dev/tty and /dev/tty1
3374 // stderr needs to print output using Module['printErr']
3375 // so we register a second tty just for it.
3376 TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
3377 TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
3378 FS.mkdev('/dev/tty', FS.makedev(5, 0));
3379 FS.mkdev('/dev/tty1', FS.makedev(6, 0));
3380 // we're not going to emulate the actual shm device,
3381 // just create the tmp dirs that reside in it commonly
3382 FS.mkdir('/dev/shm');
3383 FS.mkdir('/dev/shm/tmp');
3384 },createStandardStreams:function () {
3385 // TODO deprecate the old functionality of a single
3386 // input / output callback and that utilizes FS.createDevice
3387 // and instead require a unique set of stream ops
3388
3389 // by default, we symlink the standard streams to the
3390 // default tty devices. however, if the standard streams
3391 // have been overwritten we create a unique device for
3392 // them instead.
3393 if (Module['stdin']) {
3394 FS.createDevice('/dev', 'stdin', Module['stdin']);
3395 } else {
3396 FS.symlink('/dev/tty', '/dev/stdin');
3397 }
3398 if (Module['stdout']) {
3399 FS.createDevice('/dev', 'stdout', null, Module['stdout']);
3400 } else {
3401 FS.symlink('/dev/tty', '/dev/stdout');
3402 }
3403 if (Module['stderr']) {
3404 FS.createDevice('/dev', 'stderr', null, Module['stderr']);
3405 } else {
3406 FS.symlink('/dev/tty1', '/dev/stderr');
3407 }
3408
3409 // open default streams for the stdin, stdout and stderr devices
3410 var stdin = FS.open('/dev/stdin', 'r');
3411 HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
3412 assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
3413
3414 var stdout = FS.open('/dev/stdout', 'w');
3415 HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
3416 assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')') ;
3417
3418 var stderr = FS.open('/dev/stderr', 'w');
3419 HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
3420 assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')') ;
3421 },ensureErrnoError:function () {
3422 if (FS.ErrnoError) return;
3423 FS.ErrnoError = function ErrnoError(errno) {
3424 this.errno = errno;
3425 for (var key in ERRNO_CODES) {
3426 if (ERRNO_CODES[key] === errno) {
3427 this.code = key;
3428 break;
3429 }
3430 }
3431 this.message = ERRNO_MESSAGES[errno];
3432 };
3433 FS.ErrnoError.prototype = new Error();
3434 FS.ErrnoError.prototype.constructor = FS.ErrnoError;
3435 // Some errors may happen quite a bit, to avoid overhead we reuse them ( and suffer a lack of stack info)
3436 [ERRNO_CODES.ENOENT].forEach(function(code) {
3437 FS.genericErrors[code] = new FS.ErrnoError(code);
3438 FS.genericErrors[code].stack = '<generic error, no stack>';
3439 });
3440 },staticInit:function () {
3441 FS.ensureErrnoError();
3442
3443 FS.nameTable = new Array(4096);
3444
3445 FS.mount(MEMFS, {}, '/');
3446
3447 FS.createDefaultDirectories();
3448 FS.createDefaultDevices();
3449 },init:function (input, output, error) {
3450 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)');
3451 FS.init.initialized = true;
3452
3453 FS.ensureErrnoError();
3454
3455 // Allow Module.stdin etc. to provide defaults, if none explicitly passe d to us here
3456 Module['stdin'] = input || Module['stdin'];
3457 Module['stdout'] = output || Module['stdout'];
3458 Module['stderr'] = error || Module['stderr'];
3459
3460 FS.createStandardStreams();
3461 },quit:function () {
3462 FS.init.initialized = false;
3463 for (var i = 0; i < FS.streams.length; i++) {
3464 var stream = FS.streams[i];
3465 if (!stream) {
3466 continue;
3467 }
3468 FS.close(stream);
3469 }
3470 },getMode:function (canRead, canWrite) {
3471 var mode = 0;
3472 if (canRead) mode |= 292 | 73;
3473 if (canWrite) mode |= 146;
3474 return mode;
3475 },joinPath:function (parts, forceRelative) {
3476 var path = PATH.join.apply(null, parts);
3477 if (forceRelative && path[0] == '/') path = path.substr(1);
3478 return path;
3479 },absolutePath:function (relative, base) {
3480 return PATH.resolve(base, relative);
3481 },standardizePath:function (path) {
3482 return PATH.normalize(path);
3483 },findObject:function (path, dontResolveLastLink) {
3484 var ret = FS.analyzePath(path, dontResolveLastLink);
3485 if (ret.exists) {
3486 return ret.object;
3487 } else {
3488 ___setErrNo(ret.error);
3489 return null;
3490 }
3491 },analyzePath:function (path, dontResolveLastLink) {
3492 // operate from within the context of the symlink's target
3493 try {
3494 var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3495 path = lookup.path;
3496 } catch (e) {
3497 }
3498 var ret = {
3499 isRoot: false, exists: false, error: 0, name: null, path: null, object : null,
3500 parentExists: false, parentPath: null, parentObject: null
3501 };
3502 try {
3503 var lookup = FS.lookupPath(path, { parent: true });
3504 ret.parentExists = true;
3505 ret.parentPath = lookup.path;
3506 ret.parentObject = lookup.node;
3507 ret.name = PATH.basename(path);
3508 lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3509 ret.exists = true;
3510 ret.path = lookup.path;
3511 ret.object = lookup.node;
3512 ret.name = lookup.node.name;
3513 ret.isRoot = lookup.path === '/';
3514 } catch (e) {
3515 ret.error = e.errno;
3516 };
3517 return ret;
3518 },createFolder:function (parent, name, canRead, canWrite) {
3519 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3520 var mode = FS.getMode(canRead, canWrite);
3521 return FS.mkdir(path, mode);
3522 },createPath:function (parent, path, canRead, canWrite) {
3523 parent = typeof parent === 'string' ? parent : FS.getPath(parent);
3524 var parts = path.split('/').reverse();
3525 while (parts.length) {
3526 var part = parts.pop();
3527 if (!part) continue;
3528 var current = PATH.join2(parent, part);
3529 try {
3530 FS.mkdir(current);
3531 } catch (e) {
3532 // ignore EEXIST
3533 }
3534 parent = current;
3535 }
3536 return current;
3537 },createFile:function (parent, name, properties, canRead, canWrite) {
3538 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3539 var mode = FS.getMode(canRead, canWrite);
3540 return FS.create(path, mode);
3541 },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
3542 var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.ge tPath(parent), name) : parent;
3543 var mode = FS.getMode(canRead, canWrite);
3544 var node = FS.create(path, mode);
3545 if (data) {
3546 if (typeof data === 'string') {
3547 var arr = new Array(data.length);
3548 for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charC odeAt(i);
3549 data = arr;
3550 }
3551 // make sure we can write to the file
3552 FS.chmod(node, mode | 146);
3553 var stream = FS.open(node, 'w');
3554 FS.write(stream, data, 0, data.length, 0, canOwn);
3555 FS.close(stream);
3556 FS.chmod(node, mode);
3557 }
3558 return node;
3559 },createDevice:function (parent, name, input, output) {
3560 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3561 var mode = FS.getMode(!!input, !!output);
3562 if (!FS.createDevice.major) FS.createDevice.major = 64;
3563 var dev = FS.makedev(FS.createDevice.major++, 0);
3564 // Create a fake device that a set of stream ops to emulate
3565 // the old behavior.
3566 FS.registerDevice(dev, {
3567 open: function(stream) {
3568 stream.seekable = false;
3569 },
3570 close: function(stream) {
3571 // flush any pending line data
3572 if (output && output.buffer && output.buffer.length) {
3573 output(10);
3574 }
3575 },
3576 read: function(stream, buffer, offset, length, pos /* ignored */) {
3577 var bytesRead = 0;
3578 for (var i = 0; i < length; i++) {
3579 var result;
3580 try {
3581 result = input();
3582 } catch (e) {
3583 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3584 }
3585 if (result === undefined && bytesRead === 0) {
3586 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
3587 }
3588 if (result === null || result === undefined) break;
3589 bytesRead++;
3590 buffer[offset+i] = result;
3591 }
3592 if (bytesRead) {
3593 stream.node.timestamp = Date.now();
3594 }
3595 return bytesRead;
3596 },
3597 write: function(stream, buffer, offset, length, pos) {
3598 for (var i = 0; i < length; i++) {
3599 try {
3600 output(buffer[offset+i]);
3601 } catch (e) {
3602 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3603 }
3604 }
3605 if (length) {
3606 stream.node.timestamp = Date.now();
3607 }
3608 return i;
3609 }
3610 });
3611 return FS.mkdev(path, mode, dev);
3612 },createLink:function (parent, name, target, canRead, canWrite) {
3613 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3614 return FS.symlink(target, path);
3615 },forceLoadFile:function (obj) {
3616 if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return tru e;
3617 var success = true;
3618 if (typeof XMLHttpRequest !== 'undefined') {
3619 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.");
3620 } else if (Module['read']) {
3621 // Command-line.
3622 try {
3623 // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
3624 // read() will try to parse UTF8.
3625 obj.contents = intArrayFromString(Module['read'](obj.url), true);
3626 } catch (e) {
3627 success = false;
3628 }
3629 } else {
3630 throw new Error('Cannot load without read() or XMLHttpRequest.');
3631 }
3632 if (!success) ___setErrNo(ERRNO_CODES.EIO);
3633 return success;
3634 },createLazyFile:function (parent, name, url, canRead, canWrite) {
3635 // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
3636 function LazyUint8Array() {
3637 this.lengthKnown = false;
3638 this.chunks = []; // Loaded chunks. Index is the chunk number
3639 }
3640 LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
3641 if (idx > this.length-1 || idx < 0) {
3642 return undefined;
3643 }
3644 var chunkOffset = idx % this.chunkSize;
3645 var chunkNum = Math.floor(idx / this.chunkSize);
3646 return this.getter(chunkNum)[chunkOffset];
3647 }
3648 LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setData Getter(getter) {
3649 this.getter = getter;
3650 }
3651 LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLeng th() {
3652 // Find length
3653 var xhr = new XMLHttpRequest();
3654 xhr.open('HEAD', url, false);
3655 xhr.send(null);
3656 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3657 var datalength = Number(xhr.getResponseHeader("Content-length"));
3658 var header;
3659 var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges" )) && header === "bytes";
3660 var chunkSize = 1024*1024; // Chunk size in bytes
3661
3662 if (!hasByteServing) chunkSize = datalength;
3663
3664 // Function to get a range from the remote URL.
3665 var doXHR = (function(from, to) {
3666 if (from > to) throw new Error("invalid range (" + from + ", " + t o + ") or no bytes requested!");
3667 if (to > datalength-1) throw new Error("only " + datalength + " by tes available! programmer error!");
3668
3669 // TODO: Use mozResponseArrayBuffer, responseStream, etc. if avail able.
3670 var xhr = new XMLHttpRequest();
3671 xhr.open('GET', url, false);
3672 if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes =" + from + "-" + to);
3673
3674 // Some hints to the browser that we want binary data.
3675 if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuf fer';
3676 if (xhr.overrideMimeType) {
3677 xhr.overrideMimeType('text/plain; charset=x-user-defined');
3678 }
3679
3680 xhr.send(null);
3681 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3682 if (xhr.response !== undefined) {
3683 return new Uint8Array(xhr.response || []);
3684 } else {
3685 return intArrayFromString(xhr.responseText || '', true);
3686 }
3687 });
3688 var lazyArray = this;
3689 lazyArray.setDataGetter(function(chunkNum) {
3690 var start = chunkNum * chunkSize;
3691 var end = (chunkNum+1) * chunkSize - 1; // including this byte
3692 end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
3693 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
3694 lazyArray.chunks[chunkNum] = doXHR(start, end);
3695 }
3696 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
3697 return lazyArray.chunks[chunkNum];
3698 });
3699
3700 this._length = datalength;
3701 this._chunkSize = chunkSize;
3702 this.lengthKnown = true;
3703 }
3704 if (typeof XMLHttpRequest !== 'undefined') {
3705 if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs o utside webworkers in modern browsers. Use --embed-file or --preload-file in emcc ';
3706 var lazyArray = new LazyUint8Array();
3707 Object.defineProperty(lazyArray, "length", {
3708 get: function() {
3709 if(!this.lengthKnown) {
3710 this.cacheLength();
3711 }
3712 return this._length;
3713 }
3714 });
3715 Object.defineProperty(lazyArray, "chunkSize", {
3716 get: function() {
3717 if(!this.lengthKnown) {
3718 this.cacheLength();
3719 }
3720 return this._chunkSize;
3721 }
3722 });
3723
3724 var properties = { isDevice: false, contents: lazyArray };
3725 } else {
3726 var properties = { isDevice: false, url: url };
3727 }
3728
3729 var node = FS.createFile(parent, name, properties, canRead, canWrite);
3730 // This is a total hack, but I want to get this lazy file code out of th e
3731 // core of MEMFS. If we want to keep this lazy file concept I feel it sh ould
3732 // be its own thin LAZYFS proxying calls to MEMFS.
3733 if (properties.contents) {
3734 node.contents = properties.contents;
3735 } else if (properties.url) {
3736 node.contents = null;
3737 node.url = properties.url;
3738 }
3739 // override each stream op with one that tries to force load the lazy fi le first
3740 var stream_ops = {};
3741 var keys = Object.keys(node.stream_ops);
3742 keys.forEach(function(key) {
3743 var fn = node.stream_ops[key];
3744 stream_ops[key] = function forceLoadLazyFile() {
3745 if (!FS.forceLoadFile(node)) {
3746 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3747 }
3748 return fn.apply(null, arguments);
3749 };
3750 });
3751 // use a custom read function
3752 stream_ops.read = function stream_ops_read(stream, buffer, offset, lengt h, position) {
3753 if (!FS.forceLoadFile(node)) {
3754 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3755 }
3756 var contents = stream.node.contents;
3757 if (position >= contents.length)
3758 return 0;
3759 var size = Math.min(contents.length - position, length);
3760 assert(size >= 0);
3761 if (contents.slice) { // normal array
3762 for (var i = 0; i < size; i++) {
3763 buffer[offset + i] = contents[position + i];
3764 }
3765 } else {
3766 for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
3767 buffer[offset + i] = contents.get(position + i);
3768 }
3769 }
3770 return size;
3771 };
3772 node.stream_ops = stream_ops;
3773 return node;
3774 },createPreloadedFile:function (parent, name, url, canRead, canWrite, onlo ad, onerror, dontCreateFile, canOwn) {
3775 Browser.init();
3776 // TODO we should allow people to just pass in a complete filename inste ad
3777 // of parent and name being that we just join them anyways
3778 var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
3779 function processData(byteArray) {
3780 function finish(byteArray) {
3781 if (!dontCreateFile) {
3782 FS.createDataFile(parent, name, byteArray, canRead, canWrite, canO wn);
3783 }
3784 if (onload) onload();
3785 removeRunDependency('cp ' + fullname);
3786 }
3787 var handled = false;
3788 Module['preloadPlugins'].forEach(function(plugin) {
3789 if (handled) return;
3790 if (plugin['canHandle'](fullname)) {
3791 plugin['handle'](byteArray, fullname, finish, function() {
3792 if (onerror) onerror();
3793 removeRunDependency('cp ' + fullname);
3794 });
3795 handled = true;
3796 }
3797 });
3798 if (!handled) finish(byteArray);
3799 }
3800 addRunDependency('cp ' + fullname);
3801 if (typeof url == 'string') {
3802 Browser.asyncLoad(url, function(byteArray) {
3803 processData(byteArray);
3804 }, onerror);
3805 } else {
3806 processData(url);
3807 }
3808 },indexedDB:function () {
3809 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
3810 },DB_NAME:function () {
3811 return 'EM_FS_' + window.location.pathname;
3812 },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, o nload, onerror) {
3813 onload = onload || function(){};
3814 onerror = onerror || function(){};
3815 var indexedDB = FS.indexedDB();
3816 try {
3817 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
3818 } catch (e) {
3819 return onerror(e);
3820 }
3821 openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
3822 console.log('creating db');
3823 var db = openRequest.result;
3824 db.createObjectStore(FS.DB_STORE_NAME);
3825 };
3826 openRequest.onsuccess = function openRequest_onsuccess() {
3827 var db = openRequest.result;
3828 var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
3829 var files = transaction.objectStore(FS.DB_STORE_NAME);
3830 var ok = 0, fail = 0, total = paths.length;
3831 function finish() {
3832 if (fail == 0) onload(); else onerror();
3833 }
3834 paths.forEach(function(path) {
3835 var putRequest = files.put(FS.analyzePath(path).object.contents, pat h);
3836 putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (o k + fail == total) finish() };
3837 putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
3838 });
3839 transaction.onerror = onerror;
3840 };
3841 openRequest.onerror = onerror;
3842 },loadFilesFromDB:function (paths, onload, onerror) {
3843 onload = onload || function(){};
3844 onerror = onerror || function(){};
3845 var indexedDB = FS.indexedDB();
3846 try {
3847 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
3848 } catch (e) {
3849 return onerror(e);
3850 }
3851 openRequest.onupgradeneeded = onerror; // no database to load from
3852 openRequest.onsuccess = function openRequest_onsuccess() {
3853 var db = openRequest.result;
3854 try {
3855 var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
3856 } catch(e) {
3857 onerror(e);
3858 return;
3859 }
3860 var files = transaction.objectStore(FS.DB_STORE_NAME);
3861 var ok = 0, fail = 0, total = paths.length;
3862 function finish() {
3863 if (fail == 0) onload(); else onerror();
3864 }
3865 paths.forEach(function(path) {
3866 var getRequest = files.get(path);
3867 getRequest.onsuccess = function getRequest_onsuccess() {
3868 if (FS.analyzePath(path).exists) {
3869 FS.unlink(path);
3870 }
3871 FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequ est.result, true, true, true);
3872 ok++;
3873 if (ok + fail == total) finish();
3874 };
3875 getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
3876 });
3877 transaction.onerror = onerror;
3878 };
3879 openRequest.onerror = onerror;
3880 }};
3881
3882
3883
3884
3885 function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
3886 return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
3887 },createSocket:function (family, type, protocol) {
3888 var streaming = type == 1;
3889 if (protocol) {
3890 assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
3891 }
3892
3893 // create our internal socket structure
3894 var sock = {
3895 family: family,
3896 type: type,
3897 protocol: protocol,
3898 server: null,
3899 peers: {},
3900 pending: [],
3901 recv_queue: [],
3902 sock_ops: SOCKFS.websocket_sock_ops
3903 };
3904
3905 // create the filesystem node to store the socket structure
3906 var name = SOCKFS.nextname();
3907 var node = FS.createNode(SOCKFS.root, name, 49152, 0);
3908 node.sock = sock;
3909
3910 // and the wrapping stream that enables library functions such
3911 // as read and write to indirectly interact with the socket
3912 var stream = FS.createStream({
3913 path: name,
3914 node: node,
3915 flags: FS.modeStringToFlags('r+'),
3916 seekable: false,
3917 stream_ops: SOCKFS.stream_ops
3918 });
3919
3920 // map the new stream to the socket structure (sockets have a 1:1
3921 // relationship with a stream)
3922 sock.stream = stream;
3923
3924 return sock;
3925 },getSocket:function (fd) {
3926 var stream = FS.getStream(fd);
3927 if (!stream || !FS.isSocket(stream.node.mode)) {
3928 return null;
3929 }
3930 return stream.node.sock;
3931 },stream_ops:{poll:function (stream) {
3932 var sock = stream.node.sock;
3933 return sock.sock_ops.poll(sock);
3934 },ioctl:function (stream, request, varargs) {
3935 var sock = stream.node.sock;
3936 return sock.sock_ops.ioctl(sock, request, varargs);
3937 },read:function (stream, buffer, offset, length, position /* ignored */) {
3938 var sock = stream.node.sock;
3939 var msg = sock.sock_ops.recvmsg(sock, length);
3940 if (!msg) {
3941 // socket is closed
3942 return 0;
3943 }
3944 buffer.set(msg.buffer, offset);
3945 return msg.buffer.length;
3946 },write:function (stream, buffer, offset, length, position /* ignored */ ) {
3947 var sock = stream.node.sock;
3948 return sock.sock_ops.sendmsg(sock, buffer, offset, length);
3949 },close:function (stream) {
3950 var sock = stream.node.sock;
3951 sock.sock_ops.close(sock);
3952 }},nextname:function () {
3953 if (!SOCKFS.nextname.current) {
3954 SOCKFS.nextname.current = 0;
3955 }
3956 return 'socket[' + (SOCKFS.nextname.current++) + ']';
3957 },websocket_sock_ops:{createPeer:function (sock, addr, port) {
3958 var ws;
3959
3960 if (typeof addr === 'object') {
3961 ws = addr;
3962 addr = null;
3963 port = null;
3964 }
3965
3966 if (ws) {
3967 // for sockets that've already connected (e.g. we're the server)
3968 // we can inspect the _socket property for the address
3969 if (ws._socket) {
3970 addr = ws._socket.remoteAddress;
3971 port = ws._socket.remotePort;
3972 }
3973 // if we're just now initializing a connection to the remote,
3974 // inspect the url property
3975 else {
3976 var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
3977 if (!result) {
3978 throw new Error('WebSocket URL must be in the format ws(s)://add ress:port');
3979 }
3980 addr = result[1];
3981 port = parseInt(result[2], 10);
3982 }
3983 } else {
3984 // create the actual websocket object and connect
3985 try {
3986 // runtimeConfig gets set to true if WebSocket runtime configurati on is available.
3987 var runtimeConfig = (Module['websocket'] && ('object' === typeof M odule['websocket']));
3988
3989 // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#'
3990 // comments without checking context, so we'd end up with ws:#, th e replace swaps the "#" for "//" again.
3991 var url = 'ws:#'.replace('#', '//');
3992
3993 if (runtimeConfig) {
3994 if ('string' === typeof Module['websocket']['url']) {
3995 url = Module['websocket']['url']; // Fetch runtime WebSocket U RL config.
3996 }
3997 }
3998
3999 if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
4000 url = url + addr + ':' + port;
4001 }
4002
4003 // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
4004 var subProtocols = 'binary'; // The default value is 'binary'
4005
4006 if (runtimeConfig) {
4007 if ('string' === typeof Module['websocket']['subprotocol']) {
4008 subProtocols = Module['websocket']['subprotocol']; // Fetch ru ntime WebSocket subprotocol config.
4009 }
4010 }
4011
4012 // The regex trims the string (removes spaces at the beginning and end, then splits the string by
4013 // <any space>,<any space> into an Array. Whitespace removal is im portant for Websockify and ws.
4014 subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
4015
4016 // The node ws library API for specifying optional subprotocol is slightly different than the browser's.
4017 var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toStrin g()} : subProtocols;
4018
4019 // If node we use the ws library.
4020 var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebS ocket'];
4021 ws = new WebSocket(url, opts);
4022 ws.binaryType = 'arraybuffer';
4023 } catch (e) {
4024 throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
4025 }
4026 }
4027
4028
4029 var peer = {
4030 addr: addr,
4031 port: port,
4032 socket: ws,
4033 dgram_send_queue: []
4034 };
4035
4036 SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4037 SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
4038
4039 // if this is a bound dgram socket, send the port number first to allo w
4040 // us to override the ephemeral port reported to us by remotePort on t he
4041 // remote end.
4042 if (sock.type === 2 && typeof sock.sport !== 'undefined') {
4043 peer.dgram_send_queue.push(new Uint8Array([
4044 255, 255, 255, 255,
4045 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.cha rCodeAt(0),
4046 ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
4047 ]));
4048 }
4049
4050 return peer;
4051 },getPeer:function (sock, addr, port) {
4052 return sock.peers[addr + ':' + port];
4053 },addPeer:function (sock, peer) {
4054 sock.peers[peer.addr + ':' + peer.port] = peer;
4055 },removePeer:function (sock, peer) {
4056 delete sock.peers[peer.addr + ':' + peer.port];
4057 },handlePeerEvents:function (sock, peer) {
4058 var first = true;
4059
4060 var handleOpen = function () {
4061 try {
4062 var queued = peer.dgram_send_queue.shift();
4063 while (queued) {
4064 peer.socket.send(queued);
4065 queued = peer.dgram_send_queue.shift();
4066 }
4067 } catch (e) {
4068 // not much we can do here in the way of proper error handling as we've already
4069 // lied and said this data was sent. shut it down.
4070 peer.socket.close();
4071 }
4072 };
4073
4074 function handleMessage(data) {
4075 assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer
4076 data = new Uint8Array(data); // make a typed array view on the arra y buffer
4077
4078
4079 // if this is the port message, override the peer's port with it
4080 var wasfirst = first;
4081 first = false;
4082 if (wasfirst &&
4083 data.length === 10 &&
4084 data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
4085 data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) & & data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
4086 // update the peer's port and it's key in the peer map
4087 var newport = ((data[8] << 8) | data[9]);
4088 SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4089 peer.port = newport;
4090 SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4091 return;
4092 }
4093
4094 sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
4095 };
4096
4097 if (ENVIRONMENT_IS_NODE) {
4098 peer.socket.on('open', handleOpen);
4099 peer.socket.on('message', function(data, flags) {
4100 if (!flags.binary) {
4101 return;
4102 }
4103 handleMessage((new Uint8Array(data)).buffer); // copy from node B uffer -> ArrayBuffer
4104 });
4105 peer.socket.on('error', function() {
4106 // don't throw
4107 });
4108 } else {
4109 peer.socket.onopen = handleOpen;
4110 peer.socket.onmessage = function peer_socket_onmessage(event) {
4111 handleMessage(event.data);
4112 };
4113 }
4114 },poll:function (sock) {
4115 if (sock.type === 1 && sock.server) {
4116 // listen sockets should only say they're available for reading
4117 // if there are pending clients.
4118 return sock.pending.length ? (64 | 1) : 0;
4119 }
4120
4121 var mask = 0;
4122 var dest = sock.type === 1 ? // we only care about the socket state f or connection-based sockets
4123 SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
4124 null;
4125
4126 if (sock.recv_queue.length ||
4127 !dest || // connection-less sockets are always ready to read
4128 (dest && dest.socket.readyState === dest.socket.CLOSING) ||
4129 (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed
4130 mask |= (64 | 1);
4131 }
4132
4133 if (!dest || // connection-less sockets are always ready to write
4134 (dest && dest.socket.readyState === dest.socket.OPEN)) {
4135 mask |= 4;
4136 }
4137
4138 if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
4139 (dest && dest.socket.readyState === dest.socket.CLOSED)) {
4140 mask |= 16;
4141 }
4142
4143 return mask;
4144 },ioctl:function (sock, request, arg) {
4145 switch (request) {
4146 case 21531:
4147 var bytes = 0;
4148 if (sock.recv_queue.length) {
4149 bytes = sock.recv_queue[0].data.length;
4150 }
4151 HEAP32[((arg)>>2)]=bytes;
4152 return 0;
4153 default:
4154 return ERRNO_CODES.EINVAL;
4155 }
4156 },close:function (sock) {
4157 // if we've spawned a listen server, close it
4158 if (sock.server) {
4159 try {
4160 sock.server.close();
4161 } catch (e) {
4162 }
4163 sock.server = null;
4164 }
4165 // close any peer connections
4166 var peers = Object.keys(sock.peers);
4167 for (var i = 0; i < peers.length; i++) {
4168 var peer = sock.peers[peers[i]];
4169 try {
4170 peer.socket.close();
4171 } catch (e) {
4172 }
4173 SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4174 }
4175 return 0;
4176 },bind:function (sock, addr, port) {
4177 if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefi ned') {
4178 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound
4179 }
4180 sock.saddr = addr;
4181 sock.sport = port || _mkport();
4182 // in order to emulate dgram sockets, we need to launch a listen serve r when
4183 // binding on a connection-less socket
4184 // note: this is only required on the server side
4185 if (sock.type === 2) {
4186 // close the existing server if it exists
4187 if (sock.server) {
4188 sock.server.close();
4189 sock.server = null;
4190 }
4191 // swallow error operation not supported error that occurs when bind ing in the
4192 // browser where this isn't supported
4193 try {
4194 sock.sock_ops.listen(sock, 0);
4195 } catch (e) {
4196 if (!(e instanceof FS.ErrnoError)) throw e;
4197 if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
4198 }
4199 }
4200 },connect:function (sock, addr, port) {
4201 if (sock.server) {
4202 throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
4203 }
4204
4205 // TODO autobind
4206 // if (!sock.addr && sock.type == 2) {
4207 // }
4208
4209 // early out if we're already connected / in the middle of connecting
4210 if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefi ned') {
4211 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock. dport);
4212 if (dest) {
4213 if (dest.socket.readyState === dest.socket.CONNECTING) {
4214 throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
4215 } else {
4216 throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
4217 }
4218 }
4219 }
4220
4221 // add the socket to our peer list and set our
4222 // destination address / port to match
4223 var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4224 sock.daddr = peer.addr;
4225 sock.dport = peer.port;
4226
4227 // always "fail" in non-blocking mode
4228 throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
4229 },listen:function (sock, backlog) {
4230 if (!ENVIRONMENT_IS_NODE) {
4231 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
4232 }
4233 if (sock.server) {
4234 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening
4235 }
4236 var WebSocketServer = require('ws').Server;
4237 var host = sock.saddr;
4238 sock.server = new WebSocketServer({
4239 host: host,
4240 port: sock.sport
4241 // TODO support backlog
4242 });
4243
4244 sock.server.on('connection', function(ws) {
4245 if (sock.type === 1) {
4246 var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.pro tocol);
4247
4248 // create a peer on the new socket
4249 var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
4250 newsock.daddr = peer.addr;
4251 newsock.dport = peer.port;
4252
4253 // push to queue for accept to pick up
4254 sock.pending.push(newsock);
4255 } else {
4256 // create a peer on the listen socket so calling sendto
4257 // with the listen socket and an address will resolve
4258 // to the correct client
4259 SOCKFS.websocket_sock_ops.createPeer(sock, ws);
4260 }
4261 });
4262 sock.server.on('closed', function() {
4263 sock.server = null;
4264 });
4265 sock.server.on('error', function() {
4266 // don't throw
4267 });
4268 },accept:function (listensock) {
4269 if (!listensock.server) {
4270 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4271 }
4272 var newsock = listensock.pending.shift();
4273 newsock.stream.flags = listensock.stream.flags;
4274 return newsock;
4275 },getname:function (sock, peer) {
4276 var addr, port;
4277 if (peer) {
4278 if (sock.daddr === undefined || sock.dport === undefined) {
4279 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4280 }
4281 addr = sock.daddr;
4282 port = sock.dport;
4283 } else {
4284 // TODO saddr and sport will be set for bind()'d UDP sockets, but wh at
4285 // should we be returning for TCP sockets that've been connect()'d?
4286 addr = sock.saddr || 0;
4287 port = sock.sport || 0;
4288 }
4289 return { addr: addr, port: port };
4290 },sendmsg:function (sock, buffer, offset, length, addr, port) {
4291 if (sock.type === 2) {
4292 // connection-less sockets will honor the message address,
4293 // and otherwise fall back to the bound destination address
4294 if (addr === undefined || port === undefined) {
4295 addr = sock.daddr;
4296 port = sock.dport;
4297 }
4298 // if there was no address to fall back to, error out
4299 if (addr === undefined || port === undefined) {
4300 throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
4301 }
4302 } else {
4303 // connection-based sockets will only use the bound
4304 addr = sock.daddr;
4305 port = sock.dport;
4306 }
4307
4308 // find the peer for the destination address
4309 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
4310
4311 // early out if not connected with a connection-based socket
4312 if (sock.type === 1) {
4313 if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest. socket.readyState === dest.socket.CLOSED) {
4314 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4315 } else if (dest.socket.readyState === dest.socket.CONNECTING) {
4316 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4317 }
4318 }
4319
4320 // create a copy of the incoming data to send, as the WebSocket API
4321 // doesn't work entirely with an ArrayBufferView, it'll just send
4322 // the entire underlying buffer
4323 var data;
4324 if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
4325 data = buffer.slice(offset, offset + length);
4326 } else { // ArrayBufferView
4327 data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOf fset + offset + length);
4328 }
4329
4330 // if we're emulating a connection-less dgram socket and don't have
4331 // a cached connection, queue the buffer to send upon connect and
4332 // lie, saying the data was sent now.
4333 if (sock.type === 2) {
4334 if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
4335 // if we're not connected, open a new connection
4336 if (!dest || dest.socket.readyState === dest.socket.CLOSING || des t.socket.readyState === dest.socket.CLOSED) {
4337 dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4338 }
4339 dest.dgram_send_queue.push(data);
4340 return length;
4341 }
4342 }
4343
4344 try {
4345 // send the actual data
4346 dest.socket.send(data);
4347 return length;
4348 } catch (e) {
4349 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4350 }
4351 },recvmsg:function (sock, length) {
4352 // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
4353 if (sock.type === 1 && sock.server) {
4354 // tcp servers should not be recv()'ing on the listen socket
4355 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4356 }
4357
4358 var queued = sock.recv_queue.shift();
4359 if (!queued) {
4360 if (sock.type === 1) {
4361 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, soc k.dport);
4362
4363 if (!dest) {
4364 // if we have a destination address but are not connected, error out
4365 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4366 }
4367 else if (dest.socket.readyState === dest.socket.CLOSING || dest.so cket.readyState === dest.socket.CLOSED) {
4368 // return null if the socket has closed
4369 return null;
4370 }
4371 else {
4372 // else, our socket is in a valid state but truly has nothing av ailable
4373 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4374 }
4375 } else {
4376 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4377 }
4378 }
4379
4380 // queued.data will be an ArrayBuffer if it's unadulterated, but if it 's
4381 // requeued TCP data it'll be an ArrayBufferView
4382 var queuedLength = queued.data.byteLength || queued.data.length;
4383 var queuedOffset = queued.data.byteOffset || 0;
4384 var queuedBuffer = queued.data.buffer || queued.data;
4385 var bytesRead = Math.min(length, queuedLength);
4386 var res = {
4387 buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
4388 addr: queued.addr,
4389 port: queued.port
4390 };
4391
4392
4393 // push back any unread data for TCP connections
4394 if (sock.type === 1 && bytesRead < queuedLength) {
4395 var bytesRemaining = queuedLength - bytesRead;
4396 queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
4397 sock.recv_queue.unshift(queued);
4398 }
4399
4400 return res;
4401 }}};function _send(fd, buf, len, flags) {
4402 var sock = SOCKFS.getSocket(fd);
4403 if (!sock) {
4404 ___setErrNo(ERRNO_CODES.EBADF);
4405 return -1;
4406 }
4407 // TODO honor flags
4408 return _write(fd, buf, len);
4409 }
4410
4411 function _pwrite(fildes, buf, nbyte, offset) {
4412 // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset) ;
4413 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4414 var stream = FS.getStream(fildes);
4415 if (!stream) {
4416 ___setErrNo(ERRNO_CODES.EBADF);
4417 return -1;
4418 }
4419 try {
4420 var slab = HEAP8;
4421 return FS.write(stream, slab, buf, nbyte, offset);
4422 } catch (e) {
4423 FS.handleFSError(e);
4424 return -1;
4425 }
4426 }function _write(fildes, buf, nbyte) {
4427 // ssize_t write(int fildes, const void *buf, size_t nbyte);
4428 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4429 var stream = FS.getStream(fildes);
4430 if (!stream) {
4431 ___setErrNo(ERRNO_CODES.EBADF);
4432 return -1;
4433 }
4434
4435
4436 try {
4437 var slab = HEAP8;
4438 return FS.write(stream, slab, buf, nbyte);
4439 } catch (e) {
4440 FS.handleFSError(e);
4441 return -1;
4442 }
4443 }
4444
4445 function _fileno(stream) {
4446 // int fileno(FILE *stream);
4447 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
4448 stream = FS.getStreamFromPtr(stream);
4449 if (!stream) return -1;
4450 return stream.fd;
4451 }function _fwrite(ptr, size, nitems, stream) {
4452 // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FIL E *restrict stream);
4453 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
4454 var bytesToWrite = nitems * size;
4455 if (bytesToWrite == 0) return 0;
4456 var fd = _fileno(stream);
4457 var bytesWritten = _write(fd, ptr, bytesToWrite);
4458 if (bytesWritten == -1) {
4459 var streamObj = FS.getStreamFromPtr(stream);
4460 if (streamObj) streamObj.error = true;
4461 return 0;
4462 } else {
4463 return Math.floor(bytesWritten / size);
4464 }
4465 }
4466
4467
4468
4469 Module["_strlen"] = _strlen;
4470
4471 function __reallyNegative(x) {
4472 return x < 0 || (x === 0 && (1/x) === -Infinity);
4473 }function __formatString(format, varargs) {
4474 var textIndex = format;
4475 var argIndex = 0;
4476 function getNextArg(type) {
4477 // NOTE: Explicitly ignoring type safety. Otherwise this fails:
4478 // int x = 4; printf("%c\n", (char)x);
4479 var ret;
4480 if (type === 'double') {
4481 ret = HEAPF64[(((varargs)+(argIndex))>>3)];
4482 } else if (type == 'i64') {
4483 ret = [HEAP32[(((varargs)+(argIndex))>>2)],
4484 HEAP32[(((varargs)+(argIndex+4))>>2)]];
4485
4486 } else {
4487 type = 'i32'; // varargs are always i32, i64, or double
4488 ret = HEAP32[(((varargs)+(argIndex))>>2)];
4489 }
4490 argIndex += Runtime.getNativeFieldSize(type);
4491 return ret;
4492 }
4493
4494 var ret = [];
4495 var curr, next, currArg;
4496 while(1) {
4497 var startTextIndex = textIndex;
4498 curr = HEAP8[(textIndex)];
4499 if (curr === 0) break;
4500 next = HEAP8[((textIndex+1)|0)];
4501 if (curr == 37) {
4502 // Handle flags.
4503 var flagAlwaysSigned = false;
4504 var flagLeftAlign = false;
4505 var flagAlternative = false;
4506 var flagZeroPad = false;
4507 var flagPadSign = false;
4508 flagsLoop: while (1) {
4509 switch (next) {
4510 case 43:
4511 flagAlwaysSigned = true;
4512 break;
4513 case 45:
4514 flagLeftAlign = true;
4515 break;
4516 case 35:
4517 flagAlternative = true;
4518 break;
4519 case 48:
4520 if (flagZeroPad) {
4521 break flagsLoop;
4522 } else {
4523 flagZeroPad = true;
4524 break;
4525 }
4526 case 32:
4527 flagPadSign = true;
4528 break;
4529 default:
4530 break flagsLoop;
4531 }
4532 textIndex++;
4533 next = HEAP8[((textIndex+1)|0)];
4534 }
4535
4536 // Handle width.
4537 var width = 0;
4538 if (next == 42) {
4539 width = getNextArg('i32');
4540 textIndex++;
4541 next = HEAP8[((textIndex+1)|0)];
4542 } else {
4543 while (next >= 48 && next <= 57) {
4544 width = width * 10 + (next - 48);
4545 textIndex++;
4546 next = HEAP8[((textIndex+1)|0)];
4547 }
4548 }
4549
4550 // Handle precision.
4551 var precisionSet = false, precision = -1;
4552 if (next == 46) {
4553 precision = 0;
4554 precisionSet = true;
4555 textIndex++;
4556 next = HEAP8[((textIndex+1)|0)];
4557 if (next == 42) {
4558 precision = getNextArg('i32');
4559 textIndex++;
4560 } else {
4561 while(1) {
4562 var precisionChr = HEAP8[((textIndex+1)|0)];
4563 if (precisionChr < 48 ||
4564 precisionChr > 57) break;
4565 precision = precision * 10 + (precisionChr - 48);
4566 textIndex++;
4567 }
4568 }
4569 next = HEAP8[((textIndex+1)|0)];
4570 }
4571 if (precision < 0) {
4572 precision = 6; // Standard default.
4573 precisionSet = false;
4574 }
4575
4576 // Handle integer sizes. WARNING: These assume a 32-bit architecture!
4577 var argSize;
4578 switch (String.fromCharCode(next)) {
4579 case 'h':
4580 var nextNext = HEAP8[((textIndex+2)|0)];
4581 if (nextNext == 104) {
4582 textIndex++;
4583 argSize = 1; // char (actually i32 in varargs)
4584 } else {
4585 argSize = 2; // short (actually i32 in varargs)
4586 }
4587 break;
4588 case 'l':
4589 var nextNext = HEAP8[((textIndex+2)|0)];
4590 if (nextNext == 108) {
4591 textIndex++;
4592 argSize = 8; // long long
4593 } else {
4594 argSize = 4; // long
4595 }
4596 break;
4597 case 'L': // long long
4598 case 'q': // int64_t
4599 case 'j': // intmax_t
4600 argSize = 8;
4601 break;
4602 case 'z': // size_t
4603 case 't': // ptrdiff_t
4604 case 'I': // signed ptrdiff_t or unsigned size_t
4605 argSize = 4;
4606 break;
4607 default:
4608 argSize = null;
4609 }
4610 if (argSize) textIndex++;
4611 next = HEAP8[((textIndex+1)|0)];
4612
4613 // Handle type specifier.
4614 switch (String.fromCharCode(next)) {
4615 case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p' : {
4616 // Integer.
4617 var signed = next == 100 || next == 105;
4618 argSize = argSize || 4;
4619 var currArg = getNextArg('i' + (argSize * 8));
4620 var argText;
4621 // Flatten i64-1 [low, high] into a (slightly rounded) double
4622 if (argSize == 8) {
4623 currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117 );
4624 }
4625 // Truncate to requested size.
4626 if (argSize <= 4) {
4627 var limit = Math.pow(256, argSize) - 1;
4628 currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
4629 }
4630 // Format the number.
4631 var currAbsArg = Math.abs(currArg);
4632 var prefix = '';
4633 if (next == 100 || next == 105) {
4634 argText = reSign(currArg, 8 * argSize, 1).toString(10);
4635 } else if (next == 117) {
4636 argText = unSign(currArg, 8 * argSize, 1).toString(10);
4637 currArg = Math.abs(currArg);
4638 } else if (next == 111) {
4639 argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
4640 } else if (next == 120 || next == 88) {
4641 prefix = (flagAlternative && currArg != 0) ? '0x' : '';
4642 if (currArg < 0) {
4643 // Represent negative numbers in hex as 2's complement.
4644 currArg = -currArg;
4645 argText = (currAbsArg - 1).toString(16);
4646 var buffer = [];
4647 for (var i = 0; i < argText.length; i++) {
4648 buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
4649 }
4650 argText = buffer.join('');
4651 while (argText.length < argSize * 2) argText = 'f' + argText;
4652 } else {
4653 argText = currAbsArg.toString(16);
4654 }
4655 if (next == 88) {
4656 prefix = prefix.toUpperCase();
4657 argText = argText.toUpperCase();
4658 }
4659 } else if (next == 112) {
4660 if (currAbsArg === 0) {
4661 argText = '(nil)';
4662 } else {
4663 prefix = '0x';
4664 argText = currAbsArg.toString(16);
4665 }
4666 }
4667 if (precisionSet) {
4668 while (argText.length < precision) {
4669 argText = '0' + argText;
4670 }
4671 }
4672
4673 // Add sign if needed
4674 if (currArg >= 0) {
4675 if (flagAlwaysSigned) {
4676 prefix = '+' + prefix;
4677 } else if (flagPadSign) {
4678 prefix = ' ' + prefix;
4679 }
4680 }
4681
4682 // Move sign to prefix so we zero-pad after the sign
4683 if (argText.charAt(0) == '-') {
4684 prefix = '-' + prefix;
4685 argText = argText.substr(1);
4686 }
4687
4688 // Add padding.
4689 while (prefix.length + argText.length < width) {
4690 if (flagLeftAlign) {
4691 argText += ' ';
4692 } else {
4693 if (flagZeroPad) {
4694 argText = '0' + argText;
4695 } else {
4696 prefix = ' ' + prefix;
4697 }
4698 }
4699 }
4700
4701 // Insert the result into the buffer.
4702 argText = prefix + argText;
4703 argText.split('').forEach(function(chr) {
4704 ret.push(chr.charCodeAt(0));
4705 });
4706 break;
4707 }
4708 case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
4709 // Float.
4710 var currArg = getNextArg('double');
4711 var argText;
4712 if (isNaN(currArg)) {
4713 argText = 'nan';
4714 flagZeroPad = false;
4715 } else if (!isFinite(currArg)) {
4716 argText = (currArg < 0 ? '-' : '') + 'inf';
4717 flagZeroPad = false;
4718 } else {
4719 var isGeneral = false;
4720 var effectivePrecision = Math.min(precision, 20);
4721
4722 // Convert g/G to f/F or e/E, as per:
4723 // http://pubs.opengroup.org/onlinepubs/9699919799/functions/pri ntf.html
4724 if (next == 103 || next == 71) {
4725 isGeneral = true;
4726 precision = precision || 1;
4727 var exponent = parseInt(currArg.toExponential(effectivePrecisi on).split('e')[1], 10);
4728 if (precision > exponent && exponent >= -4) {
4729 next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
4730 precision -= exponent + 1;
4731 } else {
4732 next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
4733 precision--;
4734 }
4735 effectivePrecision = Math.min(precision, 20);
4736 }
4737
4738 if (next == 101 || next == 69) {
4739 argText = currArg.toExponential(effectivePrecision);
4740 // Make sure the exponent has at least 2 digits.
4741 if (/[eE][-+]\d$/.test(argText)) {
4742 argText = argText.slice(0, -1) + '0' + argText.slice(-1);
4743 }
4744 } else if (next == 102 || next == 70) {
4745 argText = currArg.toFixed(effectivePrecision);
4746 if (currArg === 0 && __reallyNegative(currArg)) {
4747 argText = '-' + argText;
4748 }
4749 }
4750
4751 var parts = argText.split('e');
4752 if (isGeneral && !flagAlternative) {
4753 // Discard trailing zeros and periods.
4754 while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
4755 (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.' )) {
4756 parts[0] = parts[0].slice(0, -1);
4757 }
4758 } else {
4759 // Make sure we have a period in alternative mode.
4760 if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
4761 // Zero pad until required precision.
4762 while (precision > effectivePrecision++) parts[0] += '0';
4763 }
4764 argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
4765
4766 // Capitalize 'E' if needed.
4767 if (next == 69) argText = argText.toUpperCase();
4768
4769 // Add sign.
4770 if (currArg >= 0) {
4771 if (flagAlwaysSigned) {
4772 argText = '+' + argText;
4773 } else if (flagPadSign) {
4774 argText = ' ' + argText;
4775 }
4776 }
4777 }
4778
4779 // Add padding.
4780 while (argText.length < width) {
4781 if (flagLeftAlign) {
4782 argText += ' ';
4783 } else {
4784 if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
4785 argText = argText[0] + '0' + argText.slice(1);
4786 } else {
4787 argText = (flagZeroPad ? '0' : ' ') + argText;
4788 }
4789 }
4790 }
4791
4792 // Adjust case.
4793 if (next < 97) argText = argText.toUpperCase();
4794
4795 // Insert the result into the buffer.
4796 argText.split('').forEach(function(chr) {
4797 ret.push(chr.charCodeAt(0));
4798 });
4799 break;
4800 }
4801 case 's': {
4802 // String.
4803 var arg = getNextArg('i8*');
4804 var argLength = arg ? _strlen(arg) : '(null)'.length;
4805 if (precisionSet) argLength = Math.min(argLength, precision);
4806 if (!flagLeftAlign) {
4807 while (argLength < width--) {
4808 ret.push(32);
4809 }
4810 }
4811 if (arg) {
4812 for (var i = 0; i < argLength; i++) {
4813 ret.push(HEAPU8[((arg++)|0)]);
4814 }
4815 } else {
4816 ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength ), true));
4817 }
4818 if (flagLeftAlign) {
4819 while (argLength < width--) {
4820 ret.push(32);
4821 }
4822 }
4823 break;
4824 }
4825 case 'c': {
4826 // Character.
4827 if (flagLeftAlign) ret.push(getNextArg('i8'));
4828 while (--width > 0) {
4829 ret.push(32);
4830 }
4831 if (!flagLeftAlign) ret.push(getNextArg('i8'));
4832 break;
4833 }
4834 case 'n': {
4835 // Write the length written so far to the next parameter.
4836 var ptr = getNextArg('i32*');
4837 HEAP32[((ptr)>>2)]=ret.length;
4838 break;
4839 }
4840 case '%': {
4841 // Literal percent sign.
4842 ret.push(curr);
4843 break;
4844 }
4845 default: {
4846 // Unknown specifiers remain untouched.
4847 for (var i = startTextIndex; i < textIndex + 2; i++) {
4848 ret.push(HEAP8[(i)]);
4849 }
4850 }
4851 }
4852 textIndex += 2;
4853 // TODO: Support a/A (hex float) and m (last error) specifiers.
4854 // TODO: Support %1${specifier} for arg selection.
4855 } else {
4856 ret.push(curr);
4857 textIndex += 1;
4858 }
4859 }
4860 return ret;
4861 }function _fprintf(stream, format, varargs) {
4862 // int fprintf(FILE *restrict stream, const char *restrict format, ...);
4863 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
4864 var result = __formatString(format, varargs);
4865 var stack = Runtime.stackSave();
4866 var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, s tream);
4867 Runtime.stackRestore(stack);
4868 return ret;
4869 }function _printf(format, varargs) {
4870 // int printf(const char *restrict format, ...);
4871 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
4872 var stdout = HEAP32[((_stdout)>>2)];
4873 return _fprintf(stdout, format, varargs);
4874 }
4875
4876
4877 function _fputs(s, stream) {
4878 // int fputs(const char *restrict s, FILE *restrict stream);
4879 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
4880 var fd = _fileno(stream);
4881 return _write(fd, s, _strlen(s));
4882 }
4883
4884 function _fputc(c, stream) {
4885 // int fputc(int c, FILE *stream);
4886 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
4887 var chr = unSign(c & 0xFF);
4888 HEAP8[((_fputc.ret)|0)]=chr;
4889 var fd = _fileno(stream);
4890 var ret = _write(fd, _fputc.ret, 1);
4891 if (ret == -1) {
4892 var streamObj = FS.getStreamFromPtr(stream);
4893 if (streamObj) streamObj.error = true;
4894 return -1;
4895 } else {
4896 return chr;
4897 }
4898 }function _puts(s) {
4899 // int puts(const char *s);
4900 // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
4901 // NOTE: puts() always writes an extra newline.
4902 var stdout = HEAP32[((_stdout)>>2)];
4903 var ret = _fputs(s, stdout);
4904 if (ret < 0) {
4905 return ret;
4906 } else {
4907 var newlineRet = _fputc(10, stdout);
4908 return (newlineRet < 0) ? -1 : ret + 1;
4909 }
4910 }
4911
4912 function _sysconf(name) {
4913 // long sysconf(int name);
4914 // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
4915 switch(name) {
4916 case 30: return PAGE_SIZE;
4917 case 132:
4918 case 133:
4919 case 12:
4920 case 137:
4921 case 138:
4922 case 15:
4923 case 235:
4924 case 16:
4925 case 17:
4926 case 18:
4927 case 19:
4928 case 20:
4929 case 149:
4930 case 13:
4931 case 10:
4932 case 236:
4933 case 153:
4934 case 9:
4935 case 21:
4936 case 22:
4937 case 159:
4938 case 154:
4939 case 14:
4940 case 77:
4941 case 78:
4942 case 139:
4943 case 80:
4944 case 81:
4945 case 79:
4946 case 82:
4947 case 68:
4948 case 67:
4949 case 164:
4950 case 11:
4951 case 29:
4952 case 47:
4953 case 48:
4954 case 95:
4955 case 52:
4956 case 51:
4957 case 46:
4958 return 200809;
4959 case 27:
4960 case 246:
4961 case 127:
4962 case 128:
4963 case 23:
4964 case 24:
4965 case 160:
4966 case 161:
4967 case 181:
4968 case 182:
4969 case 242:
4970 case 183:
4971 case 184:
4972 case 243:
4973 case 244:
4974 case 245:
4975 case 165:
4976 case 178:
4977 case 179:
4978 case 49:
4979 case 50:
4980 case 168:
4981 case 169:
4982 case 175:
4983 case 170:
4984 case 171:
4985 case 172:
4986 case 97:
4987 case 76:
4988 case 32:
4989 case 173:
4990 case 35:
4991 return -1;
4992 case 176:
4993 case 177:
4994 case 7:
4995 case 155:
4996 case 8:
4997 case 157:
4998 case 125:
4999 case 126:
5000 case 92:
5001 case 93:
5002 case 129:
5003 case 130:
5004 case 131:
5005 case 94:
5006 case 91:
5007 return 1;
5008 case 74:
5009 case 60:
5010 case 69:
5011 case 70:
5012 case 4:
5013 return 1024;
5014 case 31:
5015 case 42:
5016 case 72:
5017 return 32;
5018 case 87:
5019 case 26:
5020 case 33:
5021 return 2147483647;
5022 case 34:
5023 case 1:
5024 return 47839;
5025 case 38:
5026 case 36:
5027 return 99;
5028 case 43:
5029 case 37:
5030 return 2048;
5031 case 0: return 2097152;
5032 case 3: return 65536;
5033 case 28: return 32768;
5034 case 44: return 32767;
5035 case 75: return 16384;
5036 case 39: return 1000;
5037 case 89: return 700;
5038 case 71: return 256;
5039 case 40: return 255;
5040 case 2: return 100;
5041 case 180: return 64;
5042 case 25: return 20;
5043 case 5: return 16;
5044 case 6: return 6;
5045 case 73: return 4;
5046 case 84: return 1;
5047 }
5048 ___setErrNo(ERRNO_CODES.EINVAL);
5049 return -1;
5050 }
5051
5052
5053 Module["_memset"] = _memset;
5054
5055 function ___errno_location() {
5056 return ___errno_state;
5057 }
5058
5059 function _abort() {
5060 Module['abort']();
5061 }
5062
5063 var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false ,queue:[],pause:function () {
5064 Browser.mainLoop.shouldPause = true;
5065 },resume:function () {
5066 if (Browser.mainLoop.paused) {
5067 Browser.mainLoop.paused = false;
5068 Browser.mainLoop.scheduler();
5069 }
5070 Browser.mainLoop.shouldPause = false;
5071 },updateStatus:function () {
5072 if (Module['setStatus']) {
5073 var message = Module['statusMessage'] || 'Please wait...';
5074 var remaining = Browser.mainLoop.remainingBlockers;
5075 var expected = Browser.mainLoop.expectedBlockers;
5076 if (remaining) {
5077 if (remaining < expected) {
5078 Module['setStatus'](message + ' (' + (expected - remaining) + '/ ' + expected + ')');
5079 } else {
5080 Module['setStatus'](message);
5081 }
5082 } else {
5083 Module['setStatus']('');
5084 }
5085 }
5086 }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[] ,workers:[],init:function () {
5087 if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs t o exist even in workers
5088
5089 if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
5090 Browser.initted = true;
5091
5092 try {
5093 new Blob();
5094 Browser.hasBlobConstructor = true;
5095 } catch(e) {
5096 Browser.hasBlobConstructor = false;
5097 console.log("warning: no blob constructor, cannot create blobs with mi metypes");
5098 }
5099 Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuil der : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.h asBlobConstructor ? console.log("warning: no BlobBuilder") : null));
5100 Browser.URLObject = typeof window != "undefined" ? (window.URL ? window. URL : window.webkitURL) : undefined;
5101 if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
5102 console.log("warning: Browser does not support creating object URLs. B uilt-in browser image decoding will not be available.");
5103 Module.noImageDecoding = true;
5104 }
5105
5106 // Support for plugins that can process preloaded files. You can add mor e of these to
5107 // your app by creating and appending to Module.preloadPlugins.
5108 //
5109 // Each plugin is asked if it can handle a file based on the file's name . If it can,
5110 // it is given the file's raw data. When it is done, it calls a callback with the file's
5111 // (possibly modified) data. For example, a plugin might decompress a fi le, or it
5112 // might create some side data structure for use later (like an Image el ement, etc.).
5113
5114 var imagePlugin = {};
5115 imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
5116 return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
5117 };
5118 imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onl oad, onerror) {
5119 var b = null;
5120 if (Browser.hasBlobConstructor) {
5121 try {
5122 b = new Blob([byteArray], { type: Browser.getMimetype(name) });
5123 if (b.size !== byteArray.length) { // Safari bug #118630
5124 // Safari's Blob can only take an ArrayBuffer
5125 b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Brows er.getMimetype(name) });
5126 }
5127 } catch(e) {
5128 Runtime.warnOnce('Blob constructor present but fails: ' + e + '; f alling back to blob builder');
5129 }
5130 }
5131 if (!b) {
5132 var bb = new Browser.BlobBuilder();
5133 bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
5134 b = bb.getBlob();
5135 }
5136 var url = Browser.URLObject.createObjectURL(b);
5137 var img = new Image();
5138 img.onload = function img_onload() {
5139 assert(img.complete, 'Image ' + name + ' could not be decoded');
5140 var canvas = document.createElement('canvas');
5141 canvas.width = img.width;
5142 canvas.height = img.height;
5143 var ctx = canvas.getContext('2d');
5144 ctx.drawImage(img, 0, 0);
5145 Module["preloadedImages"][name] = canvas;
5146 Browser.URLObject.revokeObjectURL(url);
5147 if (onload) onload(byteArray);
5148 };
5149 img.onerror = function img_onerror(event) {
5150 console.log('Image ' + url + ' could not be decoded');
5151 if (onerror) onerror();
5152 };
5153 img.src = url;
5154 };
5155 Module['preloadPlugins'].push(imagePlugin);
5156
5157 var audioPlugin = {};
5158 audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
5159 return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wa v': 1, '.mp3': 1 };
5160 };
5161 audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onl oad, onerror) {
5162 var done = false;
5163 function finish(audio) {
5164 if (done) return;
5165 done = true;
5166 Module["preloadedAudios"][name] = audio;
5167 if (onload) onload(byteArray);
5168 }
5169 function fail() {
5170 if (done) return;
5171 done = true;
5172 Module["preloadedAudios"][name] = new Audio(); // empty shim
5173 if (onerror) onerror();
5174 }
5175 if (Browser.hasBlobConstructor) {
5176 try {
5177 var b = new Blob([byteArray], { type: Browser.getMimetype(name) }) ;
5178 } catch(e) {
5179 return fail();
5180 }
5181 var url = Browser.URLObject.createObjectURL(b); // XXX we never revo ke this!
5182 var audio = new Audio();
5183 audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
5184 audio.onerror = function audio_onerror(event) {
5185 if (done) return;
5186 console.log('warning: browser could not fully decode audio ' + nam e + ', trying slower base64 approach');
5187 function encode64(data) {
5188 var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789+/';
5189 var PAD = '=';
5190 var ret = '';
5191 var leftchar = 0;
5192 var leftbits = 0;
5193 for (var i = 0; i < data.length; i++) {
5194 leftchar = (leftchar << 8) | data[i];
5195 leftbits += 8;
5196 while (leftbits >= 6) {
5197 var curr = (leftchar >> (leftbits-6)) & 0x3f;
5198 leftbits -= 6;
5199 ret += BASE[curr];
5200 }
5201 }
5202 if (leftbits == 2) {
5203 ret += BASE[(leftchar&3) << 4];
5204 ret += PAD + PAD;
5205 } else if (leftbits == 4) {
5206 ret += BASE[(leftchar&0xf) << 2];
5207 ret += PAD;
5208 }
5209 return ret;
5210 }
5211 audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encod e64(byteArray);
5212 finish(audio); // we don't wait for confirmation this worked - but it's worth trying
5213 };
5214 audio.src = url;
5215 // workaround for chrome bug 124926 - we do not always get oncanplay through or onerror
5216 Browser.safeSetTimeout(function() {
5217 finish(audio); // try to use it even though it is not necessarily ready to play
5218 }, 10000);
5219 } else {
5220 return fail();
5221 }
5222 };
5223 Module['preloadPlugins'].push(audioPlugin);
5224
5225 // Canvas event setup
5226
5227 var canvas = Module['canvas'];
5228
5229 // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
5230 // Module['forcedAspectRatio'] = 4 / 3;
5231
5232 canvas.requestPointerLock = canvas['requestPointerLock'] ||
5233 canvas['mozRequestPointerLock'] ||
5234 canvas['webkitRequestPointerLock'] ||
5235 canvas['msRequestPointerLock'] ||
5236 function(){};
5237 canvas.exitPointerLock = document['exitPointerLock'] ||
5238 document['mozExitPointerLock'] ||
5239 document['webkitExitPointerLock'] ||
5240 document['msExitPointerLock'] ||
5241 function(){}; // no-op if function does not exi st
5242 canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
5243
5244 function pointerLockChange() {
5245 Browser.pointerLock = document['pointerLockElement'] === canvas ||
5246 document['mozPointerLockElement'] === canvas ||
5247 document['webkitPointerLockElement'] === canvas ||
5248 document['msPointerLockElement'] === canvas;
5249 }
5250
5251 document.addEventListener('pointerlockchange', pointerLockChange, false) ;
5252 document.addEventListener('mozpointerlockchange', pointerLockChange, fal se);
5253 document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
5254 document.addEventListener('mspointerlockchange', pointerLockChange, fals e);
5255
5256 if (Module['elementPointerLock']) {
5257 canvas.addEventListener("click", function(ev) {
5258 if (!Browser.pointerLock && canvas.requestPointerLock) {
5259 canvas.requestPointerLock();
5260 ev.preventDefault();
5261 }
5262 }, false);
5263 }
5264 },createContext:function (canvas, useWebGL, setInModule, webGLContextAttri butes) {
5265 var ctx;
5266 var errorInfo = '?';
5267 function onContextCreationError(event) {
5268 errorInfo = event.statusMessage || errorInfo;
5269 }
5270 try {
5271 if (useWebGL) {
5272 var contextAttributes = {
5273 antialias: false,
5274 alpha: false
5275 };
5276
5277 if (webGLContextAttributes) {
5278 for (var attribute in webGLContextAttributes) {
5279 contextAttributes[attribute] = webGLContextAttributes[attribute] ;
5280 }
5281 }
5282
5283
5284 canvas.addEventListener('webglcontextcreationerror', onContextCreati onError, false);
5285 try {
5286 ['experimental-webgl', 'webgl'].some(function(webglId) {
5287 return ctx = canvas.getContext(webglId, contextAttributes);
5288 });
5289 } finally {
5290 canvas.removeEventListener('webglcontextcreationerror', onContextC reationError, false);
5291 }
5292 } else {
5293 ctx = canvas.getContext('2d');
5294 }
5295 if (!ctx) throw ':(';
5296 } catch (e) {
5297 Module.print('Could not create canvas: ' + [errorInfo, e]);
5298 return null;
5299 }
5300 if (useWebGL) {
5301 // Set the background of the WebGL canvas to black
5302 canvas.style.backgroundColor = "black";
5303
5304 // Warn on context loss
5305 canvas.addEventListener('webglcontextlost', function(event) {
5306 alert('WebGL context lost. You will need to reload the page.');
5307 }, false);
5308 }
5309 if (setInModule) {
5310 GLctx = Module.ctx = ctx;
5311 Module.useWebGL = useWebGL;
5312 Browser.moduleContextCreatedCallbacks.forEach(function(callback) { cal lback() });
5313 Browser.init();
5314 }
5315 return ctx;
5316 },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHan dlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScr een:function (lockPointer, resizeCanvas) {
5317 Browser.lockPointer = lockPointer;
5318 Browser.resizeCanvas = resizeCanvas;
5319 if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = tr ue;
5320 if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
5321
5322 var canvas = Module['canvas'];
5323 function fullScreenChange() {
5324 Browser.isFullScreen = false;
5325 var canvasContainer = canvas.parentNode;
5326 if ((document['webkitFullScreenElement'] || document['webkitFullscreen Element'] ||
5327 document['mozFullScreenElement'] || document['mozFullscreenElemen t'] ||
5328 document['fullScreenElement'] || document['fullscreenElement'] ||
5329 document['msFullScreenElement'] || document['msFullscreenElement' ] ||
5330 document['webkitCurrentFullScreenElement']) === canvasContainer) {
5331 canvas.cancelFullScreen = document['cancelFullScreen'] ||
5332 document['mozCancelFullScreen'] ||
5333 document['webkitCancelFullScreen'] ||
5334 document['msExitFullscreen'] ||
5335 document['exitFullscreen'] ||
5336 function() {};
5337 canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
5338 if (Browser.lockPointer) canvas.requestPointerLock();
5339 Browser.isFullScreen = true;
5340 if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
5341 } else {
5342
5343 // remove the full screen specific parent of the canvas again to res tore the HTML structure from before going full screen
5344 canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
5345 canvasContainer.parentNode.removeChild(canvasContainer);
5346
5347 if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
5348 }
5349 if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScree n);
5350 Browser.updateCanvasDimensions(canvas);
5351 }
5352
5353 if (!Browser.fullScreenHandlersInstalled) {
5354 Browser.fullScreenHandlersInstalled = true;
5355 document.addEventListener('fullscreenchange', fullScreenChange, false) ;
5356 document.addEventListener('mozfullscreenchange', fullScreenChange, fal se);
5357 document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
5358 document.addEventListener('MSFullscreenChange', fullScreenChange, fals e);
5359 }
5360
5361 // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root
5362 var canvasContainer = document.createElement("div");
5363 canvas.parentNode.insertBefore(canvasContainer, canvas);
5364 canvasContainer.appendChild(canvas);
5365
5366 // use parent of canvas as full screen root to allow aspect ratio correc tion (Firefox stretches the root to screen size)
5367 canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] ||
5368 canvasContainer['mozRequestFullScree n'] ||
5369 canvasContainer['msRequestFullscreen '] ||
5370 (canvasContainer['webkitRequestFullSc reen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_ KEYBOARD_INPUT']) } : null);
5371 canvasContainer.requestFullScreen();
5372 },requestAnimationFrame:function requestAnimationFrame(func) {
5373 if (typeof window === 'undefined') { // Provide fallback to setTimeout i f window is undefined (e.g. in Node.js)
5374 setTimeout(func, 1000/60);
5375 } else {
5376 if (!window.requestAnimationFrame) {
5377 window.requestAnimationFrame = window['requestAnimationFrame'] ||
5378 window['mozRequestAnimationFrame'] ||
5379 window['webkitRequestAnimationFrame'] ||
5380 window['msRequestAnimationFrame'] ||
5381 window['oRequestAnimationFrame'] ||
5382 window['setTimeout'];
5383 }
5384 window.requestAnimationFrame(func);
5385 }
5386 },safeCallback:function (func) {
5387 return function() {
5388 if (!ABORT) return func.apply(null, arguments);
5389 };
5390 },safeRequestAnimationFrame:function (func) {
5391 return Browser.requestAnimationFrame(function() {
5392 if (!ABORT) func();
5393 });
5394 },safeSetTimeout:function (func, timeout) {
5395 return setTimeout(function() {
5396 if (!ABORT) func();
5397 }, timeout);
5398 },safeSetInterval:function (func, timeout) {
5399 return setInterval(function() {
5400 if (!ABORT) func();
5401 }, timeout);
5402 },getMimetype:function (name) {
5403 return {
5404 'jpg': 'image/jpeg',
5405 'jpeg': 'image/jpeg',
5406 'png': 'image/png',
5407 'bmp': 'image/bmp',
5408 'ogg': 'audio/ogg',
5409 'wav': 'audio/wav',
5410 'mp3': 'audio/mpeg'
5411 }[name.substr(name.lastIndexOf('.')+1)];
5412 },getUserMedia:function (func) {
5413 if(!window.getUserMedia) {
5414 window.getUserMedia = navigator['getUserMedia'] ||
5415 navigator['mozGetUserMedia'];
5416 }
5417 window.getUserMedia(func);
5418 },getMovementX:function (event) {
5419 return event['movementX'] ||
5420 event['mozMovementX'] ||
5421 event['webkitMovementX'] ||
5422 0;
5423 },getMovementY:function (event) {
5424 return event['movementY'] ||
5425 event['mozMovementY'] ||
5426 event['webkitMovementY'] ||
5427 0;
5428 },getMouseWheelDelta:function (event) {
5429 return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event. detail : -event.wheelDelta));
5430 },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent: function (event) { // event should be mousemove, mousedown or mouseup
5431 if (Browser.pointerLock) {
5432 // When the pointer is locked, calculate the coordinates
5433 // based on the movement of the mouse.
5434 // Workaround for Firefox bug 764498
5435 if (event.type != 'mousemove' &&
5436 ('mozMovementX' in event)) {
5437 Browser.mouseMovementX = Browser.mouseMovementY = 0;
5438 } else {
5439 Browser.mouseMovementX = Browser.getMovementX(event);
5440 Browser.mouseMovementY = Browser.getMovementY(event);
5441 }
5442
5443 // check if SDL is available
5444 if (typeof SDL != "undefined") {
5445 Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
5446 Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
5447 } else {
5448 // just add the mouse delta to the current absolut mouse position
5449 // FIXME: ideally this should be clamped against the canvas size and zero
5450 Browser.mouseX += Browser.mouseMovementX;
5451 Browser.mouseY += Browser.mouseMovementY;
5452 }
5453 } else {
5454 // Otherwise, calculate the movement based on the changes
5455 // in the coordinates.
5456 var rect = Module["canvas"].getBoundingClientRect();
5457 var x, y;
5458
5459 // Neither .scrollX or .pageXOffset are defined in a spec, but
5460 // we prefer .scrollX because it is currently in a spec draft.
5461 // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
5462 var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scroll X : window.pageXOffset);
5463 var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scroll Y : window.pageYOffset);
5464 if (event.type == 'touchstart' ||
5465 event.type == 'touchend' ||
5466 event.type == 'touchmove') {
5467 var t = event.touches.item(0);
5468 if (t) {
5469 x = t.pageX - (scrollX + rect.left);
5470 y = t.pageY - (scrollY + rect.top);
5471 } else {
5472 return;
5473 }
5474 } else {
5475 x = event.pageX - (scrollX + rect.left);
5476 y = event.pageY - (scrollY + rect.top);
5477 }
5478
5479 // the canvas might be CSS-scaled compared to its backbuffer;
5480 // SDL-using content will want mouse coordinates in terms
5481 // of backbuffer units.
5482 var cw = Module["canvas"].width;
5483 var ch = Module["canvas"].height;
5484 x = x * (cw / rect.width);
5485 y = y * (ch / rect.height);
5486
5487 Browser.mouseMovementX = x - Browser.mouseX;
5488 Browser.mouseMovementY = y - Browser.mouseY;
5489 Browser.mouseX = x;
5490 Browser.mouseY = y;
5491 }
5492 },xhrLoad:function (url, onload, onerror) {
5493 var xhr = new XMLHttpRequest();
5494 xhr.open('GET', url, true);
5495 xhr.responseType = 'arraybuffer';
5496 xhr.onload = function xhr_onload() {
5497 if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
5498 onload(xhr.response);
5499 } else {
5500 onerror();
5501 }
5502 };
5503 xhr.onerror = onerror;
5504 xhr.send(null);
5505 },asyncLoad:function (url, onload, onerror, noRunDep) {
5506 Browser.xhrLoad(url, function(arrayBuffer) {
5507 assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayB uffer).');
5508 onload(new Uint8Array(arrayBuffer));
5509 if (!noRunDep) removeRunDependency('al ' + url);
5510 }, function(event) {
5511 if (onerror) {
5512 onerror();
5513 } else {
5514 throw 'Loading data file "' + url + '" failed.';
5515 }
5516 });
5517 if (!noRunDep) addRunDependency('al ' + url);
5518 },resizeListeners:[],updateResizeListeners:function () {
5519 var canvas = Module['canvas'];
5520 Browser.resizeListeners.forEach(function(listener) {
5521 listener(canvas.width, canvas.height);
5522 });
5523 },setCanvasSize:function (width, height, noUpdates) {
5524 var canvas = Module['canvas'];
5525 Browser.updateCanvasDimensions(canvas, width, height);
5526 if (!noUpdates) Browser.updateResizeListeners();
5527 },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
5528 // check if SDL is available
5529 if (typeof SDL != "undefined") {
5530 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5531 flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
5532 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5533 }
5534 Browser.updateResizeListeners();
5535 },setWindowedCanvasSize:function () {
5536 // check if SDL is available
5537 if (typeof SDL != "undefined") {
5538 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5539 flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
5540 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5541 }
5542 Browser.updateResizeListeners();
5543 },updateCanvasDimensions:function (canvas, wNative, hNative) {
5544 if (wNative && hNative) {
5545 canvas.widthNative = wNative;
5546 canvas.heightNative = hNative;
5547 } else {
5548 wNative = canvas.widthNative;
5549 hNative = canvas.heightNative;
5550 }
5551 var w = wNative;
5552 var h = hNative;
5553 if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
5554 if (w/h < Module['forcedAspectRatio']) {
5555 w = Math.round(h * Module['forcedAspectRatio']);
5556 } else {
5557 h = Math.round(w / Module['forcedAspectRatio']);
5558 }
5559 }
5560 if (((document['webkitFullScreenElement'] || document['webkitFullscreenE lement'] ||
5561 document['mozFullScreenElement'] || document['mozFullscreenElement' ] ||
5562 document['fullScreenElement'] || document['fullscreenElement'] ||
5563 document['msFullScreenElement'] || document['msFullscreenElement'] ||
5564 document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
5565 var factor = Math.min(screen.width / w, screen.height / h);
5566 w = Math.round(w * factor);
5567 h = Math.round(h * factor);
5568 }
5569 if (Browser.resizeCanvas) {
5570 if (canvas.width != w) canvas.width = w;
5571 if (canvas.height != h) canvas.height = h;
5572 if (typeof canvas.style != 'undefined') {
5573 canvas.style.removeProperty( "width");
5574 canvas.style.removeProperty("height");
5575 }
5576 } else {
5577 if (canvas.width != wNative) canvas.width = wNative;
5578 if (canvas.height != hNative) canvas.height = hNative;
5579 if (typeof canvas.style != 'undefined') {
5580 if (w != wNative || h != hNative) {
5581 canvas.style.setProperty( "width", w + "px", "important");
5582 canvas.style.setProperty("height", h + "px", "important");
5583 } else {
5584 canvas.style.removeProperty( "width");
5585 canvas.style.removeProperty("height");
5586 }
5587 }
5588 }
5589 }};
5590
5591 function _sbrk(bytes) {
5592 // Implement a Linux-like 'memory area' for our 'process'.
5593 // Changes the size of the memory area by |bytes|; returns the
5594 // address of the previous top ('break') of the memory area
5595 // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
5596 var self = _sbrk;
5597 if (!self.called) {
5598 DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out alig ned
5599 self.called = true;
5600 assert(Runtime.dynamicAlloc);
5601 self.alloc = Runtime.dynamicAlloc;
5602 Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
5603 }
5604 var ret = DYNAMICTOP;
5605 if (bytes != 0) self.alloc(bytes);
5606 return ret; // Previous break location.
5607 }
5608
5609 function ___assert_fail(condition, filename, line, func) {
5610 ABORT = true;
5611 throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [fi lename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_ stringify(func) : 'unknown function'] + ' at ' + stackTrace();
5612 }
5613
5614 function _time(ptr) {
5615 var ret = Math.floor(Date.now()/1000);
5616 if (ptr) {
5617 HEAP32[((ptr)>>2)]=ret;
5618 }
5619 return ret;
5620 }
5621
5622 function _llvm_bswap_i32(x) {
5623 return ((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>2 4);
5624 }
5625
5626
5627
5628 function _emscripten_memcpy_big(dest, src, num) {
5629 HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
5630 return dest;
5631 }
5632 Module["_memcpy"] = _memcpy;
5633 FS.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.crea tePath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloade dFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile ;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDe vice;
5634 ___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
5635 __ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
5636 if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
5637 __ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
5638 _fputc.ret = allocate([0], "i8", ALLOC_STATIC);
5639 Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, res izeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
5640 Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
5641 Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdat es) { Browser.setCanvasSize(width, height, noUpdates) };
5642 Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.p ause() };
5643 Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop .resume() };
5644 Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia () }
5645 STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
5646
5647 staticSealed = true; // seal the static portion of memory
5648
5649 STACK_MAX = STACK_BASE + 5242880;
5650
5651 DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
5652
5653 assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
5654
5655
5656 var Math_min = Math.min;
5657 function invoke_iiii(index,a1,a2,a3) {
5658 try {
5659 return Module["dynCall_iiii"](index,a1,a2,a3);
5660 } catch(e) {
5661 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5662 asm["setThrew"](1, 0);
5663 }
5664 }
5665
5666 function invoke_vii(index,a1,a2) {
5667 try {
5668 Module["dynCall_vii"](index,a1,a2);
5669 } catch(e) {
5670 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5671 asm["setThrew"](1, 0);
5672 }
5673 }
5674
5675 function invoke_iii(index,a1,a2) {
5676 try {
5677 return Module["dynCall_iii"](index,a1,a2);
5678 } catch(e) {
5679 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5680 asm["setThrew"](1, 0);
5681 }
5682 }
5683
5684 function asmPrintInt(x, y) {
5685 Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
5686 }
5687 function asmPrintFloat(x, y) {
5688 Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
5689 }
5690 // EMSCRIPTEN_START_ASM
5691 var asm = (function(global, env, buffer) {
5692 'use asm';
5693 var HEAP8 = new global.Int8Array(buffer);
5694 var HEAP16 = new global.Int16Array(buffer);
5695 var HEAP32 = new global.Int32Array(buffer);
5696 var HEAPU8 = new global.Uint8Array(buffer);
5697 var HEAPU16 = new global.Uint16Array(buffer);
5698 var HEAPU32 = new global.Uint32Array(buffer);
5699 var HEAPF32 = new global.Float32Array(buffer);
5700 var HEAPF64 = new global.Float64Array(buffer);
5701
5702 var STACKTOP=env.STACKTOP|0;
5703 var STACK_MAX=env.STACK_MAX|0;
5704 var tempDoublePtr=env.tempDoublePtr|0;
5705 var ABORT=env.ABORT|0;
5706
5707 var __THREW__ = 0;
5708 var threwValue = 0;
5709 var setjmpId = 0;
5710 var undef = 0;
5711 var nan = +env.NaN, inf = +env.Infinity;
5712 var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
5713
5714 var tempRet0 = 0;
5715 var tempRet1 = 0;
5716 var tempRet2 = 0;
5717 var tempRet3 = 0;
5718 var tempRet4 = 0;
5719 var tempRet5 = 0;
5720 var tempRet6 = 0;
5721 var tempRet7 = 0;
5722 var tempRet8 = 0;
5723 var tempRet9 = 0;
5724 var Math_floor=global.Math.floor;
5725 var Math_abs=global.Math.abs;
5726 var Math_sqrt=global.Math.sqrt;
5727 var Math_pow=global.Math.pow;
5728 var Math_cos=global.Math.cos;
5729 var Math_sin=global.Math.sin;
5730 var Math_tan=global.Math.tan;
5731 var Math_acos=global.Math.acos;
5732 var Math_asin=global.Math.asin;
5733 var Math_atan=global.Math.atan;
5734 var Math_atan2=global.Math.atan2;
5735 var Math_exp=global.Math.exp;
5736 var Math_log=global.Math.log;
5737 var Math_ceil=global.Math.ceil;
5738 var Math_imul=global.Math.imul;
5739 var abort=env.abort;
5740 var assert=env.assert;
5741 var asmPrintInt=env.asmPrintInt;
5742 var asmPrintFloat=env.asmPrintFloat;
5743 var Math_min=env.min;
5744 var invoke_iiii=env.invoke_iiii;
5745 var invoke_vii=env.invoke_vii;
5746 var invoke_iii=env.invoke_iii;
5747 var _send=env._send;
5748 var ___setErrNo=env.___setErrNo;
5749 var ___assert_fail=env.___assert_fail;
5750 var _fflush=env._fflush;
5751 var _pwrite=env._pwrite;
5752 var __reallyNegative=env.__reallyNegative;
5753 var _sbrk=env._sbrk;
5754 var ___errno_location=env.___errno_location;
5755 var _emscripten_memcpy_big=env._emscripten_memcpy_big;
5756 var _fileno=env._fileno;
5757 var _sysconf=env._sysconf;
5758 var _puts=env._puts;
5759 var _mkport=env._mkport;
5760 var _write=env._write;
5761 var _llvm_bswap_i32=env._llvm_bswap_i32;
5762 var _fputc=env._fputc;
5763 var _abort=env._abort;
5764 var _fwrite=env._fwrite;
5765 var _time=env._time;
5766 var _fprintf=env._fprintf;
5767 var __formatString=env.__formatString;
5768 var _fputs=env._fputs;
5769 var _printf=env._printf;
5770 var tempFloat = 0.0;
5771
5772 // EMSCRIPTEN_START_FUNCS
5773 function _inflate(i2, i3) {
5774 i2 = i2 | 0;
5775 i3 = i3 | 0;
5776 var i1 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0 , i39 = 0, i40 = 0, i41 = 0, i42 = 0, i43 = 0, i44 = 0, i45 = 0, i46 = 0, i47 = 0, i48 = 0, i49 = 0, i50 = 0, i51 = 0, i52 = 0, i53 = 0, i54 = 0, i55 = 0, i56 = 0, i57 = 0, i58 = 0, i59 = 0, i60 = 0, i61 = 0, i62 = 0, i63 = 0, i64 = 0, i65 = 0, i66 = 0, i67 = 0, i68 = 0, i69 = 0, i70 = 0, i71 = 0, i72 = 0;
5777 i1 = STACKTOP;
5778 STACKTOP = STACKTOP + 16 | 0;
5779 i25 = i1;
5780 if ((i2 | 0) == 0) {
5781 i72 = -2;
5782 STACKTOP = i1;
5783 return i72 | 0;
5784 }
5785 i4 = HEAP32[i2 + 28 >> 2] | 0;
5786 if ((i4 | 0) == 0) {
5787 i72 = -2;
5788 STACKTOP = i1;
5789 return i72 | 0;
5790 }
5791 i8 = i2 + 12 | 0;
5792 i19 = HEAP32[i8 >> 2] | 0;
5793 if ((i19 | 0) == 0) {
5794 i72 = -2;
5795 STACKTOP = i1;
5796 return i72 | 0;
5797 }
5798 i62 = HEAP32[i2 >> 2] | 0;
5799 if ((i62 | 0) == 0 ? (HEAP32[i2 + 4 >> 2] | 0) != 0 : 0) {
5800 i72 = -2;
5801 STACKTOP = i1;
5802 return i72 | 0;
5803 }
5804 i68 = HEAP32[i4 >> 2] | 0;
5805 if ((i68 | 0) == 11) {
5806 HEAP32[i4 >> 2] = 12;
5807 i68 = 12;
5808 i62 = HEAP32[i2 >> 2] | 0;
5809 i19 = HEAP32[i8 >> 2] | 0;
5810 }
5811 i15 = i2 + 16 | 0;
5812 i59 = HEAP32[i15 >> 2] | 0;
5813 i16 = i2 + 4 | 0;
5814 i5 = HEAP32[i16 >> 2] | 0;
5815 i17 = i4 + 56 | 0;
5816 i6 = i4 + 60 | 0;
5817 i12 = i4 + 8 | 0;
5818 i10 = i4 + 24 | 0;
5819 i39 = i25 + 1 | 0;
5820 i11 = i4 + 16 | 0;
5821 i38 = i4 + 32 | 0;
5822 i35 = i2 + 24 | 0;
5823 i40 = i4 + 36 | 0;
5824 i41 = i4 + 20 | 0;
5825 i9 = i2 + 48 | 0;
5826 i42 = i4 + 64 | 0;
5827 i46 = i4 + 12 | 0;
5828 i47 = (i3 + -5 | 0) >>> 0 < 2;
5829 i7 = i4 + 4 | 0;
5830 i48 = i4 + 76 | 0;
5831 i49 = i4 + 84 | 0;
5832 i50 = i4 + 80 | 0;
5833 i51 = i4 + 88 | 0;
5834 i43 = (i3 | 0) == 6;
5835 i57 = i4 + 7108 | 0;
5836 i37 = i4 + 72 | 0;
5837 i58 = i4 + 7112 | 0;
5838 i54 = i4 + 68 | 0;
5839 i28 = i4 + 44 | 0;
5840 i29 = i4 + 7104 | 0;
5841 i30 = i4 + 48 | 0;
5842 i31 = i4 + 52 | 0;
5843 i18 = i4 + 40 | 0;
5844 i13 = i2 + 20 | 0;
5845 i14 = i4 + 28 | 0;
5846 i32 = i4 + 96 | 0;
5847 i33 = i4 + 100 | 0;
5848 i34 = i4 + 92 | 0;
5849 i36 = i4 + 104 | 0;
5850 i52 = i4 + 1328 | 0;
5851 i53 = i4 + 108 | 0;
5852 i27 = i4 + 112 | 0;
5853 i55 = i4 + 752 | 0;
5854 i56 = i4 + 624 | 0;
5855 i44 = i25 + 2 | 0;
5856 i45 = i25 + 3 | 0;
5857 i67 = HEAP32[i6 >> 2] | 0;
5858 i65 = i5;
5859 i64 = HEAP32[i17 >> 2] | 0;
5860 i26 = i59;
5861 i61 = 0;
5862 L17 : while (1) {
5863 L19 : do {
5864 switch (i68 | 0) {
5865 case 16:
5866 {
5867 if (i67 >>> 0 < 14) {
5868 i63 = i67;
5869 while (1) {
5870 if ((i65 | 0) == 0) {
5871 i65 = 0;
5872 break L17;
5873 }
5874 i65 = i65 + -1 | 0;
5875 i66 = i62 + 1 | 0;
5876 i64 = (HEAPU8[i62] << i63) + i64 | 0;
5877 i63 = i63 + 8 | 0;
5878 if (i63 >>> 0 < 14) {
5879 i62 = i66;
5880 } else {
5881 i62 = i66;
5882 break;
5883 }
5884 }
5885 } else {
5886 i63 = i67;
5887 }
5888 i71 = (i64 & 31) + 257 | 0;
5889 HEAP32[i32 >> 2] = i71;
5890 i72 = (i64 >>> 5 & 31) + 1 | 0;
5891 HEAP32[i33 >> 2] = i72;
5892 HEAP32[i34 >> 2] = (i64 >>> 10 & 15) + 4;
5893 i64 = i64 >>> 14;
5894 i63 = i63 + -14 | 0;
5895 if (i71 >>> 0 > 286 | i72 >>> 0 > 30) {
5896 HEAP32[i35 >> 2] = 11616;
5897 HEAP32[i4 >> 2] = 29;
5898 i66 = i26;
5899 break L19;
5900 } else {
5901 HEAP32[i36 >> 2] = 0;
5902 HEAP32[i4 >> 2] = 17;
5903 i66 = 0;
5904 i60 = 154;
5905 break L19;
5906 }
5907 }
5908 case 2:
5909 {
5910 if (i67 >>> 0 < 32) {
5911 i63 = i67;
5912 i60 = 47;
5913 } else {
5914 i60 = 49;
5915 }
5916 break;
5917 }
5918 case 23:
5919 {
5920 i66 = HEAP32[i37 >> 2] | 0;
5921 i63 = i67;
5922 i60 = 240;
5923 break;
5924 }
5925 case 18:
5926 {
5927 i63 = HEAP32[i36 >> 2] | 0;
5928 i69 = i65;
5929 i60 = 164;
5930 break;
5931 }
5932 case 1:
5933 {
5934 if (i67 >>> 0 < 16) {
5935 i63 = i67;
5936 while (1) {
5937 if ((i65 | 0) == 0) {
5938 i65 = 0;
5939 break L17;
5940 }
5941 i65 = i65 + -1 | 0;
5942 i66 = i62 + 1 | 0;
5943 i64 = (HEAPU8[i62] << i63) + i64 | 0;
5944 i63 = i63 + 8 | 0;
5945 if (i63 >>> 0 < 16) {
5946 i62 = i66;
5947 } else {
5948 i62 = i66;
5949 break;
5950 }
5951 }
5952 } else {
5953 i63 = i67;
5954 }
5955 HEAP32[i11 >> 2] = i64;
5956 if ((i64 & 255 | 0) != 8) {
5957 HEAP32[i35 >> 2] = 11448;
5958 HEAP32[i4 >> 2] = 29;
5959 i66 = i26;
5960 break L19;
5961 }
5962 if ((i64 & 57344 | 0) != 0) {
5963 HEAP32[i35 >> 2] = 11504;
5964 HEAP32[i4 >> 2] = 29;
5965 i66 = i26;
5966 break L19;
5967 }
5968 i60 = HEAP32[i38 >> 2] | 0;
5969 if ((i60 | 0) == 0) {
5970 i60 = i64;
5971 } else {
5972 HEAP32[i60 >> 2] = i64 >>> 8 & 1;
5973 i60 = HEAP32[i11 >> 2] | 0;
5974 }
5975 if ((i60 & 512 | 0) != 0) {
5976 HEAP8[i25] = i64;
5977 HEAP8[i39] = i64 >>> 8;
5978 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
5979 }
5980 HEAP32[i4 >> 2] = 2;
5981 i63 = 0;
5982 i64 = 0;
5983 i60 = 47;
5984 break;
5985 }
5986 case 8:
5987 {
5988 i63 = i67;
5989 i60 = 109;
5990 break;
5991 }
5992 case 22:
5993 {
5994 i63 = i67;
5995 i60 = 228;
5996 break;
5997 }
5998 case 24:
5999 {
6000 i63 = i67;
6001 i60 = 246;
6002 break;
6003 }
6004 case 19:
6005 {
6006 i63 = i67;
6007 i60 = 201;
6008 break;
6009 }
6010 case 20:
6011 {
6012 i63 = i67;
6013 i60 = 202;
6014 break;
6015 }
6016 case 21:
6017 {
6018 i66 = HEAP32[i37 >> 2] | 0;
6019 i63 = i67;
6020 i60 = 221;
6021 break;
6022 }
6023 case 10:
6024 {
6025 i63 = i67;
6026 i60 = 121;
6027 break;
6028 }
6029 case 11:
6030 {
6031 i63 = i67;
6032 i60 = 124;
6033 break;
6034 }
6035 case 12:
6036 {
6037 i63 = i67;
6038 i60 = 125;
6039 break;
6040 }
6041 case 5:
6042 {
6043 i63 = i67;
6044 i60 = 73;
6045 break;
6046 }
6047 case 4:
6048 {
6049 i63 = i67;
6050 i60 = 62;
6051 break;
6052 }
6053 case 0:
6054 {
6055 i66 = HEAP32[i12 >> 2] | 0;
6056 if ((i66 | 0) == 0) {
6057 HEAP32[i4 >> 2] = 12;
6058 i63 = i67;
6059 i66 = i26;
6060 break L19;
6061 }
6062 if (i67 >>> 0 < 16) {
6063 i63 = i67;
6064 while (1) {
6065 if ((i65 | 0) == 0) {
6066 i65 = 0;
6067 break L17;
6068 }
6069 i65 = i65 + -1 | 0;
6070 i67 = i62 + 1 | 0;
6071 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6072 i63 = i63 + 8 | 0;
6073 if (i63 >>> 0 < 16) {
6074 i62 = i67;
6075 } else {
6076 i62 = i67;
6077 break;
6078 }
6079 }
6080 } else {
6081 i63 = i67;
6082 }
6083 if ((i66 & 2 | 0) != 0 & (i64 | 0) == 35615) {
6084 HEAP32[i10 >> 2] = _crc32(0, 0, 0) | 0;
6085 HEAP8[i25] = 31;
6086 HEAP8[i39] = -117;
6087 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
6088 HEAP32[i4 >> 2] = 1;
6089 i63 = 0;
6090 i64 = 0;
6091 i66 = i26;
6092 break L19;
6093 }
6094 HEAP32[i11 >> 2] = 0;
6095 i67 = HEAP32[i38 >> 2] | 0;
6096 if ((i67 | 0) != 0) {
6097 HEAP32[i67 + 48 >> 2] = -1;
6098 i66 = HEAP32[i12 >> 2] | 0;
6099 }
6100 if ((i66 & 1 | 0) != 0 ? ((((i64 << 8 & 65280) + (i64 >>> 8) | 0) >>> 0) % 31 | 0 | 0) == 0 : 0) {
6101 if ((i64 & 15 | 0) != 8) {
6102 HEAP32[i35 >> 2] = 11448;
6103 HEAP32[i4 >> 2] = 29;
6104 i66 = i26;
6105 break L19;
6106 }
6107 i66 = i64 >>> 4;
6108 i63 = i63 + -4 | 0;
6109 i68 = (i66 & 15) + 8 | 0;
6110 i67 = HEAP32[i40 >> 2] | 0;
6111 if ((i67 | 0) != 0) {
6112 if (i68 >>> 0 > i67 >>> 0) {
6113 HEAP32[i35 >> 2] = 11480;
6114 HEAP32[i4 >> 2] = 29;
6115 i64 = i66;
6116 i66 = i26;
6117 break L19;
6118 }
6119 } else {
6120 HEAP32[i40 >> 2] = i68;
6121 }
6122 HEAP32[i41 >> 2] = 1 << i68;
6123 i63 = _adler32(0, 0, 0) | 0;
6124 HEAP32[i10 >> 2] = i63;
6125 HEAP32[i9 >> 2] = i63;
6126 HEAP32[i4 >> 2] = i64 >>> 12 & 2 ^ 11;
6127 i63 = 0;
6128 i64 = 0;
6129 i66 = i26;
6130 break L19;
6131 }
6132 HEAP32[i35 >> 2] = 11424;
6133 HEAP32[i4 >> 2] = 29;
6134 i66 = i26;
6135 break;
6136 }
6137 case 26:
6138 {
6139 if ((HEAP32[i12 >> 2] | 0) != 0) {
6140 if (i67 >>> 0 < 32) {
6141 i63 = i67;
6142 while (1) {
6143 if ((i65 | 0) == 0) {
6144 i65 = 0;
6145 break L17;
6146 }
6147 i65 = i65 + -1 | 0;
6148 i66 = i62 + 1 | 0;
6149 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6150 i63 = i63 + 8 | 0;
6151 if (i63 >>> 0 < 32) {
6152 i62 = i66;
6153 } else {
6154 i62 = i66;
6155 break;
6156 }
6157 }
6158 } else {
6159 i63 = i67;
6160 }
6161 i66 = i59 - i26 | 0;
6162 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i66;
6163 HEAP32[i14 >> 2] = (HEAP32[i14 >> 2] | 0) + i66;
6164 if ((i59 | 0) != (i26 | 0)) {
6165 i59 = HEAP32[i10 >> 2] | 0;
6166 i67 = i19 + (0 - i66) | 0;
6167 if ((HEAP32[i11 >> 2] | 0) == 0) {
6168 i59 = _adler32(i59, i67, i66) | 0;
6169 } else {
6170 i59 = _crc32(i59, i67, i66) | 0;
6171 }
6172 HEAP32[i10 >> 2] = i59;
6173 HEAP32[i9 >> 2] = i59;
6174 }
6175 if ((HEAP32[i11 >> 2] | 0) == 0) {
6176 i59 = _llvm_bswap_i32(i64 | 0) | 0;
6177 } else {
6178 i59 = i64;
6179 }
6180 if ((i59 | 0) == (HEAP32[i10 >> 2] | 0)) {
6181 i63 = 0;
6182 i64 = 0;
6183 i59 = i26;
6184 } else {
6185 HEAP32[i35 >> 2] = 11904;
6186 HEAP32[i4 >> 2] = 29;
6187 i66 = i26;
6188 i59 = i26;
6189 break L19;
6190 }
6191 } else {
6192 i63 = i67;
6193 }
6194 HEAP32[i4 >> 2] = 27;
6195 i60 = 277;
6196 break;
6197 }
6198 case 27:
6199 {
6200 i63 = i67;
6201 i60 = 277;
6202 break;
6203 }
6204 case 28:
6205 {
6206 i63 = i67;
6207 i61 = 1;
6208 i60 = 285;
6209 break L17;
6210 }
6211 case 29:
6212 {
6213 i63 = i67;
6214 i61 = -3;
6215 break L17;
6216 }
6217 case 25:
6218 {
6219 if ((i26 | 0) == 0) {
6220 i63 = i67;
6221 i26 = 0;
6222 i60 = 285;
6223 break L17;
6224 }
6225 HEAP8[i19] = HEAP32[i42 >> 2];
6226 HEAP32[i4 >> 2] = 20;
6227 i63 = i67;
6228 i66 = i26 + -1 | 0;
6229 i19 = i19 + 1 | 0;
6230 break;
6231 }
6232 case 17:
6233 {
6234 i66 = HEAP32[i36 >> 2] | 0;
6235 if (i66 >>> 0 < (HEAP32[i34 >> 2] | 0) >>> 0) {
6236 i63 = i67;
6237 i60 = 154;
6238 } else {
6239 i60 = 158;
6240 }
6241 break;
6242 }
6243 case 13:
6244 {
6245 i63 = i67 & 7;
6246 i64 = i64 >>> i63;
6247 i63 = i67 - i63 | 0;
6248 if (i63 >>> 0 < 32) {
6249 while (1) {
6250 if ((i65 | 0) == 0) {
6251 i65 = 0;
6252 break L17;
6253 }
6254 i65 = i65 + -1 | 0;
6255 i66 = i62 + 1 | 0;
6256 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6257 i63 = i63 + 8 | 0;
6258 if (i63 >>> 0 < 32) {
6259 i62 = i66;
6260 } else {
6261 i62 = i66;
6262 break;
6263 }
6264 }
6265 }
6266 i66 = i64 & 65535;
6267 if ((i66 | 0) == (i64 >>> 16 ^ 65535 | 0)) {
6268 HEAP32[i42 >> 2] = i66;
6269 HEAP32[i4 >> 2] = 14;
6270 if (i43) {
6271 i63 = 0;
6272 i64 = 0;
6273 i60 = 285;
6274 break L17;
6275 } else {
6276 i63 = 0;
6277 i64 = 0;
6278 i60 = 143;
6279 break L19;
6280 }
6281 } else {
6282 HEAP32[i35 >> 2] = 11584;
6283 HEAP32[i4 >> 2] = 29;
6284 i66 = i26;
6285 break L19;
6286 }
6287 }
6288 case 7:
6289 {
6290 i63 = i67;
6291 i60 = 96;
6292 break;
6293 }
6294 case 14:
6295 {
6296 i63 = i67;
6297 i60 = 143;
6298 break;
6299 }
6300 case 15:
6301 {
6302 i63 = i67;
6303 i60 = 144;
6304 break;
6305 }
6306 case 9:
6307 {
6308 if (i67 >>> 0 < 32) {
6309 i63 = i67;
6310 while (1) {
6311 if ((i65 | 0) == 0) {
6312 i65 = 0;
6313 break L17;
6314 }
6315 i65 = i65 + -1 | 0;
6316 i66 = i62 + 1 | 0;
6317 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6318 i63 = i63 + 8 | 0;
6319 if (i63 >>> 0 < 32) {
6320 i62 = i66;
6321 } else {
6322 i62 = i66;
6323 break;
6324 }
6325 }
6326 }
6327 i63 = _llvm_bswap_i32(i64 | 0) | 0;
6328 HEAP32[i10 >> 2] = i63;
6329 HEAP32[i9 >> 2] = i63;
6330 HEAP32[i4 >> 2] = 10;
6331 i63 = 0;
6332 i64 = 0;
6333 i60 = 121;
6334 break;
6335 }
6336 case 30:
6337 {
6338 i60 = 299;
6339 break L17;
6340 }
6341 case 6:
6342 {
6343 i63 = i67;
6344 i60 = 83;
6345 break;
6346 }
6347 case 3:
6348 {
6349 if (i67 >>> 0 < 16) {
6350 i63 = i67;
6351 i66 = i62;
6352 i60 = 55;
6353 } else {
6354 i60 = 57;
6355 }
6356 break;
6357 }
6358 default:
6359 {
6360 i2 = -2;
6361 i60 = 300;
6362 break L17;
6363 }
6364 }
6365 } while (0);
6366 if ((i60 | 0) == 47) {
6367 while (1) {
6368 i60 = 0;
6369 if ((i65 | 0) == 0) {
6370 i65 = 0;
6371 break L17;
6372 }
6373 i65 = i65 + -1 | 0;
6374 i60 = i62 + 1 | 0;
6375 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6376 i63 = i63 + 8 | 0;
6377 if (i63 >>> 0 < 32) {
6378 i62 = i60;
6379 i60 = 47;
6380 } else {
6381 i62 = i60;
6382 i60 = 49;
6383 break;
6384 }
6385 }
6386 } else if ((i60 | 0) == 121) {
6387 if ((HEAP32[i46 >> 2] | 0) == 0) {
6388 i60 = 122;
6389 break;
6390 }
6391 i60 = _adler32(0, 0, 0) | 0;
6392 HEAP32[i10 >> 2] = i60;
6393 HEAP32[i9 >> 2] = i60;
6394 HEAP32[i4 >> 2] = 11;
6395 i60 = 124;
6396 } else if ((i60 | 0) == 143) {
6397 HEAP32[i4 >> 2] = 15;
6398 i60 = 144;
6399 } else if ((i60 | 0) == 154) {
6400 while (1) {
6401 i60 = 0;
6402 if (i63 >>> 0 < 3) {
6403 while (1) {
6404 if ((i65 | 0) == 0) {
6405 i65 = 0;
6406 break L17;
6407 }
6408 i65 = i65 + -1 | 0;
6409 i67 = i62 + 1 | 0;
6410 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6411 i63 = i63 + 8 | 0;
6412 if (i63 >>> 0 < 3) {
6413 i62 = i67;
6414 } else {
6415 i62 = i67;
6416 break;
6417 }
6418 }
6419 }
6420 HEAP32[i36 >> 2] = i66 + 1;
6421 HEAP16[i4 + (HEAPU16[11384 + (i66 << 1) >> 1] << 1) + 112 >> 1] = i64 & 7;
6422 i64 = i64 >>> 3;
6423 i63 = i63 + -3 | 0;
6424 i66 = HEAP32[i36 >> 2] | 0;
6425 if (i66 >>> 0 < (HEAP32[i34 >> 2] | 0) >>> 0) {
6426 i60 = 154;
6427 } else {
6428 i67 = i63;
6429 i60 = 158;
6430 break;
6431 }
6432 }
6433 } else if ((i60 | 0) == 277) {
6434 i60 = 0;
6435 if ((HEAP32[i12 >> 2] | 0) == 0) {
6436 i60 = 284;
6437 break;
6438 }
6439 if ((HEAP32[i11 >> 2] | 0) == 0) {
6440 i60 = 284;
6441 break;
6442 }
6443 if (i63 >>> 0 < 32) {
6444 i66 = i62;
6445 while (1) {
6446 if ((i65 | 0) == 0) {
6447 i65 = 0;
6448 i62 = i66;
6449 break L17;
6450 }
6451 i65 = i65 + -1 | 0;
6452 i62 = i66 + 1 | 0;
6453 i64 = (HEAPU8[i66] << i63) + i64 | 0;
6454 i63 = i63 + 8 | 0;
6455 if (i63 >>> 0 < 32) {
6456 i66 = i62;
6457 } else {
6458 break;
6459 }
6460 }
6461 }
6462 if ((i64 | 0) == (HEAP32[i14 >> 2] | 0)) {
6463 i63 = 0;
6464 i64 = 0;
6465 i60 = 284;
6466 break;
6467 }
6468 HEAP32[i35 >> 2] = 11928;
6469 HEAP32[i4 >> 2] = 29;
6470 i66 = i26;
6471 }
6472 do {
6473 if ((i60 | 0) == 49) {
6474 i60 = HEAP32[i38 >> 2] | 0;
6475 if ((i60 | 0) != 0) {
6476 HEAP32[i60 + 4 >> 2] = i64;
6477 }
6478 if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
6479 HEAP8[i25] = i64;
6480 HEAP8[i39] = i64 >>> 8;
6481 HEAP8[i44] = i64 >>> 16;
6482 HEAP8[i45] = i64 >>> 24;
6483 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 4) | 0;
6484 }
6485 HEAP32[i4 >> 2] = 3;
6486 i63 = 0;
6487 i64 = 0;
6488 i66 = i62;
6489 i60 = 55;
6490 } else if ((i60 | 0) == 124) {
6491 if (i47) {
6492 i60 = 285;
6493 break L17;
6494 } else {
6495 i60 = 125;
6496 }
6497 } else if ((i60 | 0) == 144) {
6498 i60 = 0;
6499 i66 = HEAP32[i42 >> 2] | 0;
6500 if ((i66 | 0) == 0) {
6501 HEAP32[i4 >> 2] = 11;
6502 i66 = i26;
6503 break;
6504 }
6505 i66 = i66 >>> 0 > i65 >>> 0 ? i65 : i66;
6506 i67 = i66 >>> 0 > i26 >>> 0 ? i26 : i66;
6507 if ((i67 | 0) == 0) {
6508 i60 = 285;
6509 break L17;
6510 }
6511 _memcpy(i19 | 0, i62 | 0, i67 | 0) | 0;
6512 HEAP32[i42 >> 2] = (HEAP32[i42 >> 2] | 0) - i67;
6513 i65 = i65 - i67 | 0;
6514 i66 = i26 - i67 | 0;
6515 i62 = i62 + i67 | 0;
6516 i19 = i19 + i67 | 0;
6517 } else if ((i60 | 0) == 158) {
6518 i60 = 0;
6519 if (i66 >>> 0 < 19) {
6520 while (1) {
6521 i61 = i66 + 1 | 0;
6522 HEAP16[i4 + (HEAPU16[11384 + (i66 << 1) >> 1] << 1) + 112 >> 1] = 0;
6523 if ((i61 | 0) == 19) {
6524 break;
6525 } else {
6526 i66 = i61;
6527 }
6528 }
6529 HEAP32[i36 >> 2] = 19;
6530 }
6531 HEAP32[i53 >> 2] = i52;
6532 HEAP32[i48 >> 2] = i52;
6533 HEAP32[i49 >> 2] = 7;
6534 i61 = _inflate_table(0, i27, 19, i53, i49, i55) | 0;
6535 if ((i61 | 0) == 0) {
6536 HEAP32[i36 >> 2] = 0;
6537 HEAP32[i4 >> 2] = 18;
6538 i63 = 0;
6539 i69 = i65;
6540 i61 = 0;
6541 i60 = 164;
6542 break;
6543 } else {
6544 HEAP32[i35 >> 2] = 11656;
6545 HEAP32[i4 >> 2] = 29;
6546 i63 = i67;
6547 i66 = i26;
6548 break;
6549 }
6550 }
6551 } while (0);
6552 L163 : do {
6553 if ((i60 | 0) == 55) {
6554 while (1) {
6555 i60 = 0;
6556 if ((i65 | 0) == 0) {
6557 i65 = 0;
6558 i62 = i66;
6559 break L17;
6560 }
6561 i65 = i65 + -1 | 0;
6562 i62 = i66 + 1 | 0;
6563 i64 = (HEAPU8[i66] << i63) + i64 | 0;
6564 i63 = i63 + 8 | 0;
6565 if (i63 >>> 0 < 16) {
6566 i66 = i62;
6567 i60 = 55;
6568 } else {
6569 i60 = 57;
6570 break;
6571 }
6572 }
6573 } else if ((i60 | 0) == 125) {
6574 i60 = 0;
6575 if ((HEAP32[i7 >> 2] | 0) != 0) {
6576 i66 = i63 & 7;
6577 HEAP32[i4 >> 2] = 26;
6578 i63 = i63 - i66 | 0;
6579 i64 = i64 >>> i66;
6580 i66 = i26;
6581 break;
6582 }
6583 if (i63 >>> 0 < 3) {
6584 while (1) {
6585 if ((i65 | 0) == 0) {
6586 i65 = 0;
6587 break L17;
6588 }
6589 i65 = i65 + -1 | 0;
6590 i66 = i62 + 1 | 0;
6591 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6592 i63 = i63 + 8 | 0;
6593 if (i63 >>> 0 < 3) {
6594 i62 = i66;
6595 } else {
6596 i62 = i66;
6597 break;
6598 }
6599 }
6600 }
6601 HEAP32[i7 >> 2] = i64 & 1;
6602 i66 = i64 >>> 1 & 3;
6603 if ((i66 | 0) == 0) {
6604 HEAP32[i4 >> 2] = 13;
6605 } else if ((i66 | 0) == 1) {
6606 HEAP32[i48 >> 2] = 11952;
6607 HEAP32[i49 >> 2] = 9;
6608 HEAP32[i50 >> 2] = 14e3;
6609 HEAP32[i51 >> 2] = 5;
6610 HEAP32[i4 >> 2] = 19;
6611 if (i43) {
6612 i60 = 133;
6613 break L17;
6614 }
6615 } else if ((i66 | 0) == 2) {
6616 HEAP32[i4 >> 2] = 16;
6617 } else if ((i66 | 0) == 3) {
6618 HEAP32[i35 >> 2] = 11560;
6619 HEAP32[i4 >> 2] = 29;
6620 }
6621 i63 = i63 + -3 | 0;
6622 i64 = i64 >>> 3;
6623 i66 = i26;
6624 } else if ((i60 | 0) == 164) {
6625 i60 = 0;
6626 i65 = HEAP32[i32 >> 2] | 0;
6627 i66 = HEAP32[i33 >> 2] | 0;
6628 do {
6629 if (i63 >>> 0 < (i66 + i65 | 0) >>> 0) {
6630 i71 = i67;
6631 L181 : while (1) {
6632 i70 = (1 << HEAP32[i49 >> 2]) + -1 | 0;
6633 i72 = i70 & i64;
6634 i68 = HEAP32[i48 >> 2] | 0;
6635 i67 = HEAPU8[i68 + (i72 << 2) + 1 | 0] | 0;
6636 if (i67 >>> 0 > i71 >>> 0) {
6637 i67 = i71;
6638 while (1) {
6639 if ((i69 | 0) == 0) {
6640 i63 = i67;
6641 i65 = 0;
6642 break L17;
6643 }
6644 i69 = i69 + -1 | 0;
6645 i71 = i62 + 1 | 0;
6646 i64 = (HEAPU8[i62] << i67) + i64 | 0;
6647 i62 = i67 + 8 | 0;
6648 i72 = i70 & i64;
6649 i67 = HEAPU8[i68 + (i72 << 2) + 1 | 0] | 0;
6650 if (i67 >>> 0 > i62 >>> 0) {
6651 i67 = i62;
6652 i62 = i71;
6653 } else {
6654 i70 = i62;
6655 i62 = i71;
6656 break;
6657 }
6658 }
6659 } else {
6660 i70 = i71;
6661 }
6662 i68 = HEAP16[i68 + (i72 << 2) + 2 >> 1] | 0;
6663 L188 : do {
6664 if ((i68 & 65535) < 16) {
6665 if (i70 >>> 0 < i67 >>> 0) {
6666 while (1) {
6667 if ((i69 | 0) == 0) {
6668 i63 = i70;
6669 i65 = 0;
6670 break L17;
6671 }
6672 i69 = i69 + -1 | 0;
6673 i65 = i62 + 1 | 0;
6674 i64 = (HEAPU8[i62] << i70) + i64 | 0;
6675 i70 = i70 + 8 | 0;
6676 if (i70 >>> 0 < i67 >>> 0) {
6677 i62 = i65;
6678 } else {
6679 i62 = i65;
6680 break;
6681 }
6682 }
6683 }
6684 HEAP32[i36 >> 2] = i63 + 1;
6685 HEAP16[i4 + (i63 << 1) + 112 >> 1] = i68;
6686 i71 = i70 - i67 | 0;
6687 i64 = i64 >>> i67;
6688 } else {
6689 if (i68 << 16 >> 16 == 16) {
6690 i68 = i67 + 2 | 0;
6691 if (i70 >>> 0 < i68 >>> 0) {
6692 i71 = i62;
6693 while (1) {
6694 if ((i69 | 0) == 0) {
6695 i63 = i70;
6696 i65 = 0;
6697 i62 = i71;
6698 break L17;
6699 }
6700 i69 = i69 + -1 | 0;
6701 i62 = i71 + 1 | 0;
6702 i64 = (HEAPU8[i71] << i70) + i64 | 0;
6703 i70 = i70 + 8 | 0;
6704 if (i70 >>> 0 < i68 >>> 0) {
6705 i71 = i62;
6706 } else {
6707 break;
6708 }
6709 }
6710 }
6711 i64 = i64 >>> i67;
6712 i67 = i70 - i67 | 0;
6713 if ((i63 | 0) == 0) {
6714 i60 = 181;
6715 break L181;
6716 }
6717 i67 = i67 + -2 | 0;
6718 i68 = (i64 & 3) + 3 | 0;
6719 i64 = i64 >>> 2;
6720 i70 = HEAP16[i4 + (i63 + -1 << 1) + 112 >> 1] | 0;
6721 } else if (i68 << 16 >> 16 == 17) {
6722 i68 = i67 + 3 | 0;
6723 if (i70 >>> 0 < i68 >>> 0) {
6724 i71 = i62;
6725 while (1) {
6726 if ((i69 | 0) == 0) {
6727 i63 = i70;
6728 i65 = 0;
6729 i62 = i71;
6730 break L17;
6731 }
6732 i69 = i69 + -1 | 0;
6733 i62 = i71 + 1 | 0;
6734 i64 = (HEAPU8[i71] << i70) + i64 | 0;
6735 i70 = i70 + 8 | 0;
6736 if (i70 >>> 0 < i68 >>> 0) {
6737 i71 = i62;
6738 } else {
6739 break;
6740 }
6741 }
6742 }
6743 i64 = i64 >>> i67;
6744 i67 = -3 - i67 + i70 | 0;
6745 i68 = (i64 & 7) + 3 | 0;
6746 i64 = i64 >>> 3;
6747 i70 = 0;
6748 } else {
6749 i68 = i67 + 7 | 0;
6750 if (i70 >>> 0 < i68 >>> 0) {
6751 i71 = i62;
6752 while (1) {
6753 if ((i69 | 0) == 0) {
6754 i63 = i70;
6755 i65 = 0;
6756 i62 = i71;
6757 break L17;
6758 }
6759 i69 = i69 + -1 | 0;
6760 i62 = i71 + 1 | 0;
6761 i64 = (HEAPU8[i71] << i70) + i64 | 0;
6762 i70 = i70 + 8 | 0;
6763 if (i70 >>> 0 < i68 >>> 0) {
6764 i71 = i62;
6765 } else {
6766 break;
6767 }
6768 }
6769 }
6770 i64 = i64 >>> i67;
6771 i67 = -7 - i67 + i70 | 0;
6772 i68 = (i64 & 127) + 11 | 0;
6773 i64 = i64 >>> 7;
6774 i70 = 0;
6775 }
6776 if ((i63 + i68 | 0) >>> 0 > (i66 + i65 | 0) >>> 0) {
6777 i60 = 190;
6778 break L181;
6779 }
6780 while (1) {
6781 i68 = i68 + -1 | 0;
6782 HEAP32[i36 >> 2] = i63 + 1;
6783 HEAP16[i4 + (i63 << 1) + 112 >> 1] = i70;
6784 if ((i68 | 0) == 0) {
6785 i71 = i67;
6786 break L188;
6787 }
6788 i63 = HEAP32[i36 >> 2] | 0;
6789 }
6790 }
6791 } while (0);
6792 i63 = HEAP32[i36 >> 2] | 0;
6793 i65 = HEAP32[i32 >> 2] | 0;
6794 i66 = HEAP32[i33 >> 2] | 0;
6795 if (!(i63 >>> 0 < (i66 + i65 | 0) >>> 0)) {
6796 i60 = 193;
6797 break;
6798 }
6799 }
6800 if ((i60 | 0) == 181) {
6801 i60 = 0;
6802 HEAP32[i35 >> 2] = 11688;
6803 HEAP32[i4 >> 2] = 29;
6804 i63 = i67;
6805 i65 = i69;
6806 i66 = i26;
6807 break L163;
6808 } else if ((i60 | 0) == 190) {
6809 i60 = 0;
6810 HEAP32[i35 >> 2] = 11688;
6811 HEAP32[i4 >> 2] = 29;
6812 i63 = i67;
6813 i65 = i69;
6814 i66 = i26;
6815 break L163;
6816 } else if ((i60 | 0) == 193) {
6817 i60 = 0;
6818 if ((HEAP32[i4 >> 2] | 0) == 29) {
6819 i63 = i71;
6820 i65 = i69;
6821 i66 = i26;
6822 break L163;
6823 } else {
6824 i63 = i71;
6825 break;
6826 }
6827 }
6828 } else {
6829 i63 = i67;
6830 }
6831 } while (0);
6832 if ((HEAP16[i56 >> 1] | 0) == 0) {
6833 HEAP32[i35 >> 2] = 11720;
6834 HEAP32[i4 >> 2] = 29;
6835 i65 = i69;
6836 i66 = i26;
6837 break;
6838 }
6839 HEAP32[i53 >> 2] = i52;
6840 HEAP32[i48 >> 2] = i52;
6841 HEAP32[i49 >> 2] = 9;
6842 i61 = _inflate_table(1, i27, i65, i53, i49, i55) | 0;
6843 if ((i61 | 0) != 0) {
6844 HEAP32[i35 >> 2] = 11760;
6845 HEAP32[i4 >> 2] = 29;
6846 i65 = i69;
6847 i66 = i26;
6848 break;
6849 }
6850 HEAP32[i50 >> 2] = HEAP32[i53 >> 2];
6851 HEAP32[i51 >> 2] = 6;
6852 i61 = _inflate_table(2, i4 + (HEAP32[i32 >> 2] << 1) + 112 | 0, HEAP32[i33 > > 2] | 0, i53, i51, i55) | 0;
6853 if ((i61 | 0) == 0) {
6854 HEAP32[i4 >> 2] = 19;
6855 if (i43) {
6856 i65 = i69;
6857 i61 = 0;
6858 i60 = 285;
6859 break L17;
6860 } else {
6861 i65 = i69;
6862 i61 = 0;
6863 i60 = 201;
6864 break;
6865 }
6866 } else {
6867 HEAP32[i35 >> 2] = 11792;
6868 HEAP32[i4 >> 2] = 29;
6869 i65 = i69;
6870 i66 = i26;
6871 break;
6872 }
6873 }
6874 } while (0);
6875 if ((i60 | 0) == 57) {
6876 i60 = HEAP32[i38 >> 2] | 0;
6877 if ((i60 | 0) != 0) {
6878 HEAP32[i60 + 8 >> 2] = i64 & 255;
6879 HEAP32[i60 + 12 >> 2] = i64 >>> 8;
6880 }
6881 if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
6882 HEAP8[i25] = i64;
6883 HEAP8[i39] = i64 >>> 8;
6884 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
6885 }
6886 HEAP32[i4 >> 2] = 4;
6887 i63 = 0;
6888 i64 = 0;
6889 i60 = 62;
6890 } else if ((i60 | 0) == 201) {
6891 HEAP32[i4 >> 2] = 20;
6892 i60 = 202;
6893 }
6894 do {
6895 if ((i60 | 0) == 62) {
6896 i60 = 0;
6897 i66 = HEAP32[i11 >> 2] | 0;
6898 if ((i66 & 1024 | 0) == 0) {
6899 i60 = HEAP32[i38 >> 2] | 0;
6900 if ((i60 | 0) != 0) {
6901 HEAP32[i60 + 16 >> 2] = 0;
6902 }
6903 } else {
6904 if (i63 >>> 0 < 16) {
6905 while (1) {
6906 if ((i65 | 0) == 0) {
6907 i65 = 0;
6908 break L17;
6909 }
6910 i65 = i65 + -1 | 0;
6911 i67 = i62 + 1 | 0;
6912 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6913 i63 = i63 + 8 | 0;
6914 if (i63 >>> 0 < 16) {
6915 i62 = i67;
6916 } else {
6917 i62 = i67;
6918 break;
6919 }
6920 }
6921 }
6922 HEAP32[i42 >> 2] = i64;
6923 i60 = HEAP32[i38 >> 2] | 0;
6924 if ((i60 | 0) != 0) {
6925 HEAP32[i60 + 20 >> 2] = i64;
6926 i66 = HEAP32[i11 >> 2] | 0;
6927 }
6928 if ((i66 & 512 | 0) == 0) {
6929 i63 = 0;
6930 i64 = 0;
6931 } else {
6932 HEAP8[i25] = i64;
6933 HEAP8[i39] = i64 >>> 8;
6934 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
6935 i63 = 0;
6936 i64 = 0;
6937 }
6938 }
6939 HEAP32[i4 >> 2] = 5;
6940 i60 = 73;
6941 } else if ((i60 | 0) == 202) {
6942 i60 = 0;
6943 if (i65 >>> 0 > 5 & i26 >>> 0 > 257) {
6944 HEAP32[i8 >> 2] = i19;
6945 HEAP32[i15 >> 2] = i26;
6946 HEAP32[i2 >> 2] = i62;
6947 HEAP32[i16 >> 2] = i65;
6948 HEAP32[i17 >> 2] = i64;
6949 HEAP32[i6 >> 2] = i63;
6950 _inflate_fast(i2, i59);
6951 i19 = HEAP32[i8 >> 2] | 0;
6952 i66 = HEAP32[i15 >> 2] | 0;
6953 i62 = HEAP32[i2 >> 2] | 0;
6954 i65 = HEAP32[i16 >> 2] | 0;
6955 i64 = HEAP32[i17 >> 2] | 0;
6956 i63 = HEAP32[i6 >> 2] | 0;
6957 if ((HEAP32[i4 >> 2] | 0) != 11) {
6958 break;
6959 }
6960 HEAP32[i57 >> 2] = -1;
6961 break;
6962 }
6963 HEAP32[i57 >> 2] = 0;
6964 i69 = (1 << HEAP32[i49 >> 2]) + -1 | 0;
6965 i71 = i69 & i64;
6966 i66 = HEAP32[i48 >> 2] | 0;
6967 i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
6968 i67 = i68 & 255;
6969 if (i67 >>> 0 > i63 >>> 0) {
6970 while (1) {
6971 if ((i65 | 0) == 0) {
6972 i65 = 0;
6973 break L17;
6974 }
6975 i65 = i65 + -1 | 0;
6976 i70 = i62 + 1 | 0;
6977 i64 = (HEAPU8[i62] << i63) + i64 | 0;
6978 i63 = i63 + 8 | 0;
6979 i71 = i69 & i64;
6980 i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
6981 i67 = i68 & 255;
6982 if (i67 >>> 0 > i63 >>> 0) {
6983 i62 = i70;
6984 } else {
6985 i62 = i70;
6986 break;
6987 }
6988 }
6989 }
6990 i69 = HEAP8[i66 + (i71 << 2) | 0] | 0;
6991 i70 = HEAP16[i66 + (i71 << 2) + 2 >> 1] | 0;
6992 i71 = i69 & 255;
6993 if (!(i69 << 24 >> 24 == 0)) {
6994 if ((i71 & 240 | 0) == 0) {
6995 i69 = i70 & 65535;
6996 i70 = (1 << i67 + i71) + -1 | 0;
6997 i71 = ((i64 & i70) >>> i67) + i69 | 0;
6998 i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
6999 if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7000 while (1) {
7001 if ((i65 | 0) == 0) {
7002 i65 = 0;
7003 break L17;
7004 }
7005 i65 = i65 + -1 | 0;
7006 i71 = i62 + 1 | 0;
7007 i64 = (HEAPU8[i62] << i63) + i64 | 0;
7008 i63 = i63 + 8 | 0;
7009 i62 = ((i64 & i70) >>> i67) + i69 | 0;
7010 i68 = HEAP8[i66 + (i62 << 2) + 1 | 0] | 0;
7011 if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7012 i62 = i71;
7013 } else {
7014 i69 = i62;
7015 i62 = i71;
7016 break;
7017 }
7018 }
7019 } else {
7020 i69 = i71;
7021 }
7022 i70 = HEAP16[i66 + (i69 << 2) + 2 >> 1] | 0;
7023 i69 = HEAP8[i66 + (i69 << 2) | 0] | 0;
7024 HEAP32[i57 >> 2] = i67;
7025 i66 = i67;
7026 i63 = i63 - i67 | 0;
7027 i64 = i64 >>> i67;
7028 } else {
7029 i66 = 0;
7030 }
7031 } else {
7032 i66 = 0;
7033 i69 = 0;
7034 }
7035 i72 = i68 & 255;
7036 i64 = i64 >>> i72;
7037 i63 = i63 - i72 | 0;
7038 HEAP32[i57 >> 2] = i66 + i72;
7039 HEAP32[i42 >> 2] = i70 & 65535;
7040 i66 = i69 & 255;
7041 if (i69 << 24 >> 24 == 0) {
7042 HEAP32[i4 >> 2] = 25;
7043 i66 = i26;
7044 break;
7045 }
7046 if ((i66 & 32 | 0) != 0) {
7047 HEAP32[i57 >> 2] = -1;
7048 HEAP32[i4 >> 2] = 11;
7049 i66 = i26;
7050 break;
7051 }
7052 if ((i66 & 64 | 0) == 0) {
7053 i66 = i66 & 15;
7054 HEAP32[i37 >> 2] = i66;
7055 HEAP32[i4 >> 2] = 21;
7056 i60 = 221;
7057 break;
7058 } else {
7059 HEAP32[i35 >> 2] = 11816;
7060 HEAP32[i4 >> 2] = 29;
7061 i66 = i26;
7062 break;
7063 }
7064 }
7065 } while (0);
7066 if ((i60 | 0) == 73) {
7067 i68 = HEAP32[i11 >> 2] | 0;
7068 if ((i68 & 1024 | 0) != 0) {
7069 i67 = HEAP32[i42 >> 2] | 0;
7070 i60 = i67 >>> 0 > i65 >>> 0 ? i65 : i67;
7071 if ((i60 | 0) != 0) {
7072 i66 = HEAP32[i38 >> 2] | 0;
7073 if ((i66 | 0) != 0 ? (i20 = HEAP32[i66 + 16 >> 2] | 0, (i20 | 0) != 0) : 0) {
7074 i67 = (HEAP32[i66 + 20 >> 2] | 0) - i67 | 0;
7075 i66 = HEAP32[i66 + 24 >> 2] | 0;
7076 _memcpy(i20 + i67 | 0, i62 | 0, ((i67 + i60 | 0) >>> 0 > i66 >>> 0 ? i66 - i67 | 0 : i60) | 0) | 0;
7077 i68 = HEAP32[i11 >> 2] | 0;
7078 }
7079 if ((i68 & 512 | 0) != 0) {
7080 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i62, i60) | 0;
7081 }
7082 i67 = (HEAP32[i42 >> 2] | 0) - i60 | 0;
7083 HEAP32[i42 >> 2] = i67;
7084 i65 = i65 - i60 | 0;
7085 i62 = i62 + i60 | 0;
7086 }
7087 if ((i67 | 0) != 0) {
7088 i60 = 285;
7089 break;
7090 }
7091 }
7092 HEAP32[i42 >> 2] = 0;
7093 HEAP32[i4 >> 2] = 6;
7094 i60 = 83;
7095 } else if ((i60 | 0) == 221) {
7096 i60 = 0;
7097 if ((i66 | 0) == 0) {
7098 i60 = HEAP32[i42 >> 2] | 0;
7099 } else {
7100 if (i63 >>> 0 < i66 >>> 0) {
7101 while (1) {
7102 if ((i65 | 0) == 0) {
7103 i65 = 0;
7104 break L17;
7105 }
7106 i65 = i65 + -1 | 0;
7107 i67 = i62 + 1 | 0;
7108 i64 = (HEAPU8[i62] << i63) + i64 | 0;
7109 i63 = i63 + 8 | 0;
7110 if (i63 >>> 0 < i66 >>> 0) {
7111 i62 = i67;
7112 } else {
7113 i62 = i67;
7114 break;
7115 }
7116 }
7117 }
7118 i60 = (HEAP32[i42 >> 2] | 0) + ((1 << i66) + -1 & i64) | 0;
7119 HEAP32[i42 >> 2] = i60;
7120 HEAP32[i57 >> 2] = (HEAP32[i57 >> 2] | 0) + i66;
7121 i63 = i63 - i66 | 0;
7122 i64 = i64 >>> i66;
7123 }
7124 HEAP32[i58 >> 2] = i60;
7125 HEAP32[i4 >> 2] = 22;
7126 i60 = 228;
7127 }
7128 do {
7129 if ((i60 | 0) == 83) {
7130 if ((HEAP32[i11 >> 2] & 2048 | 0) == 0) {
7131 i60 = HEAP32[i38 >> 2] | 0;
7132 if ((i60 | 0) != 0) {
7133 HEAP32[i60 + 28 >> 2] = 0;
7134 }
7135 } else {
7136 if ((i65 | 0) == 0) {
7137 i65 = 0;
7138 i60 = 285;
7139 break L17;
7140 } else {
7141 i66 = 0;
7142 }
7143 while (1) {
7144 i60 = i66 + 1 | 0;
7145 i67 = HEAP8[i62 + i66 | 0] | 0;
7146 i66 = HEAP32[i38 >> 2] | 0;
7147 if (((i66 | 0) != 0 ? (i23 = HEAP32[i66 + 28 >> 2] | 0, (i23 | 0) != 0) : 0) ? (i21 = HEAP32[i42 >> 2] | 0, i21 >>> 0 < (HEAP32[i66 + 32 >> 2] | 0) >>> 0) : 0) {
7148 HEAP32[i42 >> 2] = i21 + 1;
7149 HEAP8[i23 + i21 | 0] = i67;
7150 }
7151 i66 = i67 << 24 >> 24 != 0;
7152 if (i66 & i60 >>> 0 < i65 >>> 0) {
7153 i66 = i60;
7154 } else {
7155 break;
7156 }
7157 }
7158 if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
7159 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i62, i60) | 0;
7160 }
7161 i65 = i65 - i60 | 0;
7162 i62 = i62 + i60 | 0;
7163 if (i66) {
7164 i60 = 285;
7165 break L17;
7166 }
7167 }
7168 HEAP32[i42 >> 2] = 0;
7169 HEAP32[i4 >> 2] = 7;
7170 i60 = 96;
7171 } else if ((i60 | 0) == 228) {
7172 i60 = 0;
7173 i69 = (1 << HEAP32[i51 >> 2]) + -1 | 0;
7174 i71 = i69 & i64;
7175 i66 = HEAP32[i50 >> 2] | 0;
7176 i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
7177 i67 = i68 & 255;
7178 if (i67 >>> 0 > i63 >>> 0) {
7179 while (1) {
7180 if ((i65 | 0) == 0) {
7181 i65 = 0;
7182 break L17;
7183 }
7184 i65 = i65 + -1 | 0;
7185 i70 = i62 + 1 | 0;
7186 i64 = (HEAPU8[i62] << i63) + i64 | 0;
7187 i63 = i63 + 8 | 0;
7188 i71 = i69 & i64;
7189 i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
7190 i67 = i68 & 255;
7191 if (i67 >>> 0 > i63 >>> 0) {
7192 i62 = i70;
7193 } else {
7194 i62 = i70;
7195 break;
7196 }
7197 }
7198 }
7199 i69 = HEAP8[i66 + (i71 << 2) | 0] | 0;
7200 i70 = HEAP16[i66 + (i71 << 2) + 2 >> 1] | 0;
7201 i71 = i69 & 255;
7202 if ((i71 & 240 | 0) == 0) {
7203 i69 = i70 & 65535;
7204 i70 = (1 << i67 + i71) + -1 | 0;
7205 i71 = ((i64 & i70) >>> i67) + i69 | 0;
7206 i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
7207 if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7208 while (1) {
7209 if ((i65 | 0) == 0) {
7210 i65 = 0;
7211 break L17;
7212 }
7213 i65 = i65 + -1 | 0;
7214 i71 = i62 + 1 | 0;
7215 i64 = (HEAPU8[i62] << i63) + i64 | 0;
7216 i63 = i63 + 8 | 0;
7217 i62 = ((i64 & i70) >>> i67) + i69 | 0;
7218 i68 = HEAP8[i66 + (i62 << 2) + 1 | 0] | 0;
7219 if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7220 i62 = i71;
7221 } else {
7222 i69 = i62;
7223 i62 = i71;
7224 break;
7225 }
7226 }
7227 } else {
7228 i69 = i71;
7229 }
7230 i70 = HEAP16[i66 + (i69 << 2) + 2 >> 1] | 0;
7231 i69 = HEAP8[i66 + (i69 << 2) | 0] | 0;
7232 i66 = (HEAP32[i57 >> 2] | 0) + i67 | 0;
7233 HEAP32[i57 >> 2] = i66;
7234 i63 = i63 - i67 | 0;
7235 i64 = i64 >>> i67;
7236 } else {
7237 i66 = HEAP32[i57 >> 2] | 0;
7238 }
7239 i72 = i68 & 255;
7240 i64 = i64 >>> i72;
7241 i63 = i63 - i72 | 0;
7242 HEAP32[i57 >> 2] = i66 + i72;
7243 i66 = i69 & 255;
7244 if ((i66 & 64 | 0) == 0) {
7245 HEAP32[i54 >> 2] = i70 & 65535;
7246 i66 = i66 & 15;
7247 HEAP32[i37 >> 2] = i66;
7248 HEAP32[i4 >> 2] = 23;
7249 i60 = 240;
7250 break;
7251 } else {
7252 HEAP32[i35 >> 2] = 11848;
7253 HEAP32[i4 >> 2] = 29;
7254 i66 = i26;
7255 break;
7256 }
7257 }
7258 } while (0);
7259 if ((i60 | 0) == 96) {
7260 if ((HEAP32[i11 >> 2] & 4096 | 0) == 0) {
7261 i60 = HEAP32[i38 >> 2] | 0;
7262 if ((i60 | 0) != 0) {
7263 HEAP32[i60 + 36 >> 2] = 0;
7264 }
7265 } else {
7266 if ((i65 | 0) == 0) {
7267 i65 = 0;
7268 i60 = 285;
7269 break;
7270 } else {
7271 i66 = 0;
7272 }
7273 while (1) {
7274 i60 = i66 + 1 | 0;
7275 i66 = HEAP8[i62 + i66 | 0] | 0;
7276 i67 = HEAP32[i38 >> 2] | 0;
7277 if (((i67 | 0) != 0 ? (i24 = HEAP32[i67 + 36 >> 2] | 0, (i24 | 0) != 0) : 0 ) ? (i22 = HEAP32[i42 >> 2] | 0, i22 >>> 0 < (HEAP32[i67 + 40 >> 2] | 0) >>> 0) : 0) {
7278 HEAP32[i42 >> 2] = i22 + 1;
7279 HEAP8[i24 + i22 | 0] = i66;
7280 }
7281 i66 = i66 << 24 >> 24 != 0;
7282 if (i66 & i60 >>> 0 < i65 >>> 0) {
7283 i66 = i60;
7284 } else {
7285 break;
7286 }
7287 }
7288 if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
7289 HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i62, i60) | 0;
7290 }
7291 i65 = i65 - i60 | 0;
7292 i62 = i62 + i60 | 0;
7293 if (i66) {
7294 i60 = 285;
7295 break;
7296 }
7297 }
7298 HEAP32[i4 >> 2] = 8;
7299 i60 = 109;
7300 } else if ((i60 | 0) == 240) {
7301 i60 = 0;
7302 if ((i66 | 0) != 0) {
7303 if (i63 >>> 0 < i66 >>> 0) {
7304 i67 = i62;
7305 while (1) {
7306 if ((i65 | 0) == 0) {
7307 i65 = 0;
7308 i62 = i67;
7309 break L17;
7310 }
7311 i65 = i65 + -1 | 0;
7312 i62 = i67 + 1 | 0;
7313 i64 = (HEAPU8[i67] << i63) + i64 | 0;
7314 i63 = i63 + 8 | 0;
7315 if (i63 >>> 0 < i66 >>> 0) {
7316 i67 = i62;
7317 } else {
7318 break;
7319 }
7320 }
7321 }
7322 HEAP32[i54 >> 2] = (HEAP32[i54 >> 2] | 0) + ((1 << i66) + -1 & i64);
7323 HEAP32[i57 >> 2] = (HEAP32[i57 >> 2] | 0) + i66;
7324 i63 = i63 - i66 | 0;
7325 i64 = i64 >>> i66;
7326 }
7327 HEAP32[i4 >> 2] = 24;
7328 i60 = 246;
7329 }
7330 do {
7331 if ((i60 | 0) == 109) {
7332 i60 = 0;
7333 i66 = HEAP32[i11 >> 2] | 0;
7334 if ((i66 & 512 | 0) != 0) {
7335 if (i63 >>> 0 < 16) {
7336 i67 = i62;
7337 while (1) {
7338 if ((i65 | 0) == 0) {
7339 i65 = 0;
7340 i62 = i67;
7341 break L17;
7342 }
7343 i65 = i65 + -1 | 0;
7344 i62 = i67 + 1 | 0;
7345 i64 = (HEAPU8[i67] << i63) + i64 | 0;
7346 i63 = i63 + 8 | 0;
7347 if (i63 >>> 0 < 16) {
7348 i67 = i62;
7349 } else {
7350 break;
7351 }
7352 }
7353 }
7354 if ((i64 | 0) == (HEAP32[i10 >> 2] & 65535 | 0)) {
7355 i63 = 0;
7356 i64 = 0;
7357 } else {
7358 HEAP32[i35 >> 2] = 11536;
7359 HEAP32[i4 >> 2] = 29;
7360 i66 = i26;
7361 break;
7362 }
7363 }
7364 i67 = HEAP32[i38 >> 2] | 0;
7365 if ((i67 | 0) != 0) {
7366 HEAP32[i67 + 44 >> 2] = i66 >>> 9 & 1;
7367 HEAP32[i67 + 48 >> 2] = 1;
7368 }
7369 i66 = _crc32(0, 0, 0) | 0;
7370 HEAP32[i10 >> 2] = i66;
7371 HEAP32[i9 >> 2] = i66;
7372 HEAP32[i4 >> 2] = 11;
7373 i66 = i26;
7374 } else if ((i60 | 0) == 246) {
7375 i60 = 0;
7376 if ((i26 | 0) == 0) {
7377 i26 = 0;
7378 i60 = 285;
7379 break L17;
7380 }
7381 i67 = i59 - i26 | 0;
7382 i66 = HEAP32[i54 >> 2] | 0;
7383 if (i66 >>> 0 > i67 >>> 0) {
7384 i67 = i66 - i67 | 0;
7385 if (i67 >>> 0 > (HEAP32[i28 >> 2] | 0) >>> 0 ? (HEAP32[i29 >> 2] | 0) != 0 : 0) {
7386 HEAP32[i35 >> 2] = 11872;
7387 HEAP32[i4 >> 2] = 29;
7388 i66 = i26;
7389 break;
7390 }
7391 i68 = HEAP32[i30 >> 2] | 0;
7392 if (i67 >>> 0 > i68 >>> 0) {
7393 i68 = i67 - i68 | 0;
7394 i66 = i68;
7395 i68 = (HEAP32[i31 >> 2] | 0) + ((HEAP32[i18 >> 2] | 0) - i68) | 0;
7396 } else {
7397 i66 = i67;
7398 i68 = (HEAP32[i31 >> 2] | 0) + (i68 - i67) | 0;
7399 }
7400 i69 = HEAP32[i42 >> 2] | 0;
7401 i67 = i69;
7402 i69 = i66 >>> 0 > i69 >>> 0 ? i69 : i66;
7403 } else {
7404 i69 = HEAP32[i42 >> 2] | 0;
7405 i67 = i69;
7406 i68 = i19 + (0 - i66) | 0;
7407 }
7408 i66 = i69 >>> 0 > i26 >>> 0 ? i26 : i69;
7409 HEAP32[i42 >> 2] = i67 - i66;
7410 i67 = ~i26;
7411 i69 = ~i69;
7412 i67 = i67 >>> 0 > i69 >>> 0 ? i67 : i69;
7413 i69 = i66;
7414 i70 = i19;
7415 while (1) {
7416 HEAP8[i70] = HEAP8[i68] | 0;
7417 i69 = i69 + -1 | 0;
7418 if ((i69 | 0) == 0) {
7419 break;
7420 } else {
7421 i68 = i68 + 1 | 0;
7422 i70 = i70 + 1 | 0;
7423 }
7424 }
7425 i66 = i26 - i66 | 0;
7426 i19 = i19 + ~i67 | 0;
7427 if ((HEAP32[i42 >> 2] | 0) == 0) {
7428 HEAP32[i4 >> 2] = 20;
7429 }
7430 }
7431 } while (0);
7432 i68 = HEAP32[i4 >> 2] | 0;
7433 i67 = i63;
7434 i26 = i66;
7435 }
7436 if ((i60 | 0) == 122) {
7437 HEAP32[i8 >> 2] = i19;
7438 HEAP32[i15 >> 2] = i26;
7439 HEAP32[i2 >> 2] = i62;
7440 HEAP32[i16 >> 2] = i65;
7441 HEAP32[i17 >> 2] = i64;
7442 HEAP32[i6 >> 2] = i63;
7443 i72 = 2;
7444 STACKTOP = i1;
7445 return i72 | 0;
7446 } else if ((i60 | 0) == 133) {
7447 i63 = i63 + -3 | 0;
7448 i64 = i64 >>> 3;
7449 } else if ((i60 | 0) == 284) {
7450 HEAP32[i4 >> 2] = 28;
7451 i61 = 1;
7452 } else if ((i60 | 0) != 285) if ((i60 | 0) == 299) {
7453 i72 = -4;
7454 STACKTOP = i1;
7455 return i72 | 0;
7456 } else if ((i60 | 0) == 300) {
7457 STACKTOP = i1;
7458 return i2 | 0;
7459 }
7460 HEAP32[i8 >> 2] = i19;
7461 HEAP32[i15 >> 2] = i26;
7462 HEAP32[i2 >> 2] = i62;
7463 HEAP32[i16 >> 2] = i65;
7464 HEAP32[i17 >> 2] = i64;
7465 HEAP32[i6 >> 2] = i63;
7466 if ((HEAP32[i18 >> 2] | 0) == 0) {
7467 if ((HEAP32[i4 >> 2] | 0) >>> 0 < 26 ? (i59 | 0) != (HEAP32[i15 >> 2] | 0) : 0 ) {
7468 i60 = 289;
7469 }
7470 } else {
7471 i60 = 289;
7472 }
7473 if ((i60 | 0) == 289 ? (_updatewindow(i2, i59) | 0) != 0 : 0) {
7474 HEAP32[i4 >> 2] = 30;
7475 i72 = -4;
7476 STACKTOP = i1;
7477 return i72 | 0;
7478 }
7479 i16 = HEAP32[i16 >> 2] | 0;
7480 i72 = HEAP32[i15 >> 2] | 0;
7481 i15 = i59 - i72 | 0;
7482 i71 = i2 + 8 | 0;
7483 HEAP32[i71 >> 2] = i5 - i16 + (HEAP32[i71 >> 2] | 0);
7484 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i15;
7485 HEAP32[i14 >> 2] = (HEAP32[i14 >> 2] | 0) + i15;
7486 i13 = (i59 | 0) == (i72 | 0);
7487 if (!((HEAP32[i12 >> 2] | 0) == 0 | i13)) {
7488 i12 = HEAP32[i10 >> 2] | 0;
7489 i8 = (HEAP32[i8 >> 2] | 0) + (0 - i15) | 0;
7490 if ((HEAP32[i11 >> 2] | 0) == 0) {
7491 i8 = _adler32(i12, i8, i15) | 0;
7492 } else {
7493 i8 = _crc32(i12, i8, i15) | 0;
7494 }
7495 HEAP32[i10 >> 2] = i8;
7496 HEAP32[i9 >> 2] = i8;
7497 }
7498 i4 = HEAP32[i4 >> 2] | 0;
7499 if ((i4 | 0) == 19) {
7500 i8 = 256;
7501 } else {
7502 i8 = (i4 | 0) == 14 ? 256 : 0;
7503 }
7504 HEAP32[i2 + 44 >> 2] = ((HEAP32[i7 >> 2] | 0) != 0 ? 64 : 0) + (HEAP32[i6 >> 2] | 0) + ((i4 | 0) == 11 ? 128 : 0) + i8;
7505 i72 = ((i5 | 0) == (i16 | 0) & i13 | (i3 | 0) == 4) & (i61 | 0) == 0 ? -5 : i61 ;
7506 STACKTOP = i1;
7507 return i72 | 0;
7508 }
7509 function _malloc(i12) {
7510 i12 = i12 | 0;
7511 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i2 0 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i 29 = 0, i30 = 0, i31 = 0, i32 = 0;
7512 i1 = STACKTOP;
7513 do {
7514 if (i12 >>> 0 < 245) {
7515 if (i12 >>> 0 < 11) {
7516 i12 = 16;
7517 } else {
7518 i12 = i12 + 11 & -8;
7519 }
7520 i20 = i12 >>> 3;
7521 i18 = HEAP32[3618] | 0;
7522 i21 = i18 >>> i20;
7523 if ((i21 & 3 | 0) != 0) {
7524 i6 = (i21 & 1 ^ 1) + i20 | 0;
7525 i5 = i6 << 1;
7526 i3 = 14512 + (i5 << 2) | 0;
7527 i5 = 14512 + (i5 + 2 << 2) | 0;
7528 i7 = HEAP32[i5 >> 2] | 0;
7529 i2 = i7 + 8 | 0;
7530 i4 = HEAP32[i2 >> 2] | 0;
7531 do {
7532 if ((i3 | 0) != (i4 | 0)) {
7533 if (i4 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7534 _abort();
7535 }
7536 i8 = i4 + 12 | 0;
7537 if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) {
7538 HEAP32[i8 >> 2] = i3;
7539 HEAP32[i5 >> 2] = i4;
7540 break;
7541 } else {
7542 _abort();
7543 }
7544 } else {
7545 HEAP32[3618] = i18 & ~(1 << i6);
7546 }
7547 } while (0);
7548 i32 = i6 << 3;
7549 HEAP32[i7 + 4 >> 2] = i32 | 3;
7550 i32 = i7 + (i32 | 4) | 0;
7551 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
7552 i32 = i2;
7553 STACKTOP = i1;
7554 return i32 | 0;
7555 }
7556 if (i12 >>> 0 > (HEAP32[14480 >> 2] | 0) >>> 0) {
7557 if ((i21 | 0) != 0) {
7558 i7 = 2 << i20;
7559 i7 = i21 << i20 & (i7 | 0 - i7);
7560 i7 = (i7 & 0 - i7) + -1 | 0;
7561 i2 = i7 >>> 12 & 16;
7562 i7 = i7 >>> i2;
7563 i6 = i7 >>> 5 & 8;
7564 i7 = i7 >>> i6;
7565 i5 = i7 >>> 2 & 4;
7566 i7 = i7 >>> i5;
7567 i4 = i7 >>> 1 & 2;
7568 i7 = i7 >>> i4;
7569 i3 = i7 >>> 1 & 1;
7570 i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0;
7571 i7 = i3 << 1;
7572 i4 = 14512 + (i7 << 2) | 0;
7573 i7 = 14512 + (i7 + 2 << 2) | 0;
7574 i5 = HEAP32[i7 >> 2] | 0;
7575 i2 = i5 + 8 | 0;
7576 i6 = HEAP32[i2 >> 2] | 0;
7577 do {
7578 if ((i4 | 0) != (i6 | 0)) {
7579 if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7580 _abort();
7581 }
7582 i8 = i6 + 12 | 0;
7583 if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) {
7584 HEAP32[i8 >> 2] = i4;
7585 HEAP32[i7 >> 2] = i6;
7586 break;
7587 } else {
7588 _abort();
7589 }
7590 } else {
7591 HEAP32[3618] = i18 & ~(1 << i3);
7592 }
7593 } while (0);
7594 i6 = i3 << 3;
7595 i4 = i6 - i12 | 0;
7596 HEAP32[i5 + 4 >> 2] = i12 | 3;
7597 i3 = i5 + i12 | 0;
7598 HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1;
7599 HEAP32[i5 + i6 >> 2] = i4;
7600 i6 = HEAP32[14480 >> 2] | 0;
7601 if ((i6 | 0) != 0) {
7602 i5 = HEAP32[14492 >> 2] | 0;
7603 i8 = i6 >>> 3;
7604 i9 = i8 << 1;
7605 i6 = 14512 + (i9 << 2) | 0;
7606 i7 = HEAP32[3618] | 0;
7607 i8 = 1 << i8;
7608 if ((i7 & i8 | 0) != 0) {
7609 i7 = 14512 + (i9 + 2 << 2) | 0;
7610 i8 = HEAP32[i7 >> 2] | 0;
7611 if (i8 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7612 _abort();
7613 } else {
7614 i28 = i7;
7615 i27 = i8;
7616 }
7617 } else {
7618 HEAP32[3618] = i7 | i8;
7619 i28 = 14512 + (i9 + 2 << 2) | 0;
7620 i27 = i6;
7621 }
7622 HEAP32[i28 >> 2] = i5;
7623 HEAP32[i27 + 12 >> 2] = i5;
7624 HEAP32[i5 + 8 >> 2] = i27;
7625 HEAP32[i5 + 12 >> 2] = i6;
7626 }
7627 HEAP32[14480 >> 2] = i4;
7628 HEAP32[14492 >> 2] = i3;
7629 i32 = i2;
7630 STACKTOP = i1;
7631 return i32 | 0;
7632 }
7633 i18 = HEAP32[14476 >> 2] | 0;
7634 if ((i18 | 0) != 0) {
7635 i2 = (i18 & 0 - i18) + -1 | 0;
7636 i31 = i2 >>> 12 & 16;
7637 i2 = i2 >>> i31;
7638 i30 = i2 >>> 5 & 8;
7639 i2 = i2 >>> i30;
7640 i32 = i2 >>> 2 & 4;
7641 i2 = i2 >>> i32;
7642 i6 = i2 >>> 1 & 2;
7643 i2 = i2 >>> i6;
7644 i3 = i2 >>> 1 & 1;
7645 i3 = HEAP32[14776 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0;
7646 i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0;
7647 i6 = i3;
7648 while (1) {
7649 i5 = HEAP32[i6 + 16 >> 2] | 0;
7650 if ((i5 | 0) == 0) {
7651 i5 = HEAP32[i6 + 20 >> 2] | 0;
7652 if ((i5 | 0) == 0) {
7653 break;
7654 }
7655 }
7656 i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0;
7657 i4 = i6 >>> 0 < i2 >>> 0;
7658 i2 = i4 ? i6 : i2;
7659 i6 = i5;
7660 i3 = i4 ? i5 : i3;
7661 }
7662 i6 = HEAP32[14488 >> 2] | 0;
7663 if (i3 >>> 0 < i6 >>> 0) {
7664 _abort();
7665 }
7666 i4 = i3 + i12 | 0;
7667 if (!(i3 >>> 0 < i4 >>> 0)) {
7668 _abort();
7669 }
7670 i5 = HEAP32[i3 + 24 >> 2] | 0;
7671 i7 = HEAP32[i3 + 12 >> 2] | 0;
7672 do {
7673 if ((i7 | 0) == (i3 | 0)) {
7674 i8 = i3 + 20 | 0;
7675 i7 = HEAP32[i8 >> 2] | 0;
7676 if ((i7 | 0) == 0) {
7677 i8 = i3 + 16 | 0;
7678 i7 = HEAP32[i8 >> 2] | 0;
7679 if ((i7 | 0) == 0) {
7680 i26 = 0;
7681 break;
7682 }
7683 }
7684 while (1) {
7685 i10 = i7 + 20 | 0;
7686 i9 = HEAP32[i10 >> 2] | 0;
7687 if ((i9 | 0) != 0) {
7688 i7 = i9;
7689 i8 = i10;
7690 continue;
7691 }
7692 i10 = i7 + 16 | 0;
7693 i9 = HEAP32[i10 >> 2] | 0;
7694 if ((i9 | 0) == 0) {
7695 break;
7696 } else {
7697 i7 = i9;
7698 i8 = i10;
7699 }
7700 }
7701 if (i8 >>> 0 < i6 >>> 0) {
7702 _abort();
7703 } else {
7704 HEAP32[i8 >> 2] = 0;
7705 i26 = i7;
7706 break;
7707 }
7708 } else {
7709 i8 = HEAP32[i3 + 8 >> 2] | 0;
7710 if (i8 >>> 0 < i6 >>> 0) {
7711 _abort();
7712 }
7713 i6 = i8 + 12 | 0;
7714 if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) {
7715 _abort();
7716 }
7717 i9 = i7 + 8 | 0;
7718 if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) {
7719 HEAP32[i6 >> 2] = i7;
7720 HEAP32[i9 >> 2] = i8;
7721 i26 = i7;
7722 break;
7723 } else {
7724 _abort();
7725 }
7726 }
7727 } while (0);
7728 do {
7729 if ((i5 | 0) != 0) {
7730 i7 = HEAP32[i3 + 28 >> 2] | 0;
7731 i6 = 14776 + (i7 << 2) | 0;
7732 if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) {
7733 HEAP32[i6 >> 2] = i26;
7734 if ((i26 | 0) == 0) {
7735 HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i7);
7736 break;
7737 }
7738 } else {
7739 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7740 _abort();
7741 }
7742 i6 = i5 + 16 | 0;
7743 if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) {
7744 HEAP32[i6 >> 2] = i26;
7745 } else {
7746 HEAP32[i5 + 20 >> 2] = i26;
7747 }
7748 if ((i26 | 0) == 0) {
7749 break;
7750 }
7751 }
7752 if (i26 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7753 _abort();
7754 }
7755 HEAP32[i26 + 24 >> 2] = i5;
7756 i5 = HEAP32[i3 + 16 >> 2] | 0;
7757 do {
7758 if ((i5 | 0) != 0) {
7759 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7760 _abort();
7761 } else {
7762 HEAP32[i26 + 16 >> 2] = i5;
7763 HEAP32[i5 + 24 >> 2] = i26;
7764 break;
7765 }
7766 }
7767 } while (0);
7768 i5 = HEAP32[i3 + 20 >> 2] | 0;
7769 if ((i5 | 0) != 0) {
7770 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7771 _abort();
7772 } else {
7773 HEAP32[i26 + 20 >> 2] = i5;
7774 HEAP32[i5 + 24 >> 2] = i26;
7775 break;
7776 }
7777 }
7778 }
7779 } while (0);
7780 if (i2 >>> 0 < 16) {
7781 i32 = i2 + i12 | 0;
7782 HEAP32[i3 + 4 >> 2] = i32 | 3;
7783 i32 = i3 + (i32 + 4) | 0;
7784 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
7785 } else {
7786 HEAP32[i3 + 4 >> 2] = i12 | 3;
7787 HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1;
7788 HEAP32[i3 + (i2 + i12) >> 2] = i2;
7789 i6 = HEAP32[14480 >> 2] | 0;
7790 if ((i6 | 0) != 0) {
7791 i5 = HEAP32[14492 >> 2] | 0;
7792 i8 = i6 >>> 3;
7793 i9 = i8 << 1;
7794 i6 = 14512 + (i9 << 2) | 0;
7795 i7 = HEAP32[3618] | 0;
7796 i8 = 1 << i8;
7797 if ((i7 & i8 | 0) != 0) {
7798 i7 = 14512 + (i9 + 2 << 2) | 0;
7799 i8 = HEAP32[i7 >> 2] | 0;
7800 if (i8 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7801 _abort();
7802 } else {
7803 i25 = i7;
7804 i24 = i8;
7805 }
7806 } else {
7807 HEAP32[3618] = i7 | i8;
7808 i25 = 14512 + (i9 + 2 << 2) | 0;
7809 i24 = i6;
7810 }
7811 HEAP32[i25 >> 2] = i5;
7812 HEAP32[i24 + 12 >> 2] = i5;
7813 HEAP32[i5 + 8 >> 2] = i24;
7814 HEAP32[i5 + 12 >> 2] = i6;
7815 }
7816 HEAP32[14480 >> 2] = i2;
7817 HEAP32[14492 >> 2] = i4;
7818 }
7819 i32 = i3 + 8 | 0;
7820 STACKTOP = i1;
7821 return i32 | 0;
7822 }
7823 }
7824 } else {
7825 if (!(i12 >>> 0 > 4294967231)) {
7826 i24 = i12 + 11 | 0;
7827 i12 = i24 & -8;
7828 i26 = HEAP32[14476 >> 2] | 0;
7829 if ((i26 | 0) != 0) {
7830 i25 = 0 - i12 | 0;
7831 i24 = i24 >>> 8;
7832 if ((i24 | 0) != 0) {
7833 if (i12 >>> 0 > 16777215) {
7834 i27 = 31;
7835 } else {
7836 i31 = (i24 + 1048320 | 0) >>> 16 & 8;
7837 i32 = i24 << i31;
7838 i30 = (i32 + 520192 | 0) >>> 16 & 4;
7839 i32 = i32 << i30;
7840 i27 = (i32 + 245760 | 0) >>> 16 & 2;
7841 i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0;
7842 i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1;
7843 }
7844 } else {
7845 i27 = 0;
7846 }
7847 i30 = HEAP32[14776 + (i27 << 2) >> 2] | 0;
7848 L126 : do {
7849 if ((i30 | 0) == 0) {
7850 i29 = 0;
7851 i24 = 0;
7852 } else {
7853 if ((i27 | 0) == 31) {
7854 i24 = 0;
7855 } else {
7856 i24 = 25 - (i27 >>> 1) | 0;
7857 }
7858 i29 = 0;
7859 i28 = i12 << i24;
7860 i24 = 0;
7861 while (1) {
7862 i32 = HEAP32[i30 + 4 >> 2] & -8;
7863 i31 = i32 - i12 | 0;
7864 if (i31 >>> 0 < i25 >>> 0) {
7865 if ((i32 | 0) == (i12 | 0)) {
7866 i25 = i31;
7867 i29 = i30;
7868 i24 = i30;
7869 break L126;
7870 } else {
7871 i25 = i31;
7872 i24 = i30;
7873 }
7874 }
7875 i31 = HEAP32[i30 + 20 >> 2] | 0;
7876 i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0;
7877 i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31;
7878 if ((i30 | 0) == 0) {
7879 break;
7880 } else {
7881 i28 = i28 << 1;
7882 }
7883 }
7884 }
7885 } while (0);
7886 if ((i29 | 0) == 0 & (i24 | 0) == 0) {
7887 i32 = 2 << i27;
7888 i26 = i26 & (i32 | 0 - i32);
7889 if ((i26 | 0) == 0) {
7890 break;
7891 }
7892 i32 = (i26 & 0 - i26) + -1 | 0;
7893 i28 = i32 >>> 12 & 16;
7894 i32 = i32 >>> i28;
7895 i27 = i32 >>> 5 & 8;
7896 i32 = i32 >>> i27;
7897 i30 = i32 >>> 2 & 4;
7898 i32 = i32 >>> i30;
7899 i31 = i32 >>> 1 & 2;
7900 i32 = i32 >>> i31;
7901 i29 = i32 >>> 1 & 1;
7902 i29 = HEAP32[14776 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) >> 2] | 0;
7903 }
7904 if ((i29 | 0) != 0) {
7905 while (1) {
7906 i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0;
7907 i26 = i27 >>> 0 < i25 >>> 0;
7908 i25 = i26 ? i27 : i25;
7909 i24 = i26 ? i29 : i24;
7910 i26 = HEAP32[i29 + 16 >> 2] | 0;
7911 if ((i26 | 0) != 0) {
7912 i29 = i26;
7913 continue;
7914 }
7915 i29 = HEAP32[i29 + 20 >> 2] | 0;
7916 if ((i29 | 0) == 0) {
7917 break;
7918 }
7919 }
7920 }
7921 if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[14480 >> 2] | 0) - i12 | 0) >>> 0 : 0) {
7922 i4 = HEAP32[14488 >> 2] | 0;
7923 if (i24 >>> 0 < i4 >>> 0) {
7924 _abort();
7925 }
7926 i2 = i24 + i12 | 0;
7927 if (!(i24 >>> 0 < i2 >>> 0)) {
7928 _abort();
7929 }
7930 i3 = HEAP32[i24 + 24 >> 2] | 0;
7931 i6 = HEAP32[i24 + 12 >> 2] | 0;
7932 do {
7933 if ((i6 | 0) == (i24 | 0)) {
7934 i6 = i24 + 20 | 0;
7935 i5 = HEAP32[i6 >> 2] | 0;
7936 if ((i5 | 0) == 0) {
7937 i6 = i24 + 16 | 0;
7938 i5 = HEAP32[i6 >> 2] | 0;
7939 if ((i5 | 0) == 0) {
7940 i22 = 0;
7941 break;
7942 }
7943 }
7944 while (1) {
7945 i8 = i5 + 20 | 0;
7946 i7 = HEAP32[i8 >> 2] | 0;
7947 if ((i7 | 0) != 0) {
7948 i5 = i7;
7949 i6 = i8;
7950 continue;
7951 }
7952 i7 = i5 + 16 | 0;
7953 i8 = HEAP32[i7 >> 2] | 0;
7954 if ((i8 | 0) == 0) {
7955 break;
7956 } else {
7957 i5 = i8;
7958 i6 = i7;
7959 }
7960 }
7961 if (i6 >>> 0 < i4 >>> 0) {
7962 _abort();
7963 } else {
7964 HEAP32[i6 >> 2] = 0;
7965 i22 = i5;
7966 break;
7967 }
7968 } else {
7969 i5 = HEAP32[i24 + 8 >> 2] | 0;
7970 if (i5 >>> 0 < i4 >>> 0) {
7971 _abort();
7972 }
7973 i7 = i5 + 12 | 0;
7974 if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) {
7975 _abort();
7976 }
7977 i4 = i6 + 8 | 0;
7978 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
7979 HEAP32[i7 >> 2] = i6;
7980 HEAP32[i4 >> 2] = i5;
7981 i22 = i6;
7982 break;
7983 } else {
7984 _abort();
7985 }
7986 }
7987 } while (0);
7988 do {
7989 if ((i3 | 0) != 0) {
7990 i4 = HEAP32[i24 + 28 >> 2] | 0;
7991 i5 = 14776 + (i4 << 2) | 0;
7992 if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) {
7993 HEAP32[i5 >> 2] = i22;
7994 if ((i22 | 0) == 0) {
7995 HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i4);
7996 break;
7997 }
7998 } else {
7999 if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8000 _abort();
8001 }
8002 i4 = i3 + 16 | 0;
8003 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
8004 HEAP32[i4 >> 2] = i22;
8005 } else {
8006 HEAP32[i3 + 20 >> 2] = i22;
8007 }
8008 if ((i22 | 0) == 0) {
8009 break;
8010 }
8011 }
8012 if (i22 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8013 _abort();
8014 }
8015 HEAP32[i22 + 24 >> 2] = i3;
8016 i3 = HEAP32[i24 + 16 >> 2] | 0;
8017 do {
8018 if ((i3 | 0) != 0) {
8019 if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8020 _abort();
8021 } else {
8022 HEAP32[i22 + 16 >> 2] = i3;
8023 HEAP32[i3 + 24 >> 2] = i22;
8024 break;
8025 }
8026 }
8027 } while (0);
8028 i3 = HEAP32[i24 + 20 >> 2] | 0;
8029 if ((i3 | 0) != 0) {
8030 if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8031 _abort();
8032 } else {
8033 HEAP32[i22 + 20 >> 2] = i3;
8034 HEAP32[i3 + 24 >> 2] = i22;
8035 break;
8036 }
8037 }
8038 }
8039 } while (0);
8040 L204 : do {
8041 if (!(i25 >>> 0 < 16)) {
8042 HEAP32[i24 + 4 >> 2] = i12 | 3;
8043 HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1;
8044 HEAP32[i24 + (i25 + i12) >> 2] = i25;
8045 i4 = i25 >>> 3;
8046 if (i25 >>> 0 < 256) {
8047 i6 = i4 << 1;
8048 i3 = 14512 + (i6 << 2) | 0;
8049 i5 = HEAP32[3618] | 0;
8050 i4 = 1 << i4;
8051 if ((i5 & i4 | 0) != 0) {
8052 i5 = 14512 + (i6 + 2 << 2) | 0;
8053 i4 = HEAP32[i5 >> 2] | 0;
8054 if (i4 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8055 _abort();
8056 } else {
8057 i21 = i5;
8058 i20 = i4;
8059 }
8060 } else {
8061 HEAP32[3618] = i5 | i4;
8062 i21 = 14512 + (i6 + 2 << 2) | 0;
8063 i20 = i3;
8064 }
8065 HEAP32[i21 >> 2] = i2;
8066 HEAP32[i20 + 12 >> 2] = i2;
8067 HEAP32[i24 + (i12 + 8) >> 2] = i20;
8068 HEAP32[i24 + (i12 + 12) >> 2] = i3;
8069 break;
8070 }
8071 i3 = i25 >>> 8;
8072 if ((i3 | 0) != 0) {
8073 if (i25 >>> 0 > 16777215) {
8074 i3 = 31;
8075 } else {
8076 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
8077 i32 = i3 << i31;
8078 i30 = (i32 + 520192 | 0) >>> 16 & 4;
8079 i32 = i32 << i30;
8080 i3 = (i32 + 245760 | 0) >>> 16 & 2;
8081 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
8082 i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1;
8083 }
8084 } else {
8085 i3 = 0;
8086 }
8087 i6 = 14776 + (i3 << 2) | 0;
8088 HEAP32[i24 + (i12 + 28) >> 2] = i3;
8089 HEAP32[i24 + (i12 + 20) >> 2] = 0;
8090 HEAP32[i24 + (i12 + 16) >> 2] = 0;
8091 i4 = HEAP32[14476 >> 2] | 0;
8092 i5 = 1 << i3;
8093 if ((i4 & i5 | 0) == 0) {
8094 HEAP32[14476 >> 2] = i4 | i5;
8095 HEAP32[i6 >> 2] = i2;
8096 HEAP32[i24 + (i12 + 24) >> 2] = i6;
8097 HEAP32[i24 + (i12 + 12) >> 2] = i2;
8098 HEAP32[i24 + (i12 + 8) >> 2] = i2;
8099 break;
8100 }
8101 i4 = HEAP32[i6 >> 2] | 0;
8102 if ((i3 | 0) == 31) {
8103 i3 = 0;
8104 } else {
8105 i3 = 25 - (i3 >>> 1) | 0;
8106 }
8107 L225 : do {
8108 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) {
8109 i3 = i25 << i3;
8110 while (1) {
8111 i6 = i4 + (i3 >>> 31 << 2) + 16 | 0;
8112 i5 = HEAP32[i6 >> 2] | 0;
8113 if ((i5 | 0) == 0) {
8114 break;
8115 }
8116 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) {
8117 i18 = i5;
8118 break L225;
8119 } else {
8120 i3 = i3 << 1;
8121 i4 = i5;
8122 }
8123 }
8124 if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8125 _abort();
8126 } else {
8127 HEAP32[i6 >> 2] = i2;
8128 HEAP32[i24 + (i12 + 24) >> 2] = i4;
8129 HEAP32[i24 + (i12 + 12) >> 2] = i2;
8130 HEAP32[i24 + (i12 + 8) >> 2] = i2;
8131 break L204;
8132 }
8133 } else {
8134 i18 = i4;
8135 }
8136 } while (0);
8137 i4 = i18 + 8 | 0;
8138 i3 = HEAP32[i4 >> 2] | 0;
8139 i5 = HEAP32[14488 >> 2] | 0;
8140 if (i18 >>> 0 < i5 >>> 0) {
8141 _abort();
8142 }
8143 if (i3 >>> 0 < i5 >>> 0) {
8144 _abort();
8145 } else {
8146 HEAP32[i3 + 12 >> 2] = i2;
8147 HEAP32[i4 >> 2] = i2;
8148 HEAP32[i24 + (i12 + 8) >> 2] = i3;
8149 HEAP32[i24 + (i12 + 12) >> 2] = i18;
8150 HEAP32[i24 + (i12 + 24) >> 2] = 0;
8151 break;
8152 }
8153 } else {
8154 i32 = i25 + i12 | 0;
8155 HEAP32[i24 + 4 >> 2] = i32 | 3;
8156 i32 = i24 + (i32 + 4) | 0;
8157 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
8158 }
8159 } while (0);
8160 i32 = i24 + 8 | 0;
8161 STACKTOP = i1;
8162 return i32 | 0;
8163 }
8164 }
8165 } else {
8166 i12 = -1;
8167 }
8168 }
8169 } while (0);
8170 i18 = HEAP32[14480 >> 2] | 0;
8171 if (!(i12 >>> 0 > i18 >>> 0)) {
8172 i3 = i18 - i12 | 0;
8173 i2 = HEAP32[14492 >> 2] | 0;
8174 if (i3 >>> 0 > 15) {
8175 HEAP32[14492 >> 2] = i2 + i12;
8176 HEAP32[14480 >> 2] = i3;
8177 HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1;
8178 HEAP32[i2 + i18 >> 2] = i3;
8179 HEAP32[i2 + 4 >> 2] = i12 | 3;
8180 } else {
8181 HEAP32[14480 >> 2] = 0;
8182 HEAP32[14492 >> 2] = 0;
8183 HEAP32[i2 + 4 >> 2] = i18 | 3;
8184 i32 = i2 + (i18 + 4) | 0;
8185 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
8186 }
8187 i32 = i2 + 8 | 0;
8188 STACKTOP = i1;
8189 return i32 | 0;
8190 }
8191 i18 = HEAP32[14484 >> 2] | 0;
8192 if (i12 >>> 0 < i18 >>> 0) {
8193 i31 = i18 - i12 | 0;
8194 HEAP32[14484 >> 2] = i31;
8195 i32 = HEAP32[14496 >> 2] | 0;
8196 HEAP32[14496 >> 2] = i32 + i12;
8197 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
8198 HEAP32[i32 + 4 >> 2] = i12 | 3;
8199 i32 = i32 + 8 | 0;
8200 STACKTOP = i1;
8201 return i32 | 0;
8202 }
8203 do {
8204 if ((HEAP32[3736] | 0) == 0) {
8205 i18 = _sysconf(30) | 0;
8206 if ((i18 + -1 & i18 | 0) == 0) {
8207 HEAP32[14952 >> 2] = i18;
8208 HEAP32[14948 >> 2] = i18;
8209 HEAP32[14956 >> 2] = -1;
8210 HEAP32[14960 >> 2] = -1;
8211 HEAP32[14964 >> 2] = 0;
8212 HEAP32[14916 >> 2] = 0;
8213 HEAP32[3736] = (_time(0) | 0) & -16 ^ 1431655768;
8214 break;
8215 } else {
8216 _abort();
8217 }
8218 }
8219 } while (0);
8220 i20 = i12 + 48 | 0;
8221 i25 = HEAP32[14952 >> 2] | 0;
8222 i21 = i12 + 47 | 0;
8223 i22 = i25 + i21 | 0;
8224 i25 = 0 - i25 | 0;
8225 i18 = i22 & i25;
8226 if (!(i18 >>> 0 > i12 >>> 0)) {
8227 i32 = 0;
8228 STACKTOP = i1;
8229 return i32 | 0;
8230 }
8231 i24 = HEAP32[14912 >> 2] | 0;
8232 if ((i24 | 0) != 0 ? (i31 = HEAP32[14904 >> 2] | 0, i32 = i31 + i18 | 0, i32 >> > 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) {
8233 i32 = 0;
8234 STACKTOP = i1;
8235 return i32 | 0;
8236 }
8237 L269 : do {
8238 if ((HEAP32[14916 >> 2] & 4 | 0) == 0) {
8239 i26 = HEAP32[14496 >> 2] | 0;
8240 L271 : do {
8241 if ((i26 | 0) != 0) {
8242 i24 = 14920 | 0;
8243 while (1) {
8244 i27 = HEAP32[i24 >> 2] | 0;
8245 if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2 ] | 0) | 0) >>> 0 > i26 >>> 0) : 0) {
8246 break;
8247 }
8248 i24 = HEAP32[i24 + 8 >> 2] | 0;
8249 if ((i24 | 0) == 0) {
8250 i13 = 182;
8251 break L271;
8252 }
8253 }
8254 if ((i24 | 0) != 0) {
8255 i25 = i22 - (HEAP32[14484 >> 2] | 0) & i25;
8256 if (i25 >>> 0 < 2147483647) {
8257 i13 = _sbrk(i25 | 0) | 0;
8258 i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0);
8259 i22 = i13;
8260 i24 = i25;
8261 i23 = i26 ? i13 : -1;
8262 i25 = i26 ? i25 : 0;
8263 i13 = 191;
8264 } else {
8265 i25 = 0;
8266 }
8267 } else {
8268 i13 = 182;
8269 }
8270 } else {
8271 i13 = 182;
8272 }
8273 } while (0);
8274 do {
8275 if ((i13 | 0) == 182) {
8276 i23 = _sbrk(0) | 0;
8277 if ((i23 | 0) != (-1 | 0)) {
8278 i24 = i23;
8279 i22 = HEAP32[14948 >> 2] | 0;
8280 i25 = i22 + -1 | 0;
8281 if ((i25 & i24 | 0) == 0) {
8282 i25 = i18;
8283 } else {
8284 i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0;
8285 }
8286 i24 = HEAP32[14904 >> 2] | 0;
8287 i26 = i24 + i25 | 0;
8288 if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) {
8289 i22 = HEAP32[14912 >> 2] | 0;
8290 if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) {
8291 i25 = 0;
8292 break;
8293 }
8294 i22 = _sbrk(i25 | 0) | 0;
8295 i13 = (i22 | 0) == (i23 | 0);
8296 i24 = i25;
8297 i23 = i13 ? i23 : -1;
8298 i25 = i13 ? i25 : 0;
8299 i13 = 191;
8300 } else {
8301 i25 = 0;
8302 }
8303 } else {
8304 i25 = 0;
8305 }
8306 }
8307 } while (0);
8308 L291 : do {
8309 if ((i13 | 0) == 191) {
8310 i13 = 0 - i24 | 0;
8311 if ((i23 | 0) != (-1 | 0)) {
8312 i17 = i23;
8313 i14 = i25;
8314 i13 = 202;
8315 break L269;
8316 }
8317 do {
8318 if ((i22 | 0) != (-1 | 0) & i24 >>> 0 < 2147483647 & i24 >>> 0 < i20 >>> 0 ? (i19 = HEAP32[14952 >> 2] | 0, i19 = i21 - i24 + i19 & 0 - i19, i19 >>> 0 < 2 147483647) : 0) {
8319 if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) {
8320 _sbrk(i13 | 0) | 0;
8321 break L291;
8322 } else {
8323 i24 = i19 + i24 | 0;
8324 break;
8325 }
8326 }
8327 } while (0);
8328 if ((i22 | 0) != (-1 | 0)) {
8329 i17 = i22;
8330 i14 = i24;
8331 i13 = 202;
8332 break L269;
8333 }
8334 }
8335 } while (0);
8336 HEAP32[14916 >> 2] = HEAP32[14916 >> 2] | 4;
8337 i13 = 199;
8338 } else {
8339 i25 = 0;
8340 i13 = 199;
8341 }
8342 } while (0);
8343 if ((((i13 | 0) == 199 ? i18 >>> 0 < 2147483647 : 0) ? (i17 = _sbrk(i18 | 0) | 0, i16 = _sbrk(0) | 0, (i16 | 0) != (-1 | 0) & (i17 | 0) != (-1 | 0) & i17 >>> 0 < i16 >>> 0) : 0) ? (i15 = i16 - i17 | 0, i14 = i15 >>> 0 > (i12 + 40 | 0) >>> 0, i14) : 0) {
8344 i14 = i14 ? i15 : i25;
8345 i13 = 202;
8346 }
8347 if ((i13 | 0) == 202) {
8348 i15 = (HEAP32[14904 >> 2] | 0) + i14 | 0;
8349 HEAP32[14904 >> 2] = i15;
8350 if (i15 >>> 0 > (HEAP32[14908 >> 2] | 0) >>> 0) {
8351 HEAP32[14908 >> 2] = i15;
8352 }
8353 i15 = HEAP32[14496 >> 2] | 0;
8354 L311 : do {
8355 if ((i15 | 0) != 0) {
8356 i21 = 14920 | 0;
8357 while (1) {
8358 i16 = HEAP32[i21 >> 2] | 0;
8359 i19 = i21 + 4 | 0;
8360 i20 = HEAP32[i19 >> 2] | 0;
8361 if ((i17 | 0) == (i16 + i20 | 0)) {
8362 i13 = 214;
8363 break;
8364 }
8365 i18 = HEAP32[i21 + 8 >> 2] | 0;
8366 if ((i18 | 0) == 0) {
8367 break;
8368 } else {
8369 i21 = i18;
8370 }
8371 }
8372 if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) {
8373 HEAP32[i19 >> 2] = i20 + i14;
8374 i2 = (HEAP32[14484 >> 2] | 0) + i14 | 0;
8375 i3 = i15 + 8 | 0;
8376 if ((i3 & 7 | 0) == 0) {
8377 i3 = 0;
8378 } else {
8379 i3 = 0 - i3 & 7;
8380 }
8381 i32 = i2 - i3 | 0;
8382 HEAP32[14496 >> 2] = i15 + i3;
8383 HEAP32[14484 >> 2] = i32;
8384 HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1;
8385 HEAP32[i15 + (i2 + 4) >> 2] = 40;
8386 HEAP32[14500 >> 2] = HEAP32[14960 >> 2];
8387 break;
8388 }
8389 if (i17 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8390 HEAP32[14488 >> 2] = i17;
8391 }
8392 i19 = i17 + i14 | 0;
8393 i16 = 14920 | 0;
8394 while (1) {
8395 if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) {
8396 i13 = 224;
8397 break;
8398 }
8399 i18 = HEAP32[i16 + 8 >> 2] | 0;
8400 if ((i18 | 0) == 0) {
8401 break;
8402 } else {
8403 i16 = i18;
8404 }
8405 }
8406 if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) {
8407 HEAP32[i16 >> 2] = i17;
8408 i6 = i16 + 4 | 0;
8409 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14;
8410 i6 = i17 + 8 | 0;
8411 if ((i6 & 7 | 0) == 0) {
8412 i6 = 0;
8413 } else {
8414 i6 = 0 - i6 & 7;
8415 }
8416 i7 = i17 + (i14 + 8) | 0;
8417 if ((i7 & 7 | 0) == 0) {
8418 i13 = 0;
8419 } else {
8420 i13 = 0 - i7 & 7;
8421 }
8422 i15 = i17 + (i13 + i14) | 0;
8423 i8 = i6 + i12 | 0;
8424 i7 = i17 + i8 | 0;
8425 i10 = i15 - (i17 + i6) - i12 | 0;
8426 HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3;
8427 L348 : do {
8428 if ((i15 | 0) != (HEAP32[14496 >> 2] | 0)) {
8429 if ((i15 | 0) == (HEAP32[14492 >> 2] | 0)) {
8430 i32 = (HEAP32[14480 >> 2] | 0) + i10 | 0;
8431 HEAP32[14480 >> 2] = i32;
8432 HEAP32[14492 >> 2] = i7;
8433 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
8434 HEAP32[i17 + (i32 + i8) >> 2] = i32;
8435 break;
8436 }
8437 i12 = i14 + 4 | 0;
8438 i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0;
8439 if ((i18 & 3 | 0) == 1) {
8440 i11 = i18 & -8;
8441 i16 = i18 >>> 3;
8442 do {
8443 if (!(i18 >>> 0 < 256)) {
8444 i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0;
8445 i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
8446 do {
8447 if ((i19 | 0) == (i15 | 0)) {
8448 i19 = i13 | 16;
8449 i18 = i17 + (i12 + i19) | 0;
8450 i16 = HEAP32[i18 >> 2] | 0;
8451 if ((i16 | 0) == 0) {
8452 i18 = i17 + (i19 + i14) | 0;
8453 i16 = HEAP32[i18 >> 2] | 0;
8454 if ((i16 | 0) == 0) {
8455 i5 = 0;
8456 break;
8457 }
8458 }
8459 while (1) {
8460 i20 = i16 + 20 | 0;
8461 i19 = HEAP32[i20 >> 2] | 0;
8462 if ((i19 | 0) != 0) {
8463 i16 = i19;
8464 i18 = i20;
8465 continue;
8466 }
8467 i19 = i16 + 16 | 0;
8468 i20 = HEAP32[i19 >> 2] | 0;
8469 if ((i20 | 0) == 0) {
8470 break;
8471 } else {
8472 i16 = i20;
8473 i18 = i19;
8474 }
8475 }
8476 if (i18 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8477 _abort();
8478 } else {
8479 HEAP32[i18 >> 2] = 0;
8480 i5 = i16;
8481 break;
8482 }
8483 } else {
8484 i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
8485 if (i18 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8486 _abort();
8487 }
8488 i16 = i18 + 12 | 0;
8489 if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) {
8490 _abort();
8491 }
8492 i20 = i19 + 8 | 0;
8493 if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) {
8494 HEAP32[i16 >> 2] = i19;
8495 HEAP32[i20 >> 2] = i18;
8496 i5 = i19;
8497 break;
8498 } else {
8499 _abort();
8500 }
8501 }
8502 } while (0);
8503 if ((i9 | 0) != 0) {
8504 i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0;
8505 i18 = 14776 + (i16 << 2) | 0;
8506 if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) {
8507 HEAP32[i18 >> 2] = i5;
8508 if ((i5 | 0) == 0) {
8509 HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i16);
8510 break;
8511 }
8512 } else {
8513 if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8514 _abort();
8515 }
8516 i16 = i9 + 16 | 0;
8517 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
8518 HEAP32[i16 >> 2] = i5;
8519 } else {
8520 HEAP32[i9 + 20 >> 2] = i5;
8521 }
8522 if ((i5 | 0) == 0) {
8523 break;
8524 }
8525 }
8526 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8527 _abort();
8528 }
8529 HEAP32[i5 + 24 >> 2] = i9;
8530 i15 = i13 | 16;
8531 i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0;
8532 do {
8533 if ((i9 | 0) != 0) {
8534 if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8535 _abort();
8536 } else {
8537 HEAP32[i5 + 16 >> 2] = i9;
8538 HEAP32[i9 + 24 >> 2] = i5;
8539 break;
8540 }
8541 }
8542 } while (0);
8543 i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0;
8544 if ((i9 | 0) != 0) {
8545 if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8546 _abort();
8547 } else {
8548 HEAP32[i5 + 20 >> 2] = i9;
8549 HEAP32[i9 + 24 >> 2] = i5;
8550 break;
8551 }
8552 }
8553 }
8554 } else {
8555 i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
8556 i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
8557 i18 = 14512 + (i16 << 1 << 2) | 0;
8558 if ((i5 | 0) != (i18 | 0)) {
8559 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8560 _abort();
8561 }
8562 if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) {
8563 _abort();
8564 }
8565 }
8566 if ((i12 | 0) == (i5 | 0)) {
8567 HEAP32[3618] = HEAP32[3618] & ~(1 << i16);
8568 break;
8569 }
8570 if ((i12 | 0) != (i18 | 0)) {
8571 if (i12 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8572 _abort();
8573 }
8574 i16 = i12 + 8 | 0;
8575 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
8576 i9 = i16;
8577 } else {
8578 _abort();
8579 }
8580 } else {
8581 i9 = i12 + 8 | 0;
8582 }
8583 HEAP32[i5 + 12 >> 2] = i12;
8584 HEAP32[i9 >> 2] = i5;
8585 }
8586 } while (0);
8587 i15 = i17 + ((i11 | i13) + i14) | 0;
8588 i10 = i11 + i10 | 0;
8589 }
8590 i5 = i15 + 4 | 0;
8591 HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2;
8592 HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1;
8593 HEAP32[i17 + (i10 + i8) >> 2] = i10;
8594 i5 = i10 >>> 3;
8595 if (i10 >>> 0 < 256) {
8596 i10 = i5 << 1;
8597 i2 = 14512 + (i10 << 2) | 0;
8598 i9 = HEAP32[3618] | 0;
8599 i5 = 1 << i5;
8600 if ((i9 & i5 | 0) != 0) {
8601 i9 = 14512 + (i10 + 2 << 2) | 0;
8602 i5 = HEAP32[i9 >> 2] | 0;
8603 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8604 _abort();
8605 } else {
8606 i3 = i9;
8607 i4 = i5;
8608 }
8609 } else {
8610 HEAP32[3618] = i9 | i5;
8611 i3 = 14512 + (i10 + 2 << 2) | 0;
8612 i4 = i2;
8613 }
8614 HEAP32[i3 >> 2] = i7;
8615 HEAP32[i4 + 12 >> 2] = i7;
8616 HEAP32[i17 + (i8 + 8) >> 2] = i4;
8617 HEAP32[i17 + (i8 + 12) >> 2] = i2;
8618 break;
8619 }
8620 i3 = i10 >>> 8;
8621 if ((i3 | 0) != 0) {
8622 if (i10 >>> 0 > 16777215) {
8623 i3 = 31;
8624 } else {
8625 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
8626 i32 = i3 << i31;
8627 i30 = (i32 + 520192 | 0) >>> 16 & 4;
8628 i32 = i32 << i30;
8629 i3 = (i32 + 245760 | 0) >>> 16 & 2;
8630 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
8631 i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1;
8632 }
8633 } else {
8634 i3 = 0;
8635 }
8636 i4 = 14776 + (i3 << 2) | 0;
8637 HEAP32[i17 + (i8 + 28) >> 2] = i3;
8638 HEAP32[i17 + (i8 + 20) >> 2] = 0;
8639 HEAP32[i17 + (i8 + 16) >> 2] = 0;
8640 i9 = HEAP32[14476 >> 2] | 0;
8641 i5 = 1 << i3;
8642 if ((i9 & i5 | 0) == 0) {
8643 HEAP32[14476 >> 2] = i9 | i5;
8644 HEAP32[i4 >> 2] = i7;
8645 HEAP32[i17 + (i8 + 24) >> 2] = i4;
8646 HEAP32[i17 + (i8 + 12) >> 2] = i7;
8647 HEAP32[i17 + (i8 + 8) >> 2] = i7;
8648 break;
8649 }
8650 i4 = HEAP32[i4 >> 2] | 0;
8651 if ((i3 | 0) == 31) {
8652 i3 = 0;
8653 } else {
8654 i3 = 25 - (i3 >>> 1) | 0;
8655 }
8656 L444 : do {
8657 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) {
8658 i3 = i10 << i3;
8659 while (1) {
8660 i5 = i4 + (i3 >>> 31 << 2) + 16 | 0;
8661 i9 = HEAP32[i5 >> 2] | 0;
8662 if ((i9 | 0) == 0) {
8663 break;
8664 }
8665 if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) {
8666 i2 = i9;
8667 break L444;
8668 } else {
8669 i3 = i3 << 1;
8670 i4 = i9;
8671 }
8672 }
8673 if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8674 _abort();
8675 } else {
8676 HEAP32[i5 >> 2] = i7;
8677 HEAP32[i17 + (i8 + 24) >> 2] = i4;
8678 HEAP32[i17 + (i8 + 12) >> 2] = i7;
8679 HEAP32[i17 + (i8 + 8) >> 2] = i7;
8680 break L348;
8681 }
8682 } else {
8683 i2 = i4;
8684 }
8685 } while (0);
8686 i4 = i2 + 8 | 0;
8687 i3 = HEAP32[i4 >> 2] | 0;
8688 i5 = HEAP32[14488 >> 2] | 0;
8689 if (i2 >>> 0 < i5 >>> 0) {
8690 _abort();
8691 }
8692 if (i3 >>> 0 < i5 >>> 0) {
8693 _abort();
8694 } else {
8695 HEAP32[i3 + 12 >> 2] = i7;
8696 HEAP32[i4 >> 2] = i7;
8697 HEAP32[i17 + (i8 + 8) >> 2] = i3;
8698 HEAP32[i17 + (i8 + 12) >> 2] = i2;
8699 HEAP32[i17 + (i8 + 24) >> 2] = 0;
8700 break;
8701 }
8702 } else {
8703 i32 = (HEAP32[14484 >> 2] | 0) + i10 | 0;
8704 HEAP32[14484 >> 2] = i32;
8705 HEAP32[14496 >> 2] = i7;
8706 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
8707 }
8708 } while (0);
8709 i32 = i17 + (i6 | 8) | 0;
8710 STACKTOP = i1;
8711 return i32 | 0;
8712 }
8713 i3 = 14920 | 0;
8714 while (1) {
8715 i2 = HEAP32[i3 >> 2] | 0;
8716 if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i1 1 | 0, i10 >>> 0 > i15 >>> 0) : 0) {
8717 break;
8718 }
8719 i3 = HEAP32[i3 + 8 >> 2] | 0;
8720 }
8721 i3 = i2 + (i11 + -39) | 0;
8722 if ((i3 & 7 | 0) == 0) {
8723 i3 = 0;
8724 } else {
8725 i3 = 0 - i3 & 7;
8726 }
8727 i2 = i2 + (i11 + -47 + i3) | 0;
8728 i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2;
8729 i3 = i2 + 8 | 0;
8730 i4 = i17 + 8 | 0;
8731 if ((i4 & 7 | 0) == 0) {
8732 i4 = 0;
8733 } else {
8734 i4 = 0 - i4 & 7;
8735 }
8736 i32 = i14 + -40 - i4 | 0;
8737 HEAP32[14496 >> 2] = i17 + i4;
8738 HEAP32[14484 >> 2] = i32;
8739 HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1;
8740 HEAP32[i17 + (i14 + -36) >> 2] = 40;
8741 HEAP32[14500 >> 2] = HEAP32[14960 >> 2];
8742 HEAP32[i2 + 4 >> 2] = 27;
8743 HEAP32[i3 + 0 >> 2] = HEAP32[14920 >> 2];
8744 HEAP32[i3 + 4 >> 2] = HEAP32[14924 >> 2];
8745 HEAP32[i3 + 8 >> 2] = HEAP32[14928 >> 2];
8746 HEAP32[i3 + 12 >> 2] = HEAP32[14932 >> 2];
8747 HEAP32[14920 >> 2] = i17;
8748 HEAP32[14924 >> 2] = i14;
8749 HEAP32[14932 >> 2] = 0;
8750 HEAP32[14928 >> 2] = i3;
8751 i4 = i2 + 28 | 0;
8752 HEAP32[i4 >> 2] = 7;
8753 if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) {
8754 while (1) {
8755 i3 = i4 + 4 | 0;
8756 HEAP32[i3 >> 2] = 7;
8757 if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) {
8758 i4 = i3;
8759 } else {
8760 break;
8761 }
8762 }
8763 }
8764 if ((i2 | 0) != (i15 | 0)) {
8765 i2 = i2 - i15 | 0;
8766 i3 = i15 + (i2 + 4) | 0;
8767 HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2;
8768 HEAP32[i15 + 4 >> 2] = i2 | 1;
8769 HEAP32[i15 + i2 >> 2] = i2;
8770 i3 = i2 >>> 3;
8771 if (i2 >>> 0 < 256) {
8772 i4 = i3 << 1;
8773 i2 = 14512 + (i4 << 2) | 0;
8774 i5 = HEAP32[3618] | 0;
8775 i3 = 1 << i3;
8776 if ((i5 & i3 | 0) != 0) {
8777 i4 = 14512 + (i4 + 2 << 2) | 0;
8778 i3 = HEAP32[i4 >> 2] | 0;
8779 if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8780 _abort();
8781 } else {
8782 i7 = i4;
8783 i8 = i3;
8784 }
8785 } else {
8786 HEAP32[3618] = i5 | i3;
8787 i7 = 14512 + (i4 + 2 << 2) | 0;
8788 i8 = i2;
8789 }
8790 HEAP32[i7 >> 2] = i15;
8791 HEAP32[i8 + 12 >> 2] = i15;
8792 HEAP32[i15 + 8 >> 2] = i8;
8793 HEAP32[i15 + 12 >> 2] = i2;
8794 break;
8795 }
8796 i3 = i2 >>> 8;
8797 if ((i3 | 0) != 0) {
8798 if (i2 >>> 0 > 16777215) {
8799 i3 = 31;
8800 } else {
8801 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
8802 i32 = i3 << i31;
8803 i30 = (i32 + 520192 | 0) >>> 16 & 4;
8804 i32 = i32 << i30;
8805 i3 = (i32 + 245760 | 0) >>> 16 & 2;
8806 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
8807 i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1;
8808 }
8809 } else {
8810 i3 = 0;
8811 }
8812 i7 = 14776 + (i3 << 2) | 0;
8813 HEAP32[i15 + 28 >> 2] = i3;
8814 HEAP32[i15 + 20 >> 2] = 0;
8815 HEAP32[i15 + 16 >> 2] = 0;
8816 i4 = HEAP32[14476 >> 2] | 0;
8817 i5 = 1 << i3;
8818 if ((i4 & i5 | 0) == 0) {
8819 HEAP32[14476 >> 2] = i4 | i5;
8820 HEAP32[i7 >> 2] = i15;
8821 HEAP32[i15 + 24 >> 2] = i7;
8822 HEAP32[i15 + 12 >> 2] = i15;
8823 HEAP32[i15 + 8 >> 2] = i15;
8824 break;
8825 }
8826 i4 = HEAP32[i7 >> 2] | 0;
8827 if ((i3 | 0) == 31) {
8828 i3 = 0;
8829 } else {
8830 i3 = 25 - (i3 >>> 1) | 0;
8831 }
8832 L499 : do {
8833 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) {
8834 i3 = i2 << i3;
8835 while (1) {
8836 i7 = i4 + (i3 >>> 31 << 2) + 16 | 0;
8837 i5 = HEAP32[i7 >> 2] | 0;
8838 if ((i5 | 0) == 0) {
8839 break;
8840 }
8841 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) {
8842 i6 = i5;
8843 break L499;
8844 } else {
8845 i3 = i3 << 1;
8846 i4 = i5;
8847 }
8848 }
8849 if (i7 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8850 _abort();
8851 } else {
8852 HEAP32[i7 >> 2] = i15;
8853 HEAP32[i15 + 24 >> 2] = i4;
8854 HEAP32[i15 + 12 >> 2] = i15;
8855 HEAP32[i15 + 8 >> 2] = i15;
8856 break L311;
8857 }
8858 } else {
8859 i6 = i4;
8860 }
8861 } while (0);
8862 i4 = i6 + 8 | 0;
8863 i3 = HEAP32[i4 >> 2] | 0;
8864 i2 = HEAP32[14488 >> 2] | 0;
8865 if (i6 >>> 0 < i2 >>> 0) {
8866 _abort();
8867 }
8868 if (i3 >>> 0 < i2 >>> 0) {
8869 _abort();
8870 } else {
8871 HEAP32[i3 + 12 >> 2] = i15;
8872 HEAP32[i4 >> 2] = i15;
8873 HEAP32[i15 + 8 >> 2] = i3;
8874 HEAP32[i15 + 12 >> 2] = i6;
8875 HEAP32[i15 + 24 >> 2] = 0;
8876 break;
8877 }
8878 }
8879 } else {
8880 i32 = HEAP32[14488 >> 2] | 0;
8881 if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) {
8882 HEAP32[14488 >> 2] = i17;
8883 }
8884 HEAP32[14920 >> 2] = i17;
8885 HEAP32[14924 >> 2] = i14;
8886 HEAP32[14932 >> 2] = 0;
8887 HEAP32[14508 >> 2] = HEAP32[3736];
8888 HEAP32[14504 >> 2] = -1;
8889 i2 = 0;
8890 do {
8891 i32 = i2 << 1;
8892 i31 = 14512 + (i32 << 2) | 0;
8893 HEAP32[14512 + (i32 + 3 << 2) >> 2] = i31;
8894 HEAP32[14512 + (i32 + 2 << 2) >> 2] = i31;
8895 i2 = i2 + 1 | 0;
8896 } while ((i2 | 0) != 32);
8897 i2 = i17 + 8 | 0;
8898 if ((i2 & 7 | 0) == 0) {
8899 i2 = 0;
8900 } else {
8901 i2 = 0 - i2 & 7;
8902 }
8903 i32 = i14 + -40 - i2 | 0;
8904 HEAP32[14496 >> 2] = i17 + i2;
8905 HEAP32[14484 >> 2] = i32;
8906 HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1;
8907 HEAP32[i17 + (i14 + -36) >> 2] = 40;
8908 HEAP32[14500 >> 2] = HEAP32[14960 >> 2];
8909 }
8910 } while (0);
8911 i2 = HEAP32[14484 >> 2] | 0;
8912 if (i2 >>> 0 > i12 >>> 0) {
8913 i31 = i2 - i12 | 0;
8914 HEAP32[14484 >> 2] = i31;
8915 i32 = HEAP32[14496 >> 2] | 0;
8916 HEAP32[14496 >> 2] = i32 + i12;
8917 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
8918 HEAP32[i32 + 4 >> 2] = i12 | 3;
8919 i32 = i32 + 8 | 0;
8920 STACKTOP = i1;
8921 return i32 | 0;
8922 }
8923 }
8924 HEAP32[(___errno_location() | 0) >> 2] = 12;
8925 i32 = 0;
8926 STACKTOP = i1;
8927 return i32 | 0;
8928 }
8929 function _deflate(i2, i10) {
8930 i2 = i2 | 0;
8931 i10 = i10 | 0;
8932 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i11 = 0, i1 2 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i 21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0;
8933 i1 = STACKTOP;
8934 if ((i2 | 0) == 0) {
8935 i37 = -2;
8936 STACKTOP = i1;
8937 return i37 | 0;
8938 }
8939 i5 = i2 + 28 | 0;
8940 i7 = HEAP32[i5 >> 2] | 0;
8941 if ((i7 | 0) == 0 | i10 >>> 0 > 5) {
8942 i37 = -2;
8943 STACKTOP = i1;
8944 return i37 | 0;
8945 }
8946 i4 = i2 + 12 | 0;
8947 do {
8948 if ((HEAP32[i4 >> 2] | 0) != 0) {
8949 if ((HEAP32[i2 >> 2] | 0) == 0 ? (HEAP32[i2 + 4 >> 2] | 0) != 0 : 0) {
8950 break;
8951 }
8952 i11 = i7 + 4 | 0;
8953 i29 = HEAP32[i11 >> 2] | 0;
8954 i9 = (i10 | 0) == 4;
8955 if ((i29 | 0) != 666 | i9) {
8956 i3 = i2 + 16 | 0;
8957 if ((HEAP32[i3 >> 2] | 0) == 0) {
8958 HEAP32[i2 + 24 >> 2] = HEAP32[3180 >> 2];
8959 i37 = -5;
8960 STACKTOP = i1;
8961 return i37 | 0;
8962 }
8963 HEAP32[i7 >> 2] = i2;
8964 i8 = i7 + 40 | 0;
8965 i18 = HEAP32[i8 >> 2] | 0;
8966 HEAP32[i8 >> 2] = i10;
8967 do {
8968 if ((i29 | 0) == 42) {
8969 if ((HEAP32[i7 + 24 >> 2] | 0) != 2) {
8970 i17 = (HEAP32[i7 + 48 >> 2] << 12) + -30720 | 0;
8971 if ((HEAP32[i7 + 136 >> 2] | 0) <= 1 ? (i28 = HEAP32[i7 + 132 >> 2] | 0, (i28 | 0) >= 2) : 0) {
8972 if ((i28 | 0) < 6) {
8973 i28 = 64;
8974 } else {
8975 i28 = (i28 | 0) == 6 ? 128 : 192;
8976 }
8977 } else {
8978 i28 = 0;
8979 }
8980 i28 = i28 | i17;
8981 i17 = i7 + 108 | 0;
8982 i37 = (HEAP32[i17 >> 2] | 0) == 0 ? i28 : i28 | 32;
8983 HEAP32[i11 >> 2] = 113;
8984 i29 = i7 + 20 | 0;
8985 i30 = HEAP32[i29 >> 2] | 0;
8986 HEAP32[i29 >> 2] = i30 + 1;
8987 i28 = i7 + 8 | 0;
8988 HEAP8[(HEAP32[i28 >> 2] | 0) + i30 | 0] = i37 >>> 8;
8989 i30 = HEAP32[i29 >> 2] | 0;
8990 HEAP32[i29 >> 2] = i30 + 1;
8991 HEAP8[(HEAP32[i28 >> 2] | 0) + i30 | 0] = (i37 | ((i37 >>> 0) % 31 | 0)) ^ 31;
8992 i30 = i2 + 48 | 0;
8993 if ((HEAP32[i17 >> 2] | 0) != 0) {
8994 i37 = HEAP32[i30 >> 2] | 0;
8995 i36 = HEAP32[i29 >> 2] | 0;
8996 HEAP32[i29 >> 2] = i36 + 1;
8997 HEAP8[(HEAP32[i28 >> 2] | 0) + i36 | 0] = i37 >>> 24;
8998 i36 = HEAP32[i29 >> 2] | 0;
8999 HEAP32[i29 >> 2] = i36 + 1;
9000 HEAP8[(HEAP32[i28 >> 2] | 0) + i36 | 0] = i37 >>> 16;
9001 i36 = HEAP32[i30 >> 2] | 0;
9002 i37 = HEAP32[i29 >> 2] | 0;
9003 HEAP32[i29 >> 2] = i37 + 1;
9004 HEAP8[(HEAP32[i28 >> 2] | 0) + i37 | 0] = i36 >>> 8;
9005 i37 = HEAP32[i29 >> 2] | 0;
9006 HEAP32[i29 >> 2] = i37 + 1;
9007 HEAP8[(HEAP32[i28 >> 2] | 0) + i37 | 0] = i36;
9008 }
9009 HEAP32[i30 >> 2] = _adler32(0, 0, 0) | 0;
9010 i31 = HEAP32[i11 >> 2] | 0;
9011 i17 = 32;
9012 break;
9013 }
9014 i32 = i2 + 48 | 0;
9015 HEAP32[i32 >> 2] = _crc32(0, 0, 0) | 0;
9016 i30 = i7 + 20 | 0;
9017 i28 = HEAP32[i30 >> 2] | 0;
9018 HEAP32[i30 >> 2] = i28 + 1;
9019 i29 = i7 + 8 | 0;
9020 HEAP8[(HEAP32[i29 >> 2] | 0) + i28 | 0] = 31;
9021 i28 = HEAP32[i30 >> 2] | 0;
9022 HEAP32[i30 >> 2] = i28 + 1;
9023 HEAP8[(HEAP32[i29 >> 2] | 0) + i28 | 0] = -117;
9024 i28 = HEAP32[i30 >> 2] | 0;
9025 HEAP32[i30 >> 2] = i28 + 1;
9026 HEAP8[(HEAP32[i29 >> 2] | 0) + i28 | 0] = 8;
9027 i28 = i7 + 28 | 0;
9028 i33 = HEAP32[i28 >> 2] | 0;
9029 if ((i33 | 0) == 0) {
9030 i22 = HEAP32[i30 >> 2] | 0;
9031 HEAP32[i30 >> 2] = i22 + 1;
9032 HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9033 i22 = HEAP32[i30 >> 2] | 0;
9034 HEAP32[i30 >> 2] = i22 + 1;
9035 HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9036 i22 = HEAP32[i30 >> 2] | 0;
9037 HEAP32[i30 >> 2] = i22 + 1;
9038 HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9039 i22 = HEAP32[i30 >> 2] | 0;
9040 HEAP32[i30 >> 2] = i22 + 1;
9041 HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9042 i22 = HEAP32[i30 >> 2] | 0;
9043 HEAP32[i30 >> 2] = i22 + 1;
9044 HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9045 i22 = HEAP32[i7 + 132 >> 2] | 0;
9046 if ((i22 | 0) != 9) {
9047 if ((HEAP32[i7 + 136 >> 2] | 0) > 1) {
9048 i22 = 4;
9049 } else {
9050 i22 = (i22 | 0) < 2 ? 4 : 0;
9051 }
9052 } else {
9053 i22 = 2;
9054 }
9055 i37 = HEAP32[i30 >> 2] | 0;
9056 HEAP32[i30 >> 2] = i37 + 1;
9057 HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i22;
9058 i37 = HEAP32[i30 >> 2] | 0;
9059 HEAP32[i30 >> 2] = i37 + 1;
9060 HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = 3;
9061 HEAP32[i11 >> 2] = 113;
9062 break;
9063 }
9064 i37 = (((HEAP32[i33 + 44 >> 2] | 0) != 0 ? 2 : 0) | (HEAP32[i33 >> 2] | 0) != 0 | ((HEAP32[i33 + 16 >> 2] | 0) == 0 ? 0 : 4) | ((HEAP32[i33 + 28 >> 2] | 0 ) == 0 ? 0 : 8) | ((HEAP32[i33 + 36 >> 2] | 0) == 0 ? 0 : 16)) & 255;
9065 i17 = HEAP32[i30 >> 2] | 0;
9066 HEAP32[i30 >> 2] = i17 + 1;
9067 HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9068 i17 = HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] & 255;
9069 i37 = HEAP32[i30 >> 2] | 0;
9070 HEAP32[i30 >> 2] = i37 + 1;
9071 HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9072 i37 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] | 0) >>> 8 & 255;
9073 i17 = HEAP32[i30 >> 2] | 0;
9074 HEAP32[i30 >> 2] = i17 + 1;
9075 HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9076 i17 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] | 0) >>> 16 & 255;
9077 i37 = HEAP32[i30 >> 2] | 0;
9078 HEAP32[i30 >> 2] = i37 + 1;
9079 HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9080 i37 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] | 0) >>> 24 & 255;
9081 i17 = HEAP32[i30 >> 2] | 0;
9082 HEAP32[i30 >> 2] = i17 + 1;
9083 HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9084 i17 = HEAP32[i7 + 132 >> 2] | 0;
9085 if ((i17 | 0) != 9) {
9086 if ((HEAP32[i7 + 136 >> 2] | 0) > 1) {
9087 i17 = 4;
9088 } else {
9089 i17 = (i17 | 0) < 2 ? 4 : 0;
9090 }
9091 } else {
9092 i17 = 2;
9093 }
9094 i37 = HEAP32[i30 >> 2] | 0;
9095 HEAP32[i30 >> 2] = i37 + 1;
9096 HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9097 i37 = HEAP32[(HEAP32[i28 >> 2] | 0) + 12 >> 2] & 255;
9098 i17 = HEAP32[i30 >> 2] | 0;
9099 HEAP32[i30 >> 2] = i17 + 1;
9100 HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9101 i17 = HEAP32[i28 >> 2] | 0;
9102 if ((HEAP32[i17 + 16 >> 2] | 0) != 0) {
9103 i17 = HEAP32[i17 + 20 >> 2] & 255;
9104 i37 = HEAP32[i30 >> 2] | 0;
9105 HEAP32[i30 >> 2] = i37 + 1;
9106 HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9107 i37 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 20 >> 2] | 0) >>> 8 & 255;
9108 i17 = HEAP32[i30 >> 2] | 0;
9109 HEAP32[i30 >> 2] = i17 + 1;
9110 HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9111 i17 = HEAP32[i28 >> 2] | 0;
9112 }
9113 if ((HEAP32[i17 + 44 >> 2] | 0) != 0) {
9114 HEAP32[i32 >> 2] = _crc32(HEAP32[i32 >> 2] | 0, HEAP32[i29 >> 2] | 0, HEA P32[i30 >> 2] | 0) | 0;
9115 }
9116 HEAP32[i7 + 32 >> 2] = 0;
9117 HEAP32[i11 >> 2] = 69;
9118 i17 = 34;
9119 } else {
9120 i31 = i29;
9121 i17 = 32;
9122 }
9123 } while (0);
9124 if ((i17 | 0) == 32) {
9125 if ((i31 | 0) == 69) {
9126 i28 = i7 + 28 | 0;
9127 i17 = 34;
9128 } else {
9129 i17 = 55;
9130 }
9131 }
9132 do {
9133 if ((i17 | 0) == 34) {
9134 i37 = HEAP32[i28 >> 2] | 0;
9135 if ((HEAP32[i37 + 16 >> 2] | 0) == 0) {
9136 HEAP32[i11 >> 2] = 73;
9137 i17 = 57;
9138 break;
9139 }
9140 i29 = i7 + 20 | 0;
9141 i34 = HEAP32[i29 >> 2] | 0;
9142 i17 = i7 + 32 | 0;
9143 i36 = HEAP32[i17 >> 2] | 0;
9144 L55 : do {
9145 if (i36 >>> 0 < (HEAP32[i37 + 20 >> 2] & 65535) >>> 0) {
9146 i30 = i7 + 12 | 0;
9147 i32 = i2 + 48 | 0;
9148 i31 = i7 + 8 | 0;
9149 i33 = i2 + 20 | 0;
9150 i35 = i34;
9151 while (1) {
9152 if ((i35 | 0) == (HEAP32[i30 >> 2] | 0)) {
9153 if ((HEAP32[i37 + 44 >> 2] | 0) != 0 & i35 >>> 0 > i34 >>> 0) {
9154 HEAP32[i32 >> 2] = _crc32(HEAP32[i32 >> 2] | 0, (HEAP32[i31 >> 2] | 0 ) + i34 | 0, i35 - i34 | 0) | 0;
9155 }
9156 i34 = HEAP32[i5 >> 2] | 0;
9157 i35 = HEAP32[i34 + 20 >> 2] | 0;
9158 i36 = HEAP32[i3 >> 2] | 0;
9159 i35 = i35 >>> 0 > i36 >>> 0 ? i36 : i35;
9160 if ((i35 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i34 + 16 >> 2] | 0, i35 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i35, i27 = (HEAP 32[i5 >> 2] | 0) + 16 | 0, HEAP32[i27 >> 2] = (HEAP32[i27 >> 2] | 0) + i35, HEAP 32[i33 >> 2] = (HEAP32[i33 >> 2] | 0) + i35, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i35, i27 = HEAP32[i5 >> 2] | 0, i36 = i27 + 20 | 0, i37 = HEAP32[i36 >> 2 ] | 0, HEAP32[i36 >> 2] = i37 - i35, (i37 | 0) == (i35 | 0)) : 0) {
9161 HEAP32[i27 + 16 >> 2] = HEAP32[i27 + 8 >> 2];
9162 }
9163 i34 = HEAP32[i29 >> 2] | 0;
9164 if ((i34 | 0) == (HEAP32[i30 >> 2] | 0)) {
9165 break;
9166 }
9167 i37 = HEAP32[i28 >> 2] | 0;
9168 i36 = HEAP32[i17 >> 2] | 0;
9169 i35 = i34;
9170 }
9171 i36 = HEAP8[(HEAP32[i37 + 16 >> 2] | 0) + i36 | 0] | 0;
9172 HEAP32[i29 >> 2] = i35 + 1;
9173 HEAP8[(HEAP32[i31 >> 2] | 0) + i35 | 0] = i36;
9174 i36 = (HEAP32[i17 >> 2] | 0) + 1 | 0;
9175 HEAP32[i17 >> 2] = i36;
9176 i37 = HEAP32[i28 >> 2] | 0;
9177 if (!(i36 >>> 0 < (HEAP32[i37 + 20 >> 2] & 65535) >>> 0)) {
9178 break L55;
9179 }
9180 i35 = HEAP32[i29 >> 2] | 0;
9181 }
9182 i37 = HEAP32[i28 >> 2] | 0;
9183 }
9184 } while (0);
9185 if ((HEAP32[i37 + 44 >> 2] | 0) != 0 ? (i26 = HEAP32[i29 >> 2] | 0, i26 >> > 0 > i34 >>> 0) : 0) {
9186 i37 = i2 + 48 | 0;
9187 HEAP32[i37 >> 2] = _crc32(HEAP32[i37 >> 2] | 0, (HEAP32[i7 + 8 >> 2] | 0) + i34 | 0, i26 - i34 | 0) | 0;
9188 i37 = HEAP32[i28 >> 2] | 0;
9189 }
9190 if ((HEAP32[i17 >> 2] | 0) == (HEAP32[i37 + 20 >> 2] | 0)) {
9191 HEAP32[i17 >> 2] = 0;
9192 HEAP32[i11 >> 2] = 73;
9193 i17 = 57;
9194 break;
9195 } else {
9196 i31 = HEAP32[i11 >> 2] | 0;
9197 i17 = 55;
9198 break;
9199 }
9200 }
9201 } while (0);
9202 if ((i17 | 0) == 55) {
9203 if ((i31 | 0) == 73) {
9204 i37 = HEAP32[i7 + 28 >> 2] | 0;
9205 i17 = 57;
9206 } else {
9207 i17 = 76;
9208 }
9209 }
9210 do {
9211 if ((i17 | 0) == 57) {
9212 i26 = i7 + 28 | 0;
9213 if ((HEAP32[i37 + 28 >> 2] | 0) == 0) {
9214 HEAP32[i11 >> 2] = 91;
9215 i17 = 78;
9216 break;
9217 }
9218 i27 = i7 + 20 | 0;
9219 i35 = HEAP32[i27 >> 2] | 0;
9220 i32 = i7 + 12 | 0;
9221 i29 = i2 + 48 | 0;
9222 i28 = i7 + 8 | 0;
9223 i31 = i2 + 20 | 0;
9224 i30 = i7 + 32 | 0;
9225 i33 = i35;
9226 while (1) {
9227 if ((i33 | 0) == (HEAP32[i32 >> 2] | 0)) {
9228 if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 & i33 >>> 0 > i3 5 >>> 0) {
9229 HEAP32[i29 >> 2] = _crc32(HEAP32[i29 >> 2] | 0, (HEAP32[i28 >> 2] | 0) + i35 | 0, i33 - i35 | 0) | 0;
9230 }
9231 i33 = HEAP32[i5 >> 2] | 0;
9232 i34 = HEAP32[i33 + 20 >> 2] | 0;
9233 i35 = HEAP32[i3 >> 2] | 0;
9234 i34 = i34 >>> 0 > i35 >>> 0 ? i35 : i34;
9235 if ((i34 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i33 + 16 >> 2] | 0, i34 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i34, i25 = (HEAP32 [i5 >> 2] | 0) + 16 | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, HEAP32 [i31 >> 2] = (HEAP32[i31 >> 2] | 0) + i34, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i34, i25 = HEAP32[i5 >> 2] | 0, i36 = i25 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i34, (i37 | 0) == (i34 | 0)) : 0) {
9236 HEAP32[i25 + 16 >> 2] = HEAP32[i25 + 8 >> 2];
9237 }
9238 i35 = HEAP32[i27 >> 2] | 0;
9239 if ((i35 | 0) == (HEAP32[i32 >> 2] | 0)) {
9240 i25 = 1;
9241 break;
9242 } else {
9243 i33 = i35;
9244 }
9245 }
9246 i34 = HEAP32[i30 >> 2] | 0;
9247 HEAP32[i30 >> 2] = i34 + 1;
9248 i34 = HEAP8[(HEAP32[(HEAP32[i26 >> 2] | 0) + 28 >> 2] | 0) + i34 | 0] | 0 ;
9249 HEAP32[i27 >> 2] = i33 + 1;
9250 HEAP8[(HEAP32[i28 >> 2] | 0) + i33 | 0] = i34;
9251 if (i34 << 24 >> 24 == 0) {
9252 i17 = 68;
9253 break;
9254 }
9255 i33 = HEAP32[i27 >> 2] | 0;
9256 }
9257 if ((i17 | 0) == 68) {
9258 i25 = i34 & 255;
9259 }
9260 if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 ? (i24 = HEAP32[i2 7 >> 2] | 0, i24 >>> 0 > i35 >>> 0) : 0) {
9261 HEAP32[i29 >> 2] = _crc32(HEAP32[i29 >> 2] | 0, (HEAP32[i28 >> 2] | 0) + i35 | 0, i24 - i35 | 0) | 0;
9262 }
9263 if ((i25 | 0) == 0) {
9264 HEAP32[i30 >> 2] = 0;
9265 HEAP32[i11 >> 2] = 91;
9266 i17 = 78;
9267 break;
9268 } else {
9269 i31 = HEAP32[i11 >> 2] | 0;
9270 i17 = 76;
9271 break;
9272 }
9273 }
9274 } while (0);
9275 if ((i17 | 0) == 76) {
9276 if ((i31 | 0) == 91) {
9277 i26 = i7 + 28 | 0;
9278 i17 = 78;
9279 } else {
9280 i17 = 97;
9281 }
9282 }
9283 do {
9284 if ((i17 | 0) == 78) {
9285 if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 36 >> 2] | 0) == 0) {
9286 HEAP32[i11 >> 2] = 103;
9287 i17 = 99;
9288 break;
9289 }
9290 i24 = i7 + 20 | 0;
9291 i32 = HEAP32[i24 >> 2] | 0;
9292 i29 = i7 + 12 | 0;
9293 i27 = i2 + 48 | 0;
9294 i25 = i7 + 8 | 0;
9295 i28 = i2 + 20 | 0;
9296 i30 = i7 + 32 | 0;
9297 i31 = i32;
9298 while (1) {
9299 if ((i31 | 0) == (HEAP32[i29 >> 2] | 0)) {
9300 if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 & i31 >>> 0 > i3 2 >>> 0) {
9301 HEAP32[i27 >> 2] = _crc32(HEAP32[i27 >> 2] | 0, (HEAP32[i25 >> 2] | 0) + i32 | 0, i31 - i32 | 0) | 0;
9302 }
9303 i31 = HEAP32[i5 >> 2] | 0;
9304 i33 = HEAP32[i31 + 20 >> 2] | 0;
9305 i32 = HEAP32[i3 >> 2] | 0;
9306 i32 = i33 >>> 0 > i32 >>> 0 ? i32 : i33;
9307 if ((i32 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i31 + 16 >> 2] | 0, i32 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i32, i23 = (HEAP32 [i5 >> 2] | 0) + 16 | 0, HEAP32[i23 >> 2] = (HEAP32[i23 >> 2] | 0) + i32, HEAP32 [i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i32, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i32, i23 = HEAP32[i5 >> 2] | 0, i36 = i23 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i32, (i37 | 0) == (i32 | 0)) : 0) {
9308 HEAP32[i23 + 16 >> 2] = HEAP32[i23 + 8 >> 2];
9309 }
9310 i32 = HEAP32[i24 >> 2] | 0;
9311 if ((i32 | 0) == (HEAP32[i29 >> 2] | 0)) {
9312 i23 = 1;
9313 break;
9314 } else {
9315 i31 = i32;
9316 }
9317 }
9318 i33 = HEAP32[i30 >> 2] | 0;
9319 HEAP32[i30 >> 2] = i33 + 1;
9320 i33 = HEAP8[(HEAP32[(HEAP32[i26 >> 2] | 0) + 36 >> 2] | 0) + i33 | 0] | 0 ;
9321 HEAP32[i24 >> 2] = i31 + 1;
9322 HEAP8[(HEAP32[i25 >> 2] | 0) + i31 | 0] = i33;
9323 if (i33 << 24 >> 24 == 0) {
9324 i17 = 89;
9325 break;
9326 }
9327 i31 = HEAP32[i24 >> 2] | 0;
9328 }
9329 if ((i17 | 0) == 89) {
9330 i23 = i33 & 255;
9331 }
9332 if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 ? (i22 = HEAP32[i2 4 >> 2] | 0, i22 >>> 0 > i32 >>> 0) : 0) {
9333 HEAP32[i27 >> 2] = _crc32(HEAP32[i27 >> 2] | 0, (HEAP32[i25 >> 2] | 0) + i32 | 0, i22 - i32 | 0) | 0;
9334 }
9335 if ((i23 | 0) == 0) {
9336 HEAP32[i11 >> 2] = 103;
9337 i17 = 99;
9338 break;
9339 } else {
9340 i31 = HEAP32[i11 >> 2] | 0;
9341 i17 = 97;
9342 break;
9343 }
9344 }
9345 } while (0);
9346 if ((i17 | 0) == 97 ? (i31 | 0) == 103 : 0) {
9347 i26 = i7 + 28 | 0;
9348 i17 = 99;
9349 }
9350 do {
9351 if ((i17 | 0) == 99) {
9352 if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) == 0) {
9353 HEAP32[i11 >> 2] = 113;
9354 break;
9355 }
9356 i17 = i7 + 20 | 0;
9357 i22 = i7 + 12 | 0;
9358 if ((((HEAP32[i17 >> 2] | 0) + 2 | 0) >>> 0 > (HEAP32[i22 >> 2] | 0) >>> 0 ? (i20 = HEAP32[i5 >> 2] | 0, i21 = HEAP32[i20 + 20 >> 2] | 0, i23 = HEAP32[i3 >> 2] | 0, i21 = i21 >>> 0 > i23 >>> 0 ? i23 : i21, (i21 | 0) != 0) : 0) ? (_mem cpy(HEAP32[i4 >> 2] | 0, HEAP32[i20 + 16 >> 2] | 0, i21 | 0) | 0, HEAP32[i4 >> 2 ] = (HEAP32[i4 >> 2] | 0) + i21, i19 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i1 9 >> 2] = (HEAP32[i19 >> 2] | 0) + i21, i19 = i2 + 20 | 0, HEAP32[i19 >> 2] = (H EAP32[i19 >> 2] | 0) + i21, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i21, i19 = HEAP32[i5 >> 2] | 0, i36 = i19 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i21, (i37 | 0) == (i21 | 0)) : 0) {
9359 HEAP32[i19 + 16 >> 2] = HEAP32[i19 + 8 >> 2];
9360 }
9361 i19 = HEAP32[i17 >> 2] | 0;
9362 if (!((i19 + 2 | 0) >>> 0 > (HEAP32[i22 >> 2] | 0) >>> 0)) {
9363 i37 = i2 + 48 | 0;
9364 i34 = HEAP32[i37 >> 2] & 255;
9365 HEAP32[i17 >> 2] = i19 + 1;
9366 i35 = i7 + 8 | 0;
9367 HEAP8[(HEAP32[i35 >> 2] | 0) + i19 | 0] = i34;
9368 i34 = (HEAP32[i37 >> 2] | 0) >>> 8 & 255;
9369 i36 = HEAP32[i17 >> 2] | 0;
9370 HEAP32[i17 >> 2] = i36 + 1;
9371 HEAP8[(HEAP32[i35 >> 2] | 0) + i36 | 0] = i34;
9372 HEAP32[i37 >> 2] = _crc32(0, 0, 0) | 0;
9373 HEAP32[i11 >> 2] = 113;
9374 }
9375 }
9376 } while (0);
9377 i19 = i7 + 20 | 0;
9378 if ((HEAP32[i19 >> 2] | 0) == 0) {
9379 if ((HEAP32[i2 + 4 >> 2] | 0) == 0 ? (i18 | 0) >= (i10 | 0) & (i10 | 0) != 4 : 0) {
9380 HEAP32[i2 + 24 >> 2] = HEAP32[3180 >> 2];
9381 i37 = -5;
9382 STACKTOP = i1;
9383 return i37 | 0;
9384 }
9385 } else {
9386 i17 = HEAP32[i5 >> 2] | 0;
9387 i20 = HEAP32[i17 + 20 >> 2] | 0;
9388 i18 = HEAP32[i3 >> 2] | 0;
9389 i20 = i20 >>> 0 > i18 >>> 0 ? i18 : i20;
9390 if ((i20 | 0) != 0) {
9391 _memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i17 + 16 >> 2] | 0, i20 | 0) | 0;
9392 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i20;
9393 i17 = (HEAP32[i5 >> 2] | 0) + 16 | 0;
9394 HEAP32[i17 >> 2] = (HEAP32[i17 >> 2] | 0) + i20;
9395 i17 = i2 + 20 | 0;
9396 HEAP32[i17 >> 2] = (HEAP32[i17 >> 2] | 0) + i20;
9397 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i20;
9398 i17 = HEAP32[i5 >> 2] | 0;
9399 i36 = i17 + 20 | 0;
9400 i37 = HEAP32[i36 >> 2] | 0;
9401 HEAP32[i36 >> 2] = i37 - i20;
9402 if ((i37 | 0) == (i20 | 0)) {
9403 HEAP32[i17 + 16 >> 2] = HEAP32[i17 + 8 >> 2];
9404 }
9405 i18 = HEAP32[i3 >> 2] | 0;
9406 }
9407 if ((i18 | 0) == 0) {
9408 HEAP32[i8 >> 2] = -1;
9409 i37 = 0;
9410 STACKTOP = i1;
9411 return i37 | 0;
9412 }
9413 }
9414 i18 = (HEAP32[i11 >> 2] | 0) == 666;
9415 i17 = (HEAP32[i2 + 4 >> 2] | 0) == 0;
9416 if (i18) {
9417 if (i17) {
9418 i17 = 121;
9419 } else {
9420 HEAP32[i2 + 24 >> 2] = HEAP32[3180 >> 2];
9421 i37 = -5;
9422 STACKTOP = i1;
9423 return i37 | 0;
9424 }
9425 } else {
9426 if (i17) {
9427 i17 = 121;
9428 } else {
9429 i17 = 124;
9430 }
9431 }
9432 do {
9433 if ((i17 | 0) == 121) {
9434 if ((HEAP32[i7 + 116 >> 2] | 0) == 0) {
9435 if ((i10 | 0) != 0) {
9436 if (i18) {
9437 break;
9438 } else {
9439 i17 = 124;
9440 break;
9441 }
9442 } else {
9443 i37 = 0;
9444 STACKTOP = i1;
9445 return i37 | 0;
9446 }
9447 } else {
9448 i17 = 124;
9449 }
9450 }
9451 } while (0);
9452 do {
9453 if ((i17 | 0) == 124) {
9454 i18 = HEAP32[i7 + 136 >> 2] | 0;
9455 L185 : do {
9456 if ((i18 | 0) == 2) {
9457 i22 = i7 + 116 | 0;
9458 i18 = i7 + 96 | 0;
9459 i13 = i7 + 108 | 0;
9460 i14 = i7 + 56 | 0;
9461 i21 = i7 + 5792 | 0;
9462 i20 = i7 + 5796 | 0;
9463 i24 = i7 + 5784 | 0;
9464 i23 = i7 + 5788 | 0;
9465 i12 = i7 + 92 | 0;
9466 while (1) {
9467 if ((HEAP32[i22 >> 2] | 0) == 0 ? (_fill_window(i7), (HEAP32[i22 >> 2] | 0) == 0) : 0) {
9468 break;
9469 }
9470 HEAP32[i18 >> 2] = 0;
9471 i37 = HEAP8[(HEAP32[i14 >> 2] | 0) + (HEAP32[i13 >> 2] | 0) | 0] | 0;
9472 i26 = HEAP32[i21 >> 2] | 0;
9473 HEAP16[(HEAP32[i20 >> 2] | 0) + (i26 << 1) >> 1] = 0;
9474 HEAP32[i21 >> 2] = i26 + 1;
9475 HEAP8[(HEAP32[i24 >> 2] | 0) + i26 | 0] = i37;
9476 i37 = i7 + ((i37 & 255) << 2) + 148 | 0;
9477 HEAP16[i37 >> 1] = (HEAP16[i37 >> 1] | 0) + 1 << 16 >> 16;
9478 i37 = (HEAP32[i21 >> 2] | 0) == ((HEAP32[i23 >> 2] | 0) + -1 | 0);
9479 HEAP32[i22 >> 2] = (HEAP32[i22 >> 2] | 0) + -1;
9480 i26 = (HEAP32[i13 >> 2] | 0) + 1 | 0;
9481 HEAP32[i13 >> 2] = i26;
9482 if (!i37) {
9483 continue;
9484 }
9485 i25 = HEAP32[i12 >> 2] | 0;
9486 if ((i25 | 0) > -1) {
9487 i27 = (HEAP32[i14 >> 2] | 0) + i25 | 0;
9488 } else {
9489 i27 = 0;
9490 }
9491 __tr_flush_block(i7, i27, i26 - i25 | 0, 0);
9492 HEAP32[i12 >> 2] = HEAP32[i13 >> 2];
9493 i26 = HEAP32[i7 >> 2] | 0;
9494 i25 = i26 + 28 | 0;
9495 i27 = HEAP32[i25 >> 2] | 0;
9496 i30 = HEAP32[i27 + 20 >> 2] | 0;
9497 i28 = i26 + 16 | 0;
9498 i29 = HEAP32[i28 >> 2] | 0;
9499 i29 = i30 >>> 0 > i29 >>> 0 ? i29 : i30;
9500 if ((i29 | 0) != 0 ? (i16 = i26 + 12 | 0, _memcpy(HEAP32[i16 >> 2] | 0, HEAP32[i27 + 16 >> 2] | 0, i29 | 0) | 0, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) + i29, i16 = (HEAP32[i25 >> 2] | 0) + 16 | 0, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) + i29, i16 = i26 + 20 | 0, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) + i29, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) - i29, i16 = HEAP32[i25 >> 2] | 0, i36 = i16 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i2 9, (i37 | 0) == (i29 | 0)) : 0) {
9501 HEAP32[i16 + 16 >> 2] = HEAP32[i16 + 8 >> 2];
9502 }
9503 if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9504 break L185;
9505 }
9506 }
9507 if ((i10 | 0) != 0) {
9508 i16 = HEAP32[i12 >> 2] | 0;
9509 if ((i16 | 0) > -1) {
9510 i14 = (HEAP32[i14 >> 2] | 0) + i16 | 0;
9511 } else {
9512 i14 = 0;
9513 }
9514 __tr_flush_block(i7, i14, (HEAP32[i13 >> 2] | 0) - i16 | 0, i9 & 1);
9515 HEAP32[i12 >> 2] = HEAP32[i13 >> 2];
9516 i14 = HEAP32[i7 >> 2] | 0;
9517 i13 = i14 + 28 | 0;
9518 i12 = HEAP32[i13 >> 2] | 0;
9519 i17 = HEAP32[i12 + 20 >> 2] | 0;
9520 i16 = i14 + 16 | 0;
9521 i18 = HEAP32[i16 >> 2] | 0;
9522 i17 = i17 >>> 0 > i18 >>> 0 ? i18 : i17;
9523 if ((i17 | 0) != 0 ? (i15 = i14 + 12 | 0, _memcpy(HEAP32[i15 >> 2] | 0, HEAP32[i12 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i15 >> 2] = (HEAP32[i15 >> 2] | 0) + i17, i15 = (HEAP32[i13 >> 2] | 0) + 16 | 0, HEAP32[i15 >> 2] = (HEAP32[i15 >> 2] | 0) + i17, i15 = i14 + 20 | 0, HEAP32[i15 >> 2] = (HEAP32[i15 >> 2] | 0) + i17, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) - i17, i15 = HEAP32[i13 >> 2] | 0, i36 = i15 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i1 7, (i37 | 0) == (i17 | 0)) : 0) {
9524 HEAP32[i15 + 16 >> 2] = HEAP32[i15 + 8 >> 2];
9525 }
9526 if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9527 i12 = i9 ? 2 : 0;
9528 i17 = 183;
9529 break;
9530 } else {
9531 i12 = i9 ? 3 : 1;
9532 i17 = 183;
9533 break;
9534 }
9535 }
9536 } else if ((i18 | 0) == 3) {
9537 i27 = i7 + 116 | 0;
9538 i26 = (i10 | 0) == 0;
9539 i22 = i7 + 96 | 0;
9540 i15 = i7 + 108 | 0;
9541 i20 = i7 + 5792 | 0;
9542 i24 = i7 + 5796 | 0;
9543 i23 = i7 + 5784 | 0;
9544 i21 = i7 + (HEAPU8[296] << 2) + 2440 | 0;
9545 i25 = i7 + 5788 | 0;
9546 i18 = i7 + 56 | 0;
9547 i16 = i7 + 92 | 0;
9548 while (1) {
9549 i29 = HEAP32[i27 >> 2] | 0;
9550 if (i29 >>> 0 < 258) {
9551 _fill_window(i7);
9552 i29 = HEAP32[i27 >> 2] | 0;
9553 if (i29 >>> 0 < 258 & i26) {
9554 break L185;
9555 }
9556 if ((i29 | 0) == 0) {
9557 break;
9558 }
9559 HEAP32[i22 >> 2] = 0;
9560 if (i29 >>> 0 > 2) {
9561 i17 = 151;
9562 } else {
9563 i28 = HEAP32[i15 >> 2] | 0;
9564 i17 = 166;
9565 }
9566 } else {
9567 HEAP32[i22 >> 2] = 0;
9568 i17 = 151;
9569 }
9570 if ((i17 | 0) == 151) {
9571 i17 = 0;
9572 i28 = HEAP32[i15 >> 2] | 0;
9573 if ((i28 | 0) != 0) {
9574 i31 = HEAP32[i18 >> 2] | 0;
9575 i30 = HEAP8[i31 + (i28 + -1) | 0] | 0;
9576 if ((i30 << 24 >> 24 == (HEAP8[i31 + i28 | 0] | 0) ? i30 << 24 >> 24 == (HEAP8[i31 + (i28 + 1) | 0] | 0) : 0) ? (i14 = i31 + (i28 + 2) | 0, i30 << 24 >> 24 == (HEAP8[i14] | 0)) : 0) {
9577 i31 = i31 + (i28 + 258) | 0;
9578 i32 = i14;
9579 do {
9580 i33 = i32 + 1 | 0;
9581 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9582 i32 = i33;
9583 break;
9584 }
9585 i33 = i32 + 2 | 0;
9586 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9587 i32 = i33;
9588 break;
9589 }
9590 i33 = i32 + 3 | 0;
9591 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9592 i32 = i33;
9593 break;
9594 }
9595 i33 = i32 + 4 | 0;
9596 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9597 i32 = i33;
9598 break;
9599 }
9600 i33 = i32 + 5 | 0;
9601 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9602 i32 = i33;
9603 break;
9604 }
9605 i33 = i32 + 6 | 0;
9606 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9607 i32 = i33;
9608 break;
9609 }
9610 i33 = i32 + 7 | 0;
9611 if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9612 i32 = i33;
9613 break;
9614 }
9615 i32 = i32 + 8 | 0;
9616 } while (i30 << 24 >> 24 == (HEAP8[i32] | 0) & i32 >>> 0 < i31 >>> 0 );
9617 i30 = i32 - i31 + 258 | 0;
9618 i29 = i30 >>> 0 > i29 >>> 0 ? i29 : i30;
9619 HEAP32[i22 >> 2] = i29;
9620 if (i29 >>> 0 > 2) {
9621 i29 = i29 + 253 | 0;
9622 i28 = HEAP32[i20 >> 2] | 0;
9623 HEAP16[(HEAP32[i24 >> 2] | 0) + (i28 << 1) >> 1] = 1;
9624 HEAP32[i20 >> 2] = i28 + 1;
9625 HEAP8[(HEAP32[i23 >> 2] | 0) + i28 | 0] = i29;
9626 i29 = i7 + ((HEAPU8[808 + (i29 & 255) | 0] | 256) + 1 << 2) + 148 | 0;
9627 HEAP16[i29 >> 1] = (HEAP16[i29 >> 1] | 0) + 1 << 16 >> 16;
9628 HEAP16[i21 >> 1] = (HEAP16[i21 >> 1] | 0) + 1 << 16 >> 16;
9629 i29 = (HEAP32[i20 >> 2] | 0) == ((HEAP32[i25 >> 2] | 0) + -1 | 0) | 0;
9630 i28 = HEAP32[i22 >> 2] | 0;
9631 HEAP32[i27 >> 2] = (HEAP32[i27 >> 2] | 0) - i28;
9632 i28 = (HEAP32[i15 >> 2] | 0) + i28 | 0;
9633 HEAP32[i15 >> 2] = i28;
9634 HEAP32[i22 >> 2] = 0;
9635 } else {
9636 i17 = 166;
9637 }
9638 } else {
9639 i17 = 166;
9640 }
9641 } else {
9642 i28 = 0;
9643 i17 = 166;
9644 }
9645 }
9646 if ((i17 | 0) == 166) {
9647 i17 = 0;
9648 i29 = HEAP8[(HEAP32[i18 >> 2] | 0) + i28 | 0] | 0;
9649 i28 = HEAP32[i20 >> 2] | 0;
9650 HEAP16[(HEAP32[i24 >> 2] | 0) + (i28 << 1) >> 1] = 0;
9651 HEAP32[i20 >> 2] = i28 + 1;
9652 HEAP8[(HEAP32[i23 >> 2] | 0) + i28 | 0] = i29;
9653 i29 = i7 + ((i29 & 255) << 2) + 148 | 0;
9654 HEAP16[i29 >> 1] = (HEAP16[i29 >> 1] | 0) + 1 << 16 >> 16;
9655 i29 = (HEAP32[i20 >> 2] | 0) == ((HEAP32[i25 >> 2] | 0) + -1 | 0) | 0;
9656 HEAP32[i27 >> 2] = (HEAP32[i27 >> 2] | 0) + -1;
9657 i28 = (HEAP32[i15 >> 2] | 0) + 1 | 0;
9658 HEAP32[i15 >> 2] = i28;
9659 }
9660 if ((i29 | 0) == 0) {
9661 continue;
9662 }
9663 i29 = HEAP32[i16 >> 2] | 0;
9664 if ((i29 | 0) > -1) {
9665 i30 = (HEAP32[i18 >> 2] | 0) + i29 | 0;
9666 } else {
9667 i30 = 0;
9668 }
9669 __tr_flush_block(i7, i30, i28 - i29 | 0, 0);
9670 HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
9671 i30 = HEAP32[i7 >> 2] | 0;
9672 i28 = i30 + 28 | 0;
9673 i29 = HEAP32[i28 >> 2] | 0;
9674 i33 = HEAP32[i29 + 20 >> 2] | 0;
9675 i31 = i30 + 16 | 0;
9676 i32 = HEAP32[i31 >> 2] | 0;
9677 i32 = i33 >>> 0 > i32 >>> 0 ? i32 : i33;
9678 if ((i32 | 0) != 0 ? (i13 = i30 + 12 | 0, _memcpy(HEAP32[i13 >> 2] | 0, HEAP32[i29 + 16 >> 2] | 0, i32 | 0) | 0, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i32, i13 = (HEAP32[i28 >> 2] | 0) + 16 | 0, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i32, i13 = i30 + 20 | 0, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i32, HEAP32[i31 >> 2] = (HEAP32[i31 >> 2] | 0) - i32, i13 = HEAP32[i28 >> 2] | 0, i36 = i13 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i3 2, (i37 | 0) == (i32 | 0)) : 0) {
9679 HEAP32[i13 + 16 >> 2] = HEAP32[i13 + 8 >> 2];
9680 }
9681 if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9682 break L185;
9683 }
9684 }
9685 i13 = HEAP32[i16 >> 2] | 0;
9686 if ((i13 | 0) > -1) {
9687 i14 = (HEAP32[i18 >> 2] | 0) + i13 | 0;
9688 } else {
9689 i14 = 0;
9690 }
9691 __tr_flush_block(i7, i14, (HEAP32[i15 >> 2] | 0) - i13 | 0, i9 & 1);
9692 HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
9693 i14 = HEAP32[i7 >> 2] | 0;
9694 i16 = i14 + 28 | 0;
9695 i15 = HEAP32[i16 >> 2] | 0;
9696 i18 = HEAP32[i15 + 20 >> 2] | 0;
9697 i13 = i14 + 16 | 0;
9698 i17 = HEAP32[i13 >> 2] | 0;
9699 i17 = i18 >>> 0 > i17 >>> 0 ? i17 : i18;
9700 if ((i17 | 0) != 0 ? (i12 = i14 + 12 | 0, _memcpy(HEAP32[i12 >> 2] | 0, HEAP32[i15 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + i17, i12 = (HEAP32[i16 >> 2] | 0) + 16 | 0, HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + i17, i12 = i14 + 20 | 0, HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + i17, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) - i17, i12 = HEAP32[i16 >> 2] | 0, i36 = i12 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i17 , (i37 | 0) == (i17 | 0)) : 0) {
9701 HEAP32[i12 + 16 >> 2] = HEAP32[i12 + 8 >> 2];
9702 }
9703 if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9704 i12 = i9 ? 2 : 0;
9705 i17 = 183;
9706 break;
9707 } else {
9708 i12 = i9 ? 3 : 1;
9709 i17 = 183;
9710 break;
9711 }
9712 } else {
9713 i12 = FUNCTION_TABLE_iii[HEAP32[184 + ((HEAP32[i7 + 132 >> 2] | 0) * 12 | 0) >> 2] & 3](i7, i10) | 0;
9714 i17 = 183;
9715 }
9716 } while (0);
9717 if ((i17 | 0) == 183) {
9718 if ((i12 & -2 | 0) == 2) {
9719 HEAP32[i11 >> 2] = 666;
9720 }
9721 if ((i12 & -3 | 0) != 0) {
9722 if ((i12 | 0) != 1) {
9723 break;
9724 }
9725 if ((i10 | 0) == 1) {
9726 __tr_align(i7);
9727 } else if (((i10 | 0) != 5 ? (__tr_stored_block(i7, 0, 0, 0), (i10 | 0) == 3) : 0) ? (i37 = HEAP32[i7 + 76 >> 2] | 0, i36 = HEAP32[i7 + 68 >> 2] | 0, HE AP16[i36 + (i37 + -1 << 1) >> 1] = 0, _memset(i36 | 0, 0, (i37 << 1) + -2 | 0) | 0, (HEAP32[i7 + 116 >> 2] | 0) == 0) : 0) {
9728 HEAP32[i7 + 108 >> 2] = 0;
9729 HEAP32[i7 + 92 >> 2] = 0;
9730 }
9731 i11 = HEAP32[i5 >> 2] | 0;
9732 i12 = HEAP32[i11 + 20 >> 2] | 0;
9733 i10 = HEAP32[i3 >> 2] | 0;
9734 i12 = i12 >>> 0 > i10 >>> 0 ? i10 : i12;
9735 if ((i12 | 0) != 0) {
9736 _memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i11 + 16 >> 2] | 0, i12 | 0) | 0;
9737 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i12;
9738 i10 = (HEAP32[i5 >> 2] | 0) + 16 | 0;
9739 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + i12;
9740 i10 = i2 + 20 | 0;
9741 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + i12;
9742 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i12;
9743 i10 = HEAP32[i5 >> 2] | 0;
9744 i36 = i10 + 20 | 0;
9745 i37 = HEAP32[i36 >> 2] | 0;
9746 HEAP32[i36 >> 2] = i37 - i12;
9747 if ((i37 | 0) == (i12 | 0)) {
9748 HEAP32[i10 + 16 >> 2] = HEAP32[i10 + 8 >> 2];
9749 }
9750 i10 = HEAP32[i3 >> 2] | 0;
9751 }
9752 if ((i10 | 0) != 0) {
9753 break;
9754 }
9755 HEAP32[i8 >> 2] = -1;
9756 i37 = 0;
9757 STACKTOP = i1;
9758 return i37 | 0;
9759 }
9760 }
9761 if ((HEAP32[i3 >> 2] | 0) != 0) {
9762 i37 = 0;
9763 STACKTOP = i1;
9764 return i37 | 0;
9765 }
9766 HEAP32[i8 >> 2] = -1;
9767 i37 = 0;
9768 STACKTOP = i1;
9769 return i37 | 0;
9770 }
9771 } while (0);
9772 if (!i9) {
9773 i37 = 0;
9774 STACKTOP = i1;
9775 return i37 | 0;
9776 }
9777 i8 = i7 + 24 | 0;
9778 i10 = HEAP32[i8 >> 2] | 0;
9779 if ((i10 | 0) < 1) {
9780 i37 = 1;
9781 STACKTOP = i1;
9782 return i37 | 0;
9783 }
9784 i11 = i2 + 48 | 0;
9785 i9 = HEAP32[i11 >> 2] | 0;
9786 if ((i10 | 0) == 2) {
9787 i34 = HEAP32[i19 >> 2] | 0;
9788 HEAP32[i19 >> 2] = i34 + 1;
9789 i36 = i7 + 8 | 0;
9790 HEAP8[(HEAP32[i36 >> 2] | 0) + i34 | 0] = i9;
9791 i34 = (HEAP32[i11 >> 2] | 0) >>> 8 & 255;
9792 i35 = HEAP32[i19 >> 2] | 0;
9793 HEAP32[i19 >> 2] = i35 + 1;
9794 HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i34;
9795 i35 = (HEAP32[i11 >> 2] | 0) >>> 16 & 255;
9796 i34 = HEAP32[i19 >> 2] | 0;
9797 HEAP32[i19 >> 2] = i34 + 1;
9798 HEAP8[(HEAP32[i36 >> 2] | 0) + i34 | 0] = i35;
9799 i34 = (HEAP32[i11 >> 2] | 0) >>> 24 & 255;
9800 i35 = HEAP32[i19 >> 2] | 0;
9801 HEAP32[i19 >> 2] = i35 + 1;
9802 HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i34;
9803 i35 = i2 + 8 | 0;
9804 i34 = HEAP32[i35 >> 2] & 255;
9805 i37 = HEAP32[i19 >> 2] | 0;
9806 HEAP32[i19 >> 2] = i37 + 1;
9807 HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i34;
9808 i37 = (HEAP32[i35 >> 2] | 0) >>> 8 & 255;
9809 i34 = HEAP32[i19 >> 2] | 0;
9810 HEAP32[i19 >> 2] = i34 + 1;
9811 HEAP8[(HEAP32[i36 >> 2] | 0) + i34 | 0] = i37;
9812 i34 = (HEAP32[i35 >> 2] | 0) >>> 16 & 255;
9813 i37 = HEAP32[i19 >> 2] | 0;
9814 HEAP32[i19 >> 2] = i37 + 1;
9815 HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i34;
9816 i35 = (HEAP32[i35 >> 2] | 0) >>> 24 & 255;
9817 i37 = HEAP32[i19 >> 2] | 0;
9818 HEAP32[i19 >> 2] = i37 + 1;
9819 HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i35;
9820 } else {
9821 i35 = HEAP32[i19 >> 2] | 0;
9822 HEAP32[i19 >> 2] = i35 + 1;
9823 i36 = i7 + 8 | 0;
9824 HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i9 >>> 24;
9825 i35 = HEAP32[i19 >> 2] | 0;
9826 HEAP32[i19 >> 2] = i35 + 1;
9827 HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i9 >>> 16;
9828 i35 = HEAP32[i11 >> 2] | 0;
9829 i37 = HEAP32[i19 >> 2] | 0;
9830 HEAP32[i19 >> 2] = i37 + 1;
9831 HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i35 >>> 8;
9832 i37 = HEAP32[i19 >> 2] | 0;
9833 HEAP32[i19 >> 2] = i37 + 1;
9834 HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i35;
9835 }
9836 i7 = HEAP32[i5 >> 2] | 0;
9837 i10 = HEAP32[i7 + 20 >> 2] | 0;
9838 i9 = HEAP32[i3 >> 2] | 0;
9839 i9 = i10 >>> 0 > i9 >>> 0 ? i9 : i10;
9840 if ((i9 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i7 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i9, i6 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i9, i6 = i2 + 20 | 0, HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i9, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i9, i6 = HEAP32[i5 >> 2] | 0, i36 = i6 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i9, (i37 | 0) == (i9 | 0)) : 0) {
9841 HEAP32[i6 + 16 >> 2] = HEAP32[i6 + 8 >> 2];
9842 }
9843 i2 = HEAP32[i8 >> 2] | 0;
9844 if ((i2 | 0) > 0) {
9845 HEAP32[i8 >> 2] = 0 - i2;
9846 }
9847 i37 = (HEAP32[i19 >> 2] | 0) == 0 | 0;
9848 STACKTOP = i1;
9849 return i37 | 0;
9850 }
9851 }
9852 } while (0);
9853 HEAP32[i2 + 24 >> 2] = HEAP32[3168 >> 2];
9854 i37 = -2;
9855 STACKTOP = i1;
9856 return i37 | 0;
9857 }
9858 function _free(i7) {
9859 i7 = i7 | 0;
9860 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i 20 = 0, i21 = 0;
9861 i1 = STACKTOP;
9862 if ((i7 | 0) == 0) {
9863 STACKTOP = i1;
9864 return;
9865 }
9866 i15 = i7 + -8 | 0;
9867 i16 = HEAP32[14488 >> 2] | 0;
9868 if (i15 >>> 0 < i16 >>> 0) {
9869 _abort();
9870 }
9871 i13 = HEAP32[i7 + -4 >> 2] | 0;
9872 i12 = i13 & 3;
9873 if ((i12 | 0) == 1) {
9874 _abort();
9875 }
9876 i8 = i13 & -8;
9877 i6 = i7 + (i8 + -8) | 0;
9878 do {
9879 if ((i13 & 1 | 0) == 0) {
9880 i19 = HEAP32[i15 >> 2] | 0;
9881 if ((i12 | 0) == 0) {
9882 STACKTOP = i1;
9883 return;
9884 }
9885 i15 = -8 - i19 | 0;
9886 i13 = i7 + i15 | 0;
9887 i12 = i19 + i8 | 0;
9888 if (i13 >>> 0 < i16 >>> 0) {
9889 _abort();
9890 }
9891 if ((i13 | 0) == (HEAP32[14492 >> 2] | 0)) {
9892 i2 = i7 + (i8 + -4) | 0;
9893 if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
9894 i2 = i13;
9895 i11 = i12;
9896 break;
9897 }
9898 HEAP32[14480 >> 2] = i12;
9899 HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
9900 HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1;
9901 HEAP32[i6 >> 2] = i12;
9902 STACKTOP = i1;
9903 return;
9904 }
9905 i18 = i19 >>> 3;
9906 if (i19 >>> 0 < 256) {
9907 i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9908 i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9909 i14 = 14512 + (i18 << 1 << 2) | 0;
9910 if ((i2 | 0) != (i14 | 0)) {
9911 if (i2 >>> 0 < i16 >>> 0) {
9912 _abort();
9913 }
9914 if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) {
9915 _abort();
9916 }
9917 }
9918 if ((i11 | 0) == (i2 | 0)) {
9919 HEAP32[3618] = HEAP32[3618] & ~(1 << i18);
9920 i2 = i13;
9921 i11 = i12;
9922 break;
9923 }
9924 if ((i11 | 0) != (i14 | 0)) {
9925 if (i11 >>> 0 < i16 >>> 0) {
9926 _abort();
9927 }
9928 i14 = i11 + 8 | 0;
9929 if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) {
9930 i17 = i14;
9931 } else {
9932 _abort();
9933 }
9934 } else {
9935 i17 = i11 + 8 | 0;
9936 }
9937 HEAP32[i2 + 12 >> 2] = i11;
9938 HEAP32[i17 >> 2] = i2;
9939 i2 = i13;
9940 i11 = i12;
9941 break;
9942 }
9943 i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0;
9944 i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9945 do {
9946 if ((i18 | 0) == (i13 | 0)) {
9947 i19 = i7 + (i15 + 20) | 0;
9948 i18 = HEAP32[i19 >> 2] | 0;
9949 if ((i18 | 0) == 0) {
9950 i19 = i7 + (i15 + 16) | 0;
9951 i18 = HEAP32[i19 >> 2] | 0;
9952 if ((i18 | 0) == 0) {
9953 i14 = 0;
9954 break;
9955 }
9956 }
9957 while (1) {
9958 i21 = i18 + 20 | 0;
9959 i20 = HEAP32[i21 >> 2] | 0;
9960 if ((i20 | 0) != 0) {
9961 i18 = i20;
9962 i19 = i21;
9963 continue;
9964 }
9965 i20 = i18 + 16 | 0;
9966 i21 = HEAP32[i20 >> 2] | 0;
9967 if ((i21 | 0) == 0) {
9968 break;
9969 } else {
9970 i18 = i21;
9971 i19 = i20;
9972 }
9973 }
9974 if (i19 >>> 0 < i16 >>> 0) {
9975 _abort();
9976 } else {
9977 HEAP32[i19 >> 2] = 0;
9978 i14 = i18;
9979 break;
9980 }
9981 } else {
9982 i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9983 if (i19 >>> 0 < i16 >>> 0) {
9984 _abort();
9985 }
9986 i16 = i19 + 12 | 0;
9987 if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) {
9988 _abort();
9989 }
9990 i20 = i18 + 8 | 0;
9991 if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) {
9992 HEAP32[i16 >> 2] = i18;
9993 HEAP32[i20 >> 2] = i19;
9994 i14 = i18;
9995 break;
9996 } else {
9997 _abort();
9998 }
9999 }
10000 } while (0);
10001 if ((i17 | 0) != 0) {
10002 i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0;
10003 i16 = 14776 + (i18 << 2) | 0;
10004 if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) {
10005 HEAP32[i16 >> 2] = i14;
10006 if ((i14 | 0) == 0) {
10007 HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i18);
10008 i2 = i13;
10009 i11 = i12;
10010 break;
10011 }
10012 } else {
10013 if (i17 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10014 _abort();
10015 }
10016 i16 = i17 + 16 | 0;
10017 if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) {
10018 HEAP32[i16 >> 2] = i14;
10019 } else {
10020 HEAP32[i17 + 20 >> 2] = i14;
10021 }
10022 if ((i14 | 0) == 0) {
10023 i2 = i13;
10024 i11 = i12;
10025 break;
10026 }
10027 }
10028 if (i14 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10029 _abort();
10030 }
10031 HEAP32[i14 + 24 >> 2] = i17;
10032 i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0;
10033 do {
10034 if ((i16 | 0) != 0) {
10035 if (i16 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10036 _abort();
10037 } else {
10038 HEAP32[i14 + 16 >> 2] = i16;
10039 HEAP32[i16 + 24 >> 2] = i14;
10040 break;
10041 }
10042 }
10043 } while (0);
10044 i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0;
10045 if ((i15 | 0) != 0) {
10046 if (i15 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10047 _abort();
10048 } else {
10049 HEAP32[i14 + 20 >> 2] = i15;
10050 HEAP32[i15 + 24 >> 2] = i14;
10051 i2 = i13;
10052 i11 = i12;
10053 break;
10054 }
10055 } else {
10056 i2 = i13;
10057 i11 = i12;
10058 }
10059 } else {
10060 i2 = i13;
10061 i11 = i12;
10062 }
10063 } else {
10064 i2 = i15;
10065 i11 = i8;
10066 }
10067 } while (0);
10068 if (!(i2 >>> 0 < i6 >>> 0)) {
10069 _abort();
10070 }
10071 i12 = i7 + (i8 + -4) | 0;
10072 i13 = HEAP32[i12 >> 2] | 0;
10073 if ((i13 & 1 | 0) == 0) {
10074 _abort();
10075 }
10076 if ((i13 & 2 | 0) == 0) {
10077 if ((i6 | 0) == (HEAP32[14496 >> 2] | 0)) {
10078 i21 = (HEAP32[14484 >> 2] | 0) + i11 | 0;
10079 HEAP32[14484 >> 2] = i21;
10080 HEAP32[14496 >> 2] = i2;
10081 HEAP32[i2 + 4 >> 2] = i21 | 1;
10082 if ((i2 | 0) != (HEAP32[14492 >> 2] | 0)) {
10083 STACKTOP = i1;
10084 return;
10085 }
10086 HEAP32[14492 >> 2] = 0;
10087 HEAP32[14480 >> 2] = 0;
10088 STACKTOP = i1;
10089 return;
10090 }
10091 if ((i6 | 0) == (HEAP32[14492 >> 2] | 0)) {
10092 i21 = (HEAP32[14480 >> 2] | 0) + i11 | 0;
10093 HEAP32[14480 >> 2] = i21;
10094 HEAP32[14492 >> 2] = i2;
10095 HEAP32[i2 + 4 >> 2] = i21 | 1;
10096 HEAP32[i2 + i21 >> 2] = i21;
10097 STACKTOP = i1;
10098 return;
10099 }
10100 i11 = (i13 & -8) + i11 | 0;
10101 i12 = i13 >>> 3;
10102 do {
10103 if (!(i13 >>> 0 < 256)) {
10104 i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0;
10105 i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
10106 do {
10107 if ((i15 | 0) == (i6 | 0)) {
10108 i13 = i7 + (i8 + 12) | 0;
10109 i12 = HEAP32[i13 >> 2] | 0;
10110 if ((i12 | 0) == 0) {
10111 i13 = i7 + (i8 + 8) | 0;
10112 i12 = HEAP32[i13 >> 2] | 0;
10113 if ((i12 | 0) == 0) {
10114 i9 = 0;
10115 break;
10116 }
10117 }
10118 while (1) {
10119 i14 = i12 + 20 | 0;
10120 i15 = HEAP32[i14 >> 2] | 0;
10121 if ((i15 | 0) != 0) {
10122 i12 = i15;
10123 i13 = i14;
10124 continue;
10125 }
10126 i14 = i12 + 16 | 0;
10127 i15 = HEAP32[i14 >> 2] | 0;
10128 if ((i15 | 0) == 0) {
10129 break;
10130 } else {
10131 i12 = i15;
10132 i13 = i14;
10133 }
10134 }
10135 if (i13 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10136 _abort();
10137 } else {
10138 HEAP32[i13 >> 2] = 0;
10139 i9 = i12;
10140 break;
10141 }
10142 } else {
10143 i13 = HEAP32[i7 + i8 >> 2] | 0;
10144 if (i13 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10145 _abort();
10146 }
10147 i14 = i13 + 12 | 0;
10148 if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) {
10149 _abort();
10150 }
10151 i12 = i15 + 8 | 0;
10152 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
10153 HEAP32[i14 >> 2] = i15;
10154 HEAP32[i12 >> 2] = i13;
10155 i9 = i15;
10156 break;
10157 } else {
10158 _abort();
10159 }
10160 }
10161 } while (0);
10162 if ((i10 | 0) != 0) {
10163 i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0;
10164 i13 = 14776 + (i12 << 2) | 0;
10165 if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) {
10166 HEAP32[i13 >> 2] = i9;
10167 if ((i9 | 0) == 0) {
10168 HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i12);
10169 break;
10170 }
10171 } else {
10172 if (i10 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10173 _abort();
10174 }
10175 i12 = i10 + 16 | 0;
10176 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
10177 HEAP32[i12 >> 2] = i9;
10178 } else {
10179 HEAP32[i10 + 20 >> 2] = i9;
10180 }
10181 if ((i9 | 0) == 0) {
10182 break;
10183 }
10184 }
10185 if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10186 _abort();
10187 }
10188 HEAP32[i9 + 24 >> 2] = i10;
10189 i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0;
10190 do {
10191 if ((i6 | 0) != 0) {
10192 if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10193 _abort();
10194 } else {
10195 HEAP32[i9 + 16 >> 2] = i6;
10196 HEAP32[i6 + 24 >> 2] = i9;
10197 break;
10198 }
10199 }
10200 } while (0);
10201 i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0;
10202 if ((i6 | 0) != 0) {
10203 if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10204 _abort();
10205 } else {
10206 HEAP32[i9 + 20 >> 2] = i6;
10207 HEAP32[i6 + 24 >> 2] = i9;
10208 break;
10209 }
10210 }
10211 }
10212 } else {
10213 i9 = HEAP32[i7 + i8 >> 2] | 0;
10214 i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
10215 i8 = 14512 + (i12 << 1 << 2) | 0;
10216 if ((i9 | 0) != (i8 | 0)) {
10217 if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10218 _abort();
10219 }
10220 if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) {
10221 _abort();
10222 }
10223 }
10224 if ((i7 | 0) == (i9 | 0)) {
10225 HEAP32[3618] = HEAP32[3618] & ~(1 << i12);
10226 break;
10227 }
10228 if ((i7 | 0) != (i8 | 0)) {
10229 if (i7 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10230 _abort();
10231 }
10232 i8 = i7 + 8 | 0;
10233 if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) {
10234 i10 = i8;
10235 } else {
10236 _abort();
10237 }
10238 } else {
10239 i10 = i7 + 8 | 0;
10240 }
10241 HEAP32[i9 + 12 >> 2] = i7;
10242 HEAP32[i10 >> 2] = i9;
10243 }
10244 } while (0);
10245 HEAP32[i2 + 4 >> 2] = i11 | 1;
10246 HEAP32[i2 + i11 >> 2] = i11;
10247 if ((i2 | 0) == (HEAP32[14492 >> 2] | 0)) {
10248 HEAP32[14480 >> 2] = i11;
10249 STACKTOP = i1;
10250 return;
10251 }
10252 } else {
10253 HEAP32[i12 >> 2] = i13 & -2;
10254 HEAP32[i2 + 4 >> 2] = i11 | 1;
10255 HEAP32[i2 + i11 >> 2] = i11;
10256 }
10257 i6 = i11 >>> 3;
10258 if (i11 >>> 0 < 256) {
10259 i7 = i6 << 1;
10260 i3 = 14512 + (i7 << 2) | 0;
10261 i8 = HEAP32[3618] | 0;
10262 i6 = 1 << i6;
10263 if ((i8 & i6 | 0) != 0) {
10264 i6 = 14512 + (i7 + 2 << 2) | 0;
10265 i7 = HEAP32[i6 >> 2] | 0;
10266 if (i7 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10267 _abort();
10268 } else {
10269 i4 = i6;
10270 i5 = i7;
10271 }
10272 } else {
10273 HEAP32[3618] = i8 | i6;
10274 i4 = 14512 + (i7 + 2 << 2) | 0;
10275 i5 = i3;
10276 }
10277 HEAP32[i4 >> 2] = i2;
10278 HEAP32[i5 + 12 >> 2] = i2;
10279 HEAP32[i2 + 8 >> 2] = i5;
10280 HEAP32[i2 + 12 >> 2] = i3;
10281 STACKTOP = i1;
10282 return;
10283 }
10284 i4 = i11 >>> 8;
10285 if ((i4 | 0) != 0) {
10286 if (i11 >>> 0 > 16777215) {
10287 i4 = 31;
10288 } else {
10289 i20 = (i4 + 1048320 | 0) >>> 16 & 8;
10290 i21 = i4 << i20;
10291 i19 = (i21 + 520192 | 0) >>> 16 & 4;
10292 i21 = i21 << i19;
10293 i4 = (i21 + 245760 | 0) >>> 16 & 2;
10294 i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0;
10295 i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1;
10296 }
10297 } else {
10298 i4 = 0;
10299 }
10300 i5 = 14776 + (i4 << 2) | 0;
10301 HEAP32[i2 + 28 >> 2] = i4;
10302 HEAP32[i2 + 20 >> 2] = 0;
10303 HEAP32[i2 + 16 >> 2] = 0;
10304 i7 = HEAP32[14476 >> 2] | 0;
10305 i6 = 1 << i4;
10306 L199 : do {
10307 if ((i7 & i6 | 0) != 0) {
10308 i5 = HEAP32[i5 >> 2] | 0;
10309 if ((i4 | 0) == 31) {
10310 i4 = 0;
10311 } else {
10312 i4 = 25 - (i4 >>> 1) | 0;
10313 }
10314 L204 : do {
10315 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) {
10316 i4 = i11 << i4;
10317 i7 = i5;
10318 while (1) {
10319 i6 = i7 + (i4 >>> 31 << 2) + 16 | 0;
10320 i5 = HEAP32[i6 >> 2] | 0;
10321 if ((i5 | 0) == 0) {
10322 break;
10323 }
10324 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) {
10325 i3 = i5;
10326 break L204;
10327 } else {
10328 i4 = i4 << 1;
10329 i7 = i5;
10330 }
10331 }
10332 if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10333 _abort();
10334 } else {
10335 HEAP32[i6 >> 2] = i2;
10336 HEAP32[i2 + 24 >> 2] = i7;
10337 HEAP32[i2 + 12 >> 2] = i2;
10338 HEAP32[i2 + 8 >> 2] = i2;
10339 break L199;
10340 }
10341 } else {
10342 i3 = i5;
10343 }
10344 } while (0);
10345 i5 = i3 + 8 | 0;
10346 i4 = HEAP32[i5 >> 2] | 0;
10347 i6 = HEAP32[14488 >> 2] | 0;
10348 if (i3 >>> 0 < i6 >>> 0) {
10349 _abort();
10350 }
10351 if (i4 >>> 0 < i6 >>> 0) {
10352 _abort();
10353 } else {
10354 HEAP32[i4 + 12 >> 2] = i2;
10355 HEAP32[i5 >> 2] = i2;
10356 HEAP32[i2 + 8 >> 2] = i4;
10357 HEAP32[i2 + 12 >> 2] = i3;
10358 HEAP32[i2 + 24 >> 2] = 0;
10359 break;
10360 }
10361 } else {
10362 HEAP32[14476 >> 2] = i7 | i6;
10363 HEAP32[i5 >> 2] = i2;
10364 HEAP32[i2 + 24 >> 2] = i5;
10365 HEAP32[i2 + 12 >> 2] = i2;
10366 HEAP32[i2 + 8 >> 2] = i2;
10367 }
10368 } while (0);
10369 i21 = (HEAP32[14504 >> 2] | 0) + -1 | 0;
10370 HEAP32[14504 >> 2] = i21;
10371 if ((i21 | 0) == 0) {
10372 i2 = 14928 | 0;
10373 } else {
10374 STACKTOP = i1;
10375 return;
10376 }
10377 while (1) {
10378 i2 = HEAP32[i2 >> 2] | 0;
10379 if ((i2 | 0) == 0) {
10380 break;
10381 } else {
10382 i2 = i2 + 8 | 0;
10383 }
10384 }
10385 HEAP32[14504 >> 2] = -1;
10386 STACKTOP = i1;
10387 return;
10388 }
10389 function _build_tree(i4, i9) {
10390 i4 = i4 | 0;
10391 i9 = i9 | 0;
10392 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0;
10393 i2 = STACKTOP;
10394 STACKTOP = STACKTOP + 32 | 0;
10395 i1 = i2;
10396 i3 = HEAP32[i9 >> 2] | 0;
10397 i7 = i9 + 8 | 0;
10398 i11 = HEAP32[i7 >> 2] | 0;
10399 i12 = HEAP32[i11 >> 2] | 0;
10400 i11 = HEAP32[i11 + 12 >> 2] | 0;
10401 i8 = i4 + 5200 | 0;
10402 HEAP32[i8 >> 2] = 0;
10403 i6 = i4 + 5204 | 0;
10404 HEAP32[i6 >> 2] = 573;
10405 if ((i11 | 0) > 0) {
10406 i5 = -1;
10407 i13 = 0;
10408 do {
10409 if ((HEAP16[i3 + (i13 << 2) >> 1] | 0) == 0) {
10410 HEAP16[i3 + (i13 << 2) + 2 >> 1] = 0;
10411 } else {
10412 i5 = (HEAP32[i8 >> 2] | 0) + 1 | 0;
10413 HEAP32[i8 >> 2] = i5;
10414 HEAP32[i4 + (i5 << 2) + 2908 >> 2] = i13;
10415 HEAP8[i4 + i13 + 5208 | 0] = 0;
10416 i5 = i13;
10417 }
10418 i13 = i13 + 1 | 0;
10419 } while ((i13 | 0) != (i11 | 0));
10420 i14 = HEAP32[i8 >> 2] | 0;
10421 if ((i14 | 0) < 2) {
10422 i10 = 3;
10423 }
10424 } else {
10425 i14 = 0;
10426 i5 = -1;
10427 i10 = 3;
10428 }
10429 if ((i10 | 0) == 3) {
10430 i10 = i4 + 5800 | 0;
10431 i13 = i4 + 5804 | 0;
10432 if ((i12 | 0) == 0) {
10433 do {
10434 i12 = (i5 | 0) < 2;
10435 i13 = i5 + 1 | 0;
10436 i5 = i12 ? i13 : i5;
10437 i23 = i12 ? i13 : 0;
10438 i14 = i14 + 1 | 0;
10439 HEAP32[i8 >> 2] = i14;
10440 HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i23;
10441 HEAP16[i3 + (i23 << 2) >> 1] = 1;
10442 HEAP8[i4 + i23 + 5208 | 0] = 0;
10443 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + -1;
10444 i14 = HEAP32[i8 >> 2] | 0;
10445 } while ((i14 | 0) < 2);
10446 } else {
10447 do {
10448 i15 = (i5 | 0) < 2;
10449 i16 = i5 + 1 | 0;
10450 i5 = i15 ? i16 : i5;
10451 i23 = i15 ? i16 : 0;
10452 i14 = i14 + 1 | 0;
10453 HEAP32[i8 >> 2] = i14;
10454 HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i23;
10455 HEAP16[i3 + (i23 << 2) >> 1] = 1;
10456 HEAP8[i4 + i23 + 5208 | 0] = 0;
10457 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + -1;
10458 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) - (HEAPU16[i12 + (i23 << 2) + 2 >> 1] | 0);
10459 i14 = HEAP32[i8 >> 2] | 0;
10460 } while ((i14 | 0) < 2);
10461 }
10462 }
10463 i10 = i9 + 4 | 0;
10464 HEAP32[i10 >> 2] = i5;
10465 i12 = HEAP32[i8 >> 2] | 0;
10466 if ((i12 | 0) > 1) {
10467 i18 = i12;
10468 i13 = (i12 | 0) / 2 | 0;
10469 do {
10470 i12 = HEAP32[i4 + (i13 << 2) + 2908 >> 2] | 0;
10471 i14 = i4 + i12 + 5208 | 0;
10472 i17 = i13 << 1;
10473 L21 : do {
10474 if ((i17 | 0) > (i18 | 0)) {
10475 i15 = i13;
10476 } else {
10477 i16 = i3 + (i12 << 2) | 0;
10478 i15 = i13;
10479 while (1) {
10480 do {
10481 if ((i17 | 0) < (i18 | 0)) {
10482 i18 = i17 | 1;
10483 i19 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10484 i22 = HEAP16[i3 + (i19 << 2) >> 1] | 0;
10485 i20 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10486 i21 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10487 if (!((i22 & 65535) < (i21 & 65535))) {
10488 if (!(i22 << 16 >> 16 == i21 << 16 >> 16)) {
10489 break;
10490 }
10491 if ((HEAPU8[i4 + i19 + 5208 | 0] | 0) > (HEAPU8[i4 + i20 + 5208 | 0] | 0)) {
10492 break;
10493 }
10494 }
10495 i17 = i18;
10496 }
10497 } while (0);
10498 i19 = HEAP16[i16 >> 1] | 0;
10499 i18 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10500 i20 = HEAP16[i3 + (i18 << 2) >> 1] | 0;
10501 if ((i19 & 65535) < (i20 & 65535)) {
10502 break L21;
10503 }
10504 if (i19 << 16 >> 16 == i20 << 16 >> 16 ? (HEAPU8[i14] | 0) <= (HEAPU8[i4 + i18 + 5208 | 0] | 0) : 0) {
10505 break L21;
10506 }
10507 HEAP32[i4 + (i15 << 2) + 2908 >> 2] = i18;
10508 i19 = i17 << 1;
10509 i18 = HEAP32[i8 >> 2] | 0;
10510 if ((i19 | 0) > (i18 | 0)) {
10511 i15 = i17;
10512 break;
10513 } else {
10514 i15 = i17;
10515 i17 = i19;
10516 }
10517 }
10518 }
10519 } while (0);
10520 HEAP32[i4 + (i15 << 2) + 2908 >> 2] = i12;
10521 i13 = i13 + -1 | 0;
10522 i18 = HEAP32[i8 >> 2] | 0;
10523 } while ((i13 | 0) > 0);
10524 } else {
10525 i18 = i12;
10526 }
10527 i12 = i4 + 2912 | 0;
10528 while (1) {
10529 i13 = HEAP32[i12 >> 2] | 0;
10530 i20 = i18 + -1 | 0;
10531 HEAP32[i8 >> 2] = i20;
10532 i14 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10533 HEAP32[i12 >> 2] = i14;
10534 i15 = i4 + i14 + 5208 | 0;
10535 L40 : do {
10536 if ((i18 | 0) < 3) {
10537 i17 = 1;
10538 } else {
10539 i16 = i3 + (i14 << 2) | 0;
10540 i17 = 1;
10541 i18 = 2;
10542 while (1) {
10543 do {
10544 if ((i18 | 0) < (i20 | 0)) {
10545 i22 = i18 | 1;
10546 i21 = HEAP32[i4 + (i22 << 2) + 2908 >> 2] | 0;
10547 i23 = HEAP16[i3 + (i21 << 2) >> 1] | 0;
10548 i20 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10549 i19 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10550 if (!((i23 & 65535) < (i19 & 65535))) {
10551 if (!(i23 << 16 >> 16 == i19 << 16 >> 16)) {
10552 break;
10553 }
10554 if ((HEAPU8[i4 + i21 + 5208 | 0] | 0) > (HEAPU8[i4 + i20 + 5208 | 0] | 0 )) {
10555 break;
10556 }
10557 }
10558 i18 = i22;
10559 }
10560 } while (0);
10561 i21 = HEAP16[i16 >> 1] | 0;
10562 i20 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10563 i19 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10564 if ((i21 & 65535) < (i19 & 65535)) {
10565 break L40;
10566 }
10567 if (i21 << 16 >> 16 == i19 << 16 >> 16 ? (HEAPU8[i15] | 0) <= (HEAPU8[i4 + i20 + 5208 | 0] | 0) : 0) {
10568 break L40;
10569 }
10570 HEAP32[i4 + (i17 << 2) + 2908 >> 2] = i20;
10571 i19 = i18 << 1;
10572 i20 = HEAP32[i8 >> 2] | 0;
10573 if ((i19 | 0) > (i20 | 0)) {
10574 i17 = i18;
10575 break;
10576 } else {
10577 i17 = i18;
10578 i18 = i19;
10579 }
10580 }
10581 }
10582 } while (0);
10583 HEAP32[i4 + (i17 << 2) + 2908 >> 2] = i14;
10584 i17 = HEAP32[i12 >> 2] | 0;
10585 i14 = (HEAP32[i6 >> 2] | 0) + -1 | 0;
10586 HEAP32[i6 >> 2] = i14;
10587 HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i13;
10588 i14 = (HEAP32[i6 >> 2] | 0) + -1 | 0;
10589 HEAP32[i6 >> 2] = i14;
10590 HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i17;
10591 i14 = i3 + (i11 << 2) | 0;
10592 HEAP16[i14 >> 1] = (HEAPU16[i3 + (i17 << 2) >> 1] | 0) + (HEAPU16[i3 + (i13 << 2) >> 1] | 0);
10593 i18 = HEAP8[i4 + i13 + 5208 | 0] | 0;
10594 i16 = HEAP8[i4 + i17 + 5208 | 0] | 0;
10595 i15 = i4 + i11 + 5208 | 0;
10596 HEAP8[i15] = (((i18 & 255) < (i16 & 255) ? i16 : i18) & 255) + 1;
10597 i19 = i11 & 65535;
10598 HEAP16[i3 + (i17 << 2) + 2 >> 1] = i19;
10599 HEAP16[i3 + (i13 << 2) + 2 >> 1] = i19;
10600 i13 = i11 + 1 | 0;
10601 HEAP32[i12 >> 2] = i11;
10602 i19 = HEAP32[i8 >> 2] | 0;
10603 L56 : do {
10604 if ((i19 | 0) < 2) {
10605 i16 = 1;
10606 } else {
10607 i16 = 1;
10608 i17 = 2;
10609 while (1) {
10610 do {
10611 if ((i17 | 0) < (i19 | 0)) {
10612 i21 = i17 | 1;
10613 i22 = HEAP32[i4 + (i21 << 2) + 2908 >> 2] | 0;
10614 i19 = HEAP16[i3 + (i22 << 2) >> 1] | 0;
10615 i18 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10616 i20 = HEAP16[i3 + (i18 << 2) >> 1] | 0;
10617 if (!((i19 & 65535) < (i20 & 65535))) {
10618 if (!(i19 << 16 >> 16 == i20 << 16 >> 16)) {
10619 break;
10620 }
10621 if ((HEAPU8[i4 + i22 + 5208 | 0] | 0) > (HEAPU8[i4 + i18 + 5208 | 0] | 0 )) {
10622 break;
10623 }
10624 }
10625 i17 = i21;
10626 }
10627 } while (0);
10628 i19 = HEAP16[i14 >> 1] | 0;
10629 i20 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10630 i18 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10631 if ((i19 & 65535) < (i18 & 65535)) {
10632 break L56;
10633 }
10634 if (i19 << 16 >> 16 == i18 << 16 >> 16 ? (HEAPU8[i15] | 0) <= (HEAPU8[i4 + i20 + 5208 | 0] | 0) : 0) {
10635 break L56;
10636 }
10637 HEAP32[i4 + (i16 << 2) + 2908 >> 2] = i20;
10638 i18 = i17 << 1;
10639 i19 = HEAP32[i8 >> 2] | 0;
10640 if ((i18 | 0) > (i19 | 0)) {
10641 i16 = i17;
10642 break;
10643 } else {
10644 i16 = i17;
10645 i17 = i18;
10646 }
10647 }
10648 }
10649 } while (0);
10650 HEAP32[i4 + (i16 << 2) + 2908 >> 2] = i11;
10651 i18 = HEAP32[i8 >> 2] | 0;
10652 if ((i18 | 0) > 1) {
10653 i11 = i13;
10654 } else {
10655 break;
10656 }
10657 }
10658 i12 = HEAP32[i12 >> 2] | 0;
10659 i8 = (HEAP32[i6 >> 2] | 0) + -1 | 0;
10660 HEAP32[i6 >> 2] = i8;
10661 HEAP32[i4 + (i8 << 2) + 2908 >> 2] = i12;
10662 i8 = HEAP32[i9 >> 2] | 0;
10663 i9 = HEAP32[i10 >> 2] | 0;
10664 i7 = HEAP32[i7 >> 2] | 0;
10665 i12 = HEAP32[i7 >> 2] | 0;
10666 i11 = HEAP32[i7 + 4 >> 2] | 0;
10667 i10 = HEAP32[i7 + 8 >> 2] | 0;
10668 i7 = HEAP32[i7 + 16 >> 2] | 0;
10669 i13 = i4 + 2876 | 0;
10670 i14 = i13 + 32 | 0;
10671 do {
10672 HEAP16[i13 >> 1] = 0;
10673 i13 = i13 + 2 | 0;
10674 } while ((i13 | 0) < (i14 | 0));
10675 i14 = HEAP32[i6 >> 2] | 0;
10676 HEAP16[i8 + (HEAP32[i4 + (i14 << 2) + 2908 >> 2] << 2) + 2 >> 1] = 0;
10677 i14 = i14 + 1 | 0;
10678 L72 : do {
10679 if ((i14 | 0) < 573) {
10680 i6 = i4 + 5800 | 0;
10681 i13 = i4 + 5804 | 0;
10682 if ((i12 | 0) == 0) {
10683 i18 = 0;
10684 do {
10685 i12 = HEAP32[i4 + (i14 << 2) + 2908 >> 2] | 0;
10686 i13 = i8 + (i12 << 2) + 2 | 0;
10687 i15 = HEAPU16[i8 + (HEAPU16[i13 >> 1] << 2) + 2 >> 1] | 0;
10688 i16 = (i15 | 0) < (i7 | 0);
10689 i15 = i16 ? i15 + 1 | 0 : i7;
10690 i18 = (i16 & 1 ^ 1) + i18 | 0;
10691 HEAP16[i13 >> 1] = i15;
10692 if ((i12 | 0) <= (i9 | 0)) {
10693 i23 = i4 + (i15 << 1) + 2876 | 0;
10694 HEAP16[i23 >> 1] = (HEAP16[i23 >> 1] | 0) + 1 << 16 >> 16;
10695 if ((i12 | 0) < (i10 | 0)) {
10696 i13 = 0;
10697 } else {
10698 i13 = HEAP32[i11 + (i12 - i10 << 2) >> 2] | 0;
10699 }
10700 i23 = Math_imul(HEAPU16[i8 + (i12 << 2) >> 1] | 0, i13 + i15 | 0) | 0;
10701 HEAP32[i6 >> 2] = i23 + (HEAP32[i6 >> 2] | 0);
10702 }
10703 i14 = i14 + 1 | 0;
10704 } while ((i14 | 0) != 573);
10705 } else {
10706 i18 = 0;
10707 do {
10708 i15 = HEAP32[i4 + (i14 << 2) + 2908 >> 2] | 0;
10709 i16 = i8 + (i15 << 2) + 2 | 0;
10710 i17 = HEAPU16[i8 + (HEAPU16[i16 >> 1] << 2) + 2 >> 1] | 0;
10711 i19 = (i17 | 0) < (i7 | 0);
10712 i17 = i19 ? i17 + 1 | 0 : i7;
10713 i18 = (i19 & 1 ^ 1) + i18 | 0;
10714 HEAP16[i16 >> 1] = i17;
10715 if ((i15 | 0) <= (i9 | 0)) {
10716 i23 = i4 + (i17 << 1) + 2876 | 0;
10717 HEAP16[i23 >> 1] = (HEAP16[i23 >> 1] | 0) + 1 << 16 >> 16;
10718 if ((i15 | 0) < (i10 | 0)) {
10719 i16 = 0;
10720 } else {
10721 i16 = HEAP32[i11 + (i15 - i10 << 2) >> 2] | 0;
10722 }
10723 i23 = HEAPU16[i8 + (i15 << 2) >> 1] | 0;
10724 i22 = Math_imul(i23, i16 + i17 | 0) | 0;
10725 HEAP32[i6 >> 2] = i22 + (HEAP32[i6 >> 2] | 0);
10726 i23 = Math_imul((HEAPU16[i12 + (i15 << 2) + 2 >> 1] | 0) + i16 | 0, i23) | 0;
10727 HEAP32[i13 >> 2] = i23 + (HEAP32[i13 >> 2] | 0);
10728 }
10729 i14 = i14 + 1 | 0;
10730 } while ((i14 | 0) != 573);
10731 }
10732 if ((i18 | 0) != 0) {
10733 i10 = i4 + (i7 << 1) + 2876 | 0;
10734 do {
10735 i12 = i7;
10736 while (1) {
10737 i11 = i12 + -1 | 0;
10738 i13 = i4 + (i11 << 1) + 2876 | 0;
10739 i14 = HEAP16[i13 >> 1] | 0;
10740 if (i14 << 16 >> 16 == 0) {
10741 i12 = i11;
10742 } else {
10743 break;
10744 }
10745 }
10746 HEAP16[i13 >> 1] = i14 + -1 << 16 >> 16;
10747 i11 = i4 + (i12 << 1) + 2876 | 0;
10748 HEAP16[i11 >> 1] = (HEAPU16[i11 >> 1] | 0) + 2;
10749 i11 = (HEAP16[i10 >> 1] | 0) + -1 << 16 >> 16;
10750 HEAP16[i10 >> 1] = i11;
10751 i18 = i18 + -2 | 0;
10752 } while ((i18 | 0) > 0);
10753 if ((i7 | 0) != 0) {
10754 i12 = 573;
10755 while (1) {
10756 i10 = i7 & 65535;
10757 if (!(i11 << 16 >> 16 == 0)) {
10758 i11 = i11 & 65535;
10759 do {
10760 do {
10761 i12 = i12 + -1 | 0;
10762 i15 = HEAP32[i4 + (i12 << 2) + 2908 >> 2] | 0;
10763 } while ((i15 | 0) > (i9 | 0));
10764 i13 = i8 + (i15 << 2) + 2 | 0;
10765 i14 = HEAPU16[i13 >> 1] | 0;
10766 if ((i14 | 0) != (i7 | 0)) {
10767 i23 = Math_imul(HEAPU16[i8 + (i15 << 2) >> 1] | 0, i7 - i14 | 0) | 0;
10768 HEAP32[i6 >> 2] = i23 + (HEAP32[i6 >> 2] | 0);
10769 HEAP16[i13 >> 1] = i10;
10770 }
10771 i11 = i11 + -1 | 0;
10772 } while ((i11 | 0) != 0);
10773 }
10774 i7 = i7 + -1 | 0;
10775 if ((i7 | 0) == 0) {
10776 break L72;
10777 }
10778 i11 = HEAP16[i4 + (i7 << 1) + 2876 >> 1] | 0;
10779 }
10780 }
10781 }
10782 }
10783 } while (0);
10784 i7 = 1;
10785 i6 = 0;
10786 do {
10787 i6 = (HEAPU16[i4 + (i7 + -1 << 1) + 2876 >> 1] | 0) + (i6 & 65534) << 1;
10788 HEAP16[i1 + (i7 << 1) >> 1] = i6;
10789 i7 = i7 + 1 | 0;
10790 } while ((i7 | 0) != 16);
10791 if ((i5 | 0) < 0) {
10792 STACKTOP = i2;
10793 return;
10794 } else {
10795 i4 = 0;
10796 }
10797 while (1) {
10798 i23 = HEAP16[i3 + (i4 << 2) + 2 >> 1] | 0;
10799 i7 = i23 & 65535;
10800 if (!(i23 << 16 >> 16 == 0)) {
10801 i8 = i1 + (i7 << 1) | 0;
10802 i6 = HEAP16[i8 >> 1] | 0;
10803 HEAP16[i8 >> 1] = i6 + 1 << 16 >> 16;
10804 i6 = i6 & 65535;
10805 i8 = 0;
10806 while (1) {
10807 i8 = i8 | i6 & 1;
10808 i7 = i7 + -1 | 0;
10809 if ((i7 | 0) <= 0) {
10810 break;
10811 } else {
10812 i6 = i6 >>> 1;
10813 i8 = i8 << 1;
10814 }
10815 }
10816 HEAP16[i3 + (i4 << 2) >> 1] = i8;
10817 }
10818 if ((i4 | 0) == (i5 | 0)) {
10819 break;
10820 } else {
10821 i4 = i4 + 1 | 0;
10822 }
10823 }
10824 STACKTOP = i2;
10825 return;
10826 }
10827 function _deflate_slow(i2, i6) {
10828 i2 = i2 | 0;
10829 i6 = i6 | 0;
10830 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0;
10831 i1 = STACKTOP;
10832 i15 = i2 + 116 | 0;
10833 i16 = (i6 | 0) == 0;
10834 i17 = i2 + 72 | 0;
10835 i18 = i2 + 88 | 0;
10836 i5 = i2 + 108 | 0;
10837 i7 = i2 + 56 | 0;
10838 i19 = i2 + 84 | 0;
10839 i20 = i2 + 68 | 0;
10840 i22 = i2 + 52 | 0;
10841 i21 = i2 + 64 | 0;
10842 i9 = i2 + 96 | 0;
10843 i10 = i2 + 120 | 0;
10844 i11 = i2 + 112 | 0;
10845 i12 = i2 + 100 | 0;
10846 i26 = i2 + 5792 | 0;
10847 i27 = i2 + 5796 | 0;
10848 i29 = i2 + 5784 | 0;
10849 i23 = i2 + 5788 | 0;
10850 i8 = i2 + 104 | 0;
10851 i4 = i2 + 92 | 0;
10852 i24 = i2 + 128 | 0;
10853 i14 = i2 + 44 | 0;
10854 i13 = i2 + 136 | 0;
10855 L1 : while (1) {
10856 i30 = HEAP32[i15 >> 2] | 0;
10857 while (1) {
10858 if (i30 >>> 0 < 262) {
10859 _fill_window(i2);
10860 i30 = HEAP32[i15 >> 2] | 0;
10861 if (i30 >>> 0 < 262 & i16) {
10862 i2 = 0;
10863 i30 = 50;
10864 break L1;
10865 }
10866 if ((i30 | 0) == 0) {
10867 i30 = 40;
10868 break L1;
10869 }
10870 if (!(i30 >>> 0 > 2)) {
10871 HEAP32[i10 >> 2] = HEAP32[i9 >> 2];
10872 HEAP32[i12 >> 2] = HEAP32[i11 >> 2];
10873 HEAP32[i9 >> 2] = 2;
10874 i32 = 2;
10875 i30 = 16;
10876 } else {
10877 i30 = 8;
10878 }
10879 } else {
10880 i30 = 8;
10881 }
10882 do {
10883 if ((i30 | 0) == 8) {
10884 i30 = 0;
10885 i34 = HEAP32[i5 >> 2] | 0;
10886 i31 = ((HEAPU8[(HEAP32[i7 >> 2] | 0) + (i34 + 2) | 0] | 0) ^ HEAP32[i17 >> 2] << HEAP32[i18 >> 2]) & HEAP32[i19 >> 2];
10887 HEAP32[i17 >> 2] = i31;
10888 i31 = (HEAP32[i20 >> 2] | 0) + (i31 << 1) | 0;
10889 i35 = HEAP16[i31 >> 1] | 0;
10890 HEAP16[(HEAP32[i21 >> 2] | 0) + ((HEAP32[i22 >> 2] & i34) << 1) >> 1] = i35 ;
10891 i32 = i35 & 65535;
10892 HEAP16[i31 >> 1] = i34;
10893 i31 = HEAP32[i9 >> 2] | 0;
10894 HEAP32[i10 >> 2] = i31;
10895 HEAP32[i12 >> 2] = HEAP32[i11 >> 2];
10896 HEAP32[i9 >> 2] = 2;
10897 if (!(i35 << 16 >> 16 == 0)) {
10898 if (i31 >>> 0 < (HEAP32[i24 >> 2] | 0) >>> 0) {
10899 if (!(((HEAP32[i5 >> 2] | 0) - i32 | 0) >>> 0 > ((HEAP32[i14 >> 2] | 0) + -262 | 0) >>> 0)) {
10900 i32 = _longest_match(i2, i32) | 0;
10901 HEAP32[i9 >> 2] = i32;
10902 if (i32 >>> 0 < 6) {
10903 if ((HEAP32[i13 >> 2] | 0) != 1) {
10904 if ((i32 | 0) != 3) {
10905 i30 = 16;
10906 break;
10907 }
10908 if (!(((HEAP32[i5 >> 2] | 0) - (HEAP32[i11 >> 2] | 0) | 0) >>> 0 > 409 6)) {
10909 i32 = 3;
10910 i30 = 16;
10911 break;
10912 }
10913 }
10914 HEAP32[i9 >> 2] = 2;
10915 i32 = 2;
10916 i30 = 16;
10917 } else {
10918 i30 = 16;
10919 }
10920 } else {
10921 i32 = 2;
10922 i30 = 16;
10923 }
10924 } else {
10925 i32 = 2;
10926 }
10927 } else {
10928 i32 = 2;
10929 i30 = 16;
10930 }
10931 }
10932 } while (0);
10933 if ((i30 | 0) == 16) {
10934 i31 = HEAP32[i10 >> 2] | 0;
10935 }
10936 if (!(i31 >>> 0 < 3 | i32 >>> 0 > i31 >>> 0)) {
10937 break;
10938 }
10939 if ((HEAP32[i8 >> 2] | 0) == 0) {
10940 HEAP32[i8 >> 2] = 1;
10941 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
10942 i30 = (HEAP32[i15 >> 2] | 0) + -1 | 0;
10943 HEAP32[i15 >> 2] = i30;
10944 continue;
10945 }
10946 i35 = HEAP8[(HEAP32[i7 >> 2] | 0) + ((HEAP32[i5 >> 2] | 0) + -1) | 0] | 0;
10947 i34 = HEAP32[i26 >> 2] | 0;
10948 HEAP16[(HEAP32[i27 >> 2] | 0) + (i34 << 1) >> 1] = 0;
10949 HEAP32[i26 >> 2] = i34 + 1;
10950 HEAP8[(HEAP32[i29 >> 2] | 0) + i34 | 0] = i35;
10951 i35 = i2 + ((i35 & 255) << 2) + 148 | 0;
10952 HEAP16[i35 >> 1] = (HEAP16[i35 >> 1] | 0) + 1 << 16 >> 16;
10953 if ((HEAP32[i26 >> 2] | 0) == ((HEAP32[i23 >> 2] | 0) + -1 | 0)) {
10954 i30 = HEAP32[i4 >> 2] | 0;
10955 if ((i30 | 0) > -1) {
10956 i31 = (HEAP32[i7 >> 2] | 0) + i30 | 0;
10957 } else {
10958 i31 = 0;
10959 }
10960 __tr_flush_block(i2, i31, (HEAP32[i5 >> 2] | 0) - i30 | 0, 0);
10961 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
10962 i33 = HEAP32[i2 >> 2] | 0;
10963 i32 = i33 + 28 | 0;
10964 i30 = HEAP32[i32 >> 2] | 0;
10965 i35 = HEAP32[i30 + 20 >> 2] | 0;
10966 i31 = i33 + 16 | 0;
10967 i34 = HEAP32[i31 >> 2] | 0;
10968 i34 = i35 >>> 0 > i34 >>> 0 ? i34 : i35;
10969 if ((i34 | 0) != 0 ? (i28 = i33 + 12 | 0, _memcpy(HEAP32[i28 >> 2] | 0, HEAP 32[i30 + 16 >> 2] | 0, i34 | 0) | 0, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i34, i28 = (HEAP32[i32 >> 2] | 0) + 16 | 0, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2 ] | 0) + i34, i28 = i33 + 20 | 0, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i3 4, HEAP32[i31 >> 2] = (HEAP32[i31 >> 2] | 0) - i34, i28 = HEAP32[i32 >> 2] | 0, i33 = i28 + 20 | 0, i35 = HEAP32[i33 >> 2] | 0, HEAP32[i33 >> 2] = i35 - i34, (i 35 | 0) == (i34 | 0)) : 0) {
10970 HEAP32[i28 + 16 >> 2] = HEAP32[i28 + 8 >> 2];
10971 }
10972 }
10973 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
10974 i30 = (HEAP32[i15 >> 2] | 0) + -1 | 0;
10975 HEAP32[i15 >> 2] = i30;
10976 if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
10977 i2 = 0;
10978 i30 = 50;
10979 break L1;
10980 }
10981 }
10982 i34 = HEAP32[i5 >> 2] | 0;
10983 i30 = i34 + -3 + (HEAP32[i15 >> 2] | 0) | 0;
10984 i35 = i31 + 253 | 0;
10985 i31 = i34 + 65535 - (HEAP32[i12 >> 2] | 0) | 0;
10986 i34 = HEAP32[i26 >> 2] | 0;
10987 HEAP16[(HEAP32[i27 >> 2] | 0) + (i34 << 1) >> 1] = i31;
10988 HEAP32[i26 >> 2] = i34 + 1;
10989 HEAP8[(HEAP32[i29 >> 2] | 0) + i34 | 0] = i35;
10990 i35 = i2 + ((HEAPU8[808 + (i35 & 255) | 0] | 0 | 256) + 1 << 2) + 148 | 0;
10991 HEAP16[i35 >> 1] = (HEAP16[i35 >> 1] | 0) + 1 << 16 >> 16;
10992 i31 = i31 + 65535 & 65535;
10993 if (!(i31 >>> 0 < 256)) {
10994 i31 = (i31 >>> 7) + 256 | 0;
10995 }
10996 i32 = i2 + ((HEAPU8[296 + i31 | 0] | 0) << 2) + 2440 | 0;
10997 HEAP16[i32 >> 1] = (HEAP16[i32 >> 1] | 0) + 1 << 16 >> 16;
10998 i32 = HEAP32[i26 >> 2] | 0;
10999 i31 = (HEAP32[i23 >> 2] | 0) + -1 | 0;
11000 i34 = HEAP32[i10 >> 2] | 0;
11001 HEAP32[i15 >> 2] = 1 - i34 + (HEAP32[i15 >> 2] | 0);
11002 i34 = i34 + -2 | 0;
11003 HEAP32[i10 >> 2] = i34;
11004 i33 = HEAP32[i5 >> 2] | 0;
11005 while (1) {
11006 i35 = i33 + 1 | 0;
11007 HEAP32[i5 >> 2] = i35;
11008 if (!(i35 >>> 0 > i30 >>> 0)) {
11009 i36 = ((HEAPU8[(HEAP32[i7 >> 2] | 0) + (i33 + 3) | 0] | 0) ^ HEAP32[i17 >> 2 ] << HEAP32[i18 >> 2]) & HEAP32[i19 >> 2];
11010 HEAP32[i17 >> 2] = i36;
11011 i36 = (HEAP32[i20 >> 2] | 0) + (i36 << 1) | 0;
11012 HEAP16[(HEAP32[i21 >> 2] | 0) + ((HEAP32[i22 >> 2] & i35) << 1) >> 1] = HEAP 16[i36 >> 1] | 0;
11013 HEAP16[i36 >> 1] = i35;
11014 }
11015 i34 = i34 + -1 | 0;
11016 HEAP32[i10 >> 2] = i34;
11017 if ((i34 | 0) == 0) {
11018 break;
11019 } else {
11020 i33 = i35;
11021 }
11022 }
11023 HEAP32[i8 >> 2] = 0;
11024 HEAP32[i9 >> 2] = 2;
11025 i30 = i33 + 2 | 0;
11026 HEAP32[i5 >> 2] = i30;
11027 if ((i32 | 0) != (i31 | 0)) {
11028 continue;
11029 }
11030 i32 = HEAP32[i4 >> 2] | 0;
11031 if ((i32 | 0) > -1) {
11032 i31 = (HEAP32[i7 >> 2] | 0) + i32 | 0;
11033 } else {
11034 i31 = 0;
11035 }
11036 __tr_flush_block(i2, i31, i30 - i32 | 0, 0);
11037 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
11038 i33 = HEAP32[i2 >> 2] | 0;
11039 i31 = i33 + 28 | 0;
11040 i32 = HEAP32[i31 >> 2] | 0;
11041 i35 = HEAP32[i32 + 20 >> 2] | 0;
11042 i30 = i33 + 16 | 0;
11043 i34 = HEAP32[i30 >> 2] | 0;
11044 i34 = i35 >>> 0 > i34 >>> 0 ? i34 : i35;
11045 if ((i34 | 0) != 0 ? (i25 = i33 + 12 | 0, _memcpy(HEAP32[i25 >> 2] | 0, HEAP32 [i32 + 16 >> 2] | 0, i34 | 0) | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i 34, i25 = (HEAP32[i31 >> 2] | 0) + 16 | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, i25 = i33 + 20 | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, HEAP32[i30 >> 2] = (HEAP32[i30 >> 2] | 0) - i34, i25 = HEAP32[i31 >> 2] | 0, i3 5 = i25 + 20 | 0, i36 = HEAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i34, (i36 | 0) == (i34 | 0)) : 0) {
11046 HEAP32[i25 + 16 >> 2] = HEAP32[i25 + 8 >> 2];
11047 }
11048 if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
11049 i2 = 0;
11050 i30 = 50;
11051 break;
11052 }
11053 }
11054 if ((i30 | 0) == 40) {
11055 if ((HEAP32[i8 >> 2] | 0) != 0) {
11056 i36 = HEAP8[(HEAP32[i7 >> 2] | 0) + ((HEAP32[i5 >> 2] | 0) + -1) | 0] | 0;
11057 i35 = HEAP32[i26 >> 2] | 0;
11058 HEAP16[(HEAP32[i27 >> 2] | 0) + (i35 << 1) >> 1] = 0;
11059 HEAP32[i26 >> 2] = i35 + 1;
11060 HEAP8[(HEAP32[i29 >> 2] | 0) + i35 | 0] = i36;
11061 i36 = i2 + ((i36 & 255) << 2) + 148 | 0;
11062 HEAP16[i36 >> 1] = (HEAP16[i36 >> 1] | 0) + 1 << 16 >> 16;
11063 HEAP32[i8 >> 2] = 0;
11064 }
11065 i8 = HEAP32[i4 >> 2] | 0;
11066 if ((i8 | 0) > -1) {
11067 i7 = (HEAP32[i7 >> 2] | 0) + i8 | 0;
11068 } else {
11069 i7 = 0;
11070 }
11071 i6 = (i6 | 0) == 4;
11072 __tr_flush_block(i2, i7, (HEAP32[i5 >> 2] | 0) - i8 | 0, i6 & 1);
11073 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
11074 i4 = HEAP32[i2 >> 2] | 0;
11075 i7 = i4 + 28 | 0;
11076 i5 = HEAP32[i7 >> 2] | 0;
11077 i10 = HEAP32[i5 + 20 >> 2] | 0;
11078 i8 = i4 + 16 | 0;
11079 i9 = HEAP32[i8 >> 2] | 0;
11080 i9 = i10 >>> 0 > i9 >>> 0 ? i9 : i10;
11081 if ((i9 | 0) != 0 ? (i3 = i4 + 12 | 0, _memcpy(HEAP32[i3 >> 2] | 0, HEAP32[i5 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = (HEAP32[i7 >> 2] | 0) + 16 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = i4 + 20 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) - i9, i3 = HEAP32[i7 >> 2] | 0, i35 = i3 + 20 | 0, i36 = H EAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i9, (i36 | 0) == (i9 | 0)) : 0) {
11082 HEAP32[i3 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
11083 }
11084 if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
11085 i36 = i6 ? 2 : 0;
11086 STACKTOP = i1;
11087 return i36 | 0;
11088 } else {
11089 i36 = i6 ? 3 : 1;
11090 STACKTOP = i1;
11091 return i36 | 0;
11092 }
11093 } else if ((i30 | 0) == 50) {
11094 STACKTOP = i1;
11095 return i2 | 0;
11096 }
11097 return 0;
11098 }
11099 function _inflate_fast(i7, i19) {
11100 i7 = i7 | 0;
11101 i19 = i19 | 0;
11102 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i20 = 0, i 21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0;
11103 i1 = STACKTOP;
11104 i11 = HEAP32[i7 + 28 >> 2] | 0;
11105 i29 = HEAP32[i7 >> 2] | 0;
11106 i5 = i7 + 4 | 0;
11107 i8 = i29 + ((HEAP32[i5 >> 2] | 0) + -6) | 0;
11108 i9 = i7 + 12 | 0;
11109 i28 = HEAP32[i9 >> 2] | 0;
11110 i4 = i7 + 16 | 0;
11111 i25 = HEAP32[i4 >> 2] | 0;
11112 i6 = i28 + (i25 + -258) | 0;
11113 i17 = HEAP32[i11 + 44 >> 2] | 0;
11114 i12 = HEAP32[i11 + 48 >> 2] | 0;
11115 i18 = HEAP32[i11 + 52 >> 2] | 0;
11116 i3 = i11 + 56 | 0;
11117 i2 = i11 + 60 | 0;
11118 i16 = HEAP32[i11 + 76 >> 2] | 0;
11119 i13 = HEAP32[i11 + 80 >> 2] | 0;
11120 i14 = (1 << HEAP32[i11 + 84 >> 2]) + -1 | 0;
11121 i15 = (1 << HEAP32[i11 + 88 >> 2]) + -1 | 0;
11122 i19 = i28 + (i25 + ~i19) | 0;
11123 i25 = i11 + 7104 | 0;
11124 i20 = i18 + -1 | 0;
11125 i27 = (i12 | 0) == 0;
11126 i24 = (HEAP32[i11 + 40 >> 2] | 0) + -1 | 0;
11127 i21 = i24 + i12 | 0;
11128 i22 = i12 + -1 | 0;
11129 i23 = i19 + -1 | 0;
11130 i26 = i19 - i12 | 0;
11131 i31 = HEAP32[i2 >> 2] | 0;
11132 i30 = HEAP32[i3 >> 2] | 0;
11133 i29 = i29 + -1 | 0;
11134 i28 = i28 + -1 | 0;
11135 L1 : do {
11136 if (i31 >>> 0 < 15) {
11137 i37 = i29 + 2 | 0;
11138 i33 = i31 + 16 | 0;
11139 i30 = ((HEAPU8[i29 + 1 | 0] | 0) << i31) + i30 + ((HEAPU8[i37] | 0) << i31 + 8) | 0;
11140 i29 = i37;
11141 } else {
11142 i33 = i31;
11143 }
11144 i31 = i30 & i14;
11145 i34 = HEAP8[i16 + (i31 << 2) | 0] | 0;
11146 i32 = HEAP16[i16 + (i31 << 2) + 2 >> 1] | 0;
11147 i31 = HEAPU8[i16 + (i31 << 2) + 1 | 0] | 0;
11148 i30 = i30 >>> i31;
11149 i31 = i33 - i31 | 0;
11150 do {
11151 if (!(i34 << 24 >> 24 == 0)) {
11152 i33 = i34 & 255;
11153 while (1) {
11154 if ((i33 & 16 | 0) != 0) {
11155 break;
11156 }
11157 if ((i33 & 64 | 0) != 0) {
11158 i10 = 55;
11159 break L1;
11160 }
11161 i37 = (i30 & (1 << i33) + -1) + (i32 & 65535) | 0;
11162 i33 = HEAP8[i16 + (i37 << 2) | 0] | 0;
11163 i32 = HEAP16[i16 + (i37 << 2) + 2 >> 1] | 0;
11164 i37 = HEAPU8[i16 + (i37 << 2) + 1 | 0] | 0;
11165 i30 = i30 >>> i37;
11166 i31 = i31 - i37 | 0;
11167 if (i33 << 24 >> 24 == 0) {
11168 i10 = 6;
11169 break;
11170 } else {
11171 i33 = i33 & 255;
11172 }
11173 }
11174 if ((i10 | 0) == 6) {
11175 i32 = i32 & 255;
11176 i10 = 7;
11177 break;
11178 }
11179 i32 = i32 & 65535;
11180 i33 = i33 & 15;
11181 if ((i33 | 0) != 0) {
11182 if (i31 >>> 0 < i33 >>> 0) {
11183 i29 = i29 + 1 | 0;
11184 i35 = i31 + 8 | 0;
11185 i34 = ((HEAPU8[i29] | 0) << i31) + i30 | 0;
11186 } else {
11187 i35 = i31;
11188 i34 = i30;
11189 }
11190 i31 = i35 - i33 | 0;
11191 i30 = i34 >>> i33;
11192 i32 = (i34 & (1 << i33) + -1) + i32 | 0;
11193 }
11194 if (i31 >>> 0 < 15) {
11195 i37 = i29 + 2 | 0;
11196 i34 = i31 + 16 | 0;
11197 i30 = ((HEAPU8[i29 + 1 | 0] | 0) << i31) + i30 + ((HEAPU8[i37] | 0) << i31 + 8) | 0;
11198 i29 = i37;
11199 } else {
11200 i34 = i31;
11201 }
11202 i37 = i30 & i15;
11203 i33 = HEAP16[i13 + (i37 << 2) + 2 >> 1] | 0;
11204 i31 = HEAPU8[i13 + (i37 << 2) + 1 | 0] | 0;
11205 i30 = i30 >>> i31;
11206 i31 = i34 - i31 | 0;
11207 i34 = HEAPU8[i13 + (i37 << 2) | 0] | 0;
11208 if ((i34 & 16 | 0) == 0) {
11209 do {
11210 if ((i34 & 64 | 0) != 0) {
11211 i10 = 52;
11212 break L1;
11213 }
11214 i34 = (i30 & (1 << i34) + -1) + (i33 & 65535) | 0;
11215 i33 = HEAP16[i13 + (i34 << 2) + 2 >> 1] | 0;
11216 i37 = HEAPU8[i13 + (i34 << 2) + 1 | 0] | 0;
11217 i30 = i30 >>> i37;
11218 i31 = i31 - i37 | 0;
11219 i34 = HEAPU8[i13 + (i34 << 2) | 0] | 0;
11220 } while ((i34 & 16 | 0) == 0);
11221 }
11222 i33 = i33 & 65535;
11223 i34 = i34 & 15;
11224 if (i31 >>> 0 < i34 >>> 0) {
11225 i35 = i29 + 1 | 0;
11226 i30 = ((HEAPU8[i35] | 0) << i31) + i30 | 0;
11227 i36 = i31 + 8 | 0;
11228 if (i36 >>> 0 < i34 >>> 0) {
11229 i29 = i29 + 2 | 0;
11230 i31 = i31 + 16 | 0;
11231 i30 = ((HEAPU8[i29] | 0) << i36) + i30 | 0;
11232 } else {
11233 i31 = i36;
11234 i29 = i35;
11235 }
11236 }
11237 i33 = (i30 & (1 << i34) + -1) + i33 | 0;
11238 i30 = i30 >>> i34;
11239 i31 = i31 - i34 | 0;
11240 i35 = i28;
11241 i34 = i35 - i19 | 0;
11242 if (!(i33 >>> 0 > i34 >>> 0)) {
11243 i34 = i28 + (0 - i33) | 0;
11244 while (1) {
11245 HEAP8[i28 + 1 | 0] = HEAP8[i34 + 1 | 0] | 0;
11246 HEAP8[i28 + 2 | 0] = HEAP8[i34 + 2 | 0] | 0;
11247 i35 = i34 + 3 | 0;
11248 i33 = i28 + 3 | 0;
11249 HEAP8[i33] = HEAP8[i35] | 0;
11250 i32 = i32 + -3 | 0;
11251 if (!(i32 >>> 0 > 2)) {
11252 break;
11253 } else {
11254 i34 = i35;
11255 i28 = i33;
11256 }
11257 }
11258 if ((i32 | 0) == 0) {
11259 i28 = i33;
11260 break;
11261 }
11262 i33 = i28 + 4 | 0;
11263 HEAP8[i33] = HEAP8[i34 + 4 | 0] | 0;
11264 if (!(i32 >>> 0 > 1)) {
11265 i28 = i33;
11266 break;
11267 }
11268 i28 = i28 + 5 | 0;
11269 HEAP8[i28] = HEAP8[i34 + 5 | 0] | 0;
11270 break;
11271 }
11272 i34 = i33 - i34 | 0;
11273 if (i34 >>> 0 > i17 >>> 0 ? (HEAP32[i25 >> 2] | 0) != 0 : 0) {
11274 i10 = 22;
11275 break L1;
11276 }
11277 do {
11278 if (i27) {
11279 i36 = i18 + (i24 - i34) | 0;
11280 if (i34 >>> 0 < i32 >>> 0) {
11281 i32 = i32 - i34 | 0;
11282 i35 = i33 - i35 | 0;
11283 i37 = i28;
11284 do {
11285 i36 = i36 + 1 | 0;
11286 i37 = i37 + 1 | 0;
11287 HEAP8[i37] = HEAP8[i36] | 0;
11288 i34 = i34 + -1 | 0;
11289 } while ((i34 | 0) != 0);
11290 i33 = i28 + (i23 + i35 + (1 - i33)) | 0;
11291 i28 = i28 + (i19 + i35) | 0;
11292 } else {
11293 i33 = i36;
11294 }
11295 } else {
11296 if (!(i12 >>> 0 < i34 >>> 0)) {
11297 i36 = i18 + (i22 - i34) | 0;
11298 if (!(i34 >>> 0 < i32 >>> 0)) {
11299 i33 = i36;
11300 break;
11301 }
11302 i32 = i32 - i34 | 0;
11303 i35 = i33 - i35 | 0;
11304 i37 = i28;
11305 do {
11306 i36 = i36 + 1 | 0;
11307 i37 = i37 + 1 | 0;
11308 HEAP8[i37] = HEAP8[i36] | 0;
11309 i34 = i34 + -1 | 0;
11310 } while ((i34 | 0) != 0);
11311 i33 = i28 + (i23 + i35 + (1 - i33)) | 0;
11312 i28 = i28 + (i19 + i35) | 0;
11313 break;
11314 }
11315 i37 = i18 + (i21 - i34) | 0;
11316 i36 = i34 - i12 | 0;
11317 if (i36 >>> 0 < i32 >>> 0) {
11318 i32 = i32 - i36 | 0;
11319 i34 = i33 - i35 | 0;
11320 i35 = i28;
11321 do {
11322 i37 = i37 + 1 | 0;
11323 i35 = i35 + 1 | 0;
11324 HEAP8[i35] = HEAP8[i37] | 0;
11325 i36 = i36 + -1 | 0;
11326 } while ((i36 | 0) != 0);
11327 i35 = i28 + (i26 + i34) | 0;
11328 if (i12 >>> 0 < i32 >>> 0) {
11329 i32 = i32 - i12 | 0;
11330 i37 = i20;
11331 i36 = i12;
11332 do {
11333 i37 = i37 + 1 | 0;
11334 i35 = i35 + 1 | 0;
11335 HEAP8[i35] = HEAP8[i37] | 0;
11336 i36 = i36 + -1 | 0;
11337 } while ((i36 | 0) != 0);
11338 i33 = i28 + (i23 + i34 + (1 - i33)) | 0;
11339 i28 = i28 + (i19 + i34) | 0;
11340 } else {
11341 i33 = i20;
11342 i28 = i35;
11343 }
11344 } else {
11345 i33 = i37;
11346 }
11347 }
11348 } while (0);
11349 if (i32 >>> 0 > 2) {
11350 do {
11351 HEAP8[i28 + 1 | 0] = HEAP8[i33 + 1 | 0] | 0;
11352 HEAP8[i28 + 2 | 0] = HEAP8[i33 + 2 | 0] | 0;
11353 i33 = i33 + 3 | 0;
11354 i28 = i28 + 3 | 0;
11355 HEAP8[i28] = HEAP8[i33] | 0;
11356 i32 = i32 + -3 | 0;
11357 } while (i32 >>> 0 > 2);
11358 }
11359 if ((i32 | 0) != 0) {
11360 i34 = i28 + 1 | 0;
11361 HEAP8[i34] = HEAP8[i33 + 1 | 0] | 0;
11362 if (i32 >>> 0 > 1) {
11363 i28 = i28 + 2 | 0;
11364 HEAP8[i28] = HEAP8[i33 + 2 | 0] | 0;
11365 } else {
11366 i28 = i34;
11367 }
11368 }
11369 } else {
11370 i32 = i32 & 255;
11371 i10 = 7;
11372 }
11373 } while (0);
11374 if ((i10 | 0) == 7) {
11375 i10 = 0;
11376 i28 = i28 + 1 | 0;
11377 HEAP8[i28] = i32;
11378 }
11379 } while (i29 >>> 0 < i8 >>> 0 & i28 >>> 0 < i6 >>> 0);
11380 do {
11381 if ((i10 | 0) == 22) {
11382 HEAP32[i7 + 24 >> 2] = 14384;
11383 HEAP32[i11 >> 2] = 29;
11384 } else if ((i10 | 0) == 52) {
11385 HEAP32[i7 + 24 >> 2] = 14416;
11386 HEAP32[i11 >> 2] = 29;
11387 } else if ((i10 | 0) == 55) {
11388 if ((i33 & 32 | 0) == 0) {
11389 HEAP32[i7 + 24 >> 2] = 14440;
11390 HEAP32[i11 >> 2] = 29;
11391 break;
11392 } else {
11393 HEAP32[i11 >> 2] = 11;
11394 break;
11395 }
11396 }
11397 } while (0);
11398 i37 = i31 >>> 3;
11399 i11 = i29 + (0 - i37) | 0;
11400 i10 = i31 - (i37 << 3) | 0;
11401 i12 = (1 << i10) + -1 & i30;
11402 HEAP32[i7 >> 2] = i29 + (1 - i37);
11403 HEAP32[i9 >> 2] = i28 + 1;
11404 if (i11 >>> 0 < i8 >>> 0) {
11405 i7 = i8 - i11 | 0;
11406 } else {
11407 i7 = i8 - i11 | 0;
11408 }
11409 HEAP32[i5 >> 2] = i7 + 5;
11410 if (i28 >>> 0 < i6 >>> 0) {
11411 i37 = i6 - i28 | 0;
11412 i37 = i37 + 257 | 0;
11413 HEAP32[i4 >> 2] = i37;
11414 HEAP32[i3 >> 2] = i12;
11415 HEAP32[i2 >> 2] = i10;
11416 STACKTOP = i1;
11417 return;
11418 } else {
11419 i37 = i6 - i28 | 0;
11420 i37 = i37 + 257 | 0;
11421 HEAP32[i4 >> 2] = i37;
11422 HEAP32[i3 >> 2] = i12;
11423 HEAP32[i2 >> 2] = i10;
11424 STACKTOP = i1;
11425 return;
11426 }
11427 }
11428 function _send_tree(i2, i13, i12) {
11429 i2 = i2 | 0;
11430 i13 = i13 | 0;
11431 i12 = i12 | 0;
11432 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i 22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0;
11433 i11 = STACKTOP;
11434 i15 = HEAP16[i13 + 2 >> 1] | 0;
11435 i16 = i15 << 16 >> 16 == 0;
11436 i7 = i2 + 2754 | 0;
11437 i4 = i2 + 5820 | 0;
11438 i8 = i2 + 2752 | 0;
11439 i3 = i2 + 5816 | 0;
11440 i14 = i2 + 20 | 0;
11441 i10 = i2 + 8 | 0;
11442 i9 = i2 + 2758 | 0;
11443 i1 = i2 + 2756 | 0;
11444 i5 = i2 + 2750 | 0;
11445 i6 = i2 + 2748 | 0;
11446 i21 = i16 ? 138 : 7;
11447 i23 = i16 ? 3 : 4;
11448 i18 = 0;
11449 i15 = i15 & 65535;
11450 i24 = -1;
11451 L1 : while (1) {
11452 i20 = 0;
11453 while (1) {
11454 if ((i18 | 0) > (i12 | 0)) {
11455 break L1;
11456 }
11457 i18 = i18 + 1 | 0;
11458 i19 = HEAP16[i13 + (i18 << 2) + 2 >> 1] | 0;
11459 i16 = i19 & 65535;
11460 i22 = i20 + 1 | 0;
11461 i17 = (i15 | 0) == (i16 | 0);
11462 if (!((i22 | 0) < (i21 | 0) & i17)) {
11463 break;
11464 } else {
11465 i20 = i22;
11466 }
11467 }
11468 do {
11469 if ((i22 | 0) >= (i23 | 0)) {
11470 if ((i15 | 0) != 0) {
11471 if ((i15 | 0) == (i24 | 0)) {
11472 i23 = HEAP16[i3 >> 1] | 0;
11473 i21 = HEAP32[i4 >> 2] | 0;
11474 i20 = i22;
11475 } else {
11476 i22 = HEAPU16[i2 + (i15 << 2) + 2686 >> 1] | 0;
11477 i21 = HEAP32[i4 >> 2] | 0;
11478 i24 = HEAPU16[i2 + (i15 << 2) + 2684 >> 1] | 0;
11479 i25 = HEAPU16[i3 >> 1] | 0 | i24 << i21;
11480 i23 = i25 & 65535;
11481 HEAP16[i3 >> 1] = i23;
11482 if ((i21 | 0) > (16 - i22 | 0)) {
11483 i23 = HEAP32[i14 >> 2] | 0;
11484 HEAP32[i14 >> 2] = i23 + 1;
11485 HEAP8[(HEAP32[i10 >> 2] | 0) + i23 | 0] = i25;
11486 i23 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11487 i21 = HEAP32[i14 >> 2] | 0;
11488 HEAP32[i14 >> 2] = i21 + 1;
11489 HEAP8[(HEAP32[i10 >> 2] | 0) + i21 | 0] = i23;
11490 i21 = HEAP32[i4 >> 2] | 0;
11491 i23 = i24 >>> (16 - i21 | 0) & 65535;
11492 HEAP16[i3 >> 1] = i23;
11493 i21 = i22 + -16 + i21 | 0;
11494 } else {
11495 i21 = i21 + i22 | 0;
11496 }
11497 HEAP32[i4 >> 2] = i21;
11498 }
11499 i22 = HEAPU16[i5 >> 1] | 0;
11500 i24 = HEAPU16[i6 >> 1] | 0;
11501 i23 = i23 & 65535 | i24 << i21;
11502 HEAP16[i3 >> 1] = i23;
11503 if ((i21 | 0) > (16 - i22 | 0)) {
11504 i21 = HEAP32[i14 >> 2] | 0;
11505 HEAP32[i14 >> 2] = i21 + 1;
11506 HEAP8[(HEAP32[i10 >> 2] | 0) + i21 | 0] = i23;
11507 i23 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11508 i21 = HEAP32[i14 >> 2] | 0;
11509 HEAP32[i14 >> 2] = i21 + 1;
11510 HEAP8[(HEAP32[i10 >> 2] | 0) + i21 | 0] = i23;
11511 i21 = HEAP32[i4 >> 2] | 0;
11512 i23 = i24 >>> (16 - i21 | 0);
11513 HEAP16[i3 >> 1] = i23;
11514 i21 = i22 + -16 + i21 | 0;
11515 } else {
11516 i21 = i21 + i22 | 0;
11517 }
11518 HEAP32[i4 >> 2] = i21;
11519 i20 = i20 + 65533 & 65535;
11520 i22 = i23 & 65535 | i20 << i21;
11521 HEAP16[i3 >> 1] = i22;
11522 if ((i21 | 0) > 14) {
11523 i26 = HEAP32[i14 >> 2] | 0;
11524 HEAP32[i14 >> 2] = i26 + 1;
11525 HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i22;
11526 i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11527 i27 = HEAP32[i14 >> 2] | 0;
11528 HEAP32[i14 >> 2] = i27 + 1;
11529 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i26;
11530 i27 = HEAP32[i4 >> 2] | 0;
11531 HEAP16[i3 >> 1] = i20 >>> (16 - i27 | 0);
11532 HEAP32[i4 >> 2] = i27 + -14;
11533 break;
11534 } else {
11535 HEAP32[i4 >> 2] = i21 + 2;
11536 break;
11537 }
11538 }
11539 if ((i22 | 0) < 11) {
11540 i24 = HEAPU16[i7 >> 1] | 0;
11541 i23 = HEAP32[i4 >> 2] | 0;
11542 i21 = HEAPU16[i8 >> 1] | 0;
11543 i22 = HEAPU16[i3 >> 1] | 0 | i21 << i23;
11544 HEAP16[i3 >> 1] = i22;
11545 if ((i23 | 0) > (16 - i24 | 0)) {
11546 i27 = HEAP32[i14 >> 2] | 0;
11547 HEAP32[i14 >> 2] = i27 + 1;
11548 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11549 i22 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11550 i27 = HEAP32[i14 >> 2] | 0;
11551 HEAP32[i14 >> 2] = i27 + 1;
11552 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11553 i27 = HEAP32[i4 >> 2] | 0;
11554 i22 = i21 >>> (16 - i27 | 0);
11555 HEAP16[i3 >> 1] = i22;
11556 i21 = i24 + -16 + i27 | 0;
11557 } else {
11558 i21 = i23 + i24 | 0;
11559 }
11560 HEAP32[i4 >> 2] = i21;
11561 i20 = i20 + 65534 & 65535;
11562 i22 = i22 & 65535 | i20 << i21;
11563 HEAP16[i3 >> 1] = i22;
11564 if ((i21 | 0) > 13) {
11565 i26 = HEAP32[i14 >> 2] | 0;
11566 HEAP32[i14 >> 2] = i26 + 1;
11567 HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i22;
11568 i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11569 i27 = HEAP32[i14 >> 2] | 0;
11570 HEAP32[i14 >> 2] = i27 + 1;
11571 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i26;
11572 i27 = HEAP32[i4 >> 2] | 0;
11573 HEAP16[i3 >> 1] = i20 >>> (16 - i27 | 0);
11574 HEAP32[i4 >> 2] = i27 + -13;
11575 break;
11576 } else {
11577 HEAP32[i4 >> 2] = i21 + 3;
11578 break;
11579 }
11580 } else {
11581 i21 = HEAPU16[i9 >> 1] | 0;
11582 i24 = HEAP32[i4 >> 2] | 0;
11583 i23 = HEAPU16[i1 >> 1] | 0;
11584 i22 = HEAPU16[i3 >> 1] | 0 | i23 << i24;
11585 HEAP16[i3 >> 1] = i22;
11586 if ((i24 | 0) > (16 - i21 | 0)) {
11587 i27 = HEAP32[i14 >> 2] | 0;
11588 HEAP32[i14 >> 2] = i27 + 1;
11589 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11590 i22 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11591 i27 = HEAP32[i14 >> 2] | 0;
11592 HEAP32[i14 >> 2] = i27 + 1;
11593 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11594 i27 = HEAP32[i4 >> 2] | 0;
11595 i22 = i23 >>> (16 - i27 | 0);
11596 HEAP16[i3 >> 1] = i22;
11597 i21 = i21 + -16 + i27 | 0;
11598 } else {
11599 i21 = i24 + i21 | 0;
11600 }
11601 HEAP32[i4 >> 2] = i21;
11602 i20 = i20 + 65526 & 65535;
11603 i22 = i22 & 65535 | i20 << i21;
11604 HEAP16[i3 >> 1] = i22;
11605 if ((i21 | 0) > 9) {
11606 i26 = HEAP32[i14 >> 2] | 0;
11607 HEAP32[i14 >> 2] = i26 + 1;
11608 HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i22;
11609 i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11610 i27 = HEAP32[i14 >> 2] | 0;
11611 HEAP32[i14 >> 2] = i27 + 1;
11612 HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i26;
11613 i27 = HEAP32[i4 >> 2] | 0;
11614 HEAP16[i3 >> 1] = i20 >>> (16 - i27 | 0);
11615 HEAP32[i4 >> 2] = i27 + -9;
11616 break;
11617 } else {
11618 HEAP32[i4 >> 2] = i21 + 7;
11619 break;
11620 }
11621 }
11622 } else {
11623 i20 = i2 + (i15 << 2) + 2686 | 0;
11624 i21 = i2 + (i15 << 2) + 2684 | 0;
11625 i23 = HEAP32[i4 >> 2] | 0;
11626 i26 = HEAP16[i3 >> 1] | 0;
11627 do {
11628 i24 = HEAPU16[i20 >> 1] | 0;
11629 i25 = HEAPU16[i21 >> 1] | 0;
11630 i27 = i26 & 65535 | i25 << i23;
11631 i26 = i27 & 65535;
11632 HEAP16[i3 >> 1] = i26;
11633 if ((i23 | 0) > (16 - i24 | 0)) {
11634 i26 = HEAP32[i14 >> 2] | 0;
11635 HEAP32[i14 >> 2] = i26 + 1;
11636 HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i27;
11637 i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11638 i23 = HEAP32[i14 >> 2] | 0;
11639 HEAP32[i14 >> 2] = i23 + 1;
11640 HEAP8[(HEAP32[i10 >> 2] | 0) + i23 | 0] = i26;
11641 i23 = HEAP32[i4 >> 2] | 0;
11642 i26 = i25 >>> (16 - i23 | 0) & 65535;
11643 HEAP16[i3 >> 1] = i26;
11644 i23 = i24 + -16 + i23 | 0;
11645 } else {
11646 i23 = i23 + i24 | 0;
11647 }
11648 HEAP32[i4 >> 2] = i23;
11649 i22 = i22 + -1 | 0;
11650 } while ((i22 | 0) != 0);
11651 }
11652 } while (0);
11653 if (i19 << 16 >> 16 == 0) {
11654 i24 = i15;
11655 i21 = 138;
11656 i23 = 3;
11657 i15 = i16;
11658 continue;
11659 }
11660 i24 = i15;
11661 i21 = i17 ? 6 : 7;
11662 i23 = i17 ? 3 : 4;
11663 i15 = i16;
11664 }
11665 STACKTOP = i11;
11666 return;
11667 }
11668 function __tr_flush_block(i2, i4, i6, i3) {
11669 i2 = i2 | 0;
11670 i4 = i4 | 0;
11671 i6 = i6 | 0;
11672 i3 = i3 | 0;
11673 var i1 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0;
11674 i1 = STACKTOP;
11675 if ((HEAP32[i2 + 132 >> 2] | 0) > 0) {
11676 i5 = (HEAP32[i2 >> 2] | 0) + 44 | 0;
11677 if ((HEAP32[i5 >> 2] | 0) == 2) {
11678 i8 = -201342849;
11679 i9 = 0;
11680 while (1) {
11681 if ((i8 & 1 | 0) != 0 ? (HEAP16[i2 + (i9 << 2) + 148 >> 1] | 0) != 0 : 0) {
11682 i8 = 0;
11683 break;
11684 }
11685 i9 = i9 + 1 | 0;
11686 if ((i9 | 0) < 32) {
11687 i8 = i8 >>> 1;
11688 } else {
11689 i7 = 6;
11690 break;
11691 }
11692 }
11693 L9 : do {
11694 if ((i7 | 0) == 6) {
11695 if (((HEAP16[i2 + 184 >> 1] | 0) == 0 ? (HEAP16[i2 + 188 >> 1] | 0) == 0 : 0) ? (HEAP16[i2 + 200 >> 1] | 0) == 0 : 0) {
11696 i8 = 32;
11697 while (1) {
11698 i7 = i8 + 1 | 0;
11699 if ((HEAP16[i2 + (i8 << 2) + 148 >> 1] | 0) != 0) {
11700 i8 = 1;
11701 break L9;
11702 }
11703 if ((i7 | 0) < 256) {
11704 i8 = i7;
11705 } else {
11706 i8 = 0;
11707 break;
11708 }
11709 }
11710 } else {
11711 i8 = 1;
11712 }
11713 }
11714 } while (0);
11715 HEAP32[i5 >> 2] = i8;
11716 }
11717 _build_tree(i2, i2 + 2840 | 0);
11718 _build_tree(i2, i2 + 2852 | 0);
11719 _scan_tree(i2, i2 + 148 | 0, HEAP32[i2 + 2844 >> 2] | 0);
11720 _scan_tree(i2, i2 + 2440 | 0, HEAP32[i2 + 2856 >> 2] | 0);
11721 _build_tree(i2, i2 + 2864 | 0);
11722 i5 = 18;
11723 while (1) {
11724 i7 = i5 + -1 | 0;
11725 if ((HEAP16[i2 + (HEAPU8[2888 + i5 | 0] << 2) + 2686 >> 1] | 0) != 0) {
11726 break;
11727 }
11728 if ((i7 | 0) > 2) {
11729 i5 = i7;
11730 } else {
11731 i5 = i7;
11732 break;
11733 }
11734 }
11735 i10 = i2 + 5800 | 0;
11736 i7 = (i5 * 3 | 0) + 17 + (HEAP32[i10 >> 2] | 0) | 0;
11737 HEAP32[i10 >> 2] = i7;
11738 i7 = (i7 + 10 | 0) >>> 3;
11739 i10 = ((HEAP32[i2 + 5804 >> 2] | 0) + 10 | 0) >>> 3;
11740 i9 = i10 >>> 0 > i7 >>> 0 ? i7 : i10;
11741 } else {
11742 i10 = i6 + 5 | 0;
11743 i5 = 0;
11744 i9 = i10;
11745 }
11746 do {
11747 if ((i6 + 4 | 0) >>> 0 > i9 >>> 0 | (i4 | 0) == 0) {
11748 i4 = i2 + 5820 | 0;
11749 i7 = HEAP32[i4 >> 2] | 0;
11750 i8 = (i7 | 0) > 13;
11751 if ((HEAP32[i2 + 136 >> 2] | 0) == 4 | (i10 | 0) == (i9 | 0)) {
11752 i9 = i3 + 2 & 65535;
11753 i6 = i2 + 5816 | 0;
11754 i5 = HEAPU16[i6 >> 1] | i9 << i7;
11755 HEAP16[i6 >> 1] = i5;
11756 if (i8) {
11757 i12 = i2 + 20 | 0;
11758 i13 = HEAP32[i12 >> 2] | 0;
11759 HEAP32[i12 >> 2] = i13 + 1;
11760 i14 = i2 + 8 | 0;
11761 HEAP8[(HEAP32[i14 >> 2] | 0) + i13 | 0] = i5;
11762 i13 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11763 i5 = HEAP32[i12 >> 2] | 0;
11764 HEAP32[i12 >> 2] = i5 + 1;
11765 HEAP8[(HEAP32[i14 >> 2] | 0) + i5 | 0] = i13;
11766 i5 = HEAP32[i4 >> 2] | 0;
11767 HEAP16[i6 >> 1] = i9 >>> (16 - i5 | 0);
11768 i5 = i5 + -13 | 0;
11769 } else {
11770 i5 = i7 + 3 | 0;
11771 }
11772 HEAP32[i4 >> 2] = i5;
11773 _compress_block(i2, 1136, 2288);
11774 break;
11775 }
11776 i10 = i3 + 4 & 65535;
11777 i6 = i2 + 5816 | 0;
11778 i9 = HEAPU16[i6 >> 1] | i10 << i7;
11779 HEAP16[i6 >> 1] = i9;
11780 if (i8) {
11781 i13 = i2 + 20 | 0;
11782 i12 = HEAP32[i13 >> 2] | 0;
11783 HEAP32[i13 >> 2] = i12 + 1;
11784 i14 = i2 + 8 | 0;
11785 HEAP8[(HEAP32[i14 >> 2] | 0) + i12 | 0] = i9;
11786 i9 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11787 i12 = HEAP32[i13 >> 2] | 0;
11788 HEAP32[i13 >> 2] = i12 + 1;
11789 HEAP8[(HEAP32[i14 >> 2] | 0) + i12 | 0] = i9;
11790 i12 = HEAP32[i4 >> 2] | 0;
11791 i9 = i10 >>> (16 - i12 | 0);
11792 HEAP16[i6 >> 1] = i9;
11793 i12 = i12 + -13 | 0;
11794 } else {
11795 i12 = i7 + 3 | 0;
11796 }
11797 HEAP32[i4 >> 2] = i12;
11798 i7 = HEAP32[i2 + 2844 >> 2] | 0;
11799 i8 = HEAP32[i2 + 2856 >> 2] | 0;
11800 i10 = i7 + 65280 & 65535;
11801 i11 = i9 & 65535 | i10 << i12;
11802 HEAP16[i6 >> 1] = i11;
11803 if ((i12 | 0) > 11) {
11804 i13 = i2 + 20 | 0;
11805 i9 = HEAP32[i13 >> 2] | 0;
11806 HEAP32[i13 >> 2] = i9 + 1;
11807 i14 = i2 + 8 | 0;
11808 HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11809 i11 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11810 i9 = HEAP32[i13 >> 2] | 0;
11811 HEAP32[i13 >> 2] = i9 + 1;
11812 HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11813 i9 = HEAP32[i4 >> 2] | 0;
11814 i11 = i10 >>> (16 - i9 | 0);
11815 HEAP16[i6 >> 1] = i11;
11816 i9 = i9 + -11 | 0;
11817 } else {
11818 i9 = i12 + 5 | 0;
11819 }
11820 HEAP32[i4 >> 2] = i9;
11821 i10 = i8 & 65535;
11822 i11 = i10 << i9 | i11 & 65535;
11823 HEAP16[i6 >> 1] = i11;
11824 if ((i9 | 0) > 11) {
11825 i13 = i2 + 20 | 0;
11826 i9 = HEAP32[i13 >> 2] | 0;
11827 HEAP32[i13 >> 2] = i9 + 1;
11828 i14 = i2 + 8 | 0;
11829 HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11830 i11 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11831 i9 = HEAP32[i13 >> 2] | 0;
11832 HEAP32[i13 >> 2] = i9 + 1;
11833 HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11834 i9 = HEAP32[i4 >> 2] | 0;
11835 i11 = i10 >>> (16 - i9 | 0);
11836 HEAP16[i6 >> 1] = i11;
11837 i9 = i9 + -11 | 0;
11838 } else {
11839 i9 = i9 + 5 | 0;
11840 }
11841 HEAP32[i4 >> 2] = i9;
11842 i10 = i5 + 65533 & 65535;
11843 i14 = i10 << i9 | i11 & 65535;
11844 HEAP16[i6 >> 1] = i14;
11845 if ((i9 | 0) > 12) {
11846 i12 = i2 + 20 | 0;
11847 i11 = HEAP32[i12 >> 2] | 0;
11848 HEAP32[i12 >> 2] = i11 + 1;
11849 i13 = i2 + 8 | 0;
11850 HEAP8[(HEAP32[i13 >> 2] | 0) + i11 | 0] = i14;
11851 i14 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11852 i11 = HEAP32[i12 >> 2] | 0;
11853 HEAP32[i12 >> 2] = i11 + 1;
11854 HEAP8[(HEAP32[i13 >> 2] | 0) + i11 | 0] = i14;
11855 i11 = HEAP32[i4 >> 2] | 0;
11856 i14 = i10 >>> (16 - i11 | 0);
11857 HEAP16[i6 >> 1] = i14;
11858 i11 = i11 + -12 | 0;
11859 } else {
11860 i11 = i9 + 4 | 0;
11861 }
11862 HEAP32[i4 >> 2] = i11;
11863 if ((i5 | 0) > -1) {
11864 i10 = i2 + 20 | 0;
11865 i9 = i2 + 8 | 0;
11866 i12 = 0;
11867 while (1) {
11868 i13 = HEAPU16[i2 + (HEAPU8[2888 + i12 | 0] << 2) + 2686 >> 1] | 0;
11869 i14 = i13 << i11 | i14 & 65535;
11870 HEAP16[i6 >> 1] = i14;
11871 if ((i11 | 0) > 13) {
11872 i11 = HEAP32[i10 >> 2] | 0;
11873 HEAP32[i10 >> 2] = i11 + 1;
11874 HEAP8[(HEAP32[i9 >> 2] | 0) + i11 | 0] = i14;
11875 i14 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11876 i11 = HEAP32[i10 >> 2] | 0;
11877 HEAP32[i10 >> 2] = i11 + 1;
11878 HEAP8[(HEAP32[i9 >> 2] | 0) + i11 | 0] = i14;
11879 i11 = HEAP32[i4 >> 2] | 0;
11880 i14 = i13 >>> (16 - i11 | 0);
11881 HEAP16[i6 >> 1] = i14;
11882 i11 = i11 + -13 | 0;
11883 } else {
11884 i11 = i11 + 3 | 0;
11885 }
11886 HEAP32[i4 >> 2] = i11;
11887 if ((i12 | 0) == (i5 | 0)) {
11888 break;
11889 } else {
11890 i12 = i12 + 1 | 0;
11891 }
11892 }
11893 }
11894 i13 = i2 + 148 | 0;
11895 _send_tree(i2, i13, i7);
11896 i14 = i2 + 2440 | 0;
11897 _send_tree(i2, i14, i8);
11898 _compress_block(i2, i13, i14);
11899 } else {
11900 __tr_stored_block(i2, i4, i6, i3);
11901 }
11902 } while (0);
11903 _init_block(i2);
11904 if ((i3 | 0) == 0) {
11905 STACKTOP = i1;
11906 return;
11907 }
11908 i3 = i2 + 5820 | 0;
11909 i4 = HEAP32[i3 >> 2] | 0;
11910 if ((i4 | 0) <= 8) {
11911 i5 = i2 + 5816 | 0;
11912 if ((i4 | 0) > 0) {
11913 i13 = HEAP16[i5 >> 1] & 255;
11914 i12 = i2 + 20 | 0;
11915 i14 = HEAP32[i12 >> 2] | 0;
11916 HEAP32[i12 >> 2] = i14 + 1;
11917 HEAP8[(HEAP32[i2 + 8 >> 2] | 0) + i14 | 0] = i13;
11918 }
11919 } else {
11920 i5 = i2 + 5816 | 0;
11921 i14 = HEAP16[i5 >> 1] & 255;
11922 i11 = i2 + 20 | 0;
11923 i12 = HEAP32[i11 >> 2] | 0;
11924 HEAP32[i11 >> 2] = i12 + 1;
11925 i13 = i2 + 8 | 0;
11926 HEAP8[(HEAP32[i13 >> 2] | 0) + i12 | 0] = i14;
11927 i12 = (HEAPU16[i5 >> 1] | 0) >>> 8 & 255;
11928 i14 = HEAP32[i11 >> 2] | 0;
11929 HEAP32[i11 >> 2] = i14 + 1;
11930 HEAP8[(HEAP32[i13 >> 2] | 0) + i14 | 0] = i12;
11931 }
11932 HEAP16[i5 >> 1] = 0;
11933 HEAP32[i3 >> 2] = 0;
11934 STACKTOP = i1;
11935 return;
11936 }
11937 function _deflate_fast(i3, i6) {
11938 i3 = i3 | 0;
11939 i6 = i6 | 0;
11940 var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0;
11941 i1 = STACKTOP;
11942 i20 = i3 + 116 | 0;
11943 i22 = (i6 | 0) == 0;
11944 i23 = i3 + 72 | 0;
11945 i24 = i3 + 88 | 0;
11946 i5 = i3 + 108 | 0;
11947 i7 = i3 + 56 | 0;
11948 i9 = i3 + 84 | 0;
11949 i10 = i3 + 68 | 0;
11950 i11 = i3 + 52 | 0;
11951 i12 = i3 + 64 | 0;
11952 i19 = i3 + 44 | 0;
11953 i21 = i3 + 96 | 0;
11954 i16 = i3 + 112 | 0;
11955 i13 = i3 + 5792 | 0;
11956 i17 = i3 + 5796 | 0;
11957 i18 = i3 + 5784 | 0;
11958 i14 = i3 + 5788 | 0;
11959 i15 = i3 + 128 | 0;
11960 i4 = i3 + 92 | 0;
11961 while (1) {
11962 if ((HEAP32[i20 >> 2] | 0) >>> 0 < 262) {
11963 _fill_window(i3);
11964 i25 = HEAP32[i20 >> 2] | 0;
11965 if (i25 >>> 0 < 262 & i22) {
11966 i2 = 0;
11967 i25 = 34;
11968 break;
11969 }
11970 if ((i25 | 0) == 0) {
11971 i25 = 26;
11972 break;
11973 }
11974 if (!(i25 >>> 0 > 2)) {
11975 i25 = 9;
11976 } else {
11977 i25 = 6;
11978 }
11979 } else {
11980 i25 = 6;
11981 }
11982 if ((i25 | 0) == 6) {
11983 i25 = 0;
11984 i26 = HEAP32[i5 >> 2] | 0;
11985 i34 = ((HEAPU8[(HEAP32[i7 >> 2] | 0) + (i26 + 2) | 0] | 0) ^ HEAP32[i23 >> 2] << HEAP32[i24 >> 2]) & HEAP32[i9 >> 2];
11986 HEAP32[i23 >> 2] = i34;
11987 i34 = (HEAP32[i10 >> 2] | 0) + (i34 << 1) | 0;
11988 i35 = HEAP16[i34 >> 1] | 0;
11989 HEAP16[(HEAP32[i12 >> 2] | 0) + ((HEAP32[i11 >> 2] & i26) << 1) >> 1] = i35;
11990 i27 = i35 & 65535;
11991 HEAP16[i34 >> 1] = i26;
11992 if (!(i35 << 16 >> 16 == 0) ? !((i26 - i27 | 0) >>> 0 > ((HEAP32[i19 >> 2] | 0) + -262 | 0) >>> 0) : 0) {
11993 i26 = _longest_match(i3, i27) | 0;
11994 HEAP32[i21 >> 2] = i26;
11995 } else {
11996 i25 = 9;
11997 }
11998 }
11999 if ((i25 | 0) == 9) {
12000 i26 = HEAP32[i21 >> 2] | 0;
12001 }
12002 do {
12003 if (i26 >>> 0 > 2) {
12004 i35 = i26 + 253 | 0;
12005 i25 = (HEAP32[i5 >> 2] | 0) - (HEAP32[i16 >> 2] | 0) | 0;
12006 i34 = HEAP32[i13 >> 2] | 0;
12007 HEAP16[(HEAP32[i17 >> 2] | 0) + (i34 << 1) >> 1] = i25;
12008 HEAP32[i13 >> 2] = i34 + 1;
12009 HEAP8[(HEAP32[i18 >> 2] | 0) + i34 | 0] = i35;
12010 i35 = i3 + ((HEAPU8[808 + (i35 & 255) | 0] | 0 | 256) + 1 << 2) + 148 | 0;
12011 HEAP16[i35 >> 1] = (HEAP16[i35 >> 1] | 0) + 1 << 16 >> 16;
12012 i25 = i25 + 65535 & 65535;
12013 if (!(i25 >>> 0 < 256)) {
12014 i25 = (i25 >>> 7) + 256 | 0;
12015 }
12016 i25 = i3 + ((HEAPU8[296 + i25 | 0] | 0) << 2) + 2440 | 0;
12017 HEAP16[i25 >> 1] = (HEAP16[i25 >> 1] | 0) + 1 << 16 >> 16;
12018 i25 = (HEAP32[i13 >> 2] | 0) == ((HEAP32[i14 >> 2] | 0) + -1 | 0) | 0;
12019 i26 = HEAP32[i21 >> 2] | 0;
12020 i35 = (HEAP32[i20 >> 2] | 0) - i26 | 0;
12021 HEAP32[i20 >> 2] = i35;
12022 if (!(i26 >>> 0 <= (HEAP32[i15 >> 2] | 0) >>> 0 & i35 >>> 0 > 2)) {
12023 i26 = (HEAP32[i5 >> 2] | 0) + i26 | 0;
12024 HEAP32[i5 >> 2] = i26;
12025 HEAP32[i21 >> 2] = 0;
12026 i34 = HEAP32[i7 >> 2] | 0;
12027 i35 = HEAPU8[i34 + i26 | 0] | 0;
12028 HEAP32[i23 >> 2] = i35;
12029 HEAP32[i23 >> 2] = ((HEAPU8[i34 + (i26 + 1) | 0] | 0) ^ i35 << HEAP32[i24 > > 2]) & HEAP32[i9 >> 2];
12030 break;
12031 }
12032 i30 = i26 + -1 | 0;
12033 HEAP32[i21 >> 2] = i30;
12034 i34 = HEAP32[i24 >> 2] | 0;
12035 i33 = HEAP32[i7 >> 2] | 0;
12036 i35 = HEAP32[i9 >> 2] | 0;
12037 i32 = HEAP32[i10 >> 2] | 0;
12038 i27 = HEAP32[i11 >> 2] | 0;
12039 i29 = HEAP32[i12 >> 2] | 0;
12040 i26 = HEAP32[i5 >> 2] | 0;
12041 i31 = HEAP32[i23 >> 2] | 0;
12042 while (1) {
12043 i28 = i26 + 1 | 0;
12044 HEAP32[i5 >> 2] = i28;
12045 i31 = ((HEAPU8[i33 + (i26 + 3) | 0] | 0) ^ i31 << i34) & i35;
12046 HEAP32[i23 >> 2] = i31;
12047 i36 = i32 + (i31 << 1) | 0;
12048 HEAP16[i29 + ((i27 & i28) << 1) >> 1] = HEAP16[i36 >> 1] | 0;
12049 HEAP16[i36 >> 1] = i28;
12050 i30 = i30 + -1 | 0;
12051 HEAP32[i21 >> 2] = i30;
12052 if ((i30 | 0) == 0) {
12053 break;
12054 } else {
12055 i26 = i28;
12056 }
12057 }
12058 i26 = i26 + 2 | 0;
12059 HEAP32[i5 >> 2] = i26;
12060 } else {
12061 i25 = HEAP8[(HEAP32[i7 >> 2] | 0) + (HEAP32[i5 >> 2] | 0) | 0] | 0;
12062 i26 = HEAP32[i13 >> 2] | 0;
12063 HEAP16[(HEAP32[i17 >> 2] | 0) + (i26 << 1) >> 1] = 0;
12064 HEAP32[i13 >> 2] = i26 + 1;
12065 HEAP8[(HEAP32[i18 >> 2] | 0) + i26 | 0] = i25;
12066 i25 = i3 + ((i25 & 255) << 2) + 148 | 0;
12067 HEAP16[i25 >> 1] = (HEAP16[i25 >> 1] | 0) + 1 << 16 >> 16;
12068 i25 = (HEAP32[i13 >> 2] | 0) == ((HEAP32[i14 >> 2] | 0) + -1 | 0) | 0;
12069 HEAP32[i20 >> 2] = (HEAP32[i20 >> 2] | 0) + -1;
12070 i26 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
12071 HEAP32[i5 >> 2] = i26;
12072 }
12073 } while (0);
12074 if ((i25 | 0) == 0) {
12075 continue;
12076 }
12077 i25 = HEAP32[i4 >> 2] | 0;
12078 if ((i25 | 0) > -1) {
12079 i27 = (HEAP32[i7 >> 2] | 0) + i25 | 0;
12080 } else {
12081 i27 = 0;
12082 }
12083 __tr_flush_block(i3, i27, i26 - i25 | 0, 0);
12084 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
12085 i27 = HEAP32[i3 >> 2] | 0;
12086 i28 = i27 + 28 | 0;
12087 i25 = HEAP32[i28 >> 2] | 0;
12088 i30 = HEAP32[i25 + 20 >> 2] | 0;
12089 i26 = i27 + 16 | 0;
12090 i29 = HEAP32[i26 >> 2] | 0;
12091 i29 = i30 >>> 0 > i29 >>> 0 ? i29 : i30;
12092 if ((i29 | 0) != 0 ? (i8 = i27 + 12 | 0, _memcpy(HEAP32[i8 >> 2] | 0, HEAP32[i 25 + 16 >> 2] | 0, i29 | 0) | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i29, i8 = (HEAP32[i28 >> 2] | 0) + 16 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i29, i8 = i27 + 20 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i29, HEAP32[i2 6 >> 2] = (HEAP32[i26 >> 2] | 0) - i29, i8 = HEAP32[i28 >> 2] | 0, i35 = i8 + 20 | 0, i36 = HEAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i29, (i36 | 0) == (i2 9 | 0)) : 0) {
12093 HEAP32[i8 + 16 >> 2] = HEAP32[i8 + 8 >> 2];
12094 }
12095 if ((HEAP32[(HEAP32[i3 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12096 i2 = 0;
12097 i25 = 34;
12098 break;
12099 }
12100 }
12101 if ((i25 | 0) == 26) {
12102 i8 = HEAP32[i4 >> 2] | 0;
12103 if ((i8 | 0) > -1) {
12104 i7 = (HEAP32[i7 >> 2] | 0) + i8 | 0;
12105 } else {
12106 i7 = 0;
12107 }
12108 i6 = (i6 | 0) == 4;
12109 __tr_flush_block(i3, i7, (HEAP32[i5 >> 2] | 0) - i8 | 0, i6 & 1);
12110 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
12111 i5 = HEAP32[i3 >> 2] | 0;
12112 i7 = i5 + 28 | 0;
12113 i4 = HEAP32[i7 >> 2] | 0;
12114 i10 = HEAP32[i4 + 20 >> 2] | 0;
12115 i8 = i5 + 16 | 0;
12116 i9 = HEAP32[i8 >> 2] | 0;
12117 i9 = i10 >>> 0 > i9 >>> 0 ? i9 : i10;
12118 if ((i9 | 0) != 0 ? (i2 = i5 + 12 | 0, _memcpy(HEAP32[i2 >> 2] | 0, HEAP32[i4 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + i9, i2 = (HEAP32[i7 >> 2] | 0) + 16 | 0, HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + i9, i2 = i5 + 20 | 0, HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + i9, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) - i9, i2 = HEAP32[i7 >> 2] | 0, i35 = i2 + 20 | 0, i36 = H EAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i9, (i36 | 0) == (i9 | 0)) : 0) {
12119 HEAP32[i2 + 16 >> 2] = HEAP32[i2 + 8 >> 2];
12120 }
12121 if ((HEAP32[(HEAP32[i3 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12122 i36 = i6 ? 2 : 0;
12123 STACKTOP = i1;
12124 return i36 | 0;
12125 } else {
12126 i36 = i6 ? 3 : 1;
12127 STACKTOP = i1;
12128 return i36 | 0;
12129 }
12130 } else if ((i25 | 0) == 34) {
12131 STACKTOP = i1;
12132 return i2 | 0;
12133 }
12134 return 0;
12135 }
12136 function _inflate_table(i11, i5, i13, i2, i1, i10) {
12137 i11 = i11 | 0;
12138 i5 = i5 | 0;
12139 i13 = i13 | 0;
12140 i2 = i2 | 0;
12141 i1 = i1 | 0;
12142 i10 = i10 | 0;
12143 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i12 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0 ;
12144 i3 = STACKTOP;
12145 STACKTOP = STACKTOP + 64 | 0;
12146 i7 = i3 + 32 | 0;
12147 i12 = i3;
12148 i4 = i7 + 0 | 0;
12149 i9 = i4 + 32 | 0;
12150 do {
12151 HEAP16[i4 >> 1] = 0;
12152 i4 = i4 + 2 | 0;
12153 } while ((i4 | 0) < (i9 | 0));
12154 i14 = (i13 | 0) == 0;
12155 if (!i14) {
12156 i4 = 0;
12157 do {
12158 i32 = i7 + (HEAPU16[i5 + (i4 << 1) >> 1] << 1) | 0;
12159 HEAP16[i32 >> 1] = (HEAP16[i32 >> 1] | 0) + 1 << 16 >> 16;
12160 i4 = i4 + 1 | 0;
12161 } while ((i4 | 0) != (i13 | 0));
12162 }
12163 i4 = HEAP32[i1 >> 2] | 0;
12164 i9 = 15;
12165 while (1) {
12166 i15 = i9 + -1 | 0;
12167 if ((HEAP16[i7 + (i9 << 1) >> 1] | 0) != 0) {
12168 break;
12169 }
12170 if ((i15 | 0) == 0) {
12171 i6 = 7;
12172 break;
12173 } else {
12174 i9 = i15;
12175 }
12176 }
12177 if ((i6 | 0) == 7) {
12178 i32 = HEAP32[i2 >> 2] | 0;
12179 HEAP32[i2 >> 2] = i32 + 4;
12180 HEAP8[i32] = 64;
12181 HEAP8[i32 + 1 | 0] = 1;
12182 HEAP16[i32 + 2 >> 1] = 0;
12183 i32 = HEAP32[i2 >> 2] | 0;
12184 HEAP32[i2 >> 2] = i32 + 4;
12185 HEAP8[i32] = 64;
12186 HEAP8[i32 + 1 | 0] = 1;
12187 HEAP16[i32 + 2 >> 1] = 0;
12188 HEAP32[i1 >> 2] = 1;
12189 i32 = 0;
12190 STACKTOP = i3;
12191 return i32 | 0;
12192 }
12193 i4 = i4 >>> 0 > i9 >>> 0 ? i9 : i4;
12194 L12 : do {
12195 if (i9 >>> 0 > 1) {
12196 i27 = 1;
12197 while (1) {
12198 i15 = i27 + 1 | 0;
12199 if ((HEAP16[i7 + (i27 << 1) >> 1] | 0) != 0) {
12200 break L12;
12201 }
12202 if (i15 >>> 0 < i9 >>> 0) {
12203 i27 = i15;
12204 } else {
12205 i27 = i15;
12206 break;
12207 }
12208 }
12209 } else {
12210 i27 = 1;
12211 }
12212 } while (0);
12213 i4 = i4 >>> 0 < i27 >>> 0 ? i27 : i4;
12214 i16 = 1;
12215 i15 = 1;
12216 do {
12217 i16 = (i16 << 1) - (HEAPU16[i7 + (i15 << 1) >> 1] | 0) | 0;
12218 i15 = i15 + 1 | 0;
12219 if ((i16 | 0) < 0) {
12220 i8 = -1;
12221 i6 = 56;
12222 break;
12223 }
12224 } while (i15 >>> 0 < 16);
12225 if ((i6 | 0) == 56) {
12226 STACKTOP = i3;
12227 return i8 | 0;
12228 }
12229 if ((i16 | 0) > 0 ? !((i11 | 0) != 0 & (i9 | 0) == 1) : 0) {
12230 i32 = -1;
12231 STACKTOP = i3;
12232 return i32 | 0;
12233 }
12234 HEAP16[i12 + 2 >> 1] = 0;
12235 i16 = 0;
12236 i15 = 1;
12237 do {
12238 i16 = (HEAPU16[i7 + (i15 << 1) >> 1] | 0) + (i16 & 65535) | 0;
12239 i15 = i15 + 1 | 0;
12240 HEAP16[i12 + (i15 << 1) >> 1] = i16;
12241 } while ((i15 | 0) != 15);
12242 if (!i14) {
12243 i15 = 0;
12244 do {
12245 i14 = HEAP16[i5 + (i15 << 1) >> 1] | 0;
12246 if (!(i14 << 16 >> 16 == 0)) {
12247 i31 = i12 + ((i14 & 65535) << 1) | 0;
12248 i32 = HEAP16[i31 >> 1] | 0;
12249 HEAP16[i31 >> 1] = i32 + 1 << 16 >> 16;
12250 HEAP16[i10 + ((i32 & 65535) << 1) >> 1] = i15;
12251 }
12252 i15 = i15 + 1 | 0;
12253 } while ((i15 | 0) != (i13 | 0));
12254 }
12255 if ((i11 | 0) == 1) {
12256 i14 = 1 << i4;
12257 if (i14 >>> 0 > 851) {
12258 i32 = 1;
12259 STACKTOP = i3;
12260 return i32 | 0;
12261 } else {
12262 i16 = 0;
12263 i20 = 1;
12264 i17 = 14128 + -514 | 0;
12265 i19 = 256;
12266 i18 = 14192 + -514 | 0;
12267 }
12268 } else if ((i11 | 0) != 0) {
12269 i14 = 1 << i4;
12270 i16 = (i11 | 0) == 2;
12271 if (i16 & i14 >>> 0 > 591) {
12272 i32 = 1;
12273 STACKTOP = i3;
12274 return i32 | 0;
12275 } else {
12276 i20 = 0;
12277 i17 = 14256;
12278 i19 = -1;
12279 i18 = 14320;
12280 }
12281 } else {
12282 i16 = 0;
12283 i14 = 1 << i4;
12284 i20 = 0;
12285 i17 = i10;
12286 i19 = 19;
12287 i18 = i10;
12288 }
12289 i11 = i14 + -1 | 0;
12290 i12 = i4 & 255;
12291 i22 = i4;
12292 i21 = 0;
12293 i25 = 0;
12294 i13 = -1;
12295 i15 = HEAP32[i2 >> 2] | 0;
12296 i24 = 0;
12297 L44 : while (1) {
12298 i23 = 1 << i22;
12299 while (1) {
12300 i29 = i27 - i21 | 0;
12301 i22 = i29 & 255;
12302 i28 = HEAP16[i10 + (i24 << 1) >> 1] | 0;
12303 i30 = i28 & 65535;
12304 if ((i30 | 0) >= (i19 | 0)) {
12305 if ((i30 | 0) > (i19 | 0)) {
12306 i26 = HEAP16[i18 + (i30 << 1) >> 1] & 255;
12307 i28 = HEAP16[i17 + (i30 << 1) >> 1] | 0;
12308 } else {
12309 i26 = 96;
12310 i28 = 0;
12311 }
12312 } else {
12313 i26 = 0;
12314 }
12315 i31 = 1 << i29;
12316 i30 = i25 >>> i21;
12317 i32 = i23;
12318 while (1) {
12319 i29 = i32 - i31 | 0;
12320 i33 = i29 + i30 | 0;
12321 HEAP8[i15 + (i33 << 2) | 0] = i26;
12322 HEAP8[i15 + (i33 << 2) + 1 | 0] = i22;
12323 HEAP16[i15 + (i33 << 2) + 2 >> 1] = i28;
12324 if ((i32 | 0) == (i31 | 0)) {
12325 break;
12326 } else {
12327 i32 = i29;
12328 }
12329 }
12330 i26 = 1 << i27 + -1;
12331 while (1) {
12332 if ((i26 & i25 | 0) == 0) {
12333 break;
12334 } else {
12335 i26 = i26 >>> 1;
12336 }
12337 }
12338 if ((i26 | 0) == 0) {
12339 i25 = 0;
12340 } else {
12341 i25 = (i26 + -1 & i25) + i26 | 0;
12342 }
12343 i24 = i24 + 1 | 0;
12344 i32 = i7 + (i27 << 1) | 0;
12345 i33 = (HEAP16[i32 >> 1] | 0) + -1 << 16 >> 16;
12346 HEAP16[i32 >> 1] = i33;
12347 if (i33 << 16 >> 16 == 0) {
12348 if ((i27 | 0) == (i9 | 0)) {
12349 break L44;
12350 }
12351 i27 = HEAPU16[i5 + (HEAPU16[i10 + (i24 << 1) >> 1] << 1) >> 1] | 0;
12352 }
12353 if (!(i27 >>> 0 > i4 >>> 0)) {
12354 continue;
12355 }
12356 i26 = i25 & i11;
12357 if ((i26 | 0) != (i13 | 0)) {
12358 break;
12359 }
12360 }
12361 i28 = (i21 | 0) == 0 ? i4 : i21;
12362 i23 = i15 + (i23 << 2) | 0;
12363 i31 = i27 - i28 | 0;
12364 L67 : do {
12365 if (i27 >>> 0 < i9 >>> 0) {
12366 i29 = i27;
12367 i30 = i31;
12368 i31 = 1 << i31;
12369 while (1) {
12370 i31 = i31 - (HEAPU16[i7 + (i29 << 1) >> 1] | 0) | 0;
12371 if ((i31 | 0) < 1) {
12372 break L67;
12373 }
12374 i30 = i30 + 1 | 0;
12375 i29 = i30 + i28 | 0;
12376 if (i29 >>> 0 < i9 >>> 0) {
12377 i31 = i31 << 1;
12378 } else {
12379 break;
12380 }
12381 }
12382 } else {
12383 i30 = i31;
12384 }
12385 } while (0);
12386 i29 = (1 << i30) + i14 | 0;
12387 if (i20 & i29 >>> 0 > 851 | i16 & i29 >>> 0 > 591) {
12388 i8 = 1;
12389 i6 = 56;
12390 break;
12391 }
12392 HEAP8[(HEAP32[i2 >> 2] | 0) + (i26 << 2) | 0] = i30;
12393 HEAP8[(HEAP32[i2 >> 2] | 0) + (i26 << 2) + 1 | 0] = i12;
12394 i22 = HEAP32[i2 >> 2] | 0;
12395 HEAP16[i22 + (i26 << 2) + 2 >> 1] = (i23 - i22 | 0) >>> 2;
12396 i22 = i30;
12397 i21 = i28;
12398 i13 = i26;
12399 i15 = i23;
12400 i14 = i29;
12401 }
12402 if ((i6 | 0) == 56) {
12403 STACKTOP = i3;
12404 return i8 | 0;
12405 }
12406 L77 : do {
12407 if ((i25 | 0) != 0) {
12408 do {
12409 if ((i21 | 0) != 0) {
12410 if ((i25 & i11 | 0) != (i13 | 0)) {
12411 i21 = 0;
12412 i22 = i12;
12413 i9 = i4;
12414 i15 = HEAP32[i2 >> 2] | 0;
12415 }
12416 } else {
12417 i21 = 0;
12418 }
12419 i5 = i25 >>> i21;
12420 HEAP8[i15 + (i5 << 2) | 0] = 64;
12421 HEAP8[i15 + (i5 << 2) + 1 | 0] = i22;
12422 HEAP16[i15 + (i5 << 2) + 2 >> 1] = 0;
12423 i5 = 1 << i9 + -1;
12424 while (1) {
12425 if ((i5 & i25 | 0) == 0) {
12426 break;
12427 } else {
12428 i5 = i5 >>> 1;
12429 }
12430 }
12431 if ((i5 | 0) == 0) {
12432 break L77;
12433 }
12434 i25 = (i5 + -1 & i25) + i5 | 0;
12435 } while ((i25 | 0) != 0);
12436 }
12437 } while (0);
12438 HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + (i14 << 2);
12439 HEAP32[i1 >> 2] = i4;
12440 i33 = 0;
12441 STACKTOP = i3;
12442 return i33 | 0;
12443 }
12444 function _compress_block(i1, i3, i7) {
12445 i1 = i1 | 0;
12446 i3 = i3 | 0;
12447 i7 = i7 | 0;
12448 var i2 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0;
12449 i2 = STACKTOP;
12450 i11 = i1 + 5792 | 0;
12451 if ((HEAP32[i11 >> 2] | 0) == 0) {
12452 i14 = HEAP32[i1 + 5820 >> 2] | 0;
12453 i17 = HEAP16[i1 + 5816 >> 1] | 0;
12454 } else {
12455 i9 = i1 + 5796 | 0;
12456 i10 = i1 + 5784 | 0;
12457 i8 = i1 + 5820 | 0;
12458 i12 = i1 + 5816 | 0;
12459 i5 = i1 + 20 | 0;
12460 i6 = i1 + 8 | 0;
12461 i14 = 0;
12462 while (1) {
12463 i20 = HEAP16[(HEAP32[i9 >> 2] | 0) + (i14 << 1) >> 1] | 0;
12464 i13 = i20 & 65535;
12465 i4 = i14 + 1 | 0;
12466 i14 = HEAPU8[(HEAP32[i10 >> 2] | 0) + i14 | 0] | 0;
12467 do {
12468 if (i20 << 16 >> 16 == 0) {
12469 i15 = HEAPU16[i3 + (i14 << 2) + 2 >> 1] | 0;
12470 i13 = HEAP32[i8 >> 2] | 0;
12471 i14 = HEAPU16[i3 + (i14 << 2) >> 1] | 0;
12472 i16 = HEAPU16[i12 >> 1] | 0 | i14 << i13;
12473 i17 = i16 & 65535;
12474 HEAP16[i12 >> 1] = i17;
12475 if ((i13 | 0) > (16 - i15 | 0)) {
12476 i17 = HEAP32[i5 >> 2] | 0;
12477 HEAP32[i5 >> 2] = i17 + 1;
12478 HEAP8[(HEAP32[i6 >> 2] | 0) + i17 | 0] = i16;
12479 i17 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12480 i20 = HEAP32[i5 >> 2] | 0;
12481 HEAP32[i5 >> 2] = i20 + 1;
12482 HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i17;
12483 i20 = HEAP32[i8 >> 2] | 0;
12484 i17 = i14 >>> (16 - i20 | 0) & 65535;
12485 HEAP16[i12 >> 1] = i17;
12486 i14 = i15 + -16 + i20 | 0;
12487 HEAP32[i8 >> 2] = i14;
12488 break;
12489 } else {
12490 i14 = i13 + i15 | 0;
12491 HEAP32[i8 >> 2] = i14;
12492 break;
12493 }
12494 } else {
12495 i15 = HEAPU8[808 + i14 | 0] | 0;
12496 i19 = (i15 | 256) + 1 | 0;
12497 i18 = HEAPU16[i3 + (i19 << 2) + 2 >> 1] | 0;
12498 i17 = HEAP32[i8 >> 2] | 0;
12499 i19 = HEAPU16[i3 + (i19 << 2) >> 1] | 0;
12500 i20 = HEAPU16[i12 >> 1] | 0 | i19 << i17;
12501 i16 = i20 & 65535;
12502 HEAP16[i12 >> 1] = i16;
12503 if ((i17 | 0) > (16 - i18 | 0)) {
12504 i16 = HEAP32[i5 >> 2] | 0;
12505 HEAP32[i5 >> 2] = i16 + 1;
12506 HEAP8[(HEAP32[i6 >> 2] | 0) + i16 | 0] = i20;
12507 i16 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12508 i20 = HEAP32[i5 >> 2] | 0;
12509 HEAP32[i5 >> 2] = i20 + 1;
12510 HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i16;
12511 i20 = HEAP32[i8 >> 2] | 0;
12512 i16 = i19 >>> (16 - i20 | 0) & 65535;
12513 HEAP16[i12 >> 1] = i16;
12514 i18 = i18 + -16 + i20 | 0;
12515 } else {
12516 i18 = i17 + i18 | 0;
12517 }
12518 HEAP32[i8 >> 2] = i18;
12519 i17 = HEAP32[2408 + (i15 << 2) >> 2] | 0;
12520 do {
12521 if ((i15 + -8 | 0) >>> 0 < 20) {
12522 i14 = i14 - (HEAP32[2528 + (i15 << 2) >> 2] | 0) & 65535;
12523 i15 = i14 << i18 | i16 & 65535;
12524 i16 = i15 & 65535;
12525 HEAP16[i12 >> 1] = i16;
12526 if ((i18 | 0) > (16 - i17 | 0)) {
12527 i16 = HEAP32[i5 >> 2] | 0;
12528 HEAP32[i5 >> 2] = i16 + 1;
12529 HEAP8[(HEAP32[i6 >> 2] | 0) + i16 | 0] = i15;
12530 i16 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12531 i20 = HEAP32[i5 >> 2] | 0;
12532 HEAP32[i5 >> 2] = i20 + 1;
12533 HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i16;
12534 i20 = HEAP32[i8 >> 2] | 0;
12535 i16 = i14 >>> (16 - i20 | 0) & 65535;
12536 HEAP16[i12 >> 1] = i16;
12537 i14 = i17 + -16 + i20 | 0;
12538 HEAP32[i8 >> 2] = i14;
12539 break;
12540 } else {
12541 i14 = i18 + i17 | 0;
12542 HEAP32[i8 >> 2] = i14;
12543 break;
12544 }
12545 } else {
12546 i14 = i18;
12547 }
12548 } while (0);
12549 i13 = i13 + -1 | 0;
12550 if (i13 >>> 0 < 256) {
12551 i15 = i13;
12552 } else {
12553 i15 = (i13 >>> 7) + 256 | 0;
12554 }
12555 i15 = HEAPU8[296 + i15 | 0] | 0;
12556 i17 = HEAPU16[i7 + (i15 << 2) + 2 >> 1] | 0;
12557 i18 = HEAPU16[i7 + (i15 << 2) >> 1] | 0;
12558 i19 = i16 & 65535 | i18 << i14;
12559 i16 = i19 & 65535;
12560 HEAP16[i12 >> 1] = i16;
12561 if ((i14 | 0) > (16 - i17 | 0)) {
12562 i20 = HEAP32[i5 >> 2] | 0;
12563 HEAP32[i5 >> 2] = i20 + 1;
12564 HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i19;
12565 i20 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12566 i14 = HEAP32[i5 >> 2] | 0;
12567 HEAP32[i5 >> 2] = i14 + 1;
12568 HEAP8[(HEAP32[i6 >> 2] | 0) + i14 | 0] = i20;
12569 i14 = HEAP32[i8 >> 2] | 0;
12570 i20 = i18 >>> (16 - i14 | 0) & 65535;
12571 HEAP16[i12 >> 1] = i20;
12572 i14 = i17 + -16 + i14 | 0;
12573 i17 = i20;
12574 } else {
12575 i14 = i14 + i17 | 0;
12576 i17 = i16;
12577 }
12578 HEAP32[i8 >> 2] = i14;
12579 i16 = HEAP32[2648 + (i15 << 2) >> 2] | 0;
12580 if ((i15 + -4 | 0) >>> 0 < 26) {
12581 i13 = i13 - (HEAP32[2768 + (i15 << 2) >> 2] | 0) & 65535;
12582 i15 = i13 << i14 | i17 & 65535;
12583 i17 = i15 & 65535;
12584 HEAP16[i12 >> 1] = i17;
12585 if ((i14 | 0) > (16 - i16 | 0)) {
12586 i17 = HEAP32[i5 >> 2] | 0;
12587 HEAP32[i5 >> 2] = i17 + 1;
12588 HEAP8[(HEAP32[i6 >> 2] | 0) + i17 | 0] = i15;
12589 i17 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12590 i14 = HEAP32[i5 >> 2] | 0;
12591 HEAP32[i5 >> 2] = i14 + 1;
12592 HEAP8[(HEAP32[i6 >> 2] | 0) + i14 | 0] = i17;
12593 i14 = HEAP32[i8 >> 2] | 0;
12594 i17 = i13 >>> (16 - i14 | 0) & 65535;
12595 HEAP16[i12 >> 1] = i17;
12596 i14 = i16 + -16 + i14 | 0;
12597 HEAP32[i8 >> 2] = i14;
12598 break;
12599 } else {
12600 i14 = i14 + i16 | 0;
12601 HEAP32[i8 >> 2] = i14;
12602 break;
12603 }
12604 }
12605 }
12606 } while (0);
12607 if (i4 >>> 0 < (HEAP32[i11 >> 2] | 0) >>> 0) {
12608 i14 = i4;
12609 } else {
12610 break;
12611 }
12612 }
12613 }
12614 i5 = i3 + 1026 | 0;
12615 i6 = HEAPU16[i5 >> 1] | 0;
12616 i4 = i1 + 5820 | 0;
12617 i3 = HEAPU16[i3 + 1024 >> 1] | 0;
12618 i7 = i1 + 5816 | 0;
12619 i8 = i17 & 65535 | i3 << i14;
12620 HEAP16[i7 >> 1] = i8;
12621 if ((i14 | 0) > (16 - i6 | 0)) {
12622 i17 = i1 + 20 | 0;
12623 i18 = HEAP32[i17 >> 2] | 0;
12624 HEAP32[i17 >> 2] = i18 + 1;
12625 i20 = i1 + 8 | 0;
12626 HEAP8[(HEAP32[i20 >> 2] | 0) + i18 | 0] = i8;
12627 i18 = (HEAPU16[i7 >> 1] | 0) >>> 8 & 255;
12628 i19 = HEAP32[i17 >> 2] | 0;
12629 HEAP32[i17 >> 2] = i19 + 1;
12630 HEAP8[(HEAP32[i20 >> 2] | 0) + i19 | 0] = i18;
12631 i19 = HEAP32[i4 >> 2] | 0;
12632 HEAP16[i7 >> 1] = i3 >>> (16 - i19 | 0);
12633 i19 = i6 + -16 + i19 | 0;
12634 HEAP32[i4 >> 2] = i19;
12635 i19 = HEAP16[i5 >> 1] | 0;
12636 i19 = i19 & 65535;
12637 i20 = i1 + 5812 | 0;
12638 HEAP32[i20 >> 2] = i19;
12639 STACKTOP = i2;
12640 return;
12641 } else {
12642 i19 = i14 + i6 | 0;
12643 HEAP32[i4 >> 2] = i19;
12644 i19 = HEAP16[i5 >> 1] | 0;
12645 i19 = i19 & 65535;
12646 i20 = i1 + 5812 | 0;
12647 HEAP32[i20 >> 2] = i19;
12648 STACKTOP = i2;
12649 return;
12650 }
12651 }
12652 function _deflate_stored(i2, i5) {
12653 i2 = i2 | 0;
12654 i5 = i5 | 0;
12655 var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0;
12656 i1 = STACKTOP;
12657 i4 = (HEAP32[i2 + 12 >> 2] | 0) + -5 | 0;
12658 i11 = i4 >>> 0 < 65535 ? i4 : 65535;
12659 i12 = i2 + 116 | 0;
12660 i4 = i2 + 108 | 0;
12661 i6 = i2 + 92 | 0;
12662 i10 = i2 + 44 | 0;
12663 i7 = i2 + 56 | 0;
12664 while (1) {
12665 i13 = HEAP32[i12 >> 2] | 0;
12666 if (i13 >>> 0 < 2) {
12667 _fill_window(i2);
12668 i13 = HEAP32[i12 >> 2] | 0;
12669 if ((i13 | i5 | 0) == 0) {
12670 i2 = 0;
12671 i8 = 28;
12672 break;
12673 }
12674 if ((i13 | 0) == 0) {
12675 i8 = 20;
12676 break;
12677 }
12678 }
12679 i13 = (HEAP32[i4 >> 2] | 0) + i13 | 0;
12680 HEAP32[i4 >> 2] = i13;
12681 HEAP32[i12 >> 2] = 0;
12682 i14 = HEAP32[i6 >> 2] | 0;
12683 i15 = i14 + i11 | 0;
12684 if (!((i13 | 0) != 0 & i13 >>> 0 < i15 >>> 0)) {
12685 HEAP32[i12 >> 2] = i13 - i15;
12686 HEAP32[i4 >> 2] = i15;
12687 if ((i14 | 0) > -1) {
12688 i13 = (HEAP32[i7 >> 2] | 0) + i14 | 0;
12689 } else {
12690 i13 = 0;
12691 }
12692 __tr_flush_block(i2, i13, i11, 0);
12693 HEAP32[i6 >> 2] = HEAP32[i4 >> 2];
12694 i16 = HEAP32[i2 >> 2] | 0;
12695 i14 = i16 + 28 | 0;
12696 i15 = HEAP32[i14 >> 2] | 0;
12697 i17 = HEAP32[i15 + 20 >> 2] | 0;
12698 i13 = i16 + 16 | 0;
12699 i18 = HEAP32[i13 >> 2] | 0;
12700 i17 = i17 >>> 0 > i18 >>> 0 ? i18 : i17;
12701 if ((i17 | 0) != 0 ? (i8 = i16 + 12 | 0, _memcpy(HEAP32[i8 >> 2] | 0, HEAP32[ i15 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i17, i8 = (HEAP32[i14 >> 2] | 0) + 16 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i17, i8 = i16 + 20 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i17, HEAP32[i 13 >> 2] = (HEAP32[i13 >> 2] | 0) - i17, i8 = HEAP32[i14 >> 2] | 0, i16 = i8 + 2 0 | 0, i18 = HEAP32[i16 >> 2] | 0, HEAP32[i16 >> 2] = i18 - i17, (i18 | 0) == (i 17 | 0)) : 0) {
12702 HEAP32[i8 + 16 >> 2] = HEAP32[i8 + 8 >> 2];
12703 }
12704 if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12705 i2 = 0;
12706 i8 = 28;
12707 break;
12708 }
12709 i14 = HEAP32[i6 >> 2] | 0;
12710 i13 = HEAP32[i4 >> 2] | 0;
12711 }
12712 i13 = i13 - i14 | 0;
12713 if (i13 >>> 0 < ((HEAP32[i10 >> 2] | 0) + -262 | 0) >>> 0) {
12714 continue;
12715 }
12716 if ((i14 | 0) > -1) {
12717 i14 = (HEAP32[i7 >> 2] | 0) + i14 | 0;
12718 } else {
12719 i14 = 0;
12720 }
12721 __tr_flush_block(i2, i14, i13, 0);
12722 HEAP32[i6 >> 2] = HEAP32[i4 >> 2];
12723 i16 = HEAP32[i2 >> 2] | 0;
12724 i14 = i16 + 28 | 0;
12725 i15 = HEAP32[i14 >> 2] | 0;
12726 i17 = HEAP32[i15 + 20 >> 2] | 0;
12727 i13 = i16 + 16 | 0;
12728 i18 = HEAP32[i13 >> 2] | 0;
12729 i17 = i17 >>> 0 > i18 >>> 0 ? i18 : i17;
12730 if ((i17 | 0) != 0 ? (i9 = i16 + 12 | 0, _memcpy(HEAP32[i9 >> 2] | 0, HEAP32[i 15 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + i17, i9 = (HEAP32[i14 >> 2] | 0) + 16 | 0, HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + i17, i9 = i16 + 20 | 0, HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + i17, HEAP32[i1 3 >> 2] = (HEAP32[i13 >> 2] | 0) - i17, i9 = HEAP32[i14 >> 2] | 0, i16 = i9 + 20 | 0, i18 = HEAP32[i16 >> 2] | 0, HEAP32[i16 >> 2] = i18 - i17, (i18 | 0) == (i1 7 | 0)) : 0) {
12731 HEAP32[i9 + 16 >> 2] = HEAP32[i9 + 8 >> 2];
12732 }
12733 if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12734 i2 = 0;
12735 i8 = 28;
12736 break;
12737 }
12738 }
12739 if ((i8 | 0) == 20) {
12740 i8 = HEAP32[i6 >> 2] | 0;
12741 if ((i8 | 0) > -1) {
12742 i7 = (HEAP32[i7 >> 2] | 0) + i8 | 0;
12743 } else {
12744 i7 = 0;
12745 }
12746 i5 = (i5 | 0) == 4;
12747 __tr_flush_block(i2, i7, (HEAP32[i4 >> 2] | 0) - i8 | 0, i5 & 1);
12748 HEAP32[i6 >> 2] = HEAP32[i4 >> 2];
12749 i4 = HEAP32[i2 >> 2] | 0;
12750 i7 = i4 + 28 | 0;
12751 i6 = HEAP32[i7 >> 2] | 0;
12752 i9 = HEAP32[i6 + 20 >> 2] | 0;
12753 i8 = i4 + 16 | 0;
12754 i10 = HEAP32[i8 >> 2] | 0;
12755 i9 = i9 >>> 0 > i10 >>> 0 ? i10 : i9;
12756 if ((i9 | 0) != 0 ? (i3 = i4 + 12 | 0, _memcpy(HEAP32[i3 >> 2] | 0, HEAP32[i6 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = (HEAP32[i7 >> 2] | 0) + 16 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = i4 + 20 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) - i9, i3 = HEAP32[i7 >> 2] | 0, i17 = i3 + 20 | 0, i18 = H EAP32[i17 >> 2] | 0, HEAP32[i17 >> 2] = i18 - i9, (i18 | 0) == (i9 | 0)) : 0) {
12757 HEAP32[i3 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
12758 }
12759 if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12760 i18 = i5 ? 2 : 0;
12761 STACKTOP = i1;
12762 return i18 | 0;
12763 } else {
12764 i18 = i5 ? 3 : 1;
12765 STACKTOP = i1;
12766 return i18 | 0;
12767 }
12768 } else if ((i8 | 0) == 28) {
12769 STACKTOP = i1;
12770 return i2 | 0;
12771 }
12772 return 0;
12773 }
12774 function _fill_window(i15) {
12775 i15 = i15 | 0;
12776 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i2 0 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0;
12777 i2 = STACKTOP;
12778 i16 = i15 + 44 | 0;
12779 i9 = HEAP32[i16 >> 2] | 0;
12780 i4 = i15 + 60 | 0;
12781 i8 = i15 + 116 | 0;
12782 i3 = i15 + 108 | 0;
12783 i5 = i9 + -262 | 0;
12784 i1 = i15 + 56 | 0;
12785 i17 = i15 + 72 | 0;
12786 i6 = i15 + 88 | 0;
12787 i7 = i15 + 84 | 0;
12788 i11 = i15 + 112 | 0;
12789 i12 = i15 + 92 | 0;
12790 i13 = i15 + 76 | 0;
12791 i14 = i15 + 68 | 0;
12792 i10 = i15 + 64 | 0;
12793 i19 = HEAP32[i8 >> 2] | 0;
12794 i21 = i9;
12795 while (1) {
12796 i20 = HEAP32[i3 >> 2] | 0;
12797 i19 = (HEAP32[i4 >> 2] | 0) - i19 - i20 | 0;
12798 if (!(i20 >>> 0 < (i5 + i21 | 0) >>> 0)) {
12799 i20 = HEAP32[i1 >> 2] | 0;
12800 _memcpy(i20 | 0, i20 + i9 | 0, i9 | 0) | 0;
12801 HEAP32[i11 >> 2] = (HEAP32[i11 >> 2] | 0) - i9;
12802 i20 = (HEAP32[i3 >> 2] | 0) - i9 | 0;
12803 HEAP32[i3 >> 2] = i20;
12804 HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) - i9;
12805 i22 = HEAP32[i13 >> 2] | 0;
12806 i21 = i22;
12807 i22 = (HEAP32[i14 >> 2] | 0) + (i22 << 1) | 0;
12808 do {
12809 i22 = i22 + -2 | 0;
12810 i23 = HEAPU16[i22 >> 1] | 0;
12811 if (i23 >>> 0 < i9 >>> 0) {
12812 i23 = 0;
12813 } else {
12814 i23 = i23 - i9 & 65535;
12815 }
12816 HEAP16[i22 >> 1] = i23;
12817 i21 = i21 + -1 | 0;
12818 } while ((i21 | 0) != 0);
12819 i22 = i9;
12820 i21 = (HEAP32[i10 >> 2] | 0) + (i9 << 1) | 0;
12821 do {
12822 i21 = i21 + -2 | 0;
12823 i23 = HEAPU16[i21 >> 1] | 0;
12824 if (i23 >>> 0 < i9 >>> 0) {
12825 i23 = 0;
12826 } else {
12827 i23 = i23 - i9 & 65535;
12828 }
12829 HEAP16[i21 >> 1] = i23;
12830 i22 = i22 + -1 | 0;
12831 } while ((i22 | 0) != 0);
12832 i19 = i19 + i9 | 0;
12833 }
12834 i21 = HEAP32[i15 >> 2] | 0;
12835 i24 = i21 + 4 | 0;
12836 i23 = HEAP32[i24 >> 2] | 0;
12837 if ((i23 | 0) == 0) {
12838 i18 = 28;
12839 break;
12840 }
12841 i22 = HEAP32[i8 >> 2] | 0;
12842 i20 = (HEAP32[i1 >> 2] | 0) + (i22 + i20) | 0;
12843 i19 = i23 >>> 0 > i19 >>> 0 ? i19 : i23;
12844 if ((i19 | 0) == 0) {
12845 i19 = 0;
12846 } else {
12847 HEAP32[i24 >> 2] = i23 - i19;
12848 i22 = HEAP32[(HEAP32[i21 + 28 >> 2] | 0) + 24 >> 2] | 0;
12849 if ((i22 | 0) == 1) {
12850 i22 = i21 + 48 | 0;
12851 HEAP32[i22 >> 2] = _adler32(HEAP32[i22 >> 2] | 0, HEAP32[i21 >> 2] | 0, i19) | 0;
12852 i22 = i21;
12853 } else if ((i22 | 0) == 2) {
12854 i22 = i21 + 48 | 0;
12855 HEAP32[i22 >> 2] = _crc32(HEAP32[i22 >> 2] | 0, HEAP32[i21 >> 2] | 0, i19) | 0;
12856 i22 = i21;
12857 } else {
12858 i22 = i21;
12859 }
12860 _memcpy(i20 | 0, HEAP32[i22 >> 2] | 0, i19 | 0) | 0;
12861 HEAP32[i22 >> 2] = (HEAP32[i22 >> 2] | 0) + i19;
12862 i22 = i21 + 8 | 0;
12863 HEAP32[i22 >> 2] = (HEAP32[i22 >> 2] | 0) + i19;
12864 i22 = HEAP32[i8 >> 2] | 0;
12865 }
12866 i19 = i22 + i19 | 0;
12867 HEAP32[i8 >> 2] = i19;
12868 if (i19 >>> 0 > 2 ? (i23 = HEAP32[i3 >> 2] | 0, i22 = HEAP32[i1 >> 2] | 0, i24 = HEAPU8[i22 + i23 | 0] | 0, HEAP32[i17 >> 2] = i24, HEAP32[i17 >> 2] = ((HEAPU 8[i22 + (i23 + 1) | 0] | 0) ^ i24 << HEAP32[i6 >> 2]) & HEAP32[i7 >> 2], !(i19 > >> 0 < 262)) : 0) {
12869 break;
12870 }
12871 if ((HEAP32[(HEAP32[i15 >> 2] | 0) + 4 >> 2] | 0) == 0) {
12872 break;
12873 }
12874 i21 = HEAP32[i16 >> 2] | 0;
12875 }
12876 if ((i18 | 0) == 28) {
12877 STACKTOP = i2;
12878 return;
12879 }
12880 i5 = i15 + 5824 | 0;
12881 i6 = HEAP32[i5 >> 2] | 0;
12882 i4 = HEAP32[i4 >> 2] | 0;
12883 if (!(i6 >>> 0 < i4 >>> 0)) {
12884 STACKTOP = i2;
12885 return;
12886 }
12887 i3 = i19 + (HEAP32[i3 >> 2] | 0) | 0;
12888 if (i6 >>> 0 < i3 >>> 0) {
12889 i4 = i4 - i3 | 0;
12890 i24 = i4 >>> 0 > 258 ? 258 : i4;
12891 _memset((HEAP32[i1 >> 2] | 0) + i3 | 0, 0, i24 | 0) | 0;
12892 HEAP32[i5 >> 2] = i24 + i3;
12893 STACKTOP = i2;
12894 return;
12895 }
12896 i3 = i3 + 258 | 0;
12897 if (!(i6 >>> 0 < i3 >>> 0)) {
12898 STACKTOP = i2;
12899 return;
12900 }
12901 i3 = i3 - i6 | 0;
12902 i4 = i4 - i6 | 0;
12903 i24 = i3 >>> 0 > i4 >>> 0 ? i4 : i3;
12904 _memset((HEAP32[i1 >> 2] | 0) + i6 | 0, 0, i24 | 0) | 0;
12905 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + i24;
12906 STACKTOP = i2;
12907 return;
12908 }
12909 function __tr_align(i1) {
12910 i1 = i1 | 0;
12911 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
12912 i2 = STACKTOP;
12913 i3 = i1 + 5820 | 0;
12914 i6 = HEAP32[i3 >> 2] | 0;
12915 i4 = i1 + 5816 | 0;
12916 i7 = HEAPU16[i4 >> 1] | 0 | 2 << i6;
12917 i5 = i7 & 65535;
12918 HEAP16[i4 >> 1] = i5;
12919 if ((i6 | 0) > 13) {
12920 i8 = i1 + 20 | 0;
12921 i6 = HEAP32[i8 >> 2] | 0;
12922 HEAP32[i8 >> 2] = i6 + 1;
12923 i5 = i1 + 8 | 0;
12924 HEAP8[(HEAP32[i5 >> 2] | 0) + i6 | 0] = i7;
12925 i7 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12926 i6 = HEAP32[i8 >> 2] | 0;
12927 HEAP32[i8 >> 2] = i6 + 1;
12928 HEAP8[(HEAP32[i5 >> 2] | 0) + i6 | 0] = i7;
12929 i6 = HEAP32[i3 >> 2] | 0;
12930 i5 = 2 >>> (16 - i6 | 0) & 65535;
12931 HEAP16[i4 >> 1] = i5;
12932 i6 = i6 + -13 | 0;
12933 } else {
12934 i6 = i6 + 3 | 0;
12935 }
12936 HEAP32[i3 >> 2] = i6;
12937 if ((i6 | 0) > 9) {
12938 i7 = i1 + 20 | 0;
12939 i6 = HEAP32[i7 >> 2] | 0;
12940 HEAP32[i7 >> 2] = i6 + 1;
12941 i8 = i1 + 8 | 0;
12942 HEAP8[(HEAP32[i8 >> 2] | 0) + i6 | 0] = i5;
12943 i5 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12944 i6 = HEAP32[i7 >> 2] | 0;
12945 HEAP32[i7 >> 2] = i6 + 1;
12946 HEAP8[(HEAP32[i8 >> 2] | 0) + i6 | 0] = i5;
12947 HEAP16[i4 >> 1] = 0;
12948 i6 = (HEAP32[i3 >> 2] | 0) + -9 | 0;
12949 i5 = 0;
12950 } else {
12951 i6 = i6 + 7 | 0;
12952 }
12953 HEAP32[i3 >> 2] = i6;
12954 if ((i6 | 0) != 16) {
12955 if ((i6 | 0) > 7) {
12956 i6 = i1 + 20 | 0;
12957 i7 = HEAP32[i6 >> 2] | 0;
12958 HEAP32[i6 >> 2] = i7 + 1;
12959 HEAP8[(HEAP32[i1 + 8 >> 2] | 0) + i7 | 0] = i5;
12960 i7 = (HEAPU16[i4 >> 1] | 0) >>> 8;
12961 HEAP16[i4 >> 1] = i7;
12962 i6 = (HEAP32[i3 >> 2] | 0) + -8 | 0;
12963 HEAP32[i3 >> 2] = i6;
12964 } else {
12965 i7 = i5;
12966 }
12967 } else {
12968 i9 = i1 + 20 | 0;
12969 i8 = HEAP32[i9 >> 2] | 0;
12970 HEAP32[i9 >> 2] = i8 + 1;
12971 i7 = i1 + 8 | 0;
12972 HEAP8[(HEAP32[i7 >> 2] | 0) + i8 | 0] = i5;
12973 i8 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12974 i6 = HEAP32[i9 >> 2] | 0;
12975 HEAP32[i9 >> 2] = i6 + 1;
12976 HEAP8[(HEAP32[i7 >> 2] | 0) + i6 | 0] = i8;
12977 HEAP16[i4 >> 1] = 0;
12978 HEAP32[i3 >> 2] = 0;
12979 i6 = 0;
12980 i7 = 0;
12981 }
12982 i5 = i1 + 5812 | 0;
12983 if ((11 - i6 + (HEAP32[i5 >> 2] | 0) | 0) >= 9) {
12984 HEAP32[i5 >> 2] = 7;
12985 STACKTOP = i2;
12986 return;
12987 }
12988 i7 = i7 & 65535 | 2 << i6;
12989 HEAP16[i4 >> 1] = i7;
12990 if ((i6 | 0) > 13) {
12991 i8 = i1 + 20 | 0;
12992 i6 = HEAP32[i8 >> 2] | 0;
12993 HEAP32[i8 >> 2] = i6 + 1;
12994 i9 = i1 + 8 | 0;
12995 HEAP8[(HEAP32[i9 >> 2] | 0) + i6 | 0] = i7;
12996 i7 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12997 i6 = HEAP32[i8 >> 2] | 0;
12998 HEAP32[i8 >> 2] = i6 + 1;
12999 HEAP8[(HEAP32[i9 >> 2] | 0) + i6 | 0] = i7;
13000 i6 = HEAP32[i3 >> 2] | 0;
13001 i7 = 2 >>> (16 - i6 | 0);
13002 HEAP16[i4 >> 1] = i7;
13003 i6 = i6 + -13 | 0;
13004 } else {
13005 i6 = i6 + 3 | 0;
13006 }
13007 i7 = i7 & 255;
13008 HEAP32[i3 >> 2] = i6;
13009 if ((i6 | 0) > 9) {
13010 i8 = i1 + 20 | 0;
13011 i9 = HEAP32[i8 >> 2] | 0;
13012 HEAP32[i8 >> 2] = i9 + 1;
13013 i6 = i1 + 8 | 0;
13014 HEAP8[(HEAP32[i6 >> 2] | 0) + i9 | 0] = i7;
13015 i9 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
13016 i7 = HEAP32[i8 >> 2] | 0;
13017 HEAP32[i8 >> 2] = i7 + 1;
13018 HEAP8[(HEAP32[i6 >> 2] | 0) + i7 | 0] = i9;
13019 HEAP16[i4 >> 1] = 0;
13020 i7 = 0;
13021 i6 = (HEAP32[i3 >> 2] | 0) + -9 | 0;
13022 } else {
13023 i6 = i6 + 7 | 0;
13024 }
13025 HEAP32[i3 >> 2] = i6;
13026 if ((i6 | 0) == 16) {
13027 i6 = i1 + 20 | 0;
13028 i9 = HEAP32[i6 >> 2] | 0;
13029 HEAP32[i6 >> 2] = i9 + 1;
13030 i8 = i1 + 8 | 0;
13031 HEAP8[(HEAP32[i8 >> 2] | 0) + i9 | 0] = i7;
13032 i7 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
13033 i9 = HEAP32[i6 >> 2] | 0;
13034 HEAP32[i6 >> 2] = i9 + 1;
13035 HEAP8[(HEAP32[i8 >> 2] | 0) + i9 | 0] = i7;
13036 HEAP16[i4 >> 1] = 0;
13037 HEAP32[i3 >> 2] = 0;
13038 HEAP32[i5 >> 2] = 7;
13039 STACKTOP = i2;
13040 return;
13041 }
13042 if ((i6 | 0) <= 7) {
13043 HEAP32[i5 >> 2] = 7;
13044 STACKTOP = i2;
13045 return;
13046 }
13047 i8 = i1 + 20 | 0;
13048 i9 = HEAP32[i8 >> 2] | 0;
13049 HEAP32[i8 >> 2] = i9 + 1;
13050 HEAP8[(HEAP32[i1 + 8 >> 2] | 0) + i9 | 0] = i7;
13051 HEAP16[i4 >> 1] = (HEAPU16[i4 >> 1] | 0) >>> 8;
13052 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + -8;
13053 HEAP32[i5 >> 2] = 7;
13054 STACKTOP = i2;
13055 return;
13056 }
13057 function _adler32(i6, i4, i5) {
13058 i6 = i6 | 0;
13059 i4 = i4 | 0;
13060 i5 = i5 | 0;
13061 var i1 = 0, i2 = 0, i3 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0;
13062 i1 = STACKTOP;
13063 i3 = i6 >>> 16;
13064 i6 = i6 & 65535;
13065 if ((i5 | 0) == 1) {
13066 i2 = (HEAPU8[i4] | 0) + i6 | 0;
13067 i2 = i2 >>> 0 > 65520 ? i2 + -65521 | 0 : i2;
13068 i3 = i2 + i3 | 0;
13069 i8 = (i3 >>> 0 > 65520 ? i3 + 15 | 0 : i3) << 16 | i2;
13070 STACKTOP = i1;
13071 return i8 | 0;
13072 }
13073 if ((i4 | 0) == 0) {
13074 i8 = 1;
13075 STACKTOP = i1;
13076 return i8 | 0;
13077 }
13078 if (i5 >>> 0 < 16) {
13079 if ((i5 | 0) != 0) {
13080 while (1) {
13081 i5 = i5 + -1 | 0;
13082 i6 = (HEAPU8[i4] | 0) + i6 | 0;
13083 i3 = i6 + i3 | 0;
13084 if ((i5 | 0) == 0) {
13085 break;
13086 } else {
13087 i4 = i4 + 1 | 0;
13088 }
13089 }
13090 }
13091 i8 = ((i3 >>> 0) % 65521 | 0) << 16 | (i6 >>> 0 > 65520 ? i6 + -65521 | 0 : i6 );
13092 STACKTOP = i1;
13093 return i8 | 0;
13094 }
13095 if (i5 >>> 0 > 5551) {
13096 do {
13097 i5 = i5 + -5552 | 0;
13098 i7 = i4;
13099 i8 = 347;
13100 while (1) {
13101 i23 = (HEAPU8[i7] | 0) + i6 | 0;
13102 i22 = i23 + (HEAPU8[i7 + 1 | 0] | 0) | 0;
13103 i21 = i22 + (HEAPU8[i7 + 2 | 0] | 0) | 0;
13104 i20 = i21 + (HEAPU8[i7 + 3 | 0] | 0) | 0;
13105 i19 = i20 + (HEAPU8[i7 + 4 | 0] | 0) | 0;
13106 i18 = i19 + (HEAPU8[i7 + 5 | 0] | 0) | 0;
13107 i17 = i18 + (HEAPU8[i7 + 6 | 0] | 0) | 0;
13108 i16 = i17 + (HEAPU8[i7 + 7 | 0] | 0) | 0;
13109 i15 = i16 + (HEAPU8[i7 + 8 | 0] | 0) | 0;
13110 i14 = i15 + (HEAPU8[i7 + 9 | 0] | 0) | 0;
13111 i13 = i14 + (HEAPU8[i7 + 10 | 0] | 0) | 0;
13112 i12 = i13 + (HEAPU8[i7 + 11 | 0] | 0) | 0;
13113 i11 = i12 + (HEAPU8[i7 + 12 | 0] | 0) | 0;
13114 i10 = i11 + (HEAPU8[i7 + 13 | 0] | 0) | 0;
13115 i9 = i10 + (HEAPU8[i7 + 14 | 0] | 0) | 0;
13116 i6 = i9 + (HEAPU8[i7 + 15 | 0] | 0) | 0;
13117 i3 = i23 + i3 + i22 + i21 + i20 + i19 + i18 + i17 + i16 + i15 + i14 + i13 + i12 + i11 + i10 + i9 + i6 | 0;
13118 i8 = i8 + -1 | 0;
13119 if ((i8 | 0) == 0) {
13120 break;
13121 } else {
13122 i7 = i7 + 16 | 0;
13123 }
13124 }
13125 i4 = i4 + 5552 | 0;
13126 i6 = (i6 >>> 0) % 65521 | 0;
13127 i3 = (i3 >>> 0) % 65521 | 0;
13128 } while (i5 >>> 0 > 5551);
13129 if ((i5 | 0) != 0) {
13130 if (i5 >>> 0 > 15) {
13131 i2 = 15;
13132 } else {
13133 i2 = 16;
13134 }
13135 }
13136 } else {
13137 i2 = 15;
13138 }
13139 if ((i2 | 0) == 15) {
13140 while (1) {
13141 i5 = i5 + -16 | 0;
13142 i9 = (HEAPU8[i4] | 0) + i6 | 0;
13143 i10 = i9 + (HEAPU8[i4 + 1 | 0] | 0) | 0;
13144 i11 = i10 + (HEAPU8[i4 + 2 | 0] | 0) | 0;
13145 i12 = i11 + (HEAPU8[i4 + 3 | 0] | 0) | 0;
13146 i13 = i12 + (HEAPU8[i4 + 4 | 0] | 0) | 0;
13147 i14 = i13 + (HEAPU8[i4 + 5 | 0] | 0) | 0;
13148 i15 = i14 + (HEAPU8[i4 + 6 | 0] | 0) | 0;
13149 i16 = i15 + (HEAPU8[i4 + 7 | 0] | 0) | 0;
13150 i17 = i16 + (HEAPU8[i4 + 8 | 0] | 0) | 0;
13151 i18 = i17 + (HEAPU8[i4 + 9 | 0] | 0) | 0;
13152 i19 = i18 + (HEAPU8[i4 + 10 | 0] | 0) | 0;
13153 i20 = i19 + (HEAPU8[i4 + 11 | 0] | 0) | 0;
13154 i21 = i20 + (HEAPU8[i4 + 12 | 0] | 0) | 0;
13155 i22 = i21 + (HEAPU8[i4 + 13 | 0] | 0) | 0;
13156 i23 = i22 + (HEAPU8[i4 + 14 | 0] | 0) | 0;
13157 i6 = i23 + (HEAPU8[i4 + 15 | 0] | 0) | 0;
13158 i3 = i9 + i3 + i10 + i11 + i12 + i13 + i14 + i15 + i16 + i17 + i18 + i19 + i2 0 + i21 + i22 + i23 + i6 | 0;
13159 i4 = i4 + 16 | 0;
13160 if (!(i5 >>> 0 > 15)) {
13161 break;
13162 } else {
13163 i2 = 15;
13164 }
13165 }
13166 if ((i5 | 0) == 0) {
13167 i2 = 17;
13168 } else {
13169 i2 = 16;
13170 }
13171 }
13172 if ((i2 | 0) == 16) {
13173 while (1) {
13174 i5 = i5 + -1 | 0;
13175 i6 = (HEAPU8[i4] | 0) + i6 | 0;
13176 i3 = i6 + i3 | 0;
13177 if ((i5 | 0) == 0) {
13178 i2 = 17;
13179 break;
13180 } else {
13181 i4 = i4 + 1 | 0;
13182 i2 = 16;
13183 }
13184 }
13185 }
13186 if ((i2 | 0) == 17) {
13187 i6 = (i6 >>> 0) % 65521 | 0;
13188 i3 = (i3 >>> 0) % 65521 | 0;
13189 }
13190 i23 = i3 << 16 | i6;
13191 STACKTOP = i1;
13192 return i23 | 0;
13193 }
13194 function _crc32(i4, i2, i3) {
13195 i4 = i4 | 0;
13196 i2 = i2 | 0;
13197 i3 = i3 | 0;
13198 var i1 = 0, i5 = 0;
13199 i1 = STACKTOP;
13200 if ((i2 | 0) == 0) {
13201 i5 = 0;
13202 STACKTOP = i1;
13203 return i5 | 0;
13204 }
13205 i4 = ~i4;
13206 L4 : do {
13207 if ((i3 | 0) != 0) {
13208 while (1) {
13209 if ((i2 & 3 | 0) == 0) {
13210 break;
13211 }
13212 i4 = HEAP32[3192 + (((HEAPU8[i2] | 0) ^ i4 & 255) << 2) >> 2] ^ i4 >>> 8;
13213 i3 = i3 + -1 | 0;
13214 if ((i3 | 0) == 0) {
13215 break L4;
13216 } else {
13217 i2 = i2 + 1 | 0;
13218 }
13219 }
13220 if (i3 >>> 0 > 31) {
13221 while (1) {
13222 i4 = HEAP32[i2 >> 2] ^ i4;
13223 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 4 >> 2];
13224 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 8 >> 2];
13225 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 12 >> 2];
13226 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 16 >> 2];
13227 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 20 >> 2];
13228 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 24 >> 2];
13229 i5 = i2 + 32 | 0;
13230 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 28 >> 2];
13231 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2];
13232 i3 = i3 + -32 | 0;
13233 if (i3 >>> 0 > 31) {
13234 i2 = i5;
13235 } else {
13236 i2 = i5;
13237 break;
13238 }
13239 }
13240 }
13241 if (i3 >>> 0 > 3) {
13242 while (1) {
13243 i5 = i2 + 4 | 0;
13244 i4 = HEAP32[i2 >> 2] ^ i4;
13245 i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255 ) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2];
13246 i3 = i3 + -4 | 0;
13247 if (i3 >>> 0 > 3) {
13248 i2 = i5;
13249 } else {
13250 i2 = i5;
13251 break;
13252 }
13253 }
13254 }
13255 if ((i3 | 0) != 0) {
13256 while (1) {
13257 i4 = HEAP32[3192 + (((HEAPU8[i2] | 0) ^ i4 & 255) << 2) >> 2] ^ i4 >>> 8;
13258 i3 = i3 + -1 | 0;
13259 if ((i3 | 0) == 0) {
13260 break;
13261 } else {
13262 i2 = i2 + 1 | 0;
13263 }
13264 }
13265 }
13266 }
13267 } while (0);
13268 i5 = ~i4;
13269 STACKTOP = i1;
13270 return i5 | 0;
13271 }
13272 function _deflateInit2_(i3, i7, i8, i10, i4, i1, i5, i6) {
13273 i3 = i3 | 0;
13274 i7 = i7 | 0;
13275 i8 = i8 | 0;
13276 i10 = i10 | 0;
13277 i4 = i4 | 0;
13278 i1 = i1 | 0;
13279 i5 = i5 | 0;
13280 i6 = i6 | 0;
13281 var i2 = 0, i9 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0;
13282 i2 = STACKTOP;
13283 if ((i5 | 0) == 0) {
13284 i12 = -6;
13285 STACKTOP = i2;
13286 return i12 | 0;
13287 }
13288 if (!((HEAP8[i5] | 0) == 49 & (i6 | 0) == 56)) {
13289 i12 = -6;
13290 STACKTOP = i2;
13291 return i12 | 0;
13292 }
13293 if ((i3 | 0) == 0) {
13294 i12 = -2;
13295 STACKTOP = i2;
13296 return i12 | 0;
13297 }
13298 i5 = i3 + 24 | 0;
13299 HEAP32[i5 >> 2] = 0;
13300 i6 = i3 + 32 | 0;
13301 i9 = HEAP32[i6 >> 2] | 0;
13302 if ((i9 | 0) == 0) {
13303 HEAP32[i6 >> 2] = 1;
13304 HEAP32[i3 + 40 >> 2] = 0;
13305 i9 = 1;
13306 }
13307 i11 = i3 + 36 | 0;
13308 if ((HEAP32[i11 >> 2] | 0) == 0) {
13309 HEAP32[i11 >> 2] = 1;
13310 }
13311 i7 = (i7 | 0) == -1 ? 6 : i7;
13312 if ((i10 | 0) < 0) {
13313 i10 = 0 - i10 | 0;
13314 i11 = 0;
13315 } else {
13316 i11 = (i10 | 0) > 15;
13317 i10 = i11 ? i10 + -16 | 0 : i10;
13318 i11 = i11 ? 2 : 1;
13319 }
13320 if (!((i4 + -1 | 0) >>> 0 < 9 & (i8 | 0) == 8)) {
13321 i12 = -2;
13322 STACKTOP = i2;
13323 return i12 | 0;
13324 }
13325 if ((i10 + -8 | 0) >>> 0 > 7 | i7 >>> 0 > 9 | i1 >>> 0 > 4) {
13326 i12 = -2;
13327 STACKTOP = i2;
13328 return i12 | 0;
13329 }
13330 i12 = (i10 | 0) == 8 ? 9 : i10;
13331 i10 = i3 + 40 | 0;
13332 i8 = FUNCTION_TABLE_iiii[i9 & 1](HEAP32[i10 >> 2] | 0, 1, 5828) | 0;
13333 if ((i8 | 0) == 0) {
13334 i12 = -4;
13335 STACKTOP = i2;
13336 return i12 | 0;
13337 }
13338 HEAP32[i3 + 28 >> 2] = i8;
13339 HEAP32[i8 >> 2] = i3;
13340 HEAP32[i8 + 24 >> 2] = i11;
13341 HEAP32[i8 + 28 >> 2] = 0;
13342 HEAP32[i8 + 48 >> 2] = i12;
13343 i14 = 1 << i12;
13344 i11 = i8 + 44 | 0;
13345 HEAP32[i11 >> 2] = i14;
13346 HEAP32[i8 + 52 >> 2] = i14 + -1;
13347 i12 = i4 + 7 | 0;
13348 HEAP32[i8 + 80 >> 2] = i12;
13349 i12 = 1 << i12;
13350 i13 = i8 + 76 | 0;
13351 HEAP32[i13 >> 2] = i12;
13352 HEAP32[i8 + 84 >> 2] = i12 + -1;
13353 HEAP32[i8 + 88 >> 2] = ((i4 + 9 | 0) >>> 0) / 3 | 0;
13354 i12 = i8 + 56 | 0;
13355 HEAP32[i12 >> 2] = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, i14, 2) | 0;
13356 i14 = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, HEAP32[i11 >> 2] | 0, 2) | 0;
13357 i9 = i8 + 64 | 0;
13358 HEAP32[i9 >> 2] = i14;
13359 _memset(i14 | 0, 0, HEAP32[i11 >> 2] << 1 | 0) | 0;
13360 i11 = i8 + 68 | 0;
13361 HEAP32[i11 >> 2] = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, HEAP32[i13 >> 2] | 0, 2) | 0;
13362 HEAP32[i8 + 5824 >> 2] = 0;
13363 i4 = 1 << i4 + 6;
13364 i13 = i8 + 5788 | 0;
13365 HEAP32[i13 >> 2] = i4;
13366 i4 = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, i4, 4) | 0;
13367 HEAP32[i8 + 8 >> 2] = i4;
13368 i6 = HEAP32[i13 >> 2] | 0;
13369 HEAP32[i8 + 12 >> 2] = i6 << 2;
13370 if (((HEAP32[i12 >> 2] | 0) != 0 ? (HEAP32[i9 >> 2] | 0) != 0 : 0) ? !((HEAP32[ i11 >> 2] | 0) == 0 | (i4 | 0) == 0) : 0) {
13371 HEAP32[i8 + 5796 >> 2] = i4 + (i6 >>> 1 << 1);
13372 HEAP32[i8 + 5784 >> 2] = i4 + (i6 * 3 | 0);
13373 HEAP32[i8 + 132 >> 2] = i7;
13374 HEAP32[i8 + 136 >> 2] = i1;
13375 HEAP8[i8 + 36 | 0] = 8;
13376 i14 = _deflateReset(i3) | 0;
13377 STACKTOP = i2;
13378 return i14 | 0;
13379 }
13380 HEAP32[i8 + 4 >> 2] = 666;
13381 HEAP32[i5 >> 2] = HEAP32[3176 >> 2];
13382 _deflateEnd(i3) | 0;
13383 i14 = -4;
13384 STACKTOP = i2;
13385 return i14 | 0;
13386 }
13387 function _longest_match(i19, i16) {
13388 i19 = i19 | 0;
13389 i16 = i16 | 0;
13390 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i17 = 0, i18 = 0, i20 = 0, i2 1 = 0, i22 = 0, i23 = 0;
13391 i1 = STACKTOP;
13392 i18 = HEAP32[i19 + 124 >> 2] | 0;
13393 i3 = HEAP32[i19 + 56 >> 2] | 0;
13394 i5 = HEAP32[i19 + 108 >> 2] | 0;
13395 i4 = i3 + i5 | 0;
13396 i20 = HEAP32[i19 + 120 >> 2] | 0;
13397 i10 = HEAP32[i19 + 144 >> 2] | 0;
13398 i2 = (HEAP32[i19 + 44 >> 2] | 0) + -262 | 0;
13399 i8 = i5 >>> 0 > i2 >>> 0 ? i5 - i2 | 0 : 0;
13400 i6 = HEAP32[i19 + 64 >> 2] | 0;
13401 i7 = HEAP32[i19 + 52 >> 2] | 0;
13402 i9 = i3 + (i5 + 258) | 0;
13403 i2 = HEAP32[i19 + 116 >> 2] | 0;
13404 i12 = i10 >>> 0 > i2 >>> 0 ? i2 : i10;
13405 i11 = i19 + 112 | 0;
13406 i15 = i3 + (i5 + 1) | 0;
13407 i14 = i3 + (i5 + 2) | 0;
13408 i13 = i9;
13409 i10 = i5 + 257 | 0;
13410 i17 = i20;
13411 i18 = i20 >>> 0 < (HEAP32[i19 + 140 >> 2] | 0) >>> 0 ? i18 : i18 >>> 2;
13412 i19 = HEAP8[i3 + (i20 + i5) | 0] | 0;
13413 i20 = HEAP8[i3 + (i5 + -1 + i20) | 0] | 0;
13414 while (1) {
13415 i21 = i3 + i16 | 0;
13416 if ((((HEAP8[i3 + (i16 + i17) | 0] | 0) == i19 << 24 >> 24 ? (HEAP8[i3 + (i17 + -1 + i16) | 0] | 0) == i20 << 24 >> 24 : 0) ? (HEAP8[i21] | 0) == (HEAP8[i4] | 0) : 0) ? (HEAP8[i3 + (i16 + 1) | 0] | 0) == (HEAP8[i15] | 0) : 0) {
13417 i21 = i3 + (i16 + 2) | 0;
13418 i22 = i14;
13419 do {
13420 i23 = i22 + 1 | 0;
13421 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 1 | 0] | 0)) {
13422 i22 = i23;
13423 break;
13424 }
13425 i23 = i22 + 2 | 0;
13426 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 2 | 0] | 0)) {
13427 i22 = i23;
13428 break;
13429 }
13430 i23 = i22 + 3 | 0;
13431 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 3 | 0] | 0)) {
13432 i22 = i23;
13433 break;
13434 }
13435 i23 = i22 + 4 | 0;
13436 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 4 | 0] | 0)) {
13437 i22 = i23;
13438 break;
13439 }
13440 i23 = i22 + 5 | 0;
13441 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 5 | 0] | 0)) {
13442 i22 = i23;
13443 break;
13444 }
13445 i23 = i22 + 6 | 0;
13446 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 6 | 0] | 0)) {
13447 i22 = i23;
13448 break;
13449 }
13450 i23 = i22 + 7 | 0;
13451 if ((HEAP8[i23] | 0) != (HEAP8[i21 + 7 | 0] | 0)) {
13452 i22 = i23;
13453 break;
13454 }
13455 i22 = i22 + 8 | 0;
13456 i21 = i21 + 8 | 0;
13457 } while ((HEAP8[i22] | 0) == (HEAP8[i21] | 0) & i22 >>> 0 < i9 >>> 0);
13458 i21 = i22 - i13 | 0;
13459 i22 = i21 + 258 | 0;
13460 if ((i22 | 0) > (i17 | 0)) {
13461 HEAP32[i11 >> 2] = i16;
13462 if ((i22 | 0) >= (i12 | 0)) {
13463 i17 = i22;
13464 i3 = 20;
13465 break;
13466 }
13467 i17 = i22;
13468 i19 = HEAP8[i3 + (i22 + i5) | 0] | 0;
13469 i20 = HEAP8[i3 + (i10 + i21) | 0] | 0;
13470 }
13471 }
13472 i16 = HEAPU16[i6 + ((i16 & i7) << 1) >> 1] | 0;
13473 if (!(i16 >>> 0 > i8 >>> 0)) {
13474 i3 = 20;
13475 break;
13476 }
13477 i18 = i18 + -1 | 0;
13478 if ((i18 | 0) == 0) {
13479 i3 = 20;
13480 break;
13481 }
13482 }
13483 if ((i3 | 0) == 20) {
13484 STACKTOP = i1;
13485 return (i17 >>> 0 > i2 >>> 0 ? i2 : i17) | 0;
13486 }
13487 return 0;
13488 }
13489 function __tr_stored_block(i3, i2, i5, i6) {
13490 i3 = i3 | 0;
13491 i2 = i2 | 0;
13492 i5 = i5 | 0;
13493 i6 = i6 | 0;
13494 var i1 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
13495 i1 = STACKTOP;
13496 i4 = i3 + 5820 | 0;
13497 i7 = HEAP32[i4 >> 2] | 0;
13498 i9 = i6 & 65535;
13499 i6 = i3 + 5816 | 0;
13500 i8 = HEAPU16[i6 >> 1] | 0 | i9 << i7;
13501 HEAP16[i6 >> 1] = i8;
13502 if ((i7 | 0) > 13) {
13503 i11 = i3 + 20 | 0;
13504 i7 = HEAP32[i11 >> 2] | 0;
13505 HEAP32[i11 >> 2] = i7 + 1;
13506 i10 = i3 + 8 | 0;
13507 HEAP8[(HEAP32[i10 >> 2] | 0) + i7 | 0] = i8;
13508 i8 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
13509 i7 = HEAP32[i11 >> 2] | 0;
13510 HEAP32[i11 >> 2] = i7 + 1;
13511 HEAP8[(HEAP32[i10 >> 2] | 0) + i7 | 0] = i8;
13512 i7 = HEAP32[i4 >> 2] | 0;
13513 i8 = i9 >>> (16 - i7 | 0);
13514 HEAP16[i6 >> 1] = i8;
13515 i7 = i7 + -13 | 0;
13516 } else {
13517 i7 = i7 + 3 | 0;
13518 }
13519 i8 = i8 & 255;
13520 HEAP32[i4 >> 2] = i7;
13521 do {
13522 if ((i7 | 0) <= 8) {
13523 i9 = i3 + 20 | 0;
13524 if ((i7 | 0) > 0) {
13525 i7 = HEAP32[i9 >> 2] | 0;
13526 HEAP32[i9 >> 2] = i7 + 1;
13527 i11 = i3 + 8 | 0;
13528 HEAP8[(HEAP32[i11 >> 2] | 0) + i7 | 0] = i8;
13529 i7 = i9;
13530 i8 = i11;
13531 break;
13532 } else {
13533 i7 = i9;
13534 i8 = i3 + 8 | 0;
13535 break;
13536 }
13537 } else {
13538 i7 = i3 + 20 | 0;
13539 i10 = HEAP32[i7 >> 2] | 0;
13540 HEAP32[i7 >> 2] = i10 + 1;
13541 i11 = i3 + 8 | 0;
13542 HEAP8[(HEAP32[i11 >> 2] | 0) + i10 | 0] = i8;
13543 i10 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
13544 i8 = HEAP32[i7 >> 2] | 0;
13545 HEAP32[i7 >> 2] = i8 + 1;
13546 HEAP8[(HEAP32[i11 >> 2] | 0) + i8 | 0] = i10;
13547 i8 = i11;
13548 }
13549 } while (0);
13550 HEAP16[i6 >> 1] = 0;
13551 HEAP32[i4 >> 2] = 0;
13552 HEAP32[i3 + 5812 >> 2] = 8;
13553 i10 = HEAP32[i7 >> 2] | 0;
13554 HEAP32[i7 >> 2] = i10 + 1;
13555 HEAP8[(HEAP32[i8 >> 2] | 0) + i10 | 0] = i5;
13556 i10 = HEAP32[i7 >> 2] | 0;
13557 HEAP32[i7 >> 2] = i10 + 1;
13558 HEAP8[(HEAP32[i8 >> 2] | 0) + i10 | 0] = i5 >>> 8;
13559 i10 = i5 & 65535 ^ 65535;
13560 i11 = HEAP32[i7 >> 2] | 0;
13561 HEAP32[i7 >> 2] = i11 + 1;
13562 HEAP8[(HEAP32[i8 >> 2] | 0) + i11 | 0] = i10;
13563 i11 = HEAP32[i7 >> 2] | 0;
13564 HEAP32[i7 >> 2] = i11 + 1;
13565 HEAP8[(HEAP32[i8 >> 2] | 0) + i11 | 0] = i10 >>> 8;
13566 if ((i5 | 0) == 0) {
13567 STACKTOP = i1;
13568 return;
13569 }
13570 while (1) {
13571 i5 = i5 + -1 | 0;
13572 i10 = HEAP8[i2] | 0;
13573 i11 = HEAP32[i7 >> 2] | 0;
13574 HEAP32[i7 >> 2] = i11 + 1;
13575 HEAP8[(HEAP32[i8 >> 2] | 0) + i11 | 0] = i10;
13576 if ((i5 | 0) == 0) {
13577 break;
13578 } else {
13579 i2 = i2 + 1 | 0;
13580 }
13581 }
13582 STACKTOP = i1;
13583 return;
13584 }
13585 function _inflateInit_(i1, i3, i4) {
13586 i1 = i1 | 0;
13587 i3 = i3 | 0;
13588 i4 = i4 | 0;
13589 var i2 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
13590 i2 = STACKTOP;
13591 if ((i3 | 0) == 0) {
13592 i11 = -6;
13593 STACKTOP = i2;
13594 return i11 | 0;
13595 }
13596 if (!((HEAP8[i3] | 0) == 49 & (i4 | 0) == 56)) {
13597 i11 = -6;
13598 STACKTOP = i2;
13599 return i11 | 0;
13600 }
13601 if ((i1 | 0) == 0) {
13602 i11 = -2;
13603 STACKTOP = i2;
13604 return i11 | 0;
13605 }
13606 i3 = i1 + 24 | 0;
13607 HEAP32[i3 >> 2] = 0;
13608 i4 = i1 + 32 | 0;
13609 i6 = HEAP32[i4 >> 2] | 0;
13610 if ((i6 | 0) == 0) {
13611 HEAP32[i4 >> 2] = 1;
13612 HEAP32[i1 + 40 >> 2] = 0;
13613 i6 = 1;
13614 }
13615 i4 = i1 + 36 | 0;
13616 if ((HEAP32[i4 >> 2] | 0) == 0) {
13617 HEAP32[i4 >> 2] = 1;
13618 }
13619 i5 = i1 + 40 | 0;
13620 i8 = FUNCTION_TABLE_iiii[i6 & 1](HEAP32[i5 >> 2] | 0, 1, 7116) | 0;
13621 if ((i8 | 0) == 0) {
13622 i11 = -4;
13623 STACKTOP = i2;
13624 return i11 | 0;
13625 }
13626 i6 = i1 + 28 | 0;
13627 HEAP32[i6 >> 2] = i8;
13628 HEAP32[i8 + 52 >> 2] = 0;
13629 i9 = HEAP32[i6 >> 2] | 0;
13630 do {
13631 if ((i9 | 0) != 0) {
13632 i10 = i9 + 52 | 0;
13633 i11 = HEAP32[i10 >> 2] | 0;
13634 i7 = i9 + 36 | 0;
13635 if ((i11 | 0) != 0) {
13636 if ((HEAP32[i7 >> 2] | 0) == 15) {
13637 i10 = i9;
13638 } else {
13639 FUNCTION_TABLE_vii[HEAP32[i4 >> 2] & 1](HEAP32[i5 >> 2] | 0, i11);
13640 HEAP32[i10 >> 2] = 0;
13641 i10 = HEAP32[i6 >> 2] | 0;
13642 }
13643 HEAP32[i9 + 8 >> 2] = 1;
13644 HEAP32[i7 >> 2] = 15;
13645 if ((i10 | 0) == 0) {
13646 break;
13647 } else {
13648 i9 = i10;
13649 }
13650 } else {
13651 HEAP32[i9 + 8 >> 2] = 1;
13652 HEAP32[i7 >> 2] = 15;
13653 }
13654 HEAP32[i9 + 28 >> 2] = 0;
13655 HEAP32[i1 + 20 >> 2] = 0;
13656 HEAP32[i1 + 8 >> 2] = 0;
13657 HEAP32[i3 >> 2] = 0;
13658 HEAP32[i1 + 48 >> 2] = 1;
13659 HEAP32[i9 >> 2] = 0;
13660 HEAP32[i9 + 4 >> 2] = 0;
13661 HEAP32[i9 + 12 >> 2] = 0;
13662 HEAP32[i9 + 20 >> 2] = 32768;
13663 HEAP32[i9 + 32 >> 2] = 0;
13664 HEAP32[i9 + 40 >> 2] = 0;
13665 HEAP32[i9 + 44 >> 2] = 0;
13666 HEAP32[i9 + 48 >> 2] = 0;
13667 HEAP32[i9 + 56 >> 2] = 0;
13668 HEAP32[i9 + 60 >> 2] = 0;
13669 i11 = i9 + 1328 | 0;
13670 HEAP32[i9 + 108 >> 2] = i11;
13671 HEAP32[i9 + 80 >> 2] = i11;
13672 HEAP32[i9 + 76 >> 2] = i11;
13673 HEAP32[i9 + 7104 >> 2] = 1;
13674 HEAP32[i9 + 7108 >> 2] = -1;
13675 i11 = 0;
13676 STACKTOP = i2;
13677 return i11 | 0;
13678 }
13679 } while (0);
13680 FUNCTION_TABLE_vii[HEAP32[i4 >> 2] & 1](HEAP32[i5 >> 2] | 0, i8);
13681 HEAP32[i6 >> 2] = 0;
13682 i11 = -2;
13683 STACKTOP = i2;
13684 return i11 | 0;
13685 }
13686 function _init_block(i1) {
13687 i1 = i1 | 0;
13688 var i2 = 0, i3 = 0;
13689 i2 = STACKTOP;
13690 i3 = 0;
13691 do {
13692 HEAP16[i1 + (i3 << 2) + 148 >> 1] = 0;
13693 i3 = i3 + 1 | 0;
13694 } while ((i3 | 0) != 286);
13695 HEAP16[i1 + 2440 >> 1] = 0;
13696 HEAP16[i1 + 2444 >> 1] = 0;
13697 HEAP16[i1 + 2448 >> 1] = 0;
13698 HEAP16[i1 + 2452 >> 1] = 0;
13699 HEAP16[i1 + 2456 >> 1] = 0;
13700 HEAP16[i1 + 2460 >> 1] = 0;
13701 HEAP16[i1 + 2464 >> 1] = 0;
13702 HEAP16[i1 + 2468 >> 1] = 0;
13703 HEAP16[i1 + 2472 >> 1] = 0;
13704 HEAP16[i1 + 2476 >> 1] = 0;
13705 HEAP16[i1 + 2480 >> 1] = 0;
13706 HEAP16[i1 + 2484 >> 1] = 0;
13707 HEAP16[i1 + 2488 >> 1] = 0;
13708 HEAP16[i1 + 2492 >> 1] = 0;
13709 HEAP16[i1 + 2496 >> 1] = 0;
13710 HEAP16[i1 + 2500 >> 1] = 0;
13711 HEAP16[i1 + 2504 >> 1] = 0;
13712 HEAP16[i1 + 2508 >> 1] = 0;
13713 HEAP16[i1 + 2512 >> 1] = 0;
13714 HEAP16[i1 + 2516 >> 1] = 0;
13715 HEAP16[i1 + 2520 >> 1] = 0;
13716 HEAP16[i1 + 2524 >> 1] = 0;
13717 HEAP16[i1 + 2528 >> 1] = 0;
13718 HEAP16[i1 + 2532 >> 1] = 0;
13719 HEAP16[i1 + 2536 >> 1] = 0;
13720 HEAP16[i1 + 2540 >> 1] = 0;
13721 HEAP16[i1 + 2544 >> 1] = 0;
13722 HEAP16[i1 + 2548 >> 1] = 0;
13723 HEAP16[i1 + 2552 >> 1] = 0;
13724 HEAP16[i1 + 2556 >> 1] = 0;
13725 HEAP16[i1 + 2684 >> 1] = 0;
13726 HEAP16[i1 + 2688 >> 1] = 0;
13727 HEAP16[i1 + 2692 >> 1] = 0;
13728 HEAP16[i1 + 2696 >> 1] = 0;
13729 HEAP16[i1 + 2700 >> 1] = 0;
13730 HEAP16[i1 + 2704 >> 1] = 0;
13731 HEAP16[i1 + 2708 >> 1] = 0;
13732 HEAP16[i1 + 2712 >> 1] = 0;
13733 HEAP16[i1 + 2716 >> 1] = 0;
13734 HEAP16[i1 + 2720 >> 1] = 0;
13735 HEAP16[i1 + 2724 >> 1] = 0;
13736 HEAP16[i1 + 2728 >> 1] = 0;
13737 HEAP16[i1 + 2732 >> 1] = 0;
13738 HEAP16[i1 + 2736 >> 1] = 0;
13739 HEAP16[i1 + 2740 >> 1] = 0;
13740 HEAP16[i1 + 2744 >> 1] = 0;
13741 HEAP16[i1 + 2748 >> 1] = 0;
13742 HEAP16[i1 + 2752 >> 1] = 0;
13743 HEAP16[i1 + 2756 >> 1] = 0;
13744 HEAP16[i1 + 1172 >> 1] = 1;
13745 HEAP32[i1 + 5804 >> 2] = 0;
13746 HEAP32[i1 + 5800 >> 2] = 0;
13747 HEAP32[i1 + 5808 >> 2] = 0;
13748 HEAP32[i1 + 5792 >> 2] = 0;
13749 STACKTOP = i2;
13750 return;
13751 }
13752 function _deflateReset(i1) {
13753 i1 = i1 | 0;
13754 var i2 = 0, i3 = 0, i4 = 0, i5 = 0;
13755 i2 = STACKTOP;
13756 if ((i1 | 0) == 0) {
13757 i5 = -2;
13758 STACKTOP = i2;
13759 return i5 | 0;
13760 }
13761 i3 = HEAP32[i1 + 28 >> 2] | 0;
13762 if ((i3 | 0) == 0) {
13763 i5 = -2;
13764 STACKTOP = i2;
13765 return i5 | 0;
13766 }
13767 if ((HEAP32[i1 + 32 >> 2] | 0) == 0) {
13768 i5 = -2;
13769 STACKTOP = i2;
13770 return i5 | 0;
13771 }
13772 if ((HEAP32[i1 + 36 >> 2] | 0) == 0) {
13773 i5 = -2;
13774 STACKTOP = i2;
13775 return i5 | 0;
13776 }
13777 HEAP32[i1 + 20 >> 2] = 0;
13778 HEAP32[i1 + 8 >> 2] = 0;
13779 HEAP32[i1 + 24 >> 2] = 0;
13780 HEAP32[i1 + 44 >> 2] = 2;
13781 HEAP32[i3 + 20 >> 2] = 0;
13782 HEAP32[i3 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
13783 i4 = i3 + 24 | 0;
13784 i5 = HEAP32[i4 >> 2] | 0;
13785 if ((i5 | 0) < 0) {
13786 i5 = 0 - i5 | 0;
13787 HEAP32[i4 >> 2] = i5;
13788 }
13789 HEAP32[i3 + 4 >> 2] = (i5 | 0) != 0 ? 42 : 113;
13790 if ((i5 | 0) == 2) {
13791 i4 = _crc32(0, 0, 0) | 0;
13792 } else {
13793 i4 = _adler32(0, 0, 0) | 0;
13794 }
13795 HEAP32[i1 + 48 >> 2] = i4;
13796 HEAP32[i3 + 40 >> 2] = 0;
13797 __tr_init(i3);
13798 HEAP32[i3 + 60 >> 2] = HEAP32[i3 + 44 >> 2] << 1;
13799 i5 = HEAP32[i3 + 76 >> 2] | 0;
13800 i4 = HEAP32[i3 + 68 >> 2] | 0;
13801 HEAP16[i4 + (i5 + -1 << 1) >> 1] = 0;
13802 _memset(i4 | 0, 0, (i5 << 1) + -2 | 0) | 0;
13803 i5 = HEAP32[i3 + 132 >> 2] | 0;
13804 HEAP32[i3 + 128 >> 2] = HEAPU16[178 + (i5 * 12 | 0) >> 1] | 0;
13805 HEAP32[i3 + 140 >> 2] = HEAPU16[176 + (i5 * 12 | 0) >> 1] | 0;
13806 HEAP32[i3 + 144 >> 2] = HEAPU16[180 + (i5 * 12 | 0) >> 1] | 0;
13807 HEAP32[i3 + 124 >> 2] = HEAPU16[182 + (i5 * 12 | 0) >> 1] | 0;
13808 HEAP32[i3 + 108 >> 2] = 0;
13809 HEAP32[i3 + 92 >> 2] = 0;
13810 HEAP32[i3 + 116 >> 2] = 0;
13811 HEAP32[i3 + 120 >> 2] = 2;
13812 HEAP32[i3 + 96 >> 2] = 2;
13813 HEAP32[i3 + 112 >> 2] = 0;
13814 HEAP32[i3 + 104 >> 2] = 0;
13815 HEAP32[i3 + 72 >> 2] = 0;
13816 i5 = 0;
13817 STACKTOP = i2;
13818 return i5 | 0;
13819 }
13820 function _updatewindow(i6, i4) {
13821 i6 = i6 | 0;
13822 i4 = i4 | 0;
13823 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
13824 i1 = STACKTOP;
13825 i2 = HEAP32[i6 + 28 >> 2] | 0;
13826 i3 = i2 + 52 | 0;
13827 i8 = HEAP32[i3 >> 2] | 0;
13828 if ((i8 | 0) == 0) {
13829 i8 = FUNCTION_TABLE_iiii[HEAP32[i6 + 32 >> 2] & 1](HEAP32[i6 + 40 >> 2] | 0, 1 << HEAP32[i2 + 36 >> 2], 1) | 0;
13830 HEAP32[i3 >> 2] = i8;
13831 if ((i8 | 0) == 0) {
13832 i10 = 1;
13833 STACKTOP = i1;
13834 return i10 | 0;
13835 }
13836 }
13837 i5 = i2 + 40 | 0;
13838 i10 = HEAP32[i5 >> 2] | 0;
13839 if ((i10 | 0) == 0) {
13840 i10 = 1 << HEAP32[i2 + 36 >> 2];
13841 HEAP32[i5 >> 2] = i10;
13842 HEAP32[i2 + 48 >> 2] = 0;
13843 HEAP32[i2 + 44 >> 2] = 0;
13844 }
13845 i4 = i4 - (HEAP32[i6 + 16 >> 2] | 0) | 0;
13846 if (!(i4 >>> 0 < i10 >>> 0)) {
13847 _memcpy(i8 | 0, (HEAP32[i6 + 12 >> 2] | 0) + (0 - i10) | 0, i10 | 0) | 0;
13848 HEAP32[i2 + 48 >> 2] = 0;
13849 HEAP32[i2 + 44 >> 2] = HEAP32[i5 >> 2];
13850 i10 = 0;
13851 STACKTOP = i1;
13852 return i10 | 0;
13853 }
13854 i7 = i2 + 48 | 0;
13855 i9 = HEAP32[i7 >> 2] | 0;
13856 i10 = i10 - i9 | 0;
13857 i10 = i10 >>> 0 > i4 >>> 0 ? i4 : i10;
13858 i6 = i6 + 12 | 0;
13859 _memcpy(i8 + i9 | 0, (HEAP32[i6 >> 2] | 0) + (0 - i4) | 0, i10 | 0) | 0;
13860 i8 = i4 - i10 | 0;
13861 if ((i4 | 0) != (i10 | 0)) {
13862 _memcpy(HEAP32[i3 >> 2] | 0, (HEAP32[i6 >> 2] | 0) + (0 - i8) | 0, i8 | 0) | 0 ;
13863 HEAP32[i7 >> 2] = i8;
13864 HEAP32[i2 + 44 >> 2] = HEAP32[i5 >> 2];
13865 i10 = 0;
13866 STACKTOP = i1;
13867 return i10 | 0;
13868 }
13869 i6 = (HEAP32[i7 >> 2] | 0) + i4 | 0;
13870 i3 = HEAP32[i5 >> 2] | 0;
13871 HEAP32[i7 >> 2] = (i6 | 0) == (i3 | 0) ? 0 : i6;
13872 i5 = i2 + 44 | 0;
13873 i2 = HEAP32[i5 >> 2] | 0;
13874 if (!(i2 >>> 0 < i3 >>> 0)) {
13875 i10 = 0;
13876 STACKTOP = i1;
13877 return i10 | 0;
13878 }
13879 HEAP32[i5 >> 2] = i2 + i4;
13880 i10 = 0;
13881 STACKTOP = i1;
13882 return i10 | 0;
13883 }
13884 function _scan_tree(i1, i5, i6) {
13885 i1 = i1 | 0;
13886 i5 = i5 | 0;
13887 i6 = i6 | 0;
13888 var i2 = 0, i3 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
13889 i8 = STACKTOP;
13890 i10 = HEAP16[i5 + 2 >> 1] | 0;
13891 i9 = i10 << 16 >> 16 == 0;
13892 HEAP16[i5 + (i6 + 1 << 2) + 2 >> 1] = -1;
13893 i2 = i1 + 2752 | 0;
13894 i3 = i1 + 2756 | 0;
13895 i4 = i1 + 2748 | 0;
13896 i7 = i9 ? 138 : 7;
13897 i9 = i9 ? 3 : 4;
13898 i13 = 0;
13899 i11 = i10 & 65535;
13900 i12 = -1;
13901 L1 : while (1) {
13902 i14 = 0;
13903 do {
13904 if ((i13 | 0) > (i6 | 0)) {
13905 break L1;
13906 }
13907 i13 = i13 + 1 | 0;
13908 i16 = HEAP16[i5 + (i13 << 2) + 2 >> 1] | 0;
13909 i10 = i16 & 65535;
13910 i14 = i14 + 1 | 0;
13911 i15 = (i11 | 0) == (i10 | 0);
13912 } while ((i14 | 0) < (i7 | 0) & i15);
13913 do {
13914 if ((i14 | 0) >= (i9 | 0)) {
13915 if ((i11 | 0) == 0) {
13916 if ((i14 | 0) < 11) {
13917 HEAP16[i2 >> 1] = (HEAP16[i2 >> 1] | 0) + 1 << 16 >> 16;
13918 break;
13919 } else {
13920 HEAP16[i3 >> 1] = (HEAP16[i3 >> 1] | 0) + 1 << 16 >> 16;
13921 break;
13922 }
13923 } else {
13924 if ((i11 | 0) != (i12 | 0)) {
13925 i14 = i1 + (i11 << 2) + 2684 | 0;
13926 HEAP16[i14 >> 1] = (HEAP16[i14 >> 1] | 0) + 1 << 16 >> 16;
13927 }
13928 HEAP16[i4 >> 1] = (HEAP16[i4 >> 1] | 0) + 1 << 16 >> 16;
13929 break;
13930 }
13931 } else {
13932 i12 = i1 + (i11 << 2) + 2684 | 0;
13933 HEAP16[i12 >> 1] = (HEAPU16[i12 >> 1] | 0) + i14;
13934 }
13935 } while (0);
13936 if (i16 << 16 >> 16 == 0) {
13937 i12 = i11;
13938 i7 = 138;
13939 i9 = 3;
13940 i11 = i10;
13941 continue;
13942 }
13943 i12 = i11;
13944 i7 = i15 ? 6 : 7;
13945 i9 = i15 ? 3 : 4;
13946 i11 = i10;
13947 }
13948 STACKTOP = i8;
13949 return;
13950 }
13951 function _deflateEnd(i4) {
13952 i4 = i4 | 0;
13953 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0;
13954 i3 = STACKTOP;
13955 if ((i4 | 0) == 0) {
13956 i7 = -2;
13957 STACKTOP = i3;
13958 return i7 | 0;
13959 }
13960 i1 = i4 + 28 | 0;
13961 i6 = HEAP32[i1 >> 2] | 0;
13962 if ((i6 | 0) == 0) {
13963 i7 = -2;
13964 STACKTOP = i3;
13965 return i7 | 0;
13966 }
13967 i2 = HEAP32[i6 + 4 >> 2] | 0;
13968 switch (i2 | 0) {
13969 case 42:
13970 case 69:
13971 case 73:
13972 case 91:
13973 case 103:
13974 case 113:
13975 case 666:
13976 {
13977 break;
13978 }
13979 default:
13980 {
13981 i7 = -2;
13982 STACKTOP = i3;
13983 return i7 | 0;
13984 }
13985 }
13986 i5 = HEAP32[i6 + 8 >> 2] | 0;
13987 if ((i5 | 0) != 0) {
13988 FUNCTION_TABLE_vii[HEAP32[i4 + 36 >> 2] & 1](HEAP32[i4 + 40 >> 2] | 0, i5);
13989 i6 = HEAP32[i1 >> 2] | 0;
13990 }
13991 i5 = HEAP32[i6 + 68 >> 2] | 0;
13992 if ((i5 | 0) != 0) {
13993 FUNCTION_TABLE_vii[HEAP32[i4 + 36 >> 2] & 1](HEAP32[i4 + 40 >> 2] | 0, i5);
13994 i6 = HEAP32[i1 >> 2] | 0;
13995 }
13996 i5 = HEAP32[i6 + 64 >> 2] | 0;
13997 if ((i5 | 0) != 0) {
13998 FUNCTION_TABLE_vii[HEAP32[i4 + 36 >> 2] & 1](HEAP32[i4 + 40 >> 2] | 0, i5);
13999 i6 = HEAP32[i1 >> 2] | 0;
14000 }
14001 i7 = HEAP32[i6 + 56 >> 2] | 0;
14002 i5 = i4 + 36 | 0;
14003 if ((i7 | 0) == 0) {
14004 i4 = i4 + 40 | 0;
14005 } else {
14006 i4 = i4 + 40 | 0;
14007 FUNCTION_TABLE_vii[HEAP32[i5 >> 2] & 1](HEAP32[i4 >> 2] | 0, i7);
14008 i6 = HEAP32[i1 >> 2] | 0;
14009 }
14010 FUNCTION_TABLE_vii[HEAP32[i5 >> 2] & 1](HEAP32[i4 >> 2] | 0, i6);
14011 HEAP32[i1 >> 2] = 0;
14012 i7 = (i2 | 0) == 113 ? -3 : 0;
14013 STACKTOP = i3;
14014 return i7 | 0;
14015 }
14016 function _main(i4, i5) {
14017 i4 = i4 | 0;
14018 i5 = i5 | 0;
14019 var i1 = 0, i2 = 0, i3 = 0, i6 = 0;
14020 i1 = STACKTOP;
14021 STACKTOP = STACKTOP + 16 | 0;
14022 i2 = i1;
14023 L1 : do {
14024 if ((i4 | 0) > 1) {
14025 i4 = HEAP8[HEAP32[i5 + 4 >> 2] | 0] | 0;
14026 switch (i4 | 0) {
14027 case 50:
14028 {
14029 i2 = 250;
14030 break L1;
14031 }
14032 case 51:
14033 {
14034 i3 = 4;
14035 break L1;
14036 }
14037 case 52:
14038 {
14039 i2 = 2500;
14040 break L1;
14041 }
14042 case 53:
14043 {
14044 i2 = 5e3;
14045 break L1;
14046 }
14047 case 48:
14048 {
14049 i6 = 0;
14050 STACKTOP = i1;
14051 return i6 | 0;
14052 }
14053 case 49:
14054 {
14055 i2 = 60;
14056 break L1;
14057 }
14058 default:
14059 {
14060 HEAP32[i2 >> 2] = i4 + -48;
14061 _printf(144, i2 | 0) | 0;
14062 i6 = -1;
14063 STACKTOP = i1;
14064 return i6 | 0;
14065 }
14066 }
14067 } else {
14068 i3 = 4;
14069 }
14070 } while (0);
14071 if ((i3 | 0) == 4) {
14072 i2 = 500;
14073 }
14074 i3 = _malloc(1e5) | 0;
14075 i4 = 0;
14076 i6 = 0;
14077 i5 = 17;
14078 while (1) {
14079 do {
14080 if ((i6 | 0) <= 0) {
14081 if ((i4 & 7 | 0) == 0) {
14082 i6 = i4 & 31;
14083 i5 = 0;
14084 break;
14085 } else {
14086 i5 = (((Math_imul(i4, i4) | 0) >>> 0) % 6714 | 0) & 255;
14087 break;
14088 }
14089 } else {
14090 i6 = i6 + -1 | 0;
14091 }
14092 } while (0);
14093 HEAP8[i3 + i4 | 0] = i5;
14094 i4 = i4 + 1 | 0;
14095 if ((i4 | 0) == 1e5) {
14096 i4 = 0;
14097 break;
14098 }
14099 }
14100 do {
14101 _doit(i3, 1e5, i4);
14102 i4 = i4 + 1 | 0;
14103 } while ((i4 | 0) < (i2 | 0));
14104 _puts(160) | 0;
14105 i6 = 0;
14106 STACKTOP = i1;
14107 return i6 | 0;
14108 }
14109 function _doit(i6, i1, i7) {
14110 i6 = i6 | 0;
14111 i1 = i1 | 0;
14112 i7 = i7 | 0;
14113 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i8 = 0, i9 = 0;
14114 i5 = STACKTOP;
14115 STACKTOP = STACKTOP + 16 | 0;
14116 i4 = i5;
14117 i3 = i5 + 12 | 0;
14118 i2 = i5 + 8 | 0;
14119 i8 = _compressBound(i1) | 0;
14120 i9 = HEAP32[2] | 0;
14121 if ((i9 | 0) == 0) {
14122 i9 = _malloc(i8) | 0;
14123 HEAP32[2] = i9;
14124 }
14125 if ((HEAP32[4] | 0) == 0) {
14126 HEAP32[4] = _malloc(i1) | 0;
14127 }
14128 HEAP32[i3 >> 2] = i8;
14129 _compress(i9, i3, i6, i1) | 0;
14130 i7 = (i7 | 0) == 0;
14131 if (i7) {
14132 i9 = HEAP32[i3 >> 2] | 0;
14133 HEAP32[i4 >> 2] = i1;
14134 HEAP32[i4 + 4 >> 2] = i9;
14135 _printf(24, i4 | 0) | 0;
14136 }
14137 HEAP32[i2 >> 2] = i1;
14138 _uncompress(HEAP32[4] | 0, i2, HEAP32[2] | 0, HEAP32[i3 >> 2] | 0) | 0;
14139 if ((HEAP32[i2 >> 2] | 0) != (i1 | 0)) {
14140 ___assert_fail(40, 72, 24, 104);
14141 }
14142 if (!i7) {
14143 STACKTOP = i5;
14144 return;
14145 }
14146 if ((_strcmp(i6, HEAP32[4] | 0) | 0) == 0) {
14147 STACKTOP = i5;
14148 return;
14149 } else {
14150 ___assert_fail(112, 72, 25, 104);
14151 }
14152 }
14153 function _uncompress(i6, i1, i5, i7) {
14154 i6 = i6 | 0;
14155 i1 = i1 | 0;
14156 i5 = i5 | 0;
14157 i7 = i7 | 0;
14158 var i2 = 0, i3 = 0, i4 = 0;
14159 i2 = STACKTOP;
14160 STACKTOP = STACKTOP + 64 | 0;
14161 i3 = i2;
14162 HEAP32[i3 >> 2] = i5;
14163 i5 = i3 + 4 | 0;
14164 HEAP32[i5 >> 2] = i7;
14165 HEAP32[i3 + 12 >> 2] = i6;
14166 HEAP32[i3 + 16 >> 2] = HEAP32[i1 >> 2];
14167 HEAP32[i3 + 32 >> 2] = 0;
14168 HEAP32[i3 + 36 >> 2] = 0;
14169 i6 = _inflateInit_(i3, 2992, 56) | 0;
14170 if ((i6 | 0) != 0) {
14171 i7 = i6;
14172 STACKTOP = i2;
14173 return i7 | 0;
14174 }
14175 i6 = _inflate(i3, 4) | 0;
14176 if ((i6 | 0) == 1) {
14177 HEAP32[i1 >> 2] = HEAP32[i3 + 20 >> 2];
14178 i7 = _inflateEnd(i3) | 0;
14179 STACKTOP = i2;
14180 return i7 | 0;
14181 }
14182 _inflateEnd(i3) | 0;
14183 if ((i6 | 0) == 2) {
14184 i7 = -3;
14185 STACKTOP = i2;
14186 return i7 | 0;
14187 } else if ((i6 | 0) == -5) {
14188 i4 = 4;
14189 }
14190 if ((i4 | 0) == 4 ? (HEAP32[i5 >> 2] | 0) == 0 : 0) {
14191 i7 = -3;
14192 STACKTOP = i2;
14193 return i7 | 0;
14194 }
14195 i7 = i6;
14196 STACKTOP = i2;
14197 return i7 | 0;
14198 }
14199 function _compress(i4, i1, i6, i5) {
14200 i4 = i4 | 0;
14201 i1 = i1 | 0;
14202 i6 = i6 | 0;
14203 i5 = i5 | 0;
14204 var i2 = 0, i3 = 0;
14205 i2 = STACKTOP;
14206 STACKTOP = STACKTOP + 64 | 0;
14207 i3 = i2;
14208 HEAP32[i3 >> 2] = i6;
14209 HEAP32[i3 + 4 >> 2] = i5;
14210 HEAP32[i3 + 12 >> 2] = i4;
14211 HEAP32[i3 + 16 >> 2] = HEAP32[i1 >> 2];
14212 HEAP32[i3 + 32 >> 2] = 0;
14213 HEAP32[i3 + 36 >> 2] = 0;
14214 HEAP32[i3 + 40 >> 2] = 0;
14215 i4 = _deflateInit_(i3, -1, 168, 56) | 0;
14216 if ((i4 | 0) != 0) {
14217 i6 = i4;
14218 STACKTOP = i2;
14219 return i6 | 0;
14220 }
14221 i4 = _deflate(i3, 4) | 0;
14222 if ((i4 | 0) == 1) {
14223 HEAP32[i1 >> 2] = HEAP32[i3 + 20 >> 2];
14224 i6 = _deflateEnd(i3) | 0;
14225 STACKTOP = i2;
14226 return i6 | 0;
14227 } else {
14228 _deflateEnd(i3) | 0;
14229 i6 = (i4 | 0) == 0 ? -5 : i4;
14230 STACKTOP = i2;
14231 return i6 | 0;
14232 }
14233 return 0;
14234 }
14235 function _inflateEnd(i4) {
14236 i4 = i4 | 0;
14237 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0;
14238 i1 = STACKTOP;
14239 if ((i4 | 0) == 0) {
14240 i7 = -2;
14241 STACKTOP = i1;
14242 return i7 | 0;
14243 }
14244 i2 = i4 + 28 | 0;
14245 i3 = HEAP32[i2 >> 2] | 0;
14246 if ((i3 | 0) == 0) {
14247 i7 = -2;
14248 STACKTOP = i1;
14249 return i7 | 0;
14250 }
14251 i6 = i4 + 36 | 0;
14252 i5 = HEAP32[i6 >> 2] | 0;
14253 if ((i5 | 0) == 0) {
14254 i7 = -2;
14255 STACKTOP = i1;
14256 return i7 | 0;
14257 }
14258 i7 = HEAP32[i3 + 52 >> 2] | 0;
14259 i4 = i4 + 40 | 0;
14260 if ((i7 | 0) != 0) {
14261 FUNCTION_TABLE_vii[i5 & 1](HEAP32[i4 >> 2] | 0, i7);
14262 i5 = HEAP32[i6 >> 2] | 0;
14263 i3 = HEAP32[i2 >> 2] | 0;
14264 }
14265 FUNCTION_TABLE_vii[i5 & 1](HEAP32[i4 >> 2] | 0, i3);
14266 HEAP32[i2 >> 2] = 0;
14267 i7 = 0;
14268 STACKTOP = i1;
14269 return i7 | 0;
14270 }
14271 function _memcpy(i3, i2, i1) {
14272 i3 = i3 | 0;
14273 i2 = i2 | 0;
14274 i1 = i1 | 0;
14275 var i4 = 0;
14276 if ((i1 | 0) >= 4096) return _emscripten_memcpy_big(i3 | 0, i2 | 0, i1 | 0) | 0 ;
14277 i4 = i3 | 0;
14278 if ((i3 & 3) == (i2 & 3)) {
14279 while (i3 & 3) {
14280 if ((i1 | 0) == 0) return i4 | 0;
14281 HEAP8[i3] = HEAP8[i2] | 0;
14282 i3 = i3 + 1 | 0;
14283 i2 = i2 + 1 | 0;
14284 i1 = i1 - 1 | 0;
14285 }
14286 while ((i1 | 0) >= 4) {
14287 HEAP32[i3 >> 2] = HEAP32[i2 >> 2];
14288 i3 = i3 + 4 | 0;
14289 i2 = i2 + 4 | 0;
14290 i1 = i1 - 4 | 0;
14291 }
14292 }
14293 while ((i1 | 0) > 0) {
14294 HEAP8[i3] = HEAP8[i2] | 0;
14295 i3 = i3 + 1 | 0;
14296 i2 = i2 + 1 | 0;
14297 i1 = i1 - 1 | 0;
14298 }
14299 return i4 | 0;
14300 }
14301 function _strcmp(i4, i2) {
14302 i4 = i4 | 0;
14303 i2 = i2 | 0;
14304 var i1 = 0, i3 = 0, i5 = 0;
14305 i1 = STACKTOP;
14306 i5 = HEAP8[i4] | 0;
14307 i3 = HEAP8[i2] | 0;
14308 if (i5 << 24 >> 24 != i3 << 24 >> 24 | i5 << 24 >> 24 == 0 | i3 << 24 >> 24 == 0) {
14309 i4 = i5;
14310 i5 = i3;
14311 i4 = i4 & 255;
14312 i5 = i5 & 255;
14313 i5 = i4 - i5 | 0;
14314 STACKTOP = i1;
14315 return i5 | 0;
14316 }
14317 do {
14318 i4 = i4 + 1 | 0;
14319 i2 = i2 + 1 | 0;
14320 i5 = HEAP8[i4] | 0;
14321 i3 = HEAP8[i2] | 0;
14322 } while (!(i5 << 24 >> 24 != i3 << 24 >> 24 | i5 << 24 >> 24 == 0 | i3 << 24 >> 24 == 0));
14323 i4 = i5 & 255;
14324 i5 = i3 & 255;
14325 i5 = i4 - i5 | 0;
14326 STACKTOP = i1;
14327 return i5 | 0;
14328 }
14329 function _memset(i1, i4, i3) {
14330 i1 = i1 | 0;
14331 i4 = i4 | 0;
14332 i3 = i3 | 0;
14333 var i2 = 0, i5 = 0, i6 = 0, i7 = 0;
14334 i2 = i1 + i3 | 0;
14335 if ((i3 | 0) >= 20) {
14336 i4 = i4 & 255;
14337 i7 = i1 & 3;
14338 i6 = i4 | i4 << 8 | i4 << 16 | i4 << 24;
14339 i5 = i2 & ~3;
14340 if (i7) {
14341 i7 = i1 + 4 - i7 | 0;
14342 while ((i1 | 0) < (i7 | 0)) {
14343 HEAP8[i1] = i4;
14344 i1 = i1 + 1 | 0;
14345 }
14346 }
14347 while ((i1 | 0) < (i5 | 0)) {
14348 HEAP32[i1 >> 2] = i6;
14349 i1 = i1 + 4 | 0;
14350 }
14351 }
14352 while ((i1 | 0) < (i2 | 0)) {
14353 HEAP8[i1] = i4;
14354 i1 = i1 + 1 | 0;
14355 }
14356 return i1 - i3 | 0;
14357 }
14358 function copyTempDouble(i1) {
14359 i1 = i1 | 0;
14360 HEAP8[tempDoublePtr] = HEAP8[i1];
14361 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
14362 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
14363 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
14364 HEAP8[tempDoublePtr + 4 | 0] = HEAP8[i1 + 4 | 0];
14365 HEAP8[tempDoublePtr + 5 | 0] = HEAP8[i1 + 5 | 0];
14366 HEAP8[tempDoublePtr + 6 | 0] = HEAP8[i1 + 6 | 0];
14367 HEAP8[tempDoublePtr + 7 | 0] = HEAP8[i1 + 7 | 0];
14368 }
14369 function __tr_init(i1) {
14370 i1 = i1 | 0;
14371 var i2 = 0;
14372 i2 = STACKTOP;
14373 HEAP32[i1 + 2840 >> 2] = i1 + 148;
14374 HEAP32[i1 + 2848 >> 2] = 1064;
14375 HEAP32[i1 + 2852 >> 2] = i1 + 2440;
14376 HEAP32[i1 + 2860 >> 2] = 1088;
14377 HEAP32[i1 + 2864 >> 2] = i1 + 2684;
14378 HEAP32[i1 + 2872 >> 2] = 1112;
14379 HEAP16[i1 + 5816 >> 1] = 0;
14380 HEAP32[i1 + 5820 >> 2] = 0;
14381 HEAP32[i1 + 5812 >> 2] = 8;
14382 _init_block(i1);
14383 STACKTOP = i2;
14384 return;
14385 }
14386 function copyTempFloat(i1) {
14387 i1 = i1 | 0;
14388 HEAP8[tempDoublePtr] = HEAP8[i1];
14389 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
14390 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
14391 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
14392 }
14393 function _deflateInit_(i4, i3, i2, i1) {
14394 i4 = i4 | 0;
14395 i3 = i3 | 0;
14396 i2 = i2 | 0;
14397 i1 = i1 | 0;
14398 var i5 = 0;
14399 i5 = STACKTOP;
14400 i4 = _deflateInit2_(i4, i3, 8, 15, 8, 0, i2, i1) | 0;
14401 STACKTOP = i5;
14402 return i4 | 0;
14403 }
14404 function _zcalloc(i3, i1, i2) {
14405 i3 = i3 | 0;
14406 i1 = i1 | 0;
14407 i2 = i2 | 0;
14408 var i4 = 0;
14409 i4 = STACKTOP;
14410 i3 = _malloc(Math_imul(i2, i1) | 0) | 0;
14411 STACKTOP = i4;
14412 return i3 | 0;
14413 }
14414 function dynCall_iiii(i4, i3, i2, i1) {
14415 i4 = i4 | 0;
14416 i3 = i3 | 0;
14417 i2 = i2 | 0;
14418 i1 = i1 | 0;
14419 return FUNCTION_TABLE_iiii[i4 & 1](i3 | 0, i2 | 0, i1 | 0) | 0;
14420 }
14421 function runPostSets() {}
14422 function _strlen(i1) {
14423 i1 = i1 | 0;
14424 var i2 = 0;
14425 i2 = i1;
14426 while (HEAP8[i2] | 0) {
14427 i2 = i2 + 1 | 0;
14428 }
14429 return i2 - i1 | 0;
14430 }
14431 function stackAlloc(i1) {
14432 i1 = i1 | 0;
14433 var i2 = 0;
14434 i2 = STACKTOP;
14435 STACKTOP = STACKTOP + i1 | 0;
14436 STACKTOP = STACKTOP + 7 & -8;
14437 return i2 | 0;
14438 }
14439 function dynCall_iii(i3, i2, i1) {
14440 i3 = i3 | 0;
14441 i2 = i2 | 0;
14442 i1 = i1 | 0;
14443 return FUNCTION_TABLE_iii[i3 & 3](i2 | 0, i1 | 0) | 0;
14444 }
14445 function setThrew(i1, i2) {
14446 i1 = i1 | 0;
14447 i2 = i2 | 0;
14448 if ((__THREW__ | 0) == 0) {
14449 __THREW__ = i1;
14450 threwValue = i2;
14451 }
14452 }
14453 function dynCall_vii(i3, i2, i1) {
14454 i3 = i3 | 0;
14455 i2 = i2 | 0;
14456 i1 = i1 | 0;
14457 FUNCTION_TABLE_vii[i3 & 1](i2 | 0, i1 | 0);
14458 }
14459 function _zcfree(i2, i1) {
14460 i2 = i2 | 0;
14461 i1 = i1 | 0;
14462 i2 = STACKTOP;
14463 _free(i1);
14464 STACKTOP = i2;
14465 return;
14466 }
14467 function _compressBound(i1) {
14468 i1 = i1 | 0;
14469 return i1 + 13 + (i1 >>> 12) + (i1 >>> 14) + (i1 >>> 25) | 0;
14470 }
14471 function b0(i1, i2, i3) {
14472 i1 = i1 | 0;
14473 i2 = i2 | 0;
14474 i3 = i3 | 0;
14475 abort(0);
14476 return 0;
14477 }
14478 function b2(i1, i2) {
14479 i1 = i1 | 0;
14480 i2 = i2 | 0;
14481 abort(2);
14482 return 0;
14483 }
14484 function b1(i1, i2) {
14485 i1 = i1 | 0;
14486 i2 = i2 | 0;
14487 abort(1);
14488 }
14489 function stackRestore(i1) {
14490 i1 = i1 | 0;
14491 STACKTOP = i1;
14492 }
14493 function setTempRet9(i1) {
14494 i1 = i1 | 0;
14495 tempRet9 = i1;
14496 }
14497 function setTempRet8(i1) {
14498 i1 = i1 | 0;
14499 tempRet8 = i1;
14500 }
14501 function setTempRet7(i1) {
14502 i1 = i1 | 0;
14503 tempRet7 = i1;
14504 }
14505 function setTempRet6(i1) {
14506 i1 = i1 | 0;
14507 tempRet6 = i1;
14508 }
14509 function setTempRet5(i1) {
14510 i1 = i1 | 0;
14511 tempRet5 = i1;
14512 }
14513 function setTempRet4(i1) {
14514 i1 = i1 | 0;
14515 tempRet4 = i1;
14516 }
14517 function setTempRet3(i1) {
14518 i1 = i1 | 0;
14519 tempRet3 = i1;
14520 }
14521 function setTempRet2(i1) {
14522 i1 = i1 | 0;
14523 tempRet2 = i1;
14524 }
14525 function setTempRet1(i1) {
14526 i1 = i1 | 0;
14527 tempRet1 = i1;
14528 }
14529 function setTempRet0(i1) {
14530 i1 = i1 | 0;
14531 tempRet0 = i1;
14532 }
14533 function stackSave() {
14534 return STACKTOP | 0;
14535 }
14536
14537 // EMSCRIPTEN_END_FUNCS
14538 var FUNCTION_TABLE_iiii = [b0,_zcalloc];
14539 var FUNCTION_TABLE_vii = [b1,_zcfree];
14540 var FUNCTION_TABLE_iii = [b2,_deflate_stored,_deflate_fast,_deflate_slow];
14541
14542 return { _strlen: _strlen, _free: _free, _main: _main, _memset: _memset, _mall oc: _malloc, _memcpy: _memcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, setThrew: setThrew, setTempRe t0: setTempRet0, setTempRet1: setTempRet1, setTempRet2: setTempRet2, setTempRet3 : setTempRet3, setTempRet4: setTempRet4, setTempRet5: setTempRet5, setTempRet6: setTempRet6, setTempRet7: setTempRet7, setTempRet8: setTempRet8, setTempRet9: se tTempRet9, dynCall_iiii: dynCall_iiii, dynCall_vii: dynCall_vii, dynCall_iii: dy nCall_iii };
14543 })
14544 // EMSCRIPTEN_END_ASM
14545 ({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array" : Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { " abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": as mPrintFloat, "min": Math_min, "invoke_iiii": invoke_iiii, "invoke_vii": invoke_v ii, "invoke_iii": invoke_iii, "_send": _send, "___setErrNo": ___setErrNo, "___as sert_fail": ___assert_fail, "_fflush": _fflush, "_pwrite": _pwrite, "__reallyNeg ative": __reallyNegative, "_sbrk": _sbrk, "___errno_location": ___errno_location , "_emscripten_memcpy_big": _emscripten_memcpy_big, "_fileno": _fileno, "_syscon f": _sysconf, "_puts": _puts, "_mkport": _mkport, "_write": _write, "_llvm_bswap _i32": _llvm_bswap_i32, "_fputc": _fputc, "_abort": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "__formatString": __formatString, "_fputs" : _fputs, "_printf": _printf, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tem pDoublePtr": tempDoublePtr, "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity }, buffer);
14546 var _strlen = Module["_strlen"] = asm["_strlen"];
14547 var _free = Module["_free"] = asm["_free"];
14548 var _main = Module["_main"] = asm["_main"];
14549 var _memset = Module["_memset"] = asm["_memset"];
14550 var _malloc = Module["_malloc"] = asm["_malloc"];
14551 var _memcpy = Module["_memcpy"] = asm["_memcpy"];
14552 var runPostSets = Module["runPostSets"] = asm["runPostSets"];
14553 var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
14554 var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
14555 var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
14556
14557 Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
14558 Runtime.stackSave = function() { return asm['stackSave']() };
14559 Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
14560
14561
14562 // Warning: printing of i64 values may be slightly rounded! No deep i64 math use d, so precise i64 code not included
14563 var i64Math = null;
14564
14565 // === Auto-generated postamble setup entry stuff ===
14566
14567 if (memoryInitializer) {
14568 if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
14569 var data = Module['readBinary'](memoryInitializer);
14570 HEAPU8.set(data, STATIC_BASE);
14571 } else {
14572 addRunDependency('memory initializer');
14573 Browser.asyncLoad(memoryInitializer, function(data) {
14574 HEAPU8.set(data, STATIC_BASE);
14575 removeRunDependency('memory initializer');
14576 }, function(data) {
14577 throw 'could not load memory initializer ' + memoryInitializer;
14578 });
14579 }
14580 }
14581
14582 function ExitStatus(status) {
14583 this.name = "ExitStatus";
14584 this.message = "Program terminated with exit(" + status + ")";
14585 this.status = status;
14586 };
14587 ExitStatus.prototype = new Error();
14588 ExitStatus.prototype.constructor = ExitStatus;
14589
14590 var initialStackTop;
14591 var preloadStartTime = null;
14592 var calledMain = false;
14593
14594 dependenciesFulfilled = function runCaller() {
14595 // If run has never been called, and we should call run (INVOKE_RUN is true, a nd Module.noInitialRun is not false)
14596 if (!Module['calledRun'] && shouldRunNow) run([].concat(Module["arguments"]));
14597 if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
14598 }
14599
14600 Module['callMain'] = Module.callMain = function callMain(args) {
14601 assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
14602 assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remai n to be called');
14603
14604 args = args || [];
14605
14606 ensureInitRuntime();
14607
14608 var argc = args.length+1;
14609 function pad() {
14610 for (var i = 0; i < 4-1; i++) {
14611 argv.push(0);
14612 }
14613 }
14614 var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORM AL) ];
14615 pad();
14616 for (var i = 0; i < argc-1; i = i + 1) {
14617 argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
14618 pad();
14619 }
14620 argv.push(0);
14621 argv = allocate(argv, 'i32', ALLOC_NORMAL);
14622
14623 initialStackTop = STACKTOP;
14624
14625 try {
14626
14627 var ret = Module['_main'](argc, argv, 0);
14628
14629
14630 // if we're not running an evented main loop, it's time to exit
14631 if (!Module['noExitRuntime']) {
14632 exit(ret);
14633 }
14634 }
14635 catch(e) {
14636 if (e instanceof ExitStatus) {
14637 // exit() throws this once it's done to make sure execution
14638 // has been stopped completely
14639 return;
14640 } else if (e == 'SimulateInfiniteLoop') {
14641 // running an evented main loop, don't immediately exit
14642 Module['noExitRuntime'] = true;
14643 return;
14644 } else {
14645 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thro wn: ' + [e, e.stack]);
14646 throw e;
14647 }
14648 } finally {
14649 calledMain = true;
14650 }
14651 }
14652
14653
14654
14655
14656 function run(args) {
14657 args = args || Module['arguments'];
14658
14659 if (preloadStartTime === null) preloadStartTime = Date.now();
14660
14661 if (runDependencies > 0) {
14662 Module.printErr('run() called, but dependencies remain, so not running');
14663 return;
14664 }
14665
14666 preRun();
14667
14668 if (runDependencies > 0) return; // a preRun added a dependency, run will be c alled later
14669 if (Module['calledRun']) return; // run may have just been called through depe ndencies being fulfilled just in this very frame
14670
14671 function doRun() {
14672 if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
14673 Module['calledRun'] = true;
14674
14675 ensureInitRuntime();
14676
14677 preMain();
14678
14679 if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
14680 Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms');
14681 }
14682
14683 if (Module['_main'] && shouldRunNow) {
14684 Module['callMain'](args);
14685 }
14686
14687 postRun();
14688 }
14689
14690 if (Module['setStatus']) {
14691 Module['setStatus']('Running...');
14692 setTimeout(function() {
14693 setTimeout(function() {
14694 Module['setStatus']('');
14695 }, 1);
14696 if (!ABORT) doRun();
14697 }, 1);
14698 } else {
14699 doRun();
14700 }
14701 }
14702 Module['run'] = Module.run = run;
14703
14704 function exit(status) {
14705 ABORT = true;
14706 EXITSTATUS = status;
14707 STACKTOP = initialStackTop;
14708
14709 // exit the runtime
14710 exitRuntime();
14711
14712 // TODO We should handle this differently based on environment.
14713 // In the browser, the best we can do is throw an exception
14714 // to halt execution, but in node we could process.exit and
14715 // I'd imagine SM shell would have something equivalent.
14716 // This would let us set a proper exit status (which
14717 // would be great for checking test exit statuses).
14718 // https://github.com/kripken/emscripten/issues/1371
14719
14720 // throw an exception to halt the current execution
14721 throw new ExitStatus(status);
14722 }
14723 Module['exit'] = Module.exit = exit;
14724
14725 function abort(text) {
14726 if (text) {
14727 Module.print(text);
14728 Module.printErr(text);
14729 }
14730
14731 ABORT = true;
14732 EXITSTATUS = 1;
14733
14734 var extra = '\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.';
14735
14736 throw 'abort() at ' + stackTrace() + extra;
14737 }
14738 Module['abort'] = Module.abort = abort;
14739
14740 // {{PRE_RUN_ADDITIONS}}
14741
14742 if (Module['preInit']) {
14743 if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preIn it']];
14744 while (Module['preInit'].length > 0) {
14745 Module['preInit'].pop()();
14746 }
14747 }
14748
14749 // shouldRunNow refers to calling main(), not run().
14750 var shouldRunNow = true;
14751 if (Module['noInitialRun']) {
14752 shouldRunNow = false;
14753 }
14754
14755
14756 run([].concat(Module["arguments"]));
OLDNEW
« no previous file with comments | « test/mjsunit/asm/embenchen/primes.js ('k') | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698