aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoriancoleman <1281387+iancoleman@users.noreply.github.com>2019-07-04 11:39:06 +1000
committerGitHub <noreply@github.com>2019-07-04 11:39:06 +1000
commita36c509c91ea9319f000819889830d3cafe23f02 (patch)
tree2bbc24f333e30ee59f78020fe3fc62a1bce8d6e1 /src
parent06cd4e7608f88a5b43d5e783fd1dc51650e190a1 (diff)
parentad59508d7c4ecb487182d0d3306f01ffb4e48fb8 (diff)
downloadBIP39-a36c509c91ea9319f000819889830d3cafe23f02.tar.gz
BIP39-a36c509c91ea9319f000819889830d3cafe23f02.tar.zst
BIP39-a36c509c91ea9319f000819889830d3cafe23f02.zip
Merge pull request #287 from sui77/master
XLM Stellar Lumens
Diffstat (limited to 'src')
-rw-r--r--src/index.html1
-rw-r--r--src/js/index.js20
-rw-r--r--src/js/stellar-util.js42516
3 files changed, 42537 insertions, 0 deletions
diff --git a/src/index.html b/src/index.html
index 9df24fe..bd34b55 100644
--- a/src/index.html
+++ b/src/index.html
@@ -942,6 +942,7 @@
942 <script src="js/biginteger.js"></script> 942 <script src="js/biginteger.js"></script>
943 <script src="js/zxcvbn.js"></script> 943 <script src="js/zxcvbn.js"></script>
944 <script src="js/entropy.js"></script> 944 <script src="js/entropy.js"></script>
945 <script src="js/stellar-util.js"></script>
945 <script src="js/index.js"></script> 946 <script src="js/index.js"></script>
946 </body> 947 </body>
947</html> 948</html>
diff --git a/src/js/index.js b/src/js/index.js
index 56f42d4..599e8d1 100644
--- a/src/js/index.js
+++ b/src/js/index.js
@@ -931,6 +931,19 @@
931 privkey = ethUtil.addHexPrefix(privkey); 931 privkey = ethUtil.addHexPrefix(privkey);
932 pubkey = ethUtil.addHexPrefix(pubkey); 932 pubkey = ethUtil.addHexPrefix(pubkey);
933 } 933 }
934
935 // Stellar is different
936 if (networks[DOM.network.val()].name == "XLM - Stellar") {
937 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
938 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
939 var path = "m/";
940 path += purpose + "'/";
941 path += coin + "'/" + index + "'";
942 var keypair = stellarUtil.getKeypair(path, seed);
943 indexText = path;
944 privkey = keypair.secret();
945 pubkey = address = keypair.publicKey();
946 }
934 if ((networks[DOM.network.val()].name == "NAS - Nebulas")) { 947 if ((networks[DOM.network.val()].name == "NAS - Nebulas")) {
935 var NasAccount = require("nebulas-account"); 948 var NasAccount = require("nebulas-account");
936 var privKeyBuffer = keyPair.d.toBuffer(32); 949 var privKeyBuffer = keyPair.d.toBuffer(32);
@@ -2714,6 +2727,13 @@
2714 }, 2727 },
2715 }, 2728 },
2716 { 2729 {
2730 name: "XLM - Stellar",
2731 onSelect: function() {
2732 network = stellarUtil.dummyNetwork;
2733 setHdCoin(148);
2734 },
2735 },
2736 {
2717 name: "XMY - Myriadcoin", 2737 name: "XMY - Myriadcoin",
2718 onSelect: function() { 2738 onSelect: function() {
2719 network = bitcoinjs.bitcoin.networks.myriadcoin; 2739 network = bitcoinjs.bitcoin.networks.myriadcoin;
diff --git a/src/js/stellar-util.js b/src/js/stellar-util.js
new file mode 100644
index 0000000..8722fbf
--- /dev/null
+++ b/src/js/stellar-util.js
@@ -0,0 +1,42516 @@
1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2var asn1 = exports;
3
4asn1.bignum = require('bn.js');
5
6asn1.define = require('./asn1/api').define;
7asn1.base = require('./asn1/base');
8asn1.constants = require('./asn1/constants');
9asn1.decoders = require('./asn1/decoders');
10asn1.encoders = require('./asn1/encoders');
11
12},{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":18}],2:[function(require,module,exports){
13var asn1 = require('../asn1');
14var inherits = require('inherits');
15
16var api = exports;
17
18api.define = function define(name, body) {
19 return new Entity(name, body);
20};
21
22function Entity(name, body) {
23 this.name = name;
24 this.body = body;
25
26 this.decoders = {};
27 this.encoders = {};
28};
29
30Entity.prototype._createNamed = function createNamed(base) {
31 var named;
32 try {
33 named = require('vm').runInThisContext(
34 '(function ' + this.name + '(entity) {\n' +
35 ' this._initNamed(entity);\n' +
36 '})'
37 );
38 } catch (e) {
39 named = function (entity) {
40 this._initNamed(entity);
41 };
42 }
43 inherits(named, base);
44 named.prototype._initNamed = function initnamed(entity) {
45 base.call(this, entity);
46 };
47
48 return new named(this);
49};
50
51Entity.prototype._getDecoder = function _getDecoder(enc) {
52 enc = enc || 'der';
53 // Lazily create decoder
54 if (!this.decoders.hasOwnProperty(enc))
55 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
56 return this.decoders[enc];
57};
58
59Entity.prototype.decode = function decode(data, enc, options) {
60 return this._getDecoder(enc).decode(data, options);
61};
62
63Entity.prototype._getEncoder = function _getEncoder(enc) {
64 enc = enc || 'der';
65 // Lazily create encoder
66 if (!this.encoders.hasOwnProperty(enc))
67 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
68 return this.encoders[enc];
69};
70
71Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
72 return this._getEncoder(enc).encode(data, reporter);
73};
74
75},{"../asn1":1,"inherits":119,"vm":444}],3:[function(require,module,exports){
76var inherits = require('inherits');
77var Reporter = require('../base').Reporter;
78var Buffer = require('buffer').Buffer;
79
80function DecoderBuffer(base, options) {
81 Reporter.call(this, options);
82 if (!Buffer.isBuffer(base)) {
83 this.error('Input not Buffer');
84 return;
85 }
86
87 this.base = base;
88 this.offset = 0;
89 this.length = base.length;
90}
91inherits(DecoderBuffer, Reporter);
92exports.DecoderBuffer = DecoderBuffer;
93
94DecoderBuffer.prototype.save = function save() {
95 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
96};
97
98DecoderBuffer.prototype.restore = function restore(save) {
99 // Return skipped data
100 var res = new DecoderBuffer(this.base);
101 res.offset = save.offset;
102 res.length = this.offset;
103
104 this.offset = save.offset;
105 Reporter.prototype.restore.call(this, save.reporter);
106
107 return res;
108};
109
110DecoderBuffer.prototype.isEmpty = function isEmpty() {
111 return this.offset === this.length;
112};
113
114DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
115 if (this.offset + 1 <= this.length)
116 return this.base.readUInt8(this.offset++, true);
117 else
118 return this.error(fail || 'DecoderBuffer overrun');
119}
120
121DecoderBuffer.prototype.skip = function skip(bytes, fail) {
122 if (!(this.offset + bytes <= this.length))
123 return this.error(fail || 'DecoderBuffer overrun');
124
125 var res = new DecoderBuffer(this.base);
126
127 // Share reporter state
128 res._reporterState = this._reporterState;
129
130 res.offset = this.offset;
131 res.length = this.offset + bytes;
132 this.offset += bytes;
133 return res;
134}
135
136DecoderBuffer.prototype.raw = function raw(save) {
137 return this.base.slice(save ? save.offset : this.offset, this.length);
138}
139
140function EncoderBuffer(value, reporter) {
141 if (Array.isArray(value)) {
142 this.length = 0;
143 this.value = value.map(function(item) {
144 if (!(item instanceof EncoderBuffer))
145 item = new EncoderBuffer(item, reporter);
146 this.length += item.length;
147 return item;
148 }, this);
149 } else if (typeof value === 'number') {
150 if (!(0 <= value && value <= 0xff))
151 return reporter.error('non-byte EncoderBuffer value');
152 this.value = value;
153 this.length = 1;
154 } else if (typeof value === 'string') {
155 this.value = value;
156 this.length = Buffer.byteLength(value);
157 } else if (Buffer.isBuffer(value)) {
158 this.value = value;
159 this.length = value.length;
160 } else {
161 return reporter.error('Unsupported type: ' + typeof value);
162 }
163}
164exports.EncoderBuffer = EncoderBuffer;
165
166EncoderBuffer.prototype.join = function join(out, offset) {
167 if (!out)
168 out = new Buffer(this.length);
169 if (!offset)
170 offset = 0;
171
172 if (this.length === 0)
173 return out;
174
175 if (Array.isArray(this.value)) {
176 this.value.forEach(function(item) {
177 item.join(out, offset);
178 offset += item.length;
179 });
180 } else {
181 if (typeof this.value === 'number')
182 out[offset] = this.value;
183 else if (typeof this.value === 'string')
184 out.write(this.value, offset);
185 else if (Buffer.isBuffer(this.value))
186 this.value.copy(out, offset);
187 offset += this.length;
188 }
189
190 return out;
191};
192
193},{"../base":4,"buffer":50,"inherits":119}],4:[function(require,module,exports){
194var base = exports;
195
196base.Reporter = require('./reporter').Reporter;
197base.DecoderBuffer = require('./buffer').DecoderBuffer;
198base.EncoderBuffer = require('./buffer').EncoderBuffer;
199base.Node = require('./node');
200
201},{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
202var Reporter = require('../base').Reporter;
203var EncoderBuffer = require('../base').EncoderBuffer;
204var DecoderBuffer = require('../base').DecoderBuffer;
205var assert = require('minimalistic-assert');
206
207// Supported tags
208var tags = [
209 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
210 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
211 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
212 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
213];
214
215// Public methods list
216var methods = [
217 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
218 'any', 'contains'
219].concat(tags);
220
221// Overrided methods list
222var overrided = [
223 '_peekTag', '_decodeTag', '_use',
224 '_decodeStr', '_decodeObjid', '_decodeTime',
225 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
226
227 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
228 '_encodeNull', '_encodeInt', '_encodeBool'
229];
230
231function Node(enc, parent) {
232 var state = {};
233 this._baseState = state;
234
235 state.enc = enc;
236
237 state.parent = parent || null;
238 state.children = null;
239
240 // State
241 state.tag = null;
242 state.args = null;
243 state.reverseArgs = null;
244 state.choice = null;
245 state.optional = false;
246 state.any = false;
247 state.obj = false;
248 state.use = null;
249 state.useDecoder = null;
250 state.key = null;
251 state['default'] = null;
252 state.explicit = null;
253 state.implicit = null;
254 state.contains = null;
255
256 // Should create new instance on each method
257 if (!state.parent) {
258 state.children = [];
259 this._wrap();
260 }
261}
262module.exports = Node;
263
264var stateProps = [
265 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
266 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
267 'implicit', 'contains'
268];
269
270Node.prototype.clone = function clone() {
271 var state = this._baseState;
272 var cstate = {};
273 stateProps.forEach(function(prop) {
274 cstate[prop] = state[prop];
275 });
276 var res = new this.constructor(cstate.parent);
277 res._baseState = cstate;
278 return res;
279};
280
281Node.prototype._wrap = function wrap() {
282 var state = this._baseState;
283 methods.forEach(function(method) {
284 this[method] = function _wrappedMethod() {
285 var clone = new this.constructor(this);
286 state.children.push(clone);
287 return clone[method].apply(clone, arguments);
288 };
289 }, this);
290};
291
292Node.prototype._init = function init(body) {
293 var state = this._baseState;
294
295 assert(state.parent === null);
296 body.call(this);
297
298 // Filter children
299 state.children = state.children.filter(function(child) {
300 return child._baseState.parent === this;
301 }, this);
302 assert.equal(state.children.length, 1, 'Root node can have only one child');
303};
304
305Node.prototype._useArgs = function useArgs(args) {
306 var state = this._baseState;
307
308 // Filter children and args
309 var children = args.filter(function(arg) {
310 return arg instanceof this.constructor;
311 }, this);
312 args = args.filter(function(arg) {
313 return !(arg instanceof this.constructor);
314 }, this);
315
316 if (children.length !== 0) {
317 assert(state.children === null);
318 state.children = children;
319
320 // Replace parent to maintain backward link
321 children.forEach(function(child) {
322 child._baseState.parent = this;
323 }, this);
324 }
325 if (args.length !== 0) {
326 assert(state.args === null);
327 state.args = args;
328 state.reverseArgs = args.map(function(arg) {
329 if (typeof arg !== 'object' || arg.constructor !== Object)
330 return arg;
331
332 var res = {};
333 Object.keys(arg).forEach(function(key) {
334 if (key == (key | 0))
335 key |= 0;
336 var value = arg[key];
337 res[value] = key;
338 });
339 return res;
340 });
341 }
342};
343
344//
345// Overrided methods
346//
347
348overrided.forEach(function(method) {
349 Node.prototype[method] = function _overrided() {
350 var state = this._baseState;
351 throw new Error(method + ' not implemented for encoding: ' + state.enc);
352 };
353});
354
355//
356// Public methods
357//
358
359tags.forEach(function(tag) {
360 Node.prototype[tag] = function _tagMethod() {
361 var state = this._baseState;
362 var args = Array.prototype.slice.call(arguments);
363
364 assert(state.tag === null);
365 state.tag = tag;
366
367 this._useArgs(args);
368
369 return this;
370 };
371});
372
373Node.prototype.use = function use(item) {
374 assert(item);
375 var state = this._baseState;
376
377 assert(state.use === null);
378 state.use = item;
379
380 return this;
381};
382
383Node.prototype.optional = function optional() {
384 var state = this._baseState;
385
386 state.optional = true;
387
388 return this;
389};
390
391Node.prototype.def = function def(val) {
392 var state = this._baseState;
393
394 assert(state['default'] === null);
395 state['default'] = val;
396 state.optional = true;
397
398 return this;
399};
400
401Node.prototype.explicit = function explicit(num) {
402 var state = this._baseState;
403
404 assert(state.explicit === null && state.implicit === null);
405 state.explicit = num;
406
407 return this;
408};
409
410Node.prototype.implicit = function implicit(num) {
411 var state = this._baseState;
412
413 assert(state.explicit === null && state.implicit === null);
414 state.implicit = num;
415
416 return this;
417};
418
419Node.prototype.obj = function obj() {
420 var state = this._baseState;
421 var args = Array.prototype.slice.call(arguments);
422
423 state.obj = true;
424
425 if (args.length !== 0)
426 this._useArgs(args);
427
428 return this;
429};
430
431Node.prototype.key = function key(newKey) {
432 var state = this._baseState;
433
434 assert(state.key === null);
435 state.key = newKey;
436
437 return this;
438};
439
440Node.prototype.any = function any() {
441 var state = this._baseState;
442
443 state.any = true;
444
445 return this;
446};
447
448Node.prototype.choice = function choice(obj) {
449 var state = this._baseState;
450
451 assert(state.choice === null);
452 state.choice = obj;
453 this._useArgs(Object.keys(obj).map(function(key) {
454 return obj[key];
455 }));
456
457 return this;
458};
459
460Node.prototype.contains = function contains(item) {
461 var state = this._baseState;
462
463 assert(state.use === null);
464 state.contains = item;
465
466 return this;
467};
468
469//
470// Decoding
471//
472
473Node.prototype._decode = function decode(input, options) {
474 var state = this._baseState;
475
476 // Decode root node
477 if (state.parent === null)
478 return input.wrapResult(state.children[0]._decode(input, options));
479
480 var result = state['default'];
481 var present = true;
482
483 var prevKey = null;
484 if (state.key !== null)
485 prevKey = input.enterKey(state.key);
486
487 // Check if tag is there
488 if (state.optional) {
489 var tag = null;
490 if (state.explicit !== null)
491 tag = state.explicit;
492 else if (state.implicit !== null)
493 tag = state.implicit;
494 else if (state.tag !== null)
495 tag = state.tag;
496
497 if (tag === null && !state.any) {
498 // Trial and Error
499 var save = input.save();
500 try {
501 if (state.choice === null)
502 this._decodeGeneric(state.tag, input, options);
503 else
504 this._decodeChoice(input, options);
505 present = true;
506 } catch (e) {
507 present = false;
508 }
509 input.restore(save);
510 } else {
511 present = this._peekTag(input, tag, state.any);
512
513 if (input.isError(present))
514 return present;
515 }
516 }
517
518 // Push object on stack
519 var prevObj;
520 if (state.obj && present)
521 prevObj = input.enterObject();
522
523 if (present) {
524 // Unwrap explicit values
525 if (state.explicit !== null) {
526 var explicit = this._decodeTag(input, state.explicit);
527 if (input.isError(explicit))
528 return explicit;
529 input = explicit;
530 }
531
532 var start = input.offset;
533
534 // Unwrap implicit and normal values
535 if (state.use === null && state.choice === null) {
536 if (state.any)
537 var save = input.save();
538 var body = this._decodeTag(
539 input,
540 state.implicit !== null ? state.implicit : state.tag,
541 state.any
542 );
543 if (input.isError(body))
544 return body;
545
546 if (state.any)
547 result = input.raw(save);
548 else
549 input = body;
550 }
551
552 if (options && options.track && state.tag !== null)
553 options.track(input.path(), start, input.length, 'tagged');
554
555 if (options && options.track && state.tag !== null)
556 options.track(input.path(), input.offset, input.length, 'content');
557
558 // Select proper method for tag
559 if (state.any)
560 result = result;
561 else if (state.choice === null)
562 result = this._decodeGeneric(state.tag, input, options);
563 else
564 result = this._decodeChoice(input, options);
565
566 if (input.isError(result))
567 return result;
568
569 // Decode children
570 if (!state.any && state.choice === null && state.children !== null) {
571 state.children.forEach(function decodeChildren(child) {
572 // NOTE: We are ignoring errors here, to let parser continue with other
573 // parts of encoded data
574 child._decode(input, options);
575 });
576 }
577
578 // Decode contained/encoded by schema, only in bit or octet strings
579 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
580 var data = new DecoderBuffer(result);
581 result = this._getUse(state.contains, input._reporterState.obj)
582 ._decode(data, options);
583 }
584 }
585
586 // Pop object
587 if (state.obj && present)
588 result = input.leaveObject(prevObj);
589
590 // Set key
591 if (state.key !== null && (result !== null || present === true))
592 input.leaveKey(prevKey, state.key, result);
593 else if (prevKey !== null)
594 input.exitKey(prevKey);
595
596 return result;
597};
598
599Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
600 var state = this._baseState;
601
602 if (tag === 'seq' || tag === 'set')
603 return null;
604 if (tag === 'seqof' || tag === 'setof')
605 return this._decodeList(input, tag, state.args[0], options);
606 else if (/str$/.test(tag))
607 return this._decodeStr(input, tag, options);
608 else if (tag === 'objid' && state.args)
609 return this._decodeObjid(input, state.args[0], state.args[1], options);
610 else if (tag === 'objid')
611 return this._decodeObjid(input, null, null, options);
612 else if (tag === 'gentime' || tag === 'utctime')
613 return this._decodeTime(input, tag, options);
614 else if (tag === 'null_')
615 return this._decodeNull(input, options);
616 else if (tag === 'bool')
617 return this._decodeBool(input, options);
618 else if (tag === 'objDesc')
619 return this._decodeStr(input, tag, options);
620 else if (tag === 'int' || tag === 'enum')
621 return this._decodeInt(input, state.args && state.args[0], options);
622
623 if (state.use !== null) {
624 return this._getUse(state.use, input._reporterState.obj)
625 ._decode(input, options);
626 } else {
627 return input.error('unknown tag: ' + tag);
628 }
629};
630
631Node.prototype._getUse = function _getUse(entity, obj) {
632
633 var state = this._baseState;
634 // Create altered use decoder if implicit is set
635 state.useDecoder = this._use(entity, obj);
636 assert(state.useDecoder._baseState.parent === null);
637 state.useDecoder = state.useDecoder._baseState.children[0];
638 if (state.implicit !== state.useDecoder._baseState.implicit) {
639 state.useDecoder = state.useDecoder.clone();
640 state.useDecoder._baseState.implicit = state.implicit;
641 }
642 return state.useDecoder;
643};
644
645Node.prototype._decodeChoice = function decodeChoice(input, options) {
646 var state = this._baseState;
647 var result = null;
648 var match = false;
649
650 Object.keys(state.choice).some(function(key) {
651 var save = input.save();
652 var node = state.choice[key];
653 try {
654 var value = node._decode(input, options);
655 if (input.isError(value))
656 return false;
657
658 result = { type: key, value: value };
659 match = true;
660 } catch (e) {
661 input.restore(save);
662 return false;
663 }
664 return true;
665 }, this);
666
667 if (!match)
668 return input.error('Choice not matched');
669
670 return result;
671};
672
673//
674// Encoding
675//
676
677Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
678 return new EncoderBuffer(data, this.reporter);
679};
680
681Node.prototype._encode = function encode(data, reporter, parent) {
682 var state = this._baseState;
683 if (state['default'] !== null && state['default'] === data)
684 return;
685
686 var result = this._encodeValue(data, reporter, parent);
687 if (result === undefined)
688 return;
689
690 if (this._skipDefault(result, reporter, parent))
691 return;
692
693 return result;
694};
695
696Node.prototype._encodeValue = function encode(data, reporter, parent) {
697 var state = this._baseState;
698
699 // Decode root node
700 if (state.parent === null)
701 return state.children[0]._encode(data, reporter || new Reporter());
702
703 var result = null;
704
705 // Set reporter to share it with a child class
706 this.reporter = reporter;
707
708 // Check if data is there
709 if (state.optional && data === undefined) {
710 if (state['default'] !== null)
711 data = state['default']
712 else
713 return;
714 }
715
716 // Encode children first
717 var content = null;
718 var primitive = false;
719 if (state.any) {
720 // Anything that was given is translated to buffer
721 result = this._createEncoderBuffer(data);
722 } else if (state.choice) {
723 result = this._encodeChoice(data, reporter);
724 } else if (state.contains) {
725 content = this._getUse(state.contains, parent)._encode(data, reporter);
726 primitive = true;
727 } else if (state.children) {
728 content = state.children.map(function(child) {
729 if (child._baseState.tag === 'null_')
730 return child._encode(null, reporter, data);
731
732 if (child._baseState.key === null)
733 return reporter.error('Child should have a key');
734 var prevKey = reporter.enterKey(child._baseState.key);
735
736 if (typeof data !== 'object')
737 return reporter.error('Child expected, but input is not object');
738
739 var res = child._encode(data[child._baseState.key], reporter, data);
740 reporter.leaveKey(prevKey);
741
742 return res;
743 }, this).filter(function(child) {
744 return child;
745 });
746 content = this._createEncoderBuffer(content);
747 } else {
748 if (state.tag === 'seqof' || state.tag === 'setof') {
749 // TODO(indutny): this should be thrown on DSL level
750 if (!(state.args && state.args.length === 1))
751 return reporter.error('Too many args for : ' + state.tag);
752
753 if (!Array.isArray(data))
754 return reporter.error('seqof/setof, but data is not Array');
755
756 var child = this.clone();
757 child._baseState.implicit = null;
758 content = this._createEncoderBuffer(data.map(function(item) {
759 var state = this._baseState;
760
761 return this._getUse(state.args[0], data)._encode(item, reporter);
762 }, child));
763 } else if (state.use !== null) {
764 result = this._getUse(state.use, parent)._encode(data, reporter);
765 } else {
766 content = this._encodePrimitive(state.tag, data);
767 primitive = true;
768 }
769 }
770
771 // Encode data itself
772 var result;
773 if (!state.any && state.choice === null) {
774 var tag = state.implicit !== null ? state.implicit : state.tag;
775 var cls = state.implicit === null ? 'universal' : 'context';
776
777 if (tag === null) {
778 if (state.use === null)
779 reporter.error('Tag could be omitted only for .use()');
780 } else {
781 if (state.use === null)
782 result = this._encodeComposite(tag, primitive, cls, content);
783 }
784 }
785
786 // Wrap in explicit
787 if (state.explicit !== null)
788 result = this._encodeComposite(state.explicit, false, 'context', result);
789
790 return result;
791};
792
793Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
794 var state = this._baseState;
795
796 var node = state.choice[data.type];
797 if (!node) {
798 assert(
799 false,
800 data.type + ' not found in ' +
801 JSON.stringify(Object.keys(state.choice)));
802 }
803 return node._encode(data.value, reporter);
804};
805
806Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
807 var state = this._baseState;
808
809 if (/str$/.test(tag))
810 return this._encodeStr(data, tag);
811 else if (tag === 'objid' && state.args)
812 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
813 else if (tag === 'objid')
814 return this._encodeObjid(data, null, null);
815 else if (tag === 'gentime' || tag === 'utctime')
816 return this._encodeTime(data, tag);
817 else if (tag === 'null_')
818 return this._encodeNull();
819 else if (tag === 'int' || tag === 'enum')
820 return this._encodeInt(data, state.args && state.reverseArgs[0]);
821 else if (tag === 'bool')
822 return this._encodeBool(data);
823 else if (tag === 'objDesc')
824 return this._encodeStr(data, tag);
825 else
826 throw new Error('Unsupported tag: ' + tag);
827};
828
829Node.prototype._isNumstr = function isNumstr(str) {
830 return /^[0-9 ]*$/.test(str);
831};
832
833Node.prototype._isPrintstr = function isPrintstr(str) {
834 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
835};
836
837},{"../base":4,"minimalistic-assert":360}],6:[function(require,module,exports){
838var inherits = require('inherits');
839
840function Reporter(options) {
841 this._reporterState = {
842 obj: null,
843 path: [],
844 options: options || {},
845 errors: []
846 };
847}
848exports.Reporter = Reporter;
849
850Reporter.prototype.isError = function isError(obj) {
851 return obj instanceof ReporterError;
852};
853
854Reporter.prototype.save = function save() {
855 var state = this._reporterState;
856
857 return { obj: state.obj, pathLen: state.path.length };
858};
859
860Reporter.prototype.restore = function restore(data) {
861 var state = this._reporterState;
862
863 state.obj = data.obj;
864 state.path = state.path.slice(0, data.pathLen);
865};
866
867Reporter.prototype.enterKey = function enterKey(key) {
868 return this._reporterState.path.push(key);
869};
870
871Reporter.prototype.exitKey = function exitKey(index) {
872 var state = this._reporterState;
873
874 state.path = state.path.slice(0, index - 1);
875};
876
877Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
878 var state = this._reporterState;
879
880 this.exitKey(index);
881 if (state.obj !== null)
882 state.obj[key] = value;
883};
884
885Reporter.prototype.path = function path() {
886 return this._reporterState.path.join('/');
887};
888
889Reporter.prototype.enterObject = function enterObject() {
890 var state = this._reporterState;
891
892 var prev = state.obj;
893 state.obj = {};
894 return prev;
895};
896
897Reporter.prototype.leaveObject = function leaveObject(prev) {
898 var state = this._reporterState;
899
900 var now = state.obj;
901 state.obj = prev;
902 return now;
903};
904
905Reporter.prototype.error = function error(msg) {
906 var err;
907 var state = this._reporterState;
908
909 var inherited = msg instanceof ReporterError;
910 if (inherited) {
911 err = msg;
912 } else {
913 err = new ReporterError(state.path.map(function(elem) {
914 return '[' + JSON.stringify(elem) + ']';
915 }).join(''), msg.message || msg, msg.stack);
916 }
917
918 if (!state.options.partial)
919 throw err;
920
921 if (!inherited)
922 state.errors.push(err);
923
924 return err;
925};
926
927Reporter.prototype.wrapResult = function wrapResult(result) {
928 var state = this._reporterState;
929 if (!state.options.partial)
930 return result;
931
932 return {
933 result: this.isError(result) ? null : result,
934 errors: state.errors
935 };
936};
937
938function ReporterError(path, msg) {
939 this.path = path;
940 this.rethrow(msg);
941};
942inherits(ReporterError, Error);
943
944ReporterError.prototype.rethrow = function rethrow(msg) {
945 this.message = msg + ' at: ' + (this.path || '(shallow)');
946 if (Error.captureStackTrace)
947 Error.captureStackTrace(this, ReporterError);
948
949 if (!this.stack) {
950 try {
951 // IE only adds stack when thrown
952 throw new Error(this.message);
953 } catch (e) {
954 this.stack = e.stack;
955 }
956 }
957 return this;
958};
959
960},{"inherits":119}],7:[function(require,module,exports){
961var constants = require('../constants');
962
963exports.tagClass = {
964 0: 'universal',
965 1: 'application',
966 2: 'context',
967 3: 'private'
968};
969exports.tagClassByName = constants._reverse(exports.tagClass);
970
971exports.tag = {
972 0x00: 'end',
973 0x01: 'bool',
974 0x02: 'int',
975 0x03: 'bitstr',
976 0x04: 'octstr',
977 0x05: 'null_',
978 0x06: 'objid',
979 0x07: 'objDesc',
980 0x08: 'external',
981 0x09: 'real',
982 0x0a: 'enum',
983 0x0b: 'embed',
984 0x0c: 'utf8str',
985 0x0d: 'relativeOid',
986 0x10: 'seq',
987 0x11: 'set',
988 0x12: 'numstr',
989 0x13: 'printstr',
990 0x14: 't61str',
991 0x15: 'videostr',
992 0x16: 'ia5str',
993 0x17: 'utctime',
994 0x18: 'gentime',
995 0x19: 'graphstr',
996 0x1a: 'iso646str',
997 0x1b: 'genstr',
998 0x1c: 'unistr',
999 0x1d: 'charstr',
1000 0x1e: 'bmpstr'
1001};
1002exports.tagByName = constants._reverse(exports.tag);
1003
1004},{"../constants":8}],8:[function(require,module,exports){
1005var constants = exports;
1006
1007// Helper
1008constants._reverse = function reverse(map) {
1009 var res = {};
1010
1011 Object.keys(map).forEach(function(key) {
1012 // Convert key to integer if it is stringified
1013 if ((key | 0) == key)
1014 key = key | 0;
1015
1016 var value = map[key];
1017 res[value] = key;
1018 });
1019
1020 return res;
1021};
1022
1023constants.der = require('./der');
1024
1025},{"./der":7}],9:[function(require,module,exports){
1026var inherits = require('inherits');
1027
1028var asn1 = require('../../asn1');
1029var base = asn1.base;
1030var bignum = asn1.bignum;
1031
1032// Import DER constants
1033var der = asn1.constants.der;
1034
1035function DERDecoder(entity) {
1036 this.enc = 'der';
1037 this.name = entity.name;
1038 this.entity = entity;
1039
1040 // Construct base tree
1041 this.tree = new DERNode();
1042 this.tree._init(entity.body);
1043};
1044module.exports = DERDecoder;
1045
1046DERDecoder.prototype.decode = function decode(data, options) {
1047 if (!(data instanceof base.DecoderBuffer))
1048 data = new base.DecoderBuffer(data, options);
1049
1050 return this.tree._decode(data, options);
1051};
1052
1053// Tree methods
1054
1055function DERNode(parent) {
1056 base.Node.call(this, 'der', parent);
1057}
1058inherits(DERNode, base.Node);
1059
1060DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
1061 if (buffer.isEmpty())
1062 return false;
1063
1064 var state = buffer.save();
1065 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
1066 if (buffer.isError(decodedTag))
1067 return decodedTag;
1068
1069 buffer.restore(state);
1070
1071 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
1072 (decodedTag.tagStr + 'of') === tag || any;
1073};
1074
1075DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
1076 var decodedTag = derDecodeTag(buffer,
1077 'Failed to decode tag of "' + tag + '"');
1078 if (buffer.isError(decodedTag))
1079 return decodedTag;
1080
1081 var len = derDecodeLen(buffer,
1082 decodedTag.primitive,
1083 'Failed to get length of "' + tag + '"');
1084
1085 // Failure
1086 if (buffer.isError(len))
1087 return len;
1088
1089 if (!any &&
1090 decodedTag.tag !== tag &&
1091 decodedTag.tagStr !== tag &&
1092 decodedTag.tagStr + 'of' !== tag) {
1093 return buffer.error('Failed to match tag: "' + tag + '"');
1094 }
1095
1096 if (decodedTag.primitive || len !== null)
1097 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
1098
1099 // Indefinite length... find END tag
1100 var state = buffer.save();
1101 var res = this._skipUntilEnd(
1102 buffer,
1103 'Failed to skip indefinite length body: "' + this.tag + '"');
1104 if (buffer.isError(res))
1105 return res;
1106
1107 len = buffer.offset - state.offset;
1108 buffer.restore(state);
1109 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
1110};
1111
1112DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
1113 while (true) {
1114 var tag = derDecodeTag(buffer, fail);
1115 if (buffer.isError(tag))
1116 return tag;
1117 var len = derDecodeLen(buffer, tag.primitive, fail);
1118 if (buffer.isError(len))
1119 return len;
1120
1121 var res;
1122 if (tag.primitive || len !== null)
1123 res = buffer.skip(len)
1124 else
1125 res = this._skipUntilEnd(buffer, fail);
1126
1127 // Failure
1128 if (buffer.isError(res))
1129 return res;
1130
1131 if (tag.tagStr === 'end')
1132 break;
1133 }
1134};
1135
1136DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
1137 options) {
1138 var result = [];
1139 while (!buffer.isEmpty()) {
1140 var possibleEnd = this._peekTag(buffer, 'end');
1141 if (buffer.isError(possibleEnd))
1142 return possibleEnd;
1143
1144 var res = decoder.decode(buffer, 'der', options);
1145 if (buffer.isError(res) && possibleEnd)
1146 break;
1147 result.push(res);
1148 }
1149 return result;
1150};
1151
1152DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
1153 if (tag === 'bitstr') {
1154 var unused = buffer.readUInt8();
1155 if (buffer.isError(unused))
1156 return unused;
1157 return { unused: unused, data: buffer.raw() };
1158 } else if (tag === 'bmpstr') {
1159 var raw = buffer.raw();
1160 if (raw.length % 2 === 1)
1161 return buffer.error('Decoding of string type: bmpstr length mismatch');
1162
1163 var str = '';
1164 for (var i = 0; i < raw.length / 2; i++) {
1165 str += String.fromCharCode(raw.readUInt16BE(i * 2));
1166 }
1167 return str;
1168 } else if (tag === 'numstr') {
1169 var numstr = buffer.raw().toString('ascii');
1170 if (!this._isNumstr(numstr)) {
1171 return buffer.error('Decoding of string type: ' +
1172 'numstr unsupported characters');
1173 }
1174 return numstr;
1175 } else if (tag === 'octstr') {
1176 return buffer.raw();
1177 } else if (tag === 'objDesc') {
1178 return buffer.raw();
1179 } else if (tag === 'printstr') {
1180 var printstr = buffer.raw().toString('ascii');
1181 if (!this._isPrintstr(printstr)) {
1182 return buffer.error('Decoding of string type: ' +
1183 'printstr unsupported characters');
1184 }
1185 return printstr;
1186 } else if (/str$/.test(tag)) {
1187 return buffer.raw().toString();
1188 } else {
1189 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
1190 }
1191};
1192
1193DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
1194 var result;
1195 var identifiers = [];
1196 var ident = 0;
1197 while (!buffer.isEmpty()) {
1198 var subident = buffer.readUInt8();
1199 ident <<= 7;
1200 ident |= subident & 0x7f;
1201 if ((subident & 0x80) === 0) {
1202 identifiers.push(ident);
1203 ident = 0;
1204 }
1205 }
1206 if (subident & 0x80)
1207 identifiers.push(ident);
1208
1209 var first = (identifiers[0] / 40) | 0;
1210 var second = identifiers[0] % 40;
1211
1212 if (relative)
1213 result = identifiers;
1214 else
1215 result = [first, second].concat(identifiers.slice(1));
1216
1217 if (values) {
1218 var tmp = values[result.join(' ')];
1219 if (tmp === undefined)
1220 tmp = values[result.join('.')];
1221 if (tmp !== undefined)
1222 result = tmp;
1223 }
1224
1225 return result;
1226};
1227
1228DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
1229 var str = buffer.raw().toString();
1230 if (tag === 'gentime') {
1231 var year = str.slice(0, 4) | 0;
1232 var mon = str.slice(4, 6) | 0;
1233 var day = str.slice(6, 8) | 0;
1234 var hour = str.slice(8, 10) | 0;
1235 var min = str.slice(10, 12) | 0;
1236 var sec = str.slice(12, 14) | 0;
1237 } else if (tag === 'utctime') {
1238 var year = str.slice(0, 2) | 0;
1239 var mon = str.slice(2, 4) | 0;
1240 var day = str.slice(4, 6) | 0;
1241 var hour = str.slice(6, 8) | 0;
1242 var min = str.slice(8, 10) | 0;
1243 var sec = str.slice(10, 12) | 0;
1244 if (year < 70)
1245 year = 2000 + year;
1246 else
1247 year = 1900 + year;
1248 } else {
1249 return buffer.error('Decoding ' + tag + ' time is not supported yet');
1250 }
1251
1252 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
1253};
1254
1255DERNode.prototype._decodeNull = function decodeNull(buffer) {
1256 return null;
1257};
1258
1259DERNode.prototype._decodeBool = function decodeBool(buffer) {
1260 var res = buffer.readUInt8();
1261 if (buffer.isError(res))
1262 return res;
1263 else
1264 return res !== 0;
1265};
1266
1267DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
1268 // Bigint, return as it is (assume big endian)
1269 var raw = buffer.raw();
1270 var res = new bignum(raw);
1271
1272 if (values)
1273 res = values[res.toString(10)] || res;
1274
1275 return res;
1276};
1277
1278DERNode.prototype._use = function use(entity, obj) {
1279 if (typeof entity === 'function')
1280 entity = entity(obj);
1281 return entity._getDecoder('der').tree;
1282};
1283
1284// Utility methods
1285
1286function derDecodeTag(buf, fail) {
1287 var tag = buf.readUInt8(fail);
1288 if (buf.isError(tag))
1289 return tag;
1290
1291 var cls = der.tagClass[tag >> 6];
1292 var primitive = (tag & 0x20) === 0;
1293
1294 // Multi-octet tag - load
1295 if ((tag & 0x1f) === 0x1f) {
1296 var oct = tag;
1297 tag = 0;
1298 while ((oct & 0x80) === 0x80) {
1299 oct = buf.readUInt8(fail);
1300 if (buf.isError(oct))
1301 return oct;
1302
1303 tag <<= 7;
1304 tag |= oct & 0x7f;
1305 }
1306 } else {
1307 tag &= 0x1f;
1308 }
1309 var tagStr = der.tag[tag];
1310
1311 return {
1312 cls: cls,
1313 primitive: primitive,
1314 tag: tag,
1315 tagStr: tagStr
1316 };
1317}
1318
1319function derDecodeLen(buf, primitive, fail) {
1320 var len = buf.readUInt8(fail);
1321 if (buf.isError(len))
1322 return len;
1323
1324 // Indefinite form
1325 if (!primitive && len === 0x80)
1326 return null;
1327
1328 // Definite form
1329 if ((len & 0x80) === 0) {
1330 // Short form
1331 return len;
1332 }
1333
1334 // Long form
1335 var num = len & 0x7f;
1336 if (num > 4)
1337 return buf.error('length octect is too long');
1338
1339 len = 0;
1340 for (var i = 0; i < num; i++) {
1341 len <<= 8;
1342 var j = buf.readUInt8(fail);
1343 if (buf.isError(j))
1344 return j;
1345 len |= j;
1346 }
1347
1348 return len;
1349}
1350
1351},{"../../asn1":1,"inherits":119}],10:[function(require,module,exports){
1352var decoders = exports;
1353
1354decoders.der = require('./der');
1355decoders.pem = require('./pem');
1356
1357},{"./der":9,"./pem":11}],11:[function(require,module,exports){
1358var inherits = require('inherits');
1359var Buffer = require('buffer').Buffer;
1360
1361var DERDecoder = require('./der');
1362
1363function PEMDecoder(entity) {
1364 DERDecoder.call(this, entity);
1365 this.enc = 'pem';
1366};
1367inherits(PEMDecoder, DERDecoder);
1368module.exports = PEMDecoder;
1369
1370PEMDecoder.prototype.decode = function decode(data, options) {
1371 var lines = data.toString().split(/[\r\n]+/g);
1372
1373 var label = options.label.toUpperCase();
1374
1375 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
1376 var start = -1;
1377 var end = -1;
1378 for (var i = 0; i < lines.length; i++) {
1379 var match = lines[i].match(re);
1380 if (match === null)
1381 continue;
1382
1383 if (match[2] !== label)
1384 continue;
1385
1386 if (start === -1) {
1387 if (match[1] !== 'BEGIN')
1388 break;
1389 start = i;
1390 } else {
1391 if (match[1] !== 'END')
1392 break;
1393 end = i;
1394 break;
1395 }
1396 }
1397 if (start === -1 || end === -1)
1398 throw new Error('PEM section not found for: ' + label);
1399
1400 var base64 = lines.slice(start + 1, end).join('');
1401 // Remove excessive symbols
1402 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
1403
1404 var input = new Buffer(base64, 'base64');
1405 return DERDecoder.prototype.decode.call(this, input, options);
1406};
1407
1408},{"./der":9,"buffer":50,"inherits":119}],12:[function(require,module,exports){
1409var inherits = require('inherits');
1410var Buffer = require('buffer').Buffer;
1411
1412var asn1 = require('../../asn1');
1413var base = asn1.base;
1414
1415// Import DER constants
1416var der = asn1.constants.der;
1417
1418function DEREncoder(entity) {
1419 this.enc = 'der';
1420 this.name = entity.name;
1421 this.entity = entity;
1422
1423 // Construct base tree
1424 this.tree = new DERNode();
1425 this.tree._init(entity.body);
1426};
1427module.exports = DEREncoder;
1428
1429DEREncoder.prototype.encode = function encode(data, reporter) {
1430 return this.tree._encode(data, reporter).join();
1431};
1432
1433// Tree methods
1434
1435function DERNode(parent) {
1436 base.Node.call(this, 'der', parent);
1437}
1438inherits(DERNode, base.Node);
1439
1440DERNode.prototype._encodeComposite = function encodeComposite(tag,
1441 primitive,
1442 cls,
1443 content) {
1444 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
1445
1446 // Short form
1447 if (content.length < 0x80) {
1448 var header = new Buffer(2);
1449 header[0] = encodedTag;
1450 header[1] = content.length;
1451 return this._createEncoderBuffer([ header, content ]);
1452 }
1453
1454 // Long form
1455 // Count octets required to store length
1456 var lenOctets = 1;
1457 for (var i = content.length; i >= 0x100; i >>= 8)
1458 lenOctets++;
1459
1460 var header = new Buffer(1 + 1 + lenOctets);
1461 header[0] = encodedTag;
1462 header[1] = 0x80 | lenOctets;
1463
1464 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
1465 header[i] = j & 0xff;
1466
1467 return this._createEncoderBuffer([ header, content ]);
1468};
1469
1470DERNode.prototype._encodeStr = function encodeStr(str, tag) {
1471 if (tag === 'bitstr') {
1472 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
1473 } else if (tag === 'bmpstr') {
1474 var buf = new Buffer(str.length * 2);
1475 for (var i = 0; i < str.length; i++) {
1476 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
1477 }
1478 return this._createEncoderBuffer(buf);
1479 } else if (tag === 'numstr') {
1480 if (!this._isNumstr(str)) {
1481 return this.reporter.error('Encoding of string type: numstr supports ' +
1482 'only digits and space');
1483 }
1484 return this._createEncoderBuffer(str);
1485 } else if (tag === 'printstr') {
1486 if (!this._isPrintstr(str)) {
1487 return this.reporter.error('Encoding of string type: printstr supports ' +
1488 'only latin upper and lower case letters, ' +
1489 'digits, space, apostrophe, left and rigth ' +
1490 'parenthesis, plus sign, comma, hyphen, ' +
1491 'dot, slash, colon, equal sign, ' +
1492 'question mark');
1493 }
1494 return this._createEncoderBuffer(str);
1495 } else if (/str$/.test(tag)) {
1496 return this._createEncoderBuffer(str);
1497 } else if (tag === 'objDesc') {
1498 return this._createEncoderBuffer(str);
1499 } else {
1500 return this.reporter.error('Encoding of string type: ' + tag +
1501 ' unsupported');
1502 }
1503};
1504
1505DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
1506 if (typeof id === 'string') {
1507 if (!values)
1508 return this.reporter.error('string objid given, but no values map found');
1509 if (!values.hasOwnProperty(id))
1510 return this.reporter.error('objid not found in values map');
1511 id = values[id].split(/[\s\.]+/g);
1512 for (var i = 0; i < id.length; i++)
1513 id[i] |= 0;
1514 } else if (Array.isArray(id)) {
1515 id = id.slice();
1516 for (var i = 0; i < id.length; i++)
1517 id[i] |= 0;
1518 }
1519
1520 if (!Array.isArray(id)) {
1521 return this.reporter.error('objid() should be either array or string, ' +
1522 'got: ' + JSON.stringify(id));
1523 }
1524
1525 if (!relative) {
1526 if (id[1] >= 40)
1527 return this.reporter.error('Second objid identifier OOB');
1528 id.splice(0, 2, id[0] * 40 + id[1]);
1529 }
1530
1531 // Count number of octets
1532 var size = 0;
1533 for (var i = 0; i < id.length; i++) {
1534 var ident = id[i];
1535 for (size++; ident >= 0x80; ident >>= 7)
1536 size++;
1537 }
1538
1539 var objid = new Buffer(size);
1540 var offset = objid.length - 1;
1541 for (var i = id.length - 1; i >= 0; i--) {
1542 var ident = id[i];
1543 objid[offset--] = ident & 0x7f;
1544 while ((ident >>= 7) > 0)
1545 objid[offset--] = 0x80 | (ident & 0x7f);
1546 }
1547
1548 return this._createEncoderBuffer(objid);
1549};
1550
1551function two(num) {
1552 if (num < 10)
1553 return '0' + num;
1554 else
1555 return num;
1556}
1557
1558DERNode.prototype._encodeTime = function encodeTime(time, tag) {
1559 var str;
1560 var date = new Date(time);
1561
1562 if (tag === 'gentime') {
1563 str = [
1564 two(date.getFullYear()),
1565 two(date.getUTCMonth() + 1),
1566 two(date.getUTCDate()),
1567 two(date.getUTCHours()),
1568 two(date.getUTCMinutes()),
1569 two(date.getUTCSeconds()),
1570 'Z'
1571 ].join('');
1572 } else if (tag === 'utctime') {
1573 str = [
1574 two(date.getFullYear() % 100),
1575 two(date.getUTCMonth() + 1),
1576 two(date.getUTCDate()),
1577 two(date.getUTCHours()),
1578 two(date.getUTCMinutes()),
1579 two(date.getUTCSeconds()),
1580 'Z'
1581 ].join('');
1582 } else {
1583 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
1584 }
1585
1586 return this._encodeStr(str, 'octstr');
1587};
1588
1589DERNode.prototype._encodeNull = function encodeNull() {
1590 return this._createEncoderBuffer('');
1591};
1592
1593DERNode.prototype._encodeInt = function encodeInt(num, values) {
1594 if (typeof num === 'string') {
1595 if (!values)
1596 return this.reporter.error('String int or enum given, but no values map');
1597 if (!values.hasOwnProperty(num)) {
1598 return this.reporter.error('Values map doesn\'t contain: ' +
1599 JSON.stringify(num));
1600 }
1601 num = values[num];
1602 }
1603
1604 // Bignum, assume big endian
1605 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
1606 var numArray = num.toArray();
1607 if (!num.sign && numArray[0] & 0x80) {
1608 numArray.unshift(0);
1609 }
1610 num = new Buffer(numArray);
1611 }
1612
1613 if (Buffer.isBuffer(num)) {
1614 var size = num.length;
1615 if (num.length === 0)
1616 size++;
1617
1618 var out = new Buffer(size);
1619 num.copy(out);
1620 if (num.length === 0)
1621 out[0] = 0
1622 return this._createEncoderBuffer(out);
1623 }
1624
1625 if (num < 0x80)
1626 return this._createEncoderBuffer(num);
1627
1628 if (num < 0x100)
1629 return this._createEncoderBuffer([0, num]);
1630
1631 var size = 1;
1632 for (var i = num; i >= 0x100; i >>= 8)
1633 size++;
1634
1635 var out = new Array(size);
1636 for (var i = out.length - 1; i >= 0; i--) {
1637 out[i] = num & 0xff;
1638 num >>= 8;
1639 }
1640 if(out[0] & 0x80) {
1641 out.unshift(0);
1642 }
1643
1644 return this._createEncoderBuffer(new Buffer(out));
1645};
1646
1647DERNode.prototype._encodeBool = function encodeBool(value) {
1648 return this._createEncoderBuffer(value ? 0xff : 0);
1649};
1650
1651DERNode.prototype._use = function use(entity, obj) {
1652 if (typeof entity === 'function')
1653 entity = entity(obj);
1654 return entity._getEncoder('der').tree;
1655};
1656
1657DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
1658 var state = this._baseState;
1659 var i;
1660 if (state['default'] === null)
1661 return false;
1662
1663 var data = dataBuffer.join();
1664 if (state.defaultBuffer === undefined)
1665 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
1666
1667 if (data.length !== state.defaultBuffer.length)
1668 return false;
1669
1670 for (i=0; i < data.length; i++)
1671 if (data[i] !== state.defaultBuffer[i])
1672 return false;
1673
1674 return true;
1675};
1676
1677// Utility methods
1678
1679function encodeTag(tag, primitive, cls, reporter) {
1680 var res;
1681
1682 if (tag === 'seqof')
1683 tag = 'seq';
1684 else if (tag === 'setof')
1685 tag = 'set';
1686
1687 if (der.tagByName.hasOwnProperty(tag))
1688 res = der.tagByName[tag];
1689 else if (typeof tag === 'number' && (tag | 0) === tag)
1690 res = tag;
1691 else
1692 return reporter.error('Unknown tag: ' + tag);
1693
1694 if (res >= 0x1f)
1695 return reporter.error('Multi-octet tag encoding unsupported');
1696
1697 if (!primitive)
1698 res |= 0x20;
1699
1700 res |= (der.tagClassByName[cls || 'universal'] << 6);
1701
1702 return res;
1703}
1704
1705},{"../../asn1":1,"buffer":50,"inherits":119}],13:[function(require,module,exports){
1706var encoders = exports;
1707
1708encoders.der = require('./der');
1709encoders.pem = require('./pem');
1710
1711},{"./der":12,"./pem":14}],14:[function(require,module,exports){
1712var inherits = require('inherits');
1713
1714var DEREncoder = require('./der');
1715
1716function PEMEncoder(entity) {
1717 DEREncoder.call(this, entity);
1718 this.enc = 'pem';
1719};
1720inherits(PEMEncoder, DEREncoder);
1721module.exports = PEMEncoder;
1722
1723PEMEncoder.prototype.encode = function encode(data, options) {
1724 var buf = DEREncoder.prototype.encode.call(this, data);
1725
1726 var p = buf.toString('base64');
1727 var out = [ '-----BEGIN ' + options.label + '-----' ];
1728 for (var i = 0; i < p.length; i += 64)
1729 out.push(p.slice(i, i + 64));
1730 out.push('-----END ' + options.label + '-----');
1731 return out.join('\n');
1732};
1733
1734},{"./der":12,"inherits":119}],15:[function(require,module,exports){
1735"use strict";
1736
1737/**
1738 * Generate a character map.
1739 * @param {string} alphabet e.g. "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
1740 * @param {object} mappings map overrides from key to value
1741 * @method
1742 */
1743
1744var charmap = function (alphabet, mappings) {
1745 mappings || (mappings = {});
1746 alphabet.split("").forEach(function (c, i) {
1747 if (!(c in mappings)) mappings[c] = i;
1748 });
1749 return mappings;
1750}
1751
1752/**
1753 * The RFC 4648 base 32 alphabet and character map.
1754 * @see {@link https://tools.ietf.org/html/rfc4648}
1755 */
1756
1757var rfc4648 = {
1758 alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
1759 charmap: {
1760 0: 14,
1761 1: 8
1762 }
1763};
1764
1765rfc4648.charmap = charmap(rfc4648.alphabet, rfc4648.charmap);
1766
1767/**
1768 * The Crockford base 32 alphabet and character map.
1769 * @see {@link http://www.crockford.com/wrmg/base32.html}
1770 */
1771
1772var crockford = {
1773 alphabet: "0123456789ABCDEFGHJKMNPQRSTVWXYZ",
1774 charmap: {
1775 O: 0,
1776 I: 1,
1777 L: 1
1778 }
1779};
1780
1781crockford.charmap = charmap(crockford.alphabet, crockford.charmap);
1782
1783/**
1784 * base32hex
1785 * @see {@link https://en.wikipedia.org/wiki/Base32#base32hex}
1786 */
1787
1788var base32hex = {
1789 alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV",
1790 charmap: {}
1791};
1792
1793base32hex.charmap = charmap(base32hex.alphabet, base32hex.charmap);
1794
1795/**
1796 * Create a new `Decoder` with the given options.
1797 *
1798 * @param {object} [options]
1799 * @param {string} [type] Supported Base-32 variants are "rfc4648" and
1800 * "crockford".
1801 * @param {object} [charmap] Override the character map used in decoding.
1802 * @constructor
1803 */
1804
1805function Decoder (options) {
1806 this.buf = [];
1807 this.shift = 8;
1808 this.carry = 0;
1809
1810 if (options) {
1811
1812 switch (options.type) {
1813 case "rfc4648":
1814 this.charmap = exports.rfc4648.charmap;
1815 break;
1816 case "crockford":
1817 this.charmap = exports.crockford.charmap;
1818 break;
1819 case "base32hex":
1820 this.charmap = exports.base32hex.charmap;
1821 break;
1822 default:
1823 throw new Error("invalid type");
1824 }
1825
1826 if (options.charmap) this.charmap = options.charmap;
1827 }
1828}
1829
1830/**
1831 * The default character map coresponds to RFC4648.
1832 */
1833
1834Decoder.prototype.charmap = rfc4648.charmap;
1835
1836/**
1837 * Decode a string, continuing from the previous state.
1838 *
1839 * @param {string} str
1840 * @return {Decoder} this
1841 */
1842
1843Decoder.prototype.write = function (str) {
1844 var charmap = this.charmap;
1845 var buf = this.buf;
1846 var shift = this.shift;
1847 var carry = this.carry;
1848
1849 // decode string
1850 str.toUpperCase().split("").forEach(function (char) {
1851
1852 // ignore padding
1853 if (char == "=") return;
1854
1855 // lookup symbol
1856 var symbol = charmap[char] & 0xff;
1857
1858 // 1: 00000 000
1859 // 2: 00 00000 0
1860 // 3: 0000 0000
1861 // 4: 0 00000 00
1862 // 5: 000 00000
1863 // 6: 00000 000
1864 // 7: 00 00000 0
1865
1866 shift -= 5;
1867 if (shift > 0) {
1868 carry |= symbol << shift;
1869 } else if (shift < 0) {
1870 buf.push(carry | (symbol >> -shift));
1871 shift += 8;
1872 carry = (symbol << shift) & 0xff;
1873 } else {
1874 buf.push(carry | symbol);
1875 shift = 8;
1876 carry = 0;
1877 }
1878 });
1879
1880 // save state
1881 this.shift = shift;
1882 this.carry = carry;
1883
1884 // for chaining
1885 return this;
1886};
1887
1888/**
1889 * Finish decoding.
1890 *
1891 * @param {string} [str] The final string to decode.
1892 * @return {Array} Decoded byte array.
1893 */
1894
1895Decoder.prototype.finalize = function (str) {
1896 if (str) {
1897 this.write(str);
1898 }
1899 if (this.shift !== 8 && this.carry !== 0) {
1900 this.buf.push(this.carry);
1901 this.shift = 8;
1902 this.carry = 0;
1903 }
1904 return this.buf;
1905};
1906
1907/**
1908 * Create a new `Encoder` with the given options.
1909 *
1910 * @param {object} [options]
1911 * @param {string} [type] Supported Base-32 variants are "rfc4648" and
1912 * "crockford".
1913 * @param {object} [alphabet] Override the alphabet used in encoding.
1914 * @constructor
1915 */
1916
1917function Encoder (options) {
1918 this.buf = "";
1919 this.shift = 3;
1920 this.carry = 0;
1921
1922 if (options) {
1923
1924 switch (options.type) {
1925 case "rfc4648":
1926 this.alphabet = exports.rfc4648.alphabet;
1927 break;
1928 case "crockford":
1929 this.alphabet = exports.crockford.alphabet;
1930 break;
1931 case "base32hex":
1932 this.alphabet = exports.base32hex.alphabet;
1933 break;
1934 default:
1935 throw new Error("invalid type");
1936 }
1937
1938 if (options.alphabet) this.alphabet = options.alphabet;
1939 else if (options.lc) this.alphabet = this.alphabet.toLowerCase();
1940 }
1941}
1942
1943/**
1944 * The default alphabet coresponds to RFC4648.
1945 */
1946
1947Encoder.prototype.alphabet = rfc4648.alphabet;
1948
1949/**
1950 * Encode a byte array, continuing from the previous state.
1951 *
1952 * @param {byte[]} buf The byte array to encode.
1953 * @return {Encoder} this
1954 */
1955
1956Encoder.prototype.write = function (buf) {
1957 var shift = this.shift;
1958 var carry = this.carry;
1959 var symbol;
1960 var byte;
1961 var i;
1962
1963 // encode each byte in buf
1964 for (i = 0; i < buf.length; i++) {
1965 byte = buf[i];
1966
1967 // 1: 00000 000
1968 // 2: 00 00000 0
1969 // 3: 0000 0000
1970 // 4: 0 00000 00
1971 // 5: 000 00000
1972 // 6: 00000 000
1973 // 7: 00 00000 0
1974
1975 symbol = carry | (byte >> shift);
1976 this.buf += this.alphabet[symbol & 0x1f];
1977
1978 if (shift > 5) {
1979 shift -= 5;
1980 symbol = byte >> shift;
1981 this.buf += this.alphabet[symbol & 0x1f];
1982 }
1983
1984 shift = 5 - shift;
1985 carry = byte << shift;
1986 shift = 8 - shift;
1987 }
1988
1989 // save state
1990 this.shift = shift;
1991 this.carry = carry;
1992
1993 // for chaining
1994 return this;
1995};
1996
1997/**
1998 * Finish encoding.
1999 *
2000 * @param {byte[]} [buf] The final byte array to encode.
2001 * @return {string} The encoded byte array.
2002 */
2003
2004Encoder.prototype.finalize = function (buf) {
2005 if (buf) {
2006 this.write(buf);
2007 }
2008 if (this.shift !== 3) {
2009 this.buf += this.alphabet[this.carry & 0x1f];
2010 this.shift = 3;
2011 this.carry = 0;
2012 }
2013 return this.buf;
2014};
2015
2016/**
2017 * Convenience encoder.
2018 *
2019 * @param {byte[]} buf The byte array to encode.
2020 * @param {object} [options] Options to pass to the encoder.
2021 * @return {string} The encoded string.
2022 */
2023
2024exports.encode = function (buf, options) {
2025 return new Encoder(options).finalize(buf);
2026};
2027
2028/**
2029 * Convenience decoder.
2030 *
2031 * @param {string} str The string to decode.
2032 * @param {object} [options] Options to pass to the decoder.
2033 * @return {byte[]} The decoded byte array.
2034 */
2035
2036exports.decode = function (str, options) {
2037 return new Decoder(options).finalize(str);
2038};
2039
2040// Exports.
2041exports.Decoder = Decoder;
2042exports.Encoder = Encoder;
2043exports.charmap = charmap;
2044exports.crockford = crockford;
2045exports.rfc4648 = rfc4648;
2046exports.base32hex = base32hex;
2047
2048},{}],16:[function(require,module,exports){
2049'use strict'
2050
2051exports.byteLength = byteLength
2052exports.toByteArray = toByteArray
2053exports.fromByteArray = fromByteArray
2054
2055var lookup = []
2056var revLookup = []
2057var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
2058
2059var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
2060for (var i = 0, len = code.length; i < len; ++i) {
2061 lookup[i] = code[i]
2062 revLookup[code.charCodeAt(i)] = i
2063}
2064
2065// Support decoding URL-safe base64 strings, as Node.js does.
2066// See: https://en.wikipedia.org/wiki/Base64#URL_applications
2067revLookup['-'.charCodeAt(0)] = 62
2068revLookup['_'.charCodeAt(0)] = 63
2069
2070function getLens (b64) {
2071 var len = b64.length
2072
2073 if (len % 4 > 0) {
2074 throw new Error('Invalid string. Length must be a multiple of 4')
2075 }
2076
2077 // Trim off extra bytes after placeholder bytes are found
2078 // See: https://github.com/beatgammit/base64-js/issues/42
2079 var validLen = b64.indexOf('=')
2080 if (validLen === -1) validLen = len
2081
2082 var placeHoldersLen = validLen === len
2083 ? 0
2084 : 4 - (validLen % 4)
2085
2086 return [validLen, placeHoldersLen]
2087}
2088
2089// base64 is 4/3 + up to two characters of the original data
2090function byteLength (b64) {
2091 var lens = getLens(b64)
2092 var validLen = lens[0]
2093 var placeHoldersLen = lens[1]
2094 return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
2095}
2096
2097function _byteLength (b64, validLen, placeHoldersLen) {
2098 return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
2099}
2100
2101function toByteArray (b64) {
2102 var tmp
2103 var lens = getLens(b64)
2104 var validLen = lens[0]
2105 var placeHoldersLen = lens[1]
2106
2107 var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
2108
2109 var curByte = 0
2110
2111 // if there are placeholders, only get up to the last complete 4 chars
2112 var len = placeHoldersLen > 0
2113 ? validLen - 4
2114 : validLen
2115
2116 for (var i = 0; i < len; i += 4) {
2117 tmp =
2118 (revLookup[b64.charCodeAt(i)] << 18) |
2119 (revLookup[b64.charCodeAt(i + 1)] << 12) |
2120 (revLookup[b64.charCodeAt(i + 2)] << 6) |
2121 revLookup[b64.charCodeAt(i + 3)]
2122 arr[curByte++] = (tmp >> 16) & 0xFF
2123 arr[curByte++] = (tmp >> 8) & 0xFF
2124 arr[curByte++] = tmp & 0xFF
2125 }
2126
2127 if (placeHoldersLen === 2) {
2128 tmp =
2129 (revLookup[b64.charCodeAt(i)] << 2) |
2130 (revLookup[b64.charCodeAt(i + 1)] >> 4)
2131 arr[curByte++] = tmp & 0xFF
2132 }
2133
2134 if (placeHoldersLen === 1) {
2135 tmp =
2136 (revLookup[b64.charCodeAt(i)] << 10) |
2137 (revLookup[b64.charCodeAt(i + 1)] << 4) |
2138 (revLookup[b64.charCodeAt(i + 2)] >> 2)
2139 arr[curByte++] = (tmp >> 8) & 0xFF
2140 arr[curByte++] = tmp & 0xFF
2141 }
2142
2143 return arr
2144}
2145
2146function tripletToBase64 (num) {
2147 return lookup[num >> 18 & 0x3F] +
2148 lookup[num >> 12 & 0x3F] +
2149 lookup[num >> 6 & 0x3F] +
2150 lookup[num & 0x3F]
2151}
2152
2153function encodeChunk (uint8, start, end) {
2154 var tmp
2155 var output = []
2156 for (var i = start; i < end; i += 3) {
2157 tmp =
2158 ((uint8[i] << 16) & 0xFF0000) +
2159 ((uint8[i + 1] << 8) & 0xFF00) +
2160 (uint8[i + 2] & 0xFF)
2161 output.push(tripletToBase64(tmp))
2162 }
2163 return output.join('')
2164}
2165
2166function fromByteArray (uint8) {
2167 var tmp
2168 var len = uint8.length
2169 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
2170 var parts = []
2171 var maxChunkLength = 16383 // must be multiple of 3
2172
2173 // go through the array every three bytes, we'll deal with trailing stuff later
2174 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
2175 parts.push(encodeChunk(
2176 uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
2177 ))
2178 }
2179
2180 // pad the end with zeros, but make sure to not forget the extra bytes
2181 if (extraBytes === 1) {
2182 tmp = uint8[len - 1]
2183 parts.push(
2184 lookup[tmp >> 2] +
2185 lookup[(tmp << 4) & 0x3F] +
2186 '=='
2187 )
2188 } else if (extraBytes === 2) {
2189 tmp = (uint8[len - 2] << 8) + uint8[len - 1]
2190 parts.push(
2191 lookup[tmp >> 10] +
2192 lookup[(tmp >> 4) & 0x3F] +
2193 lookup[(tmp << 2) & 0x3F] +
2194 '='
2195 )
2196 }
2197
2198 return parts.join('')
2199}
2200
2201},{}],17:[function(require,module,exports){
2202/*! bignumber.js v4.1.0 https://github.com/MikeMcl/bignumber.js/LICENCE */
2203
2204;(function (globalObj) {
2205 'use strict';
2206
2207 /*
2208 bignumber.js v4.1.0
2209 A JavaScript library for arbitrary-precision arithmetic.
2210 https://github.com/MikeMcl/bignumber.js
2211 Copyright (c) 2017 Michael Mclaughlin <M8ch88l@gmail.com>
2212 MIT Expat Licence
2213 */
2214
2215
2216 var BigNumber,
2217 isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
2218 mathceil = Math.ceil,
2219 mathfloor = Math.floor,
2220 notBool = ' not a boolean or binary digit',
2221 roundingMode = 'rounding mode',
2222 tooManyDigits = 'number type has more than 15 significant digits',
2223 ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',
2224 BASE = 1e14,
2225 LOG_BASE = 14,
2226 MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1
2227 // MAX_INT32 = 0x7fffffff, // 2^31 - 1
2228 POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
2229 SQRT_BASE = 1e7,
2230
2231 /*
2232 * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
2233 * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an
2234 * exception is thrown (if ERRORS is true).
2235 */
2236 MAX = 1E9; // 0 to MAX_INT32
2237
2238
2239 /*
2240 * Create and return a BigNumber constructor.
2241 */
2242 function constructorFactory(config) {
2243 var div, parseNumeric,
2244
2245 // id tracks the caller function, so its name can be included in error messages.
2246 id = 0,
2247 P = BigNumber.prototype,
2248 ONE = new BigNumber(1),
2249
2250
2251 /********************************* EDITABLE DEFAULTS **********************************/
2252
2253
2254 /*
2255 * The default values below must be integers within the inclusive ranges stated.
2256 * The values can also be changed at run-time using BigNumber.config.
2257 */
2258
2259 // The maximum number of decimal places for operations involving division.
2260 DECIMAL_PLACES = 20, // 0 to MAX
2261
2262 /*
2263 * The rounding mode used when rounding to the above decimal places, and when using
2264 * toExponential, toFixed, toFormat and toPrecision, and round (default value).
2265 * UP 0 Away from zero.
2266 * DOWN 1 Towards zero.
2267 * CEIL 2 Towards +Infinity.
2268 * FLOOR 3 Towards -Infinity.
2269 * HALF_UP 4 Towards nearest neighbour. If equidistant, up.
2270 * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
2271 * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
2272 * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
2273 * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
2274 */
2275 ROUNDING_MODE = 4, // 0 to 8
2276
2277 // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]
2278
2279 // The exponent value at and beneath which toString returns exponential notation.
2280 // Number type: -7
2281 TO_EXP_NEG = -7, // 0 to -MAX
2282
2283 // The exponent value at and above which toString returns exponential notation.
2284 // Number type: 21
2285 TO_EXP_POS = 21, // 0 to MAX
2286
2287 // RANGE : [MIN_EXP, MAX_EXP]
2288
2289 // The minimum exponent value, beneath which underflow to zero occurs.
2290 // Number type: -324 (5e-324)
2291 MIN_EXP = -1e7, // -1 to -MAX
2292
2293 // The maximum exponent value, above which overflow to Infinity occurs.
2294 // Number type: 308 (1.7976931348623157e+308)
2295 // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
2296 MAX_EXP = 1e7, // 1 to MAX
2297
2298 // Whether BigNumber Errors are ever thrown.
2299 ERRORS = true, // true or false
2300
2301 // Change to intValidatorNoErrors if ERRORS is false.
2302 isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors
2303
2304 // Whether to use cryptographically-secure random number generation, if available.
2305 CRYPTO = false, // true or false
2306
2307 /*
2308 * The modulo mode used when calculating the modulus: a mod n.
2309 * The quotient (q = a / n) is calculated according to the corresponding rounding mode.
2310 * The remainder (r) is calculated as: r = a - n * q.
2311 *
2312 * UP 0 The remainder is positive if the dividend is negative, else is negative.
2313 * DOWN 1 The remainder has the same sign as the dividend.
2314 * This modulo mode is commonly known as 'truncated division' and is
2315 * equivalent to (a % n) in JavaScript.
2316 * FLOOR 3 The remainder has the same sign as the divisor (Python %).
2317 * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
2318 * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).
2319 * The remainder is always positive.
2320 *
2321 * The truncated division, floored division, Euclidian division and IEEE 754 remainder
2322 * modes are commonly used for the modulus operation.
2323 * Although the other rounding modes can also be used, they may not give useful results.
2324 */
2325 MODULO_MODE = 1, // 0 to 9
2326
2327 // The maximum number of significant digits of the result of the toPower operation.
2328 // If POW_PRECISION is 0, there will be unlimited significant digits.
2329 POW_PRECISION = 0, // 0 to MAX
2330
2331 // The format specification used by the BigNumber.prototype.toFormat method.
2332 FORMAT = {
2333 decimalSeparator: '.',
2334 groupSeparator: ',',
2335 groupSize: 3,
2336 secondaryGroupSize: 0,
2337 fractionGroupSeparator: '\xA0', // non-breaking space
2338 fractionGroupSize: 0
2339 };
2340
2341
2342 /******************************************************************************************/
2343
2344
2345 // CONSTRUCTOR
2346
2347
2348 /*
2349 * The BigNumber constructor and exported function.
2350 * Create and return a new instance of a BigNumber object.
2351 *
2352 * n {number|string|BigNumber} A numeric value.
2353 * [b] {number} The base of n. Integer, 2 to 64 inclusive.
2354 */
2355 function BigNumber( n, b ) {
2356 var c, e, i, num, len, str,
2357 x = this;
2358
2359 // Enable constructor usage without new.
2360 if ( !( x instanceof BigNumber ) ) {
2361
2362 // 'BigNumber() constructor call without new: {n}'
2363 if (ERRORS) raise( 26, 'constructor call without new', n );
2364 return new BigNumber( n, b );
2365 }
2366
2367 // 'new BigNumber() base not an integer: {b}'
2368 // 'new BigNumber() base out of range: {b}'
2369 if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {
2370
2371 // Duplicate.
2372 if ( n instanceof BigNumber ) {
2373 x.s = n.s;
2374 x.e = n.e;
2375 x.c = ( n = n.c ) ? n.slice() : n;
2376 id = 0;
2377 return;
2378 }
2379
2380 if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {
2381 x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;
2382
2383 // Fast path for integers.
2384 if ( n === ~~n ) {
2385 for ( e = 0, i = n; i >= 10; i /= 10, e++ );
2386 x.e = e;
2387 x.c = [n];
2388 id = 0;
2389 return;
2390 }
2391
2392 str = n + '';
2393 } else {
2394 if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );
2395 x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
2396 }
2397 } else {
2398 b = b | 0;
2399 str = n + '';
2400
2401 // Ensure return value is rounded to DECIMAL_PLACES as with other bases.
2402 // Allow exponential notation to be used with base 10 argument.
2403 if ( b == 10 ) {
2404 x = new BigNumber( n instanceof BigNumber ? n : str );
2405 return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );
2406 }
2407
2408 // Avoid potential interpretation of Infinity and NaN as base 44+ values.
2409 // Any number in exponential form will fail due to the [Ee][+-].
2410 if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||
2411 !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +
2412 '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {
2413 return parseNumeric( x, str, num, b );
2414 }
2415
2416 if (num) {
2417 x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;
2418
2419 if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) {
2420
2421 // 'new BigNumber() number type has more than 15 significant digits: {n}'
2422 raise( id, tooManyDigits, n );
2423 }
2424
2425 // Prevent later check for length on converted number.
2426 num = false;
2427 } else {
2428 x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
2429 }
2430
2431 str = convertBase( str, 10, b, x.s );
2432 }
2433
2434 // Decimal point?
2435 if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );
2436
2437 // Exponential form?
2438 if ( ( i = str.search( /e/i ) ) > 0 ) {
2439
2440 // Determine exponent.
2441 if ( e < 0 ) e = i;
2442 e += +str.slice( i + 1 );
2443 str = str.substring( 0, i );
2444 } else if ( e < 0 ) {
2445
2446 // Integer.
2447 e = str.length;
2448 }
2449
2450 // Determine leading zeros.
2451 for ( i = 0; str.charCodeAt(i) === 48; i++ );
2452
2453 // Determine trailing zeros.
2454 for ( len = str.length; str.charCodeAt(--len) === 48; );
2455 str = str.slice( i, len + 1 );
2456
2457 if (str) {
2458 len = str.length;
2459
2460 // Disallow numbers with over 15 significant digits if number type.
2461 // 'new BigNumber() number type has more than 15 significant digits: {n}'
2462 if ( num && ERRORS && len > 15 && ( n > MAX_SAFE_INTEGER || n !== mathfloor(n) ) ) {
2463 raise( id, tooManyDigits, x.s * n );
2464 }
2465
2466 e = e - i - 1;
2467
2468 // Overflow?
2469 if ( e > MAX_EXP ) {
2470
2471 // Infinity.
2472 x.c = x.e = null;
2473
2474 // Underflow?
2475 } else if ( e < MIN_EXP ) {
2476
2477 // Zero.
2478 x.c = [ x.e = 0 ];
2479 } else {
2480 x.e = e;
2481 x.c = [];
2482
2483 // Transform base
2484
2485 // e is the base 10 exponent.
2486 // i is where to slice str to get the first element of the coefficient array.
2487 i = ( e + 1 ) % LOG_BASE;
2488 if ( e < 0 ) i += LOG_BASE;
2489
2490 if ( i < len ) {
2491 if (i) x.c.push( +str.slice( 0, i ) );
2492
2493 for ( len -= LOG_BASE; i < len; ) {
2494 x.c.push( +str.slice( i, i += LOG_BASE ) );
2495 }
2496
2497 str = str.slice(i);
2498 i = LOG_BASE - str.length;
2499 } else {
2500 i -= len;
2501 }
2502
2503 for ( ; i--; str += '0' );
2504 x.c.push( +str );
2505 }
2506 } else {
2507
2508 // Zero.
2509 x.c = [ x.e = 0 ];
2510 }
2511
2512 id = 0;
2513 }
2514
2515
2516 // CONSTRUCTOR PROPERTIES
2517
2518
2519 BigNumber.another = constructorFactory;
2520
2521 BigNumber.ROUND_UP = 0;
2522 BigNumber.ROUND_DOWN = 1;
2523 BigNumber.ROUND_CEIL = 2;
2524 BigNumber.ROUND_FLOOR = 3;
2525 BigNumber.ROUND_HALF_UP = 4;
2526 BigNumber.ROUND_HALF_DOWN = 5;
2527 BigNumber.ROUND_HALF_EVEN = 6;
2528 BigNumber.ROUND_HALF_CEIL = 7;
2529 BigNumber.ROUND_HALF_FLOOR = 8;
2530 BigNumber.EUCLID = 9;
2531
2532
2533 /*
2534 * Configure infrequently-changing library-wide settings.
2535 *
2536 * Accept an object or an argument list, with one or many of the following properties or
2537 * parameters respectively:
2538 *
2539 * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive
2540 * ROUNDING_MODE {number} Integer, 0 to 8 inclusive
2541 * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or
2542 * [integer -MAX to 0 incl., 0 to MAX incl.]
2543 * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
2544 * [integer -MAX to -1 incl., integer 1 to MAX incl.]
2545 * ERRORS {boolean|number} true, false, 1 or 0
2546 * CRYPTO {boolean|number} true, false, 1 or 0
2547 * MODULO_MODE {number} 0 to 9 inclusive
2548 * POW_PRECISION {number} 0 to MAX inclusive
2549 * FORMAT {object} See BigNumber.prototype.toFormat
2550 * decimalSeparator {string}
2551 * groupSeparator {string}
2552 * groupSize {number}
2553 * secondaryGroupSize {number}
2554 * fractionGroupSeparator {string}
2555 * fractionGroupSize {number}
2556 *
2557 * (The values assigned to the above FORMAT object properties are not checked for validity.)
2558 *
2559 * E.g.
2560 * BigNumber.config(20, 4) is equivalent to
2561 * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
2562 *
2563 * Ignore properties/parameters set to null or undefined.
2564 * Return an object with the properties current values.
2565 */
2566 BigNumber.config = BigNumber.set = function () {
2567 var v, p,
2568 i = 0,
2569 r = {},
2570 a = arguments,
2571 o = a[0],
2572 has = o && typeof o == 'object'
2573 ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }
2574 : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };
2575
2576 // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
2577 // 'config() DECIMAL_PLACES not an integer: {v}'
2578 // 'config() DECIMAL_PLACES out of range: {v}'
2579 if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {
2580 DECIMAL_PLACES = v | 0;
2581 }
2582 r[p] = DECIMAL_PLACES;
2583
2584 // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
2585 // 'config() ROUNDING_MODE not an integer: {v}'
2586 // 'config() ROUNDING_MODE out of range: {v}'
2587 if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {
2588 ROUNDING_MODE = v | 0;
2589 }
2590 r[p] = ROUNDING_MODE;
2591
2592 // EXPONENTIAL_AT {number|number[]}
2593 // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].
2594 // 'config() EXPONENTIAL_AT not an integer: {v}'
2595 // 'config() EXPONENTIAL_AT out of range: {v}'
2596 if ( has( p = 'EXPONENTIAL_AT' ) ) {
2597
2598 if ( isArray(v) ) {
2599 if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {
2600 TO_EXP_NEG = v[0] | 0;
2601 TO_EXP_POS = v[1] | 0;
2602 }
2603 } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
2604 TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );
2605 }
2606 }
2607 r[p] = [ TO_EXP_NEG, TO_EXP_POS ];
2608
2609 // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
2610 // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
2611 // 'config() RANGE not an integer: {v}'
2612 // 'config() RANGE cannot be zero: {v}'
2613 // 'config() RANGE out of range: {v}'
2614 if ( has( p = 'RANGE' ) ) {
2615
2616 if ( isArray(v) ) {
2617 if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {
2618 MIN_EXP = v[0] | 0;
2619 MAX_EXP = v[1] | 0;
2620 }
2621 } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
2622 if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );
2623 else if (ERRORS) raise( 2, p + ' cannot be zero', v );
2624 }
2625 }
2626 r[p] = [ MIN_EXP, MAX_EXP ];
2627
2628 // ERRORS {boolean|number} true, false, 1 or 0.
2629 // 'config() ERRORS not a boolean or binary digit: {v}'
2630 if ( has( p = 'ERRORS' ) ) {
2631
2632 if ( v === !!v || v === 1 || v === 0 ) {
2633 id = 0;
2634 isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;
2635 } else if (ERRORS) {
2636 raise( 2, p + notBool, v );
2637 }
2638 }
2639 r[p] = ERRORS;
2640
2641 // CRYPTO {boolean|number} true, false, 1 or 0.
2642 // 'config() CRYPTO not a boolean or binary digit: {v}'
2643 // 'config() crypto unavailable: {crypto}'
2644 if ( has( p = 'CRYPTO' ) ) {
2645
2646 if ( v === true || v === false || v === 1 || v === 0 ) {
2647 if (v) {
2648 v = typeof crypto == 'undefined';
2649 if ( !v && crypto && (crypto.getRandomValues || crypto.randomBytes)) {
2650 CRYPTO = true;
2651 } else if (ERRORS) {
2652 raise( 2, 'crypto unavailable', v ? void 0 : crypto );
2653 } else {
2654 CRYPTO = false;
2655 }
2656 } else {
2657 CRYPTO = false;
2658 }
2659 } else if (ERRORS) {
2660 raise( 2, p + notBool, v );
2661 }
2662 }
2663 r[p] = CRYPTO;
2664
2665 // MODULO_MODE {number} Integer, 0 to 9 inclusive.
2666 // 'config() MODULO_MODE not an integer: {v}'
2667 // 'config() MODULO_MODE out of range: {v}'
2668 if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {
2669 MODULO_MODE = v | 0;
2670 }
2671 r[p] = MODULO_MODE;
2672
2673 // POW_PRECISION {number} Integer, 0 to MAX inclusive.
2674 // 'config() POW_PRECISION not an integer: {v}'
2675 // 'config() POW_PRECISION out of range: {v}'
2676 if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {
2677 POW_PRECISION = v | 0;
2678 }
2679 r[p] = POW_PRECISION;
2680
2681 // FORMAT {object}
2682 // 'config() FORMAT not an object: {v}'
2683 if ( has( p = 'FORMAT' ) ) {
2684
2685 if ( typeof v == 'object' ) {
2686 FORMAT = v;
2687 } else if (ERRORS) {
2688 raise( 2, p + ' not an object', v );
2689 }
2690 }
2691 r[p] = FORMAT;
2692
2693 return r;
2694 };
2695
2696
2697 /*
2698 * Return a new BigNumber whose value is the maximum of the arguments.
2699 *
2700 * arguments {number|string|BigNumber}
2701 */
2702 BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };
2703
2704
2705 /*
2706 * Return a new BigNumber whose value is the minimum of the arguments.
2707 *
2708 * arguments {number|string|BigNumber}
2709 */
2710 BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };
2711
2712
2713 /*
2714 * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
2715 * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
2716 * zeros are produced).
2717 *
2718 * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
2719 *
2720 * 'random() decimal places not an integer: {dp}'
2721 * 'random() decimal places out of range: {dp}'
2722 * 'random() crypto unavailable: {crypto}'
2723 */
2724 BigNumber.random = (function () {
2725 var pow2_53 = 0x20000000000000;
2726
2727 // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
2728 // Check if Math.random() produces more than 32 bits of randomness.
2729 // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
2730 // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
2731 var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
2732 ? function () { return mathfloor( Math.random() * pow2_53 ); }
2733 : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
2734 (Math.random() * 0x800000 | 0); };
2735
2736 return function (dp) {
2737 var a, b, e, k, v,
2738 i = 0,
2739 c = [],
2740 rand = new BigNumber(ONE);
2741
2742 dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;
2743 k = mathceil( dp / LOG_BASE );
2744
2745 if (CRYPTO) {
2746
2747 // Browsers supporting crypto.getRandomValues.
2748 if (crypto.getRandomValues) {
2749
2750 a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );
2751
2752 for ( ; i < k; ) {
2753
2754 // 53 bits:
2755 // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
2756 // 11111 11111111 11111111 11111111 11100000 00000000 00000000
2757 // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
2758 // 11111 11111111 11111111
2759 // 0x20000 is 2^21.
2760 v = a[i] * 0x20000 + (a[i + 1] >>> 11);
2761
2762 // Rejection sampling:
2763 // 0 <= v < 9007199254740992
2764 // Probability that v >= 9e15, is
2765 // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
2766 if ( v >= 9e15 ) {
2767 b = crypto.getRandomValues( new Uint32Array(2) );
2768 a[i] = b[0];
2769 a[i + 1] = b[1];
2770 } else {
2771
2772 // 0 <= v <= 8999999999999999
2773 // 0 <= (v % 1e14) <= 99999999999999
2774 c.push( v % 1e14 );
2775 i += 2;
2776 }
2777 }
2778 i = k / 2;
2779
2780 // Node.js supporting crypto.randomBytes.
2781 } else if (crypto.randomBytes) {
2782
2783 // buffer
2784 a = crypto.randomBytes( k *= 7 );
2785
2786 for ( ; i < k; ) {
2787
2788 // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
2789 // 0x100000000 is 2^32, 0x1000000 is 2^24
2790 // 11111 11111111 11111111 11111111 11111111 11111111 11111111
2791 // 0 <= v < 9007199254740992
2792 v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +
2793 ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +
2794 ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];
2795
2796 if ( v >= 9e15 ) {
2797 crypto.randomBytes(7).copy( a, i );
2798 } else {
2799
2800 // 0 <= (v % 1e14) <= 99999999999999
2801 c.push( v % 1e14 );
2802 i += 7;
2803 }
2804 }
2805 i = k / 7;
2806 } else {
2807 CRYPTO = false;
2808 if (ERRORS) raise( 14, 'crypto unavailable', crypto );
2809 }
2810 }
2811
2812 // Use Math.random.
2813 if (!CRYPTO) {
2814
2815 for ( ; i < k; ) {
2816 v = random53bitInt();
2817 if ( v < 9e15 ) c[i++] = v % 1e14;
2818 }
2819 }
2820
2821 k = c[--i];
2822 dp %= LOG_BASE;
2823
2824 // Convert trailing digits to zeros according to dp.
2825 if ( k && dp ) {
2826 v = POWS_TEN[LOG_BASE - dp];
2827 c[i] = mathfloor( k / v ) * v;
2828 }
2829
2830 // Remove trailing elements which are zero.
2831 for ( ; c[i] === 0; c.pop(), i-- );
2832
2833 // Zero?
2834 if ( i < 0 ) {
2835 c = [ e = 0 ];
2836 } else {
2837
2838 // Remove leading elements which are zero and adjust exponent accordingly.
2839 for ( e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);
2840
2841 // Count the digits of the first element of c to determine leading zeros, and...
2842 for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);
2843
2844 // adjust the exponent accordingly.
2845 if ( i < LOG_BASE ) e -= LOG_BASE - i;
2846 }
2847
2848 rand.e = e;
2849 rand.c = c;
2850 return rand;
2851 };
2852 })();
2853
2854
2855 // PRIVATE FUNCTIONS
2856
2857
2858 // Convert a numeric string of baseIn to a numeric string of baseOut.
2859 function convertBase( str, baseOut, baseIn, sign ) {
2860 var d, e, k, r, x, xc, y,
2861 i = str.indexOf( '.' ),
2862 dp = DECIMAL_PLACES,
2863 rm = ROUNDING_MODE;
2864
2865 if ( baseIn < 37 ) str = str.toLowerCase();
2866
2867 // Non-integer.
2868 if ( i >= 0 ) {
2869 k = POW_PRECISION;
2870
2871 // Unlimited precision.
2872 POW_PRECISION = 0;
2873 str = str.replace( '.', '' );
2874 y = new BigNumber(baseIn);
2875 x = y.pow( str.length - i );
2876 POW_PRECISION = k;
2877
2878 // Convert str as if an integer, then restore the fraction part by dividing the
2879 // result by its base raised to a power.
2880 y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );
2881 y.e = y.c.length;
2882 }
2883
2884 // Convert the number as integer.
2885 xc = toBaseOut( str, baseIn, baseOut );
2886 e = k = xc.length;
2887
2888 // Remove trailing zeros.
2889 for ( ; xc[--k] == 0; xc.pop() );
2890 if ( !xc[0] ) return '0';
2891
2892 if ( i < 0 ) {
2893 --e;
2894 } else {
2895 x.c = xc;
2896 x.e = e;
2897
2898 // sign is needed for correct rounding.
2899 x.s = sign;
2900 x = div( x, y, dp, rm, baseOut );
2901 xc = x.c;
2902 r = x.r;
2903 e = x.e;
2904 }
2905
2906 d = e + dp + 1;
2907
2908 // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.
2909 i = xc[d];
2910 k = baseOut / 2;
2911 r = r || d < 0 || xc[d + 1] != null;
2912
2913 r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
2914 : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
2915 rm == ( x.s < 0 ? 8 : 7 ) );
2916
2917 if ( d < 1 || !xc[0] ) {
2918
2919 // 1^-dp or 0.
2920 str = r ? toFixedPoint( '1', -dp ) : '0';
2921 } else {
2922 xc.length = d;
2923
2924 if (r) {
2925
2926 // Rounding up may mean the previous digit has to be rounded up and so on.
2927 for ( --baseOut; ++xc[--d] > baseOut; ) {
2928 xc[d] = 0;
2929
2930 if ( !d ) {
2931 ++e;
2932 xc = [1].concat(xc);
2933 }
2934 }
2935 }
2936
2937 // Determine trailing zeros.
2938 for ( k = xc.length; !xc[--k]; );
2939
2940 // E.g. [4, 11, 15] becomes 4bf.
2941 for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );
2942 str = toFixedPoint( str, e );
2943 }
2944
2945 // The caller will add the sign.
2946 return str;
2947 }
2948
2949
2950 // Perform division in the specified base. Called by div and convertBase.
2951 div = (function () {
2952
2953 // Assume non-zero x and k.
2954 function multiply( x, k, base ) {
2955 var m, temp, xlo, xhi,
2956 carry = 0,
2957 i = x.length,
2958 klo = k % SQRT_BASE,
2959 khi = k / SQRT_BASE | 0;
2960
2961 for ( x = x.slice(); i--; ) {
2962 xlo = x[i] % SQRT_BASE;
2963 xhi = x[i] / SQRT_BASE | 0;
2964 m = khi * xlo + xhi * klo;
2965 temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;
2966 carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;
2967 x[i] = temp % base;
2968 }
2969
2970 if (carry) x = [carry].concat(x);
2971
2972 return x;
2973 }
2974
2975 function compare( a, b, aL, bL ) {
2976 var i, cmp;
2977
2978 if ( aL != bL ) {
2979 cmp = aL > bL ? 1 : -1;
2980 } else {
2981
2982 for ( i = cmp = 0; i < aL; i++ ) {
2983
2984 if ( a[i] != b[i] ) {
2985 cmp = a[i] > b[i] ? 1 : -1;
2986 break;
2987 }
2988 }
2989 }
2990 return cmp;
2991 }
2992
2993 function subtract( a, b, aL, base ) {
2994 var i = 0;
2995
2996 // Subtract b from a.
2997 for ( ; aL--; ) {
2998 a[aL] -= i;
2999 i = a[aL] < b[aL] ? 1 : 0;
3000 a[aL] = i * base + a[aL] - b[aL];
3001 }
3002
3003 // Remove leading zeros.
3004 for ( ; !a[0] && a.length > 1; a.splice(0, 1) );
3005 }
3006
3007 // x: dividend, y: divisor.
3008 return function ( x, y, dp, rm, base ) {
3009 var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
3010 yL, yz,
3011 s = x.s == y.s ? 1 : -1,
3012 xc = x.c,
3013 yc = y.c;
3014
3015 // Either NaN, Infinity or 0?
3016 if ( !xc || !xc[0] || !yc || !yc[0] ) {
3017
3018 return new BigNumber(
3019
3020 // Return NaN if either NaN, or both Infinity or 0.
3021 !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :
3022
3023 // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
3024 xc && xc[0] == 0 || !yc ? s * 0 : s / 0
3025 );
3026 }
3027
3028 q = new BigNumber(s);
3029 qc = q.c = [];
3030 e = x.e - y.e;
3031 s = dp + e + 1;
3032
3033 if ( !base ) {
3034 base = BASE;
3035 e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );
3036 s = s / LOG_BASE | 0;
3037 }
3038
3039 // Result exponent may be one less then the current value of e.
3040 // The coefficients of the BigNumbers from convertBase may have trailing zeros.
3041 for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );
3042 if ( yc[i] > ( xc[i] || 0 ) ) e--;
3043
3044 if ( s < 0 ) {
3045 qc.push(1);
3046 more = true;
3047 } else {
3048 xL = xc.length;
3049 yL = yc.length;
3050 i = 0;
3051 s += 2;
3052
3053 // Normalise xc and yc so highest order digit of yc is >= base / 2.
3054
3055 n = mathfloor( base / ( yc[0] + 1 ) );
3056
3057 // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.
3058 // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {
3059 if ( n > 1 ) {
3060 yc = multiply( yc, n, base );
3061 xc = multiply( xc, n, base );
3062 yL = yc.length;
3063 xL = xc.length;
3064 }
3065
3066 xi = yL;
3067 rem = xc.slice( 0, yL );
3068 remL = rem.length;
3069
3070 // Add zeros to make remainder as long as divisor.
3071 for ( ; remL < yL; rem[remL++] = 0 );
3072 yz = yc.slice();
3073 yz = [0].concat(yz);
3074 yc0 = yc[0];
3075 if ( yc[1] >= base / 2 ) yc0++;
3076 // Not necessary, but to prevent trial digit n > base, when using base 3.
3077 // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;
3078
3079 do {
3080 n = 0;
3081
3082 // Compare divisor and remainder.
3083 cmp = compare( yc, rem, yL, remL );
3084
3085 // If divisor < remainder.
3086 if ( cmp < 0 ) {
3087
3088 // Calculate trial digit, n.
3089
3090 rem0 = rem[0];
3091 if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );
3092
3093 // n is how many times the divisor goes into the current remainder.
3094 n = mathfloor( rem0 / yc0 );
3095
3096 // Algorithm:
3097 // 1. product = divisor * trial digit (n)
3098 // 2. if product > remainder: product -= divisor, n--
3099 // 3. remainder -= product
3100 // 4. if product was < remainder at 2:
3101 // 5. compare new remainder and divisor
3102 // 6. If remainder > divisor: remainder -= divisor, n++
3103
3104 if ( n > 1 ) {
3105
3106 // n may be > base only when base is 3.
3107 if (n >= base) n = base - 1;
3108
3109 // product = divisor * trial digit.
3110 prod = multiply( yc, n, base );
3111 prodL = prod.length;
3112 remL = rem.length;
3113
3114 // Compare product and remainder.
3115 // If product > remainder.
3116 // Trial digit n too high.
3117 // n is 1 too high about 5% of the time, and is not known to have
3118 // ever been more than 1 too high.
3119 while ( compare( prod, rem, prodL, remL ) == 1 ) {
3120 n--;
3121
3122 // Subtract divisor from product.
3123 subtract( prod, yL < prodL ? yz : yc, prodL, base );
3124 prodL = prod.length;
3125 cmp = 1;
3126 }
3127 } else {
3128
3129 // n is 0 or 1, cmp is -1.
3130 // If n is 0, there is no need to compare yc and rem again below,
3131 // so change cmp to 1 to avoid it.
3132 // If n is 1, leave cmp as -1, so yc and rem are compared again.
3133 if ( n == 0 ) {
3134
3135 // divisor < remainder, so n must be at least 1.
3136 cmp = n = 1;
3137 }
3138
3139 // product = divisor
3140 prod = yc.slice();
3141 prodL = prod.length;
3142 }
3143
3144 if ( prodL < remL ) prod = [0].concat(prod);
3145
3146 // Subtract product from remainder.
3147 subtract( rem, prod, remL, base );
3148 remL = rem.length;
3149
3150 // If product was < remainder.
3151 if ( cmp == -1 ) {
3152
3153 // Compare divisor and new remainder.
3154 // If divisor < new remainder, subtract divisor from remainder.
3155 // Trial digit n too low.
3156 // n is 1 too low about 5% of the time, and very rarely 2 too low.
3157 while ( compare( yc, rem, yL, remL ) < 1 ) {
3158 n++;
3159
3160 // Subtract divisor from remainder.
3161 subtract( rem, yL < remL ? yz : yc, remL, base );
3162 remL = rem.length;
3163 }
3164 }
3165 } else if ( cmp === 0 ) {
3166 n++;
3167 rem = [0];
3168 } // else cmp === 1 and n will be 0
3169
3170 // Add the next digit, n, to the result array.
3171 qc[i++] = n;
3172
3173 // Update the remainder.
3174 if ( rem[0] ) {
3175 rem[remL++] = xc[xi] || 0;
3176 } else {
3177 rem = [ xc[xi] ];
3178 remL = 1;
3179 }
3180 } while ( ( xi++ < xL || rem[0] != null ) && s-- );
3181
3182 more = rem[0] != null;
3183
3184 // Leading zero?
3185 if ( !qc[0] ) qc.splice(0, 1);
3186 }
3187
3188 if ( base == BASE ) {
3189
3190 // To calculate q.e, first get the number of digits of qc[0].
3191 for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );
3192 round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );
3193
3194 // Caller is convertBase.
3195 } else {
3196 q.e = e;
3197 q.r = +more;
3198 }
3199
3200 return q;
3201 };
3202 })();
3203
3204
3205 /*
3206 * Return a string representing the value of BigNumber n in fixed-point or exponential
3207 * notation rounded to the specified decimal places or significant digits.
3208 *
3209 * n is a BigNumber.
3210 * i is the index of the last digit required (i.e. the digit that may be rounded up).
3211 * rm is the rounding mode.
3212 * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.
3213 */
3214 function format( n, i, rm, caller ) {
3215 var c0, e, ne, len, str;
3216
3217 rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )
3218 ? rm | 0 : ROUNDING_MODE;
3219
3220 if ( !n.c ) return n.toString();
3221 c0 = n.c[0];
3222 ne = n.e;
3223
3224 if ( i == null ) {
3225 str = coeffToString( n.c );
3226 str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG
3227 ? toExponential( str, ne )
3228 : toFixedPoint( str, ne );
3229 } else {
3230 n = round( new BigNumber(n), i, rm );
3231
3232 // n.e may have changed if the value was rounded up.
3233 e = n.e;
3234
3235 str = coeffToString( n.c );
3236 len = str.length;
3237
3238 // toPrecision returns exponential notation if the number of significant digits
3239 // specified is less than the number of digits necessary to represent the integer
3240 // part of the value in fixed-point notation.
3241
3242 // Exponential notation.
3243 if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {
3244
3245 // Append zeros?
3246 for ( ; len < i; str += '0', len++ );
3247 str = toExponential( str, e );
3248
3249 // Fixed-point notation.
3250 } else {
3251 i -= ne;
3252 str = toFixedPoint( str, e );
3253
3254 // Append zeros?
3255 if ( e + 1 > len ) {
3256 if ( --i > 0 ) for ( str += '.'; i--; str += '0' );
3257 } else {
3258 i += e - len;
3259 if ( i > 0 ) {
3260 if ( e + 1 == len ) str += '.';
3261 for ( ; i--; str += '0' );
3262 }
3263 }
3264 }
3265 }
3266
3267 return n.s < 0 && c0 ? '-' + str : str;
3268 }
3269
3270
3271 // Handle BigNumber.max and BigNumber.min.
3272 function maxOrMin( args, method ) {
3273 var m, n,
3274 i = 0;
3275
3276 if ( isArray( args[0] ) ) args = args[0];
3277 m = new BigNumber( args[0] );
3278
3279 for ( ; ++i < args.length; ) {
3280 n = new BigNumber( args[i] );
3281
3282 // If any number is NaN, return NaN.
3283 if ( !n.s ) {
3284 m = n;
3285 break;
3286 } else if ( method.call( m, n ) ) {
3287 m = n;
3288 }
3289 }
3290
3291 return m;
3292 }
3293
3294
3295 /*
3296 * Return true if n is an integer in range, otherwise throw.
3297 * Use for argument validation when ERRORS is true.
3298 */
3299 function intValidatorWithErrors( n, min, max, caller, name ) {
3300 if ( n < min || n > max || n != truncate(n) ) {
3301 raise( caller, ( name || 'decimal places' ) +
3302 ( n < min || n > max ? ' out of range' : ' not an integer' ), n );
3303 }
3304
3305 return true;
3306 }
3307
3308
3309 /*
3310 * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
3311 * Called by minus, plus and times.
3312 */
3313 function normalise( n, c, e ) {
3314 var i = 1,
3315 j = c.length;
3316
3317 // Remove trailing zeros.
3318 for ( ; !c[--j]; c.pop() );
3319
3320 // Calculate the base 10 exponent. First get the number of digits of c[0].
3321 for ( j = c[0]; j >= 10; j /= 10, i++ );
3322
3323 // Overflow?
3324 if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {
3325
3326 // Infinity.
3327 n.c = n.e = null;
3328
3329 // Underflow?
3330 } else if ( e < MIN_EXP ) {
3331
3332 // Zero.
3333 n.c = [ n.e = 0 ];
3334 } else {
3335 n.e = e;
3336 n.c = c;
3337 }
3338
3339 return n;
3340 }
3341
3342
3343 // Handle values that fail the validity test in BigNumber.
3344 parseNumeric = (function () {
3345 var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i,
3346 dotAfter = /^([^.]+)\.$/,
3347 dotBefore = /^\.([^.]+)$/,
3348 isInfinityOrNaN = /^-?(Infinity|NaN)$/,
3349 whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;
3350
3351 return function ( x, str, num, b ) {
3352 var base,
3353 s = num ? str : str.replace( whitespaceOrPlus, '' );
3354
3355 // No exception on ±Infinity or NaN.
3356 if ( isInfinityOrNaN.test(s) ) {
3357 x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
3358 } else {
3359 if ( !num ) {
3360
3361 // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
3362 s = s.replace( basePrefix, function ( m, p1, p2 ) {
3363 base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
3364 return !b || b == base ? p1 : m;
3365 });
3366
3367 if (b) {
3368 base = b;
3369
3370 // E.g. '1.' to '1', '.1' to '0.1'
3371 s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );
3372 }
3373
3374 if ( str != s ) return new BigNumber( s, base );
3375 }
3376
3377 // 'new BigNumber() not a number: {n}'
3378 // 'new BigNumber() not a base {b} number: {n}'
3379 if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );
3380 x.s = null;
3381 }
3382
3383 x.c = x.e = null;
3384 id = 0;
3385 }
3386 })();
3387
3388
3389 // Throw a BigNumber Error.
3390 function raise( caller, msg, val ) {
3391 var error = new Error( [
3392 'new BigNumber', // 0
3393 'cmp', // 1
3394 'config', // 2
3395 'div', // 3
3396 'divToInt', // 4
3397 'eq', // 5
3398 'gt', // 6
3399 'gte', // 7
3400 'lt', // 8
3401 'lte', // 9
3402 'minus', // 10
3403 'mod', // 11
3404 'plus', // 12
3405 'precision', // 13
3406 'random', // 14
3407 'round', // 15
3408 'shift', // 16
3409 'times', // 17
3410 'toDigits', // 18
3411 'toExponential', // 19
3412 'toFixed', // 20
3413 'toFormat', // 21
3414 'toFraction', // 22
3415 'pow', // 23
3416 'toPrecision', // 24
3417 'toString', // 25
3418 'BigNumber' // 26
3419 ][caller] + '() ' + msg + ': ' + val );
3420
3421 error.name = 'BigNumber Error';
3422 id = 0;
3423 throw error;
3424 }
3425
3426
3427 /*
3428 * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
3429 * If r is truthy, it is known that there are more digits after the rounding digit.
3430 */
3431 function round( x, sd, rm, r ) {
3432 var d, i, j, k, n, ni, rd,
3433 xc = x.c,
3434 pows10 = POWS_TEN;
3435
3436 // if x is not Infinity or NaN...
3437 if (xc) {
3438
3439 // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
3440 // n is a base 1e14 number, the value of the element of array x.c containing rd.
3441 // ni is the index of n within x.c.
3442 // d is the number of digits of n.
3443 // i is the index of rd within n including leading zeros.
3444 // j is the actual index of rd within n (if < 0, rd is a leading zero).
3445 out: {
3446
3447 // Get the number of digits of the first element of xc.
3448 for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );
3449 i = sd - d;
3450
3451 // If the rounding digit is in the first element of xc...
3452 if ( i < 0 ) {
3453 i += LOG_BASE;
3454 j = sd;
3455 n = xc[ ni = 0 ];
3456
3457 // Get the rounding digit at index j of n.
3458 rd = n / pows10[ d - j - 1 ] % 10 | 0;
3459 } else {
3460 ni = mathceil( ( i + 1 ) / LOG_BASE );
3461
3462 if ( ni >= xc.length ) {
3463
3464 if (r) {
3465
3466 // Needed by sqrt.
3467 for ( ; xc.length <= ni; xc.push(0) );
3468 n = rd = 0;
3469 d = 1;
3470 i %= LOG_BASE;
3471 j = i - LOG_BASE + 1;
3472 } else {
3473 break out;
3474 }
3475 } else {
3476 n = k = xc[ni];
3477
3478 // Get the number of digits of n.
3479 for ( d = 1; k >= 10; k /= 10, d++ );
3480
3481 // Get the index of rd within n.
3482 i %= LOG_BASE;
3483
3484 // Get the index of rd within n, adjusted for leading zeros.
3485 // The number of leading zeros of n is given by LOG_BASE - d.
3486 j = i - LOG_BASE + d;
3487
3488 // Get the rounding digit at index j of n.
3489 rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;
3490 }
3491 }
3492
3493 r = r || sd < 0 ||
3494
3495 // Are there any non-zero digits after the rounding digit?
3496 // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right
3497 // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
3498 xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );
3499
3500 r = rm < 4
3501 ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
3502 : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&
3503
3504 // Check whether the digit to the left of the rounding digit is odd.
3505 ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||
3506 rm == ( x.s < 0 ? 8 : 7 ) );
3507
3508 if ( sd < 1 || !xc[0] ) {
3509 xc.length = 0;
3510
3511 if (r) {
3512
3513 // Convert sd to decimal places.
3514 sd -= x.e + 1;
3515
3516 // 1, 0.1, 0.01, 0.001, 0.0001 etc.
3517 xc[0] = pows10[ ( LOG_BASE - sd % LOG_BASE ) % LOG_BASE ];
3518 x.e = -sd || 0;
3519 } else {
3520
3521 // Zero.
3522 xc[0] = x.e = 0;
3523 }
3524
3525 return x;
3526 }
3527
3528 // Remove excess digits.
3529 if ( i == 0 ) {
3530 xc.length = ni;
3531 k = 1;
3532 ni--;
3533 } else {
3534 xc.length = ni + 1;
3535 k = pows10[ LOG_BASE - i ];
3536
3537 // E.g. 56700 becomes 56000 if 7 is the rounding digit.
3538 // j > 0 means i > number of leading zeros of n.
3539 xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;
3540 }
3541
3542 // Round up?
3543 if (r) {
3544
3545 for ( ; ; ) {
3546
3547 // If the digit to be rounded up is in the first element of xc...
3548 if ( ni == 0 ) {
3549
3550 // i will be the length of xc[0] before k is added.
3551 for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );
3552 j = xc[0] += k;
3553 for ( k = 1; j >= 10; j /= 10, k++ );
3554
3555 // if i != k the length has increased.
3556 if ( i != k ) {
3557 x.e++;
3558 if ( xc[0] == BASE ) xc[0] = 1;
3559 }
3560
3561 break;
3562 } else {
3563 xc[ni] += k;
3564 if ( xc[ni] != BASE ) break;
3565 xc[ni--] = 0;
3566 k = 1;
3567 }
3568 }
3569 }
3570
3571 // Remove trailing zeros.
3572 for ( i = xc.length; xc[--i] === 0; xc.pop() );
3573 }
3574
3575 // Overflow? Infinity.
3576 if ( x.e > MAX_EXP ) {
3577 x.c = x.e = null;
3578
3579 // Underflow? Zero.
3580 } else if ( x.e < MIN_EXP ) {
3581 x.c = [ x.e = 0 ];
3582 }
3583 }
3584
3585 return x;
3586 }
3587
3588
3589 // PROTOTYPE/INSTANCE METHODS
3590
3591
3592 /*
3593 * Return a new BigNumber whose value is the absolute value of this BigNumber.
3594 */
3595 P.absoluteValue = P.abs = function () {
3596 var x = new BigNumber(this);
3597 if ( x.s < 0 ) x.s = 1;
3598 return x;
3599 };
3600
3601
3602 /*
3603 * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
3604 * number in the direction of Infinity.
3605 */
3606 P.ceil = function () {
3607 return round( new BigNumber(this), this.e + 1, 2 );
3608 };
3609
3610
3611 /*
3612 * Return
3613 * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
3614 * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
3615 * 0 if they have the same value,
3616 * or null if the value of either is NaN.
3617 */
3618 P.comparedTo = P.cmp = function ( y, b ) {
3619 id = 1;
3620 return compare( this, new BigNumber( y, b ) );
3621 };
3622
3623
3624 /*
3625 * Return the number of decimal places of the value of this BigNumber, or null if the value
3626 * of this BigNumber is ±Infinity or NaN.
3627 */
3628 P.decimalPlaces = P.dp = function () {
3629 var n, v,
3630 c = this.c;
3631
3632 if ( !c ) return null;
3633 n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;
3634
3635 // Subtract the number of trailing zeros of the last number.
3636 if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );
3637 if ( n < 0 ) n = 0;
3638
3639 return n;
3640 };
3641
3642
3643 /*
3644 * n / 0 = I
3645 * n / N = N
3646 * n / I = 0
3647 * 0 / n = 0
3648 * 0 / 0 = N
3649 * 0 / N = N
3650 * 0 / I = 0
3651 * N / n = N
3652 * N / 0 = N
3653 * N / N = N
3654 * N / I = N
3655 * I / n = I
3656 * I / 0 = I
3657 * I / N = N
3658 * I / I = N
3659 *
3660 * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
3661 * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
3662 */
3663 P.dividedBy = P.div = function ( y, b ) {
3664 id = 3;
3665 return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );
3666 };
3667
3668
3669 /*
3670 * Return a new BigNumber whose value is the integer part of dividing the value of this
3671 * BigNumber by the value of BigNumber(y, b).
3672 */
3673 P.dividedToIntegerBy = P.divToInt = function ( y, b ) {
3674 id = 4;
3675 return div( this, new BigNumber( y, b ), 0, 1 );
3676 };
3677
3678
3679 /*
3680 * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
3681 * otherwise returns false.
3682 */
3683 P.equals = P.eq = function ( y, b ) {
3684 id = 5;
3685 return compare( this, new BigNumber( y, b ) ) === 0;
3686 };
3687
3688
3689 /*
3690 * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
3691 * number in the direction of -Infinity.
3692 */
3693 P.floor = function () {
3694 return round( new BigNumber(this), this.e + 1, 3 );
3695 };
3696
3697
3698 /*
3699 * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
3700 * otherwise returns false.
3701 */
3702 P.greaterThan = P.gt = function ( y, b ) {
3703 id = 6;
3704 return compare( this, new BigNumber( y, b ) ) > 0;
3705 };
3706
3707
3708 /*
3709 * Return true if the value of this BigNumber is greater than or equal to the value of
3710 * BigNumber(y, b), otherwise returns false.
3711 */
3712 P.greaterThanOrEqualTo = P.gte = function ( y, b ) {
3713 id = 7;
3714 return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;
3715
3716 };
3717
3718
3719 /*
3720 * Return true if the value of this BigNumber is a finite number, otherwise returns false.
3721 */
3722 P.isFinite = function () {
3723 return !!this.c;
3724 };
3725
3726
3727 /*
3728 * Return true if the value of this BigNumber is an integer, otherwise return false.
3729 */
3730 P.isInteger = P.isInt = function () {
3731 return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;
3732 };
3733
3734
3735 /*
3736 * Return true if the value of this BigNumber is NaN, otherwise returns false.
3737 */
3738 P.isNaN = function () {
3739 return !this.s;
3740 };
3741
3742
3743 /*
3744 * Return true if the value of this BigNumber is negative, otherwise returns false.
3745 */
3746 P.isNegative = P.isNeg = function () {
3747 return this.s < 0;
3748 };
3749
3750
3751 /*
3752 * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.
3753 */
3754 P.isZero = function () {
3755 return !!this.c && this.c[0] == 0;
3756 };
3757
3758
3759 /*
3760 * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
3761 * otherwise returns false.
3762 */
3763 P.lessThan = P.lt = function ( y, b ) {
3764 id = 8;
3765 return compare( this, new BigNumber( y, b ) ) < 0;
3766 };
3767
3768
3769 /*
3770 * Return true if the value of this BigNumber is less than or equal to the value of
3771 * BigNumber(y, b), otherwise returns false.
3772 */
3773 P.lessThanOrEqualTo = P.lte = function ( y, b ) {
3774 id = 9;
3775 return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;
3776 };
3777
3778
3779 /*
3780 * n - 0 = n
3781 * n - N = N
3782 * n - I = -I
3783 * 0 - n = -n
3784 * 0 - 0 = 0
3785 * 0 - N = N
3786 * 0 - I = -I
3787 * N - n = N
3788 * N - 0 = N
3789 * N - N = N
3790 * N - I = N
3791 * I - n = I
3792 * I - 0 = I
3793 * I - N = N
3794 * I - I = N
3795 *
3796 * Return a new BigNumber whose value is the value of this BigNumber minus the value of
3797 * BigNumber(y, b).
3798 */
3799 P.minus = P.sub = function ( y, b ) {
3800 var i, j, t, xLTy,
3801 x = this,
3802 a = x.s;
3803
3804 id = 10;
3805 y = new BigNumber( y, b );
3806 b = y.s;
3807
3808 // Either NaN?
3809 if ( !a || !b ) return new BigNumber(NaN);
3810
3811 // Signs differ?
3812 if ( a != b ) {
3813 y.s = -b;
3814 return x.plus(y);
3815 }
3816
3817 var xe = x.e / LOG_BASE,
3818 ye = y.e / LOG_BASE,
3819 xc = x.c,
3820 yc = y.c;
3821
3822 if ( !xe || !ye ) {
3823
3824 // Either Infinity?
3825 if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );
3826
3827 // Either zero?
3828 if ( !xc[0] || !yc[0] ) {
3829
3830 // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
3831 return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :
3832
3833 // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
3834 ROUNDING_MODE == 3 ? -0 : 0 );
3835 }
3836 }
3837
3838 xe = bitFloor(xe);
3839 ye = bitFloor(ye);
3840 xc = xc.slice();
3841
3842 // Determine which is the bigger number.
3843 if ( a = xe - ye ) {
3844
3845 if ( xLTy = a < 0 ) {
3846 a = -a;
3847 t = xc;
3848 } else {
3849 ye = xe;
3850 t = yc;
3851 }
3852
3853 t.reverse();
3854
3855 // Prepend zeros to equalise exponents.
3856 for ( b = a; b--; t.push(0) );
3857 t.reverse();
3858 } else {
3859
3860 // Exponents equal. Check digit by digit.
3861 j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;
3862
3863 for ( a = b = 0; b < j; b++ ) {
3864
3865 if ( xc[b] != yc[b] ) {
3866 xLTy = xc[b] < yc[b];
3867 break;
3868 }
3869 }
3870 }
3871
3872 // x < y? Point xc to the array of the bigger number.
3873 if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;
3874
3875 b = ( j = yc.length ) - ( i = xc.length );
3876
3877 // Append zeros to xc if shorter.
3878 // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
3879 if ( b > 0 ) for ( ; b--; xc[i++] = 0 );
3880 b = BASE - 1;
3881
3882 // Subtract yc from xc.
3883 for ( ; j > a; ) {
3884
3885 if ( xc[--j] < yc[j] ) {
3886 for ( i = j; i && !xc[--i]; xc[i] = b );
3887 --xc[i];
3888 xc[j] += BASE;
3889 }
3890
3891 xc[j] -= yc[j];
3892 }
3893
3894 // Remove leading zeros and adjust exponent accordingly.
3895 for ( ; xc[0] == 0; xc.splice(0, 1), --ye );
3896
3897 // Zero?
3898 if ( !xc[0] ) {
3899
3900 // Following IEEE 754 (2008) 6.3,
3901 // n - n = +0 but n - n = -0 when rounding towards -Infinity.
3902 y.s = ROUNDING_MODE == 3 ? -1 : 1;
3903 y.c = [ y.e = 0 ];
3904 return y;
3905 }
3906
3907 // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
3908 // for finite x and y.
3909 return normalise( y, xc, ye );
3910 };
3911
3912
3913 /*
3914 * n % 0 = N
3915 * n % N = N
3916 * n % I = n
3917 * 0 % n = 0
3918 * -0 % n = -0
3919 * 0 % 0 = N
3920 * 0 % N = N
3921 * 0 % I = 0
3922 * N % n = N
3923 * N % 0 = N
3924 * N % N = N
3925 * N % I = N
3926 * I % n = N
3927 * I % 0 = N
3928 * I % N = N
3929 * I % I = N
3930 *
3931 * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
3932 * BigNumber(y, b). The result depends on the value of MODULO_MODE.
3933 */
3934 P.modulo = P.mod = function ( y, b ) {
3935 var q, s,
3936 x = this;
3937
3938 id = 11;
3939 y = new BigNumber( y, b );
3940
3941 // Return NaN if x is Infinity or NaN, or y is NaN or zero.
3942 if ( !x.c || !y.s || y.c && !y.c[0] ) {
3943 return new BigNumber(NaN);
3944
3945 // Return x if y is Infinity or x is zero.
3946 } else if ( !y.c || x.c && !x.c[0] ) {
3947 return new BigNumber(x);
3948 }
3949
3950 if ( MODULO_MODE == 9 ) {
3951
3952 // Euclidian division: q = sign(y) * floor(x / abs(y))
3953 // r = x - qy where 0 <= r < abs(y)
3954 s = y.s;
3955 y.s = 1;
3956 q = div( x, y, 0, 3 );
3957 y.s = s;
3958 q.s *= s;
3959 } else {
3960 q = div( x, y, 0, MODULO_MODE );
3961 }
3962
3963 return x.minus( q.times(y) );
3964 };
3965
3966
3967 /*
3968 * Return a new BigNumber whose value is the value of this BigNumber negated,
3969 * i.e. multiplied by -1.
3970 */
3971 P.negated = P.neg = function () {
3972 var x = new BigNumber(this);
3973 x.s = -x.s || null;
3974 return x;
3975 };
3976
3977
3978 /*
3979 * n + 0 = n
3980 * n + N = N
3981 * n + I = I
3982 * 0 + n = n
3983 * 0 + 0 = 0
3984 * 0 + N = N
3985 * 0 + I = I
3986 * N + n = N
3987 * N + 0 = N
3988 * N + N = N
3989 * N + I = N
3990 * I + n = I
3991 * I + 0 = I
3992 * I + N = N
3993 * I + I = I
3994 *
3995 * Return a new BigNumber whose value is the value of this BigNumber plus the value of
3996 * BigNumber(y, b).
3997 */
3998 P.plus = P.add = function ( y, b ) {
3999 var t,
4000 x = this,
4001 a = x.s;
4002
4003 id = 12;
4004 y = new BigNumber( y, b );
4005 b = y.s;
4006
4007 // Either NaN?
4008 if ( !a || !b ) return new BigNumber(NaN);
4009
4010 // Signs differ?
4011 if ( a != b ) {
4012 y.s = -b;
4013 return x.minus(y);
4014 }
4015
4016 var xe = x.e / LOG_BASE,
4017 ye = y.e / LOG_BASE,
4018 xc = x.c,
4019 yc = y.c;
4020
4021 if ( !xe || !ye ) {
4022
4023 // Return ±Infinity if either ±Infinity.
4024 if ( !xc || !yc ) return new BigNumber( a / 0 );
4025
4026 // Either zero?
4027 // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
4028 if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );
4029 }
4030
4031 xe = bitFloor(xe);
4032 ye = bitFloor(ye);
4033 xc = xc.slice();
4034
4035 // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
4036 if ( a = xe - ye ) {
4037 if ( a > 0 ) {
4038 ye = xe;
4039 t = yc;
4040 } else {
4041 a = -a;
4042 t = xc;
4043 }
4044
4045 t.reverse();
4046 for ( ; a--; t.push(0) );
4047 t.reverse();
4048 }
4049
4050 a = xc.length;
4051 b = yc.length;
4052
4053 // Point xc to the longer array, and b to the shorter length.
4054 if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;
4055
4056 // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
4057 for ( a = 0; b; ) {
4058 a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;
4059 xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
4060 }
4061
4062 if (a) {
4063 xc = [a].concat(xc);
4064 ++ye;
4065 }
4066
4067 // No need to check for zero, as +x + +y != 0 && -x + -y != 0
4068 // ye = MAX_EXP + 1 possible
4069 return normalise( y, xc, ye );
4070 };
4071
4072
4073 /*
4074 * Return the number of significant digits of the value of this BigNumber.
4075 *
4076 * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
4077 */
4078 P.precision = P.sd = function (z) {
4079 var n, v,
4080 x = this,
4081 c = x.c;
4082
4083 // 'precision() argument not a boolean or binary digit: {z}'
4084 if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {
4085 if (ERRORS) raise( 13, 'argument' + notBool, z );
4086 if ( z != !!z ) z = null;
4087 }
4088
4089 if ( !c ) return null;
4090 v = c.length - 1;
4091 n = v * LOG_BASE + 1;
4092
4093 if ( v = c[v] ) {
4094
4095 // Subtract the number of trailing zeros of the last element.
4096 for ( ; v % 10 == 0; v /= 10, n-- );
4097
4098 // Add the number of digits of the first element.
4099 for ( v = c[0]; v >= 10; v /= 10, n++ );
4100 }
4101
4102 if ( z && x.e + 1 > n ) n = x.e + 1;
4103
4104 return n;
4105 };
4106
4107
4108 /*
4109 * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
4110 * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if
4111 * omitted.
4112 *
4113 * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
4114 * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
4115 *
4116 * 'round() decimal places out of range: {dp}'
4117 * 'round() decimal places not an integer: {dp}'
4118 * 'round() rounding mode not an integer: {rm}'
4119 * 'round() rounding mode out of range: {rm}'
4120 */
4121 P.round = function ( dp, rm ) {
4122 var n = new BigNumber(this);
4123
4124 if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {
4125 round( n, ~~dp + this.e + 1, rm == null ||
4126 !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );
4127 }
4128
4129 return n;
4130 };
4131
4132
4133 /*
4134 * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
4135 * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
4136 *
4137 * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
4138 *
4139 * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity
4140 * otherwise.
4141 *
4142 * 'shift() argument not an integer: {k}'
4143 * 'shift() argument out of range: {k}'
4144 */
4145 P.shift = function (k) {
4146 var n = this;
4147 return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )
4148
4149 // k < 1e+21, or truncate(k) will produce exponential notation.
4150 ? n.times( '1e' + truncate(k) )
4151 : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )
4152 ? n.s * ( k < 0 ? 0 : 1 / 0 )
4153 : n );
4154 };
4155
4156
4157 /*
4158 * sqrt(-n) = N
4159 * sqrt( N) = N
4160 * sqrt(-I) = N
4161 * sqrt( I) = I
4162 * sqrt( 0) = 0
4163 * sqrt(-0) = -0
4164 *
4165 * Return a new BigNumber whose value is the square root of the value of this BigNumber,
4166 * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
4167 */
4168 P.squareRoot = P.sqrt = function () {
4169 var m, n, r, rep, t,
4170 x = this,
4171 c = x.c,
4172 s = x.s,
4173 e = x.e,
4174 dp = DECIMAL_PLACES + 4,
4175 half = new BigNumber('0.5');
4176
4177 // Negative/NaN/Infinity/zero?
4178 if ( s !== 1 || !c || !c[0] ) {
4179 return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );
4180 }
4181
4182 // Initial estimate.
4183 s = Math.sqrt( +x );
4184
4185 // Math.sqrt underflow/overflow?
4186 // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
4187 if ( s == 0 || s == 1 / 0 ) {
4188 n = coeffToString(c);
4189 if ( ( n.length + e ) % 2 == 0 ) n += '0';
4190 s = Math.sqrt(n);
4191 e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );
4192
4193 if ( s == 1 / 0 ) {
4194 n = '1e' + e;
4195 } else {
4196 n = s.toExponential();
4197 n = n.slice( 0, n.indexOf('e') + 1 ) + e;
4198 }
4199
4200 r = new BigNumber(n);
4201 } else {
4202 r = new BigNumber( s + '' );
4203 }
4204
4205 // Check for zero.
4206 // r could be zero if MIN_EXP is changed after the this value was created.
4207 // This would cause a division by zero (x/t) and hence Infinity below, which would cause
4208 // coeffToString to throw.
4209 if ( r.c[0] ) {
4210 e = r.e;
4211 s = e + dp;
4212 if ( s < 3 ) s = 0;
4213
4214 // Newton-Raphson iteration.
4215 for ( ; ; ) {
4216 t = r;
4217 r = half.times( t.plus( div( x, t, dp, 1 ) ) );
4218
4219 if ( coeffToString( t.c ).slice( 0, s ) === ( n =
4220 coeffToString( r.c ) ).slice( 0, s ) ) {
4221
4222 // The exponent of r may here be one less than the final result exponent,
4223 // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
4224 // are indexed correctly.
4225 if ( r.e < e ) --s;
4226 n = n.slice( s - 3, s + 1 );
4227
4228 // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
4229 // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
4230 // iteration.
4231 if ( n == '9999' || !rep && n == '4999' ) {
4232
4233 // On the first iteration only, check to see if rounding up gives the
4234 // exact result as the nines may infinitely repeat.
4235 if ( !rep ) {
4236 round( t, t.e + DECIMAL_PLACES + 2, 0 );
4237
4238 if ( t.times(t).eq(x) ) {
4239 r = t;
4240 break;
4241 }
4242 }
4243
4244 dp += 4;
4245 s += 4;
4246 rep = 1;
4247 } else {
4248
4249 // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
4250 // result. If not, then there are further digits and m will be truthy.
4251 if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {
4252
4253 // Truncate to the first rounding digit.
4254 round( r, r.e + DECIMAL_PLACES + 2, 1 );
4255 m = !r.times(r).eq(x);
4256 }
4257
4258 break;
4259 }
4260 }
4261 }
4262 }
4263
4264 return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );
4265 };
4266
4267
4268 /*
4269 * n * 0 = 0
4270 * n * N = N
4271 * n * I = I
4272 * 0 * n = 0
4273 * 0 * 0 = 0
4274 * 0 * N = N
4275 * 0 * I = N
4276 * N * n = N
4277 * N * 0 = N
4278 * N * N = N
4279 * N * I = N
4280 * I * n = I
4281 * I * 0 = N
4282 * I * N = N
4283 * I * I = I
4284 *
4285 * Return a new BigNumber whose value is the value of this BigNumber times the value of
4286 * BigNumber(y, b).
4287 */
4288 P.times = P.mul = function ( y, b ) {
4289 var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
4290 base, sqrtBase,
4291 x = this,
4292 xc = x.c,
4293 yc = ( id = 17, y = new BigNumber( y, b ) ).c;
4294
4295 // Either NaN, ±Infinity or ±0?
4296 if ( !xc || !yc || !xc[0] || !yc[0] ) {
4297
4298 // Return NaN if either is NaN, or one is 0 and the other is Infinity.
4299 if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {
4300 y.c = y.e = y.s = null;
4301 } else {
4302 y.s *= x.s;
4303
4304 // Return ±Infinity if either is ±Infinity.
4305 if ( !xc || !yc ) {
4306 y.c = y.e = null;
4307
4308 // Return ±0 if either is ±0.
4309 } else {
4310 y.c = [0];
4311 y.e = 0;
4312 }
4313 }
4314
4315 return y;
4316 }
4317
4318 e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );
4319 y.s *= x.s;
4320 xcL = xc.length;
4321 ycL = yc.length;
4322
4323 // Ensure xc points to longer array and xcL to its length.
4324 if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;
4325
4326 // Initialise the result array with zeros.
4327 for ( i = xcL + ycL, zc = []; i--; zc.push(0) );
4328
4329 base = BASE;
4330 sqrtBase = SQRT_BASE;
4331
4332 for ( i = ycL; --i >= 0; ) {
4333 c = 0;
4334 ylo = yc[i] % sqrtBase;
4335 yhi = yc[i] / sqrtBase | 0;
4336
4337 for ( k = xcL, j = i + k; j > i; ) {
4338 xlo = xc[--k] % sqrtBase;
4339 xhi = xc[k] / sqrtBase | 0;
4340 m = yhi * xlo + xhi * ylo;
4341 xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;
4342 c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;
4343 zc[j--] = xlo % base;
4344 }
4345
4346 zc[j] = c;
4347 }
4348
4349 if (c) {
4350 ++e;
4351 } else {
4352 zc.splice(0, 1);
4353 }
4354
4355 return normalise( y, zc, e );
4356 };
4357
4358
4359 /*
4360 * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
4361 * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.
4362 *
4363 * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
4364 * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
4365 *
4366 * 'toDigits() precision out of range: {sd}'
4367 * 'toDigits() precision not an integer: {sd}'
4368 * 'toDigits() rounding mode not an integer: {rm}'
4369 * 'toDigits() rounding mode out of range: {rm}'
4370 */
4371 P.toDigits = function ( sd, rm ) {
4372 var n = new BigNumber(this);
4373 sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;
4374 rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;
4375 return sd ? round( n, sd, rm ) : n;
4376 };
4377
4378
4379 /*
4380 * Return a string representing the value of this BigNumber in exponential notation and
4381 * rounded using ROUNDING_MODE to dp fixed decimal places.
4382 *
4383 * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
4384 * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
4385 *
4386 * 'toExponential() decimal places not an integer: {dp}'
4387 * 'toExponential() decimal places out of range: {dp}'
4388 * 'toExponential() rounding mode not an integer: {rm}'
4389 * 'toExponential() rounding mode out of range: {rm}'
4390 */
4391 P.toExponential = function ( dp, rm ) {
4392 return format( this,
4393 dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );
4394 };
4395
4396
4397 /*
4398 * Return a string representing the value of this BigNumber in fixed-point notation rounding
4399 * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
4400 *
4401 * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
4402 * but e.g. (-0.00001).toFixed(0) is '-0'.
4403 *
4404 * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
4405 * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
4406 *
4407 * 'toFixed() decimal places not an integer: {dp}'
4408 * 'toFixed() decimal places out of range: {dp}'
4409 * 'toFixed() rounding mode not an integer: {rm}'
4410 * 'toFixed() rounding mode out of range: {rm}'
4411 */
4412 P.toFixed = function ( dp, rm ) {
4413 return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )
4414 ? ~~dp + this.e + 1 : null, rm, 20 );
4415 };
4416
4417
4418 /*
4419 * Return a string representing the value of this BigNumber in fixed-point notation rounded
4420 * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
4421 * of the FORMAT object (see BigNumber.config).
4422 *
4423 * FORMAT = {
4424 * decimalSeparator : '.',
4425 * groupSeparator : ',',
4426 * groupSize : 3,
4427 * secondaryGroupSize : 0,
4428 * fractionGroupSeparator : '\xA0', // non-breaking space
4429 * fractionGroupSize : 0
4430 * };
4431 *
4432 * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
4433 * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
4434 *
4435 * 'toFormat() decimal places not an integer: {dp}'
4436 * 'toFormat() decimal places out of range: {dp}'
4437 * 'toFormat() rounding mode not an integer: {rm}'
4438 * 'toFormat() rounding mode out of range: {rm}'
4439 */
4440 P.toFormat = function ( dp, rm ) {
4441 var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )
4442 ? ~~dp + this.e + 1 : null, rm, 21 );
4443
4444 if ( this.c ) {
4445 var i,
4446 arr = str.split('.'),
4447 g1 = +FORMAT.groupSize,
4448 g2 = +FORMAT.secondaryGroupSize,
4449 groupSeparator = FORMAT.groupSeparator,
4450 intPart = arr[0],
4451 fractionPart = arr[1],
4452 isNeg = this.s < 0,
4453 intDigits = isNeg ? intPart.slice(1) : intPart,
4454 len = intDigits.length;
4455
4456 if (g2) i = g1, g1 = g2, g2 = i, len -= i;
4457
4458 if ( g1 > 0 && len > 0 ) {
4459 i = len % g1 || g1;
4460 intPart = intDigits.substr( 0, i );
4461
4462 for ( ; i < len; i += g1 ) {
4463 intPart += groupSeparator + intDigits.substr( i, g1 );
4464 }
4465
4466 if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);
4467 if (isNeg) intPart = '-' + intPart;
4468 }
4469
4470 str = fractionPart
4471 ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )
4472 ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ),
4473 '$&' + FORMAT.fractionGroupSeparator )
4474 : fractionPart )
4475 : intPart;
4476 }
4477
4478 return str;
4479 };
4480
4481
4482 /*
4483 * Return a string array representing the value of this BigNumber as a simple fraction with
4484 * an integer numerator and an integer denominator. The denominator will be a positive
4485 * non-zero value less than or equal to the specified maximum denominator. If a maximum
4486 * denominator is not specified, the denominator will be the lowest value necessary to
4487 * represent the number exactly.
4488 *
4489 * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.
4490 *
4491 * 'toFraction() max denominator not an integer: {md}'
4492 * 'toFraction() max denominator out of range: {md}'
4493 */
4494 P.toFraction = function (md) {
4495 var arr, d0, d2, e, exp, n, n0, q, s,
4496 k = ERRORS,
4497 x = this,
4498 xc = x.c,
4499 d = new BigNumber(ONE),
4500 n1 = d0 = new BigNumber(ONE),
4501 d1 = n0 = new BigNumber(ONE);
4502
4503 if ( md != null ) {
4504 ERRORS = false;
4505 n = new BigNumber(md);
4506 ERRORS = k;
4507
4508 if ( !( k = n.isInt() ) || n.lt(ONE) ) {
4509
4510 if (ERRORS) {
4511 raise( 22,
4512 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );
4513 }
4514
4515 // ERRORS is false:
4516 // If md is a finite non-integer >= 1, round it to an integer and use it.
4517 md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;
4518 }
4519 }
4520
4521 if ( !xc ) return x.toString();
4522 s = coeffToString(xc);
4523
4524 // Determine initial denominator.
4525 // d is a power of 10 and the minimum max denominator that specifies the value exactly.
4526 e = d.e = s.length - x.e - 1;
4527 d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];
4528 md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;
4529
4530 exp = MAX_EXP;
4531 MAX_EXP = 1 / 0;
4532 n = new BigNumber(s);
4533
4534 // n0 = d1 = 0
4535 n0.c[0] = 0;
4536
4537 for ( ; ; ) {
4538 q = div( n, d, 0, 1 );
4539 d2 = d0.plus( q.times(d1) );
4540 if ( d2.cmp(md) == 1 ) break;
4541 d0 = d1;
4542 d1 = d2;
4543 n1 = n0.plus( q.times( d2 = n1 ) );
4544 n0 = d2;
4545 d = n.minus( q.times( d2 = d ) );
4546 n = d2;
4547 }
4548
4549 d2 = div( md.minus(d0), d1, 0, 1 );
4550 n0 = n0.plus( d2.times(n1) );
4551 d0 = d0.plus( d2.times(d1) );
4552 n0.s = n1.s = x.s;
4553 e *= 2;
4554
4555 // Determine which fraction is closer to x, n0/d0 or n1/d1
4556 arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(
4557 div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1
4558 ? [ n1.toString(), d1.toString() ]
4559 : [ n0.toString(), d0.toString() ];
4560
4561 MAX_EXP = exp;
4562 return arr;
4563 };
4564
4565
4566 /*
4567 * Return the value of this BigNumber converted to a number primitive.
4568 */
4569 P.toNumber = function () {
4570 return +this;
4571 };
4572
4573
4574 /*
4575 * Return a BigNumber whose value is the value of this BigNumber raised to the power n.
4576 * If m is present, return the result modulo m.
4577 * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
4578 * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using
4579 * ROUNDING_MODE.
4580 *
4581 * The modular power operation works efficiently when x, n, and m are positive integers,
4582 * otherwise it is equivalent to calculating x.toPower(n).modulo(m) (with POW_PRECISION 0).
4583 *
4584 * n {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
4585 * [m] {number|string|BigNumber} The modulus.
4586 *
4587 * 'pow() exponent not an integer: {n}'
4588 * 'pow() exponent out of range: {n}'
4589 *
4590 * Performs 54 loop iterations for n of 9007199254740991.
4591 */
4592 P.toPower = P.pow = function ( n, m ) {
4593 var k, y, z,
4594 i = mathfloor( n < 0 ? -n : +n ),
4595 x = this;
4596
4597 if ( m != null ) {
4598 id = 23;
4599 m = new BigNumber(m);
4600 }
4601
4602 // Pass ±Infinity to Math.pow if exponent is out of range.
4603 if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&
4604 ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||
4605 parseFloat(n) != n && !( n = NaN ) ) || n == 0 ) {
4606 k = Math.pow( +x, n );
4607 return new BigNumber( m ? k % m : k );
4608 }
4609
4610 if (m) {
4611 if ( n > 1 && x.gt(ONE) && x.isInt() && m.gt(ONE) && m.isInt() ) {
4612 x = x.mod(m);
4613 } else {
4614 z = m;
4615
4616 // Nullify m so only a single mod operation is performed at the end.
4617 m = null;
4618 }
4619 } else if (POW_PRECISION) {
4620
4621 // Truncating each coefficient array to a length of k after each multiplication
4622 // equates to truncating significant digits to POW_PRECISION + [28, 41],
4623 // i.e. there will be a minimum of 28 guard digits retained.
4624 // (Using + 1.5 would give [9, 21] guard digits.)
4625 k = mathceil( POW_PRECISION / LOG_BASE + 2 );
4626 }
4627
4628 y = new BigNumber(ONE);
4629
4630 for ( ; ; ) {
4631 if ( i % 2 ) {
4632 y = y.times(x);
4633 if ( !y.c ) break;
4634 if (k) {
4635 if ( y.c.length > k ) y.c.length = k;
4636 } else if (m) {
4637 y = y.mod(m);
4638 }
4639 }
4640
4641 i = mathfloor( i / 2 );
4642 if ( !i ) break;
4643 x = x.times(x);
4644 if (k) {
4645 if ( x.c && x.c.length > k ) x.c.length = k;
4646 } else if (m) {
4647 x = x.mod(m);
4648 }
4649 }
4650
4651 if (m) return y;
4652 if ( n < 0 ) y = ONE.div(y);
4653
4654 return z ? y.mod(z) : k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;
4655 };
4656
4657
4658 /*
4659 * Return a string representing the value of this BigNumber rounded to sd significant digits
4660 * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
4661 * necessary to represent the integer part of the value in fixed-point notation, then use
4662 * exponential notation.
4663 *
4664 * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
4665 * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
4666 *
4667 * 'toPrecision() precision not an integer: {sd}'
4668 * 'toPrecision() precision out of range: {sd}'
4669 * 'toPrecision() rounding mode not an integer: {rm}'
4670 * 'toPrecision() rounding mode out of range: {rm}'
4671 */
4672 P.toPrecision = function ( sd, rm ) {
4673 return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )
4674 ? sd | 0 : null, rm, 24 );
4675 };
4676
4677
4678 /*
4679 * Return a string representing the value of this BigNumber in base b, or base 10 if b is
4680 * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
4681 * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
4682 * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
4683 * TO_EXP_NEG, return exponential notation.
4684 *
4685 * [b] {number} Integer, 2 to 64 inclusive.
4686 *
4687 * 'toString() base not an integer: {b}'
4688 * 'toString() base out of range: {b}'
4689 */
4690 P.toString = function (b) {
4691 var str,
4692 n = this,
4693 s = n.s,
4694 e = n.e;
4695
4696 // Infinity or NaN?
4697 if ( e === null ) {
4698
4699 if (s) {
4700 str = 'Infinity';
4701 if ( s < 0 ) str = '-' + str;
4702 } else {
4703 str = 'NaN';
4704 }
4705 } else {
4706 str = coeffToString( n.c );
4707
4708 if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {
4709 str = e <= TO_EXP_NEG || e >= TO_EXP_POS
4710 ? toExponential( str, e )
4711 : toFixedPoint( str, e );
4712 } else {
4713 str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );
4714 }
4715
4716 if ( s < 0 && n.c[0] ) str = '-' + str;
4717 }
4718
4719 return str;
4720 };
4721
4722
4723 /*
4724 * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole
4725 * number.
4726 */
4727 P.truncated = P.trunc = function () {
4728 return round( new BigNumber(this), this.e + 1, 1 );
4729 };
4730
4731
4732 /*
4733 * Return as toString, but do not accept a base argument, and include the minus sign for
4734 * negative zero.
4735 */
4736 P.valueOf = P.toJSON = function () {
4737 var str,
4738 n = this,
4739 e = n.e;
4740
4741 if ( e === null ) return n.toString();
4742
4743 str = coeffToString( n.c );
4744
4745 str = e <= TO_EXP_NEG || e >= TO_EXP_POS
4746 ? toExponential( str, e )
4747 : toFixedPoint( str, e );
4748
4749 return n.s < 0 ? '-' + str : str;
4750 };
4751
4752
4753 P.isBigNumber = true;
4754
4755 if ( config != null ) BigNumber.config(config);
4756
4757 return BigNumber;
4758 }
4759
4760
4761 // PRIVATE HELPER FUNCTIONS
4762
4763
4764 function bitFloor(n) {
4765 var i = n | 0;
4766 return n > 0 || n === i ? i : i - 1;
4767 }
4768
4769
4770 // Return a coefficient array as a string of base 10 digits.
4771 function coeffToString(a) {
4772 var s, z,
4773 i = 1,
4774 j = a.length,
4775 r = a[0] + '';
4776
4777 for ( ; i < j; ) {
4778 s = a[i++] + '';
4779 z = LOG_BASE - s.length;
4780 for ( ; z--; s = '0' + s );
4781 r += s;
4782 }
4783
4784 // Determine trailing zeros.
4785 for ( j = r.length; r.charCodeAt(--j) === 48; );
4786 return r.slice( 0, j + 1 || 1 );
4787 }
4788
4789
4790 // Compare the value of BigNumbers x and y.
4791 function compare( x, y ) {
4792 var a, b,
4793 xc = x.c,
4794 yc = y.c,
4795 i = x.s,
4796 j = y.s,
4797 k = x.e,
4798 l = y.e;
4799
4800 // Either NaN?
4801 if ( !i || !j ) return null;
4802
4803 a = xc && !xc[0];
4804 b = yc && !yc[0];
4805
4806 // Either zero?
4807 if ( a || b ) return a ? b ? 0 : -j : i;
4808
4809 // Signs differ?
4810 if ( i != j ) return i;
4811
4812 a = i < 0;
4813 b = k == l;
4814
4815 // Either Infinity?
4816 if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;
4817
4818 // Compare exponents.
4819 if ( !b ) return k > l ^ a ? 1 : -1;
4820
4821 j = ( k = xc.length ) < ( l = yc.length ) ? k : l;
4822
4823 // Compare digit by digit.
4824 for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;
4825
4826 // Compare lengths.
4827 return k == l ? 0 : k > l ^ a ? 1 : -1;
4828 }
4829
4830
4831 /*
4832 * Return true if n is a valid number in range, otherwise false.
4833 * Use for argument validation when ERRORS is false.
4834 * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.
4835 */
4836 function intValidatorNoErrors( n, min, max ) {
4837 return ( n = truncate(n) ) >= min && n <= max;
4838 }
4839
4840
4841 function isArray(obj) {
4842 return Object.prototype.toString.call(obj) == '[object Array]';
4843 }
4844
4845
4846 /*
4847 * Convert string of baseIn to an array of numbers of baseOut.
4848 * Eg. convertBase('255', 10, 16) returns [15, 15].
4849 * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].
4850 */
4851 function toBaseOut( str, baseIn, baseOut ) {
4852 var j,
4853 arr = [0],
4854 arrL,
4855 i = 0,
4856 len = str.length;
4857
4858 for ( ; i < len; ) {
4859 for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );
4860 arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );
4861
4862 for ( ; j < arr.length; j++ ) {
4863
4864 if ( arr[j] > baseOut - 1 ) {
4865 if ( arr[j + 1] == null ) arr[j + 1] = 0;
4866 arr[j + 1] += arr[j] / baseOut | 0;
4867 arr[j] %= baseOut;
4868 }
4869 }
4870 }
4871
4872 return arr.reverse();
4873 }
4874
4875
4876 function toExponential( str, e ) {
4877 return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +
4878 ( e < 0 ? 'e' : 'e+' ) + e;
4879 }
4880
4881
4882 function toFixedPoint( str, e ) {
4883 var len, z;
4884
4885 // Negative exponent?
4886 if ( e < 0 ) {
4887
4888 // Prepend zeros.
4889 for ( z = '0.'; ++e; z += '0' );
4890 str = z + str;
4891
4892 // Positive exponent
4893 } else {
4894 len = str.length;
4895
4896 // Append zeros.
4897 if ( ++e > len ) {
4898 for ( z = '0', e -= len; --e; z += '0' );
4899 str += z;
4900 } else if ( e < len ) {
4901 str = str.slice( 0, e ) + '.' + str.slice(e);
4902 }
4903 }
4904
4905 return str;
4906 }
4907
4908
4909 function truncate(n) {
4910 n = parseFloat(n);
4911 return n < 0 ? mathceil(n) : mathfloor(n);
4912 }
4913
4914
4915 // EXPORT
4916
4917
4918 BigNumber = constructorFactory();
4919 BigNumber['default'] = BigNumber.BigNumber = BigNumber;
4920
4921
4922 // AMD.
4923 if ( typeof define == 'function' && define.amd ) {
4924 define( function () { return BigNumber; } );
4925
4926 // Node.js and other environments that support module.exports.
4927 } else if ( typeof module != 'undefined' && module.exports ) {
4928 module.exports = BigNumber;
4929
4930 // Browser.
4931 } else {
4932 if ( !globalObj ) globalObj = typeof self != 'undefined' ? self : Function('return this')();
4933 globalObj.BigNumber = BigNumber;
4934 }
4935})(this);
4936
4937},{}],18:[function(require,module,exports){
4938(function (module, exports) {
4939 'use strict';
4940
4941 // Utils
4942 function assert (val, msg) {
4943 if (!val) throw new Error(msg || 'Assertion failed');
4944 }
4945
4946 // Could use `inherits` module, but don't want to move from single file
4947 // architecture yet.
4948 function inherits (ctor, superCtor) {
4949 ctor.super_ = superCtor;
4950 var TempCtor = function () {};
4951 TempCtor.prototype = superCtor.prototype;
4952 ctor.prototype = new TempCtor();
4953 ctor.prototype.constructor = ctor;
4954 }
4955
4956 // BN
4957
4958 function BN (number, base, endian) {
4959 if (BN.isBN(number)) {
4960 return number;
4961 }
4962
4963 this.negative = 0;
4964 this.words = null;
4965 this.length = 0;
4966
4967 // Reduction context
4968 this.red = null;
4969
4970 if (number !== null) {
4971 if (base === 'le' || base === 'be') {
4972 endian = base;
4973 base = 10;
4974 }
4975
4976 this._init(number || 0, base || 10, endian || 'be');
4977 }
4978 }
4979 if (typeof module === 'object') {
4980 module.exports = BN;
4981 } else {
4982 exports.BN = BN;
4983 }
4984
4985 BN.BN = BN;
4986 BN.wordSize = 26;
4987
4988 var Buffer;
4989 try {
4990 Buffer = require('buffer').Buffer;
4991 } catch (e) {
4992 }
4993
4994 BN.isBN = function isBN (num) {
4995 if (num instanceof BN) {
4996 return true;
4997 }
4998
4999 return num !== null && typeof num === 'object' &&
5000 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
5001 };
5002
5003 BN.max = function max (left, right) {
5004 if (left.cmp(right) > 0) return left;
5005 return right;
5006 };
5007
5008 BN.min = function min (left, right) {
5009 if (left.cmp(right) < 0) return left;
5010 return right;
5011 };
5012
5013 BN.prototype._init = function init (number, base, endian) {
5014 if (typeof number === 'number') {
5015 return this._initNumber(number, base, endian);
5016 }
5017
5018 if (typeof number === 'object') {
5019 return this._initArray(number, base, endian);
5020 }
5021
5022 if (base === 'hex') {
5023 base = 16;
5024 }
5025 assert(base === (base | 0) && base >= 2 && base <= 36);
5026
5027 number = number.toString().replace(/\s+/g, '');
5028 var start = 0;
5029 if (number[0] === '-') {
5030 start++;
5031 }
5032
5033 if (base === 16) {
5034 this._parseHex(number, start);
5035 } else {
5036 this._parseBase(number, base, start);
5037 }
5038
5039 if (number[0] === '-') {
5040 this.negative = 1;
5041 }
5042
5043 this.strip();
5044
5045 if (endian !== 'le') return;
5046
5047 this._initArray(this.toArray(), base, endian);
5048 };
5049
5050 BN.prototype._initNumber = function _initNumber (number, base, endian) {
5051 if (number < 0) {
5052 this.negative = 1;
5053 number = -number;
5054 }
5055 if (number < 0x4000000) {
5056 this.words = [ number & 0x3ffffff ];
5057 this.length = 1;
5058 } else if (number < 0x10000000000000) {
5059 this.words = [
5060 number & 0x3ffffff,
5061 (number / 0x4000000) & 0x3ffffff
5062 ];
5063 this.length = 2;
5064 } else {
5065 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
5066 this.words = [
5067 number & 0x3ffffff,
5068 (number / 0x4000000) & 0x3ffffff,
5069 1
5070 ];
5071 this.length = 3;
5072 }
5073
5074 if (endian !== 'le') return;
5075
5076 // Reverse the bytes
5077 this._initArray(this.toArray(), base, endian);
5078 };
5079
5080 BN.prototype._initArray = function _initArray (number, base, endian) {
5081 // Perhaps a Uint8Array
5082 assert(typeof number.length === 'number');
5083 if (number.length <= 0) {
5084 this.words = [ 0 ];
5085 this.length = 1;
5086 return this;
5087 }
5088
5089 this.length = Math.ceil(number.length / 3);
5090 this.words = new Array(this.length);
5091 for (var i = 0; i < this.length; i++) {
5092 this.words[i] = 0;
5093 }
5094
5095 var j, w;
5096 var off = 0;
5097 if (endian === 'be') {
5098 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
5099 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
5100 this.words[j] |= (w << off) & 0x3ffffff;
5101 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
5102 off += 24;
5103 if (off >= 26) {
5104 off -= 26;
5105 j++;
5106 }
5107 }
5108 } else if (endian === 'le') {
5109 for (i = 0, j = 0; i < number.length; i += 3) {
5110 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
5111 this.words[j] |= (w << off) & 0x3ffffff;
5112 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
5113 off += 24;
5114 if (off >= 26) {
5115 off -= 26;
5116 j++;
5117 }
5118 }
5119 }
5120 return this.strip();
5121 };
5122
5123 function parseHex (str, start, end) {
5124 var r = 0;
5125 var len = Math.min(str.length, end);
5126 for (var i = start; i < len; i++) {
5127 var c = str.charCodeAt(i) - 48;
5128
5129 r <<= 4;
5130
5131 // 'a' - 'f'
5132 if (c >= 49 && c <= 54) {
5133 r |= c - 49 + 0xa;
5134
5135 // 'A' - 'F'
5136 } else if (c >= 17 && c <= 22) {
5137 r |= c - 17 + 0xa;
5138
5139 // '0' - '9'
5140 } else {
5141 r |= c & 0xf;
5142 }
5143 }
5144 return r;
5145 }
5146
5147 BN.prototype._parseHex = function _parseHex (number, start) {
5148 // Create possibly bigger array to ensure that it fits the number
5149 this.length = Math.ceil((number.length - start) / 6);
5150 this.words = new Array(this.length);
5151 for (var i = 0; i < this.length; i++) {
5152 this.words[i] = 0;
5153 }
5154
5155 var j, w;
5156 // Scan 24-bit chunks and add them to the number
5157 var off = 0;
5158 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
5159 w = parseHex(number, i, i + 6);
5160 this.words[j] |= (w << off) & 0x3ffffff;
5161 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
5162 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
5163 off += 24;
5164 if (off >= 26) {
5165 off -= 26;
5166 j++;
5167 }
5168 }
5169 if (i + 6 !== start) {
5170 w = parseHex(number, start, i + 6);
5171 this.words[j] |= (w << off) & 0x3ffffff;
5172 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
5173 }
5174 this.strip();
5175 };
5176
5177 function parseBase (str, start, end, mul) {
5178 var r = 0;
5179 var len = Math.min(str.length, end);
5180 for (var i = start; i < len; i++) {
5181 var c = str.charCodeAt(i) - 48;
5182
5183 r *= mul;
5184
5185 // 'a'
5186 if (c >= 49) {
5187 r += c - 49 + 0xa;
5188
5189 // 'A'
5190 } else if (c >= 17) {
5191 r += c - 17 + 0xa;
5192
5193 // '0' - '9'
5194 } else {
5195 r += c;
5196 }
5197 }
5198 return r;
5199 }
5200
5201 BN.prototype._parseBase = function _parseBase (number, base, start) {
5202 // Initialize as zero
5203 this.words = [ 0 ];
5204 this.length = 1;
5205
5206 // Find length of limb in base
5207 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
5208 limbLen++;
5209 }
5210 limbLen--;
5211 limbPow = (limbPow / base) | 0;
5212
5213 var total = number.length - start;
5214 var mod = total % limbLen;
5215 var end = Math.min(total, total - mod) + start;
5216
5217 var word = 0;
5218 for (var i = start; i < end; i += limbLen) {
5219 word = parseBase(number, i, i + limbLen, base);
5220
5221 this.imuln(limbPow);
5222 if (this.words[0] + word < 0x4000000) {
5223 this.words[0] += word;
5224 } else {
5225 this._iaddn(word);
5226 }
5227 }
5228
5229 if (mod !== 0) {
5230 var pow = 1;
5231 word = parseBase(number, i, number.length, base);
5232
5233 for (i = 0; i < mod; i++) {
5234 pow *= base;
5235 }
5236
5237 this.imuln(pow);
5238 if (this.words[0] + word < 0x4000000) {
5239 this.words[0] += word;
5240 } else {
5241 this._iaddn(word);
5242 }
5243 }
5244 };
5245
5246 BN.prototype.copy = function copy (dest) {
5247 dest.words = new Array(this.length);
5248 for (var i = 0; i < this.length; i++) {
5249 dest.words[i] = this.words[i];
5250 }
5251 dest.length = this.length;
5252 dest.negative = this.negative;
5253 dest.red = this.red;
5254 };
5255
5256 BN.prototype.clone = function clone () {
5257 var r = new BN(null);
5258 this.copy(r);
5259 return r;
5260 };
5261
5262 BN.prototype._expand = function _expand (size) {
5263 while (this.length < size) {
5264 this.words[this.length++] = 0;
5265 }
5266 return this;
5267 };
5268
5269 // Remove leading `0` from `this`
5270 BN.prototype.strip = function strip () {
5271 while (this.length > 1 && this.words[this.length - 1] === 0) {
5272 this.length--;
5273 }
5274 return this._normSign();
5275 };
5276
5277 BN.prototype._normSign = function _normSign () {
5278 // -0 = 0
5279 if (this.length === 1 && this.words[0] === 0) {
5280 this.negative = 0;
5281 }
5282 return this;
5283 };
5284
5285 BN.prototype.inspect = function inspect () {
5286 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
5287 };
5288
5289 /*
5290
5291 var zeros = [];
5292 var groupSizes = [];
5293 var groupBases = [];
5294
5295 var s = '';
5296 var i = -1;
5297 while (++i < BN.wordSize) {
5298 zeros[i] = s;
5299 s += '0';
5300 }
5301 groupSizes[0] = 0;
5302 groupSizes[1] = 0;
5303 groupBases[0] = 0;
5304 groupBases[1] = 0;
5305 var base = 2 - 1;
5306 while (++base < 36 + 1) {
5307 var groupSize = 0;
5308 var groupBase = 1;
5309 while (groupBase < (1 << BN.wordSize) / base) {
5310 groupBase *= base;
5311 groupSize += 1;
5312 }
5313 groupSizes[base] = groupSize;
5314 groupBases[base] = groupBase;
5315 }
5316
5317 */
5318
5319 var zeros = [
5320 '',
5321 '0',
5322 '00',
5323 '000',
5324 '0000',
5325 '00000',
5326 '000000',
5327 '0000000',
5328 '00000000',
5329 '000000000',
5330 '0000000000',
5331 '00000000000',
5332 '000000000000',
5333 '0000000000000',
5334 '00000000000000',
5335 '000000000000000',
5336 '0000000000000000',
5337 '00000000000000000',
5338 '000000000000000000',
5339 '0000000000000000000',
5340 '00000000000000000000',
5341 '000000000000000000000',
5342 '0000000000000000000000',
5343 '00000000000000000000000',
5344 '000000000000000000000000',
5345 '0000000000000000000000000'
5346 ];
5347
5348 var groupSizes = [
5349 0, 0,
5350 25, 16, 12, 11, 10, 9, 8,
5351 8, 7, 7, 7, 7, 6, 6,
5352 6, 6, 6, 6, 6, 5, 5,
5353 5, 5, 5, 5, 5, 5, 5,
5354 5, 5, 5, 5, 5, 5, 5
5355 ];
5356
5357 var groupBases = [
5358 0, 0,
5359 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
5360 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
5361 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
5362 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
5363 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
5364 ];
5365
5366 BN.prototype.toString = function toString (base, padding) {
5367 base = base || 10;
5368 padding = padding | 0 || 1;
5369
5370 var out;
5371 if (base === 16 || base === 'hex') {
5372 out = '';
5373 var off = 0;
5374 var carry = 0;
5375 for (var i = 0; i < this.length; i++) {
5376 var w = this.words[i];
5377 var word = (((w << off) | carry) & 0xffffff).toString(16);
5378 carry = (w >>> (24 - off)) & 0xffffff;
5379 if (carry !== 0 || i !== this.length - 1) {
5380 out = zeros[6 - word.length] + word + out;
5381 } else {
5382 out = word + out;
5383 }
5384 off += 2;
5385 if (off >= 26) {
5386 off -= 26;
5387 i--;
5388 }
5389 }
5390 if (carry !== 0) {
5391 out = carry.toString(16) + out;
5392 }
5393 while (out.length % padding !== 0) {
5394 out = '0' + out;
5395 }
5396 if (this.negative !== 0) {
5397 out = '-' + out;
5398 }
5399 return out;
5400 }
5401
5402 if (base === (base | 0) && base >= 2 && base <= 36) {
5403 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
5404 var groupSize = groupSizes[base];
5405 // var groupBase = Math.pow(base, groupSize);
5406 var groupBase = groupBases[base];
5407 out = '';
5408 var c = this.clone();
5409 c.negative = 0;
5410 while (!c.isZero()) {
5411 var r = c.modn(groupBase).toString(base);
5412 c = c.idivn(groupBase);
5413
5414 if (!c.isZero()) {
5415 out = zeros[groupSize - r.length] + r + out;
5416 } else {
5417 out = r + out;
5418 }
5419 }
5420 if (this.isZero()) {
5421 out = '0' + out;
5422 }
5423 while (out.length % padding !== 0) {
5424 out = '0' + out;
5425 }
5426 if (this.negative !== 0) {
5427 out = '-' + out;
5428 }
5429 return out;
5430 }
5431
5432 assert(false, 'Base should be between 2 and 36');
5433 };
5434
5435 BN.prototype.toNumber = function toNumber () {
5436 var ret = this.words[0];
5437 if (this.length === 2) {
5438 ret += this.words[1] * 0x4000000;
5439 } else if (this.length === 3 && this.words[2] === 0x01) {
5440 // NOTE: at this stage it is known that the top bit is set
5441 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
5442 } else if (this.length > 2) {
5443 assert(false, 'Number can only safely store up to 53 bits');
5444 }
5445 return (this.negative !== 0) ? -ret : ret;
5446 };
5447
5448 BN.prototype.toJSON = function toJSON () {
5449 return this.toString(16);
5450 };
5451
5452 BN.prototype.toBuffer = function toBuffer (endian, length) {
5453 assert(typeof Buffer !== 'undefined');
5454 return this.toArrayLike(Buffer, endian, length);
5455 };
5456
5457 BN.prototype.toArray = function toArray (endian, length) {
5458 return this.toArrayLike(Array, endian, length);
5459 };
5460
5461 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
5462 var byteLength = this.byteLength();
5463 var reqLength = length || Math.max(1, byteLength);
5464 assert(byteLength <= reqLength, 'byte array longer than desired length');
5465 assert(reqLength > 0, 'Requested array length <= 0');
5466
5467 this.strip();
5468 var littleEndian = endian === 'le';
5469 var res = new ArrayType(reqLength);
5470
5471 var b, i;
5472 var q = this.clone();
5473 if (!littleEndian) {
5474 // Assume big-endian
5475 for (i = 0; i < reqLength - byteLength; i++) {
5476 res[i] = 0;
5477 }
5478
5479 for (i = 0; !q.isZero(); i++) {
5480 b = q.andln(0xff);
5481 q.iushrn(8);
5482
5483 res[reqLength - i - 1] = b;
5484 }
5485 } else {
5486 for (i = 0; !q.isZero(); i++) {
5487 b = q.andln(0xff);
5488 q.iushrn(8);
5489
5490 res[i] = b;
5491 }
5492
5493 for (; i < reqLength; i++) {
5494 res[i] = 0;
5495 }
5496 }
5497
5498 return res;
5499 };
5500
5501 if (Math.clz32) {
5502 BN.prototype._countBits = function _countBits (w) {
5503 return 32 - Math.clz32(w);
5504 };
5505 } else {
5506 BN.prototype._countBits = function _countBits (w) {
5507 var t = w;
5508 var r = 0;
5509 if (t >= 0x1000) {
5510 r += 13;
5511 t >>>= 13;
5512 }
5513 if (t >= 0x40) {
5514 r += 7;
5515 t >>>= 7;
5516 }
5517 if (t >= 0x8) {
5518 r += 4;
5519 t >>>= 4;
5520 }
5521 if (t >= 0x02) {
5522 r += 2;
5523 t >>>= 2;
5524 }
5525 return r + t;
5526 };
5527 }
5528
5529 BN.prototype._zeroBits = function _zeroBits (w) {
5530 // Short-cut
5531 if (w === 0) return 26;
5532
5533 var t = w;
5534 var r = 0;
5535 if ((t & 0x1fff) === 0) {
5536 r += 13;
5537 t >>>= 13;
5538 }
5539 if ((t & 0x7f) === 0) {
5540 r += 7;
5541 t >>>= 7;
5542 }
5543 if ((t & 0xf) === 0) {
5544 r += 4;
5545 t >>>= 4;
5546 }
5547 if ((t & 0x3) === 0) {
5548 r += 2;
5549 t >>>= 2;
5550 }
5551 if ((t & 0x1) === 0) {
5552 r++;
5553 }
5554 return r;
5555 };
5556
5557 // Return number of used bits in a BN
5558 BN.prototype.bitLength = function bitLength () {
5559 var w = this.words[this.length - 1];
5560 var hi = this._countBits(w);
5561 return (this.length - 1) * 26 + hi;
5562 };
5563
5564 function toBitArray (num) {
5565 var w = new Array(num.bitLength());
5566
5567 for (var bit = 0; bit < w.length; bit++) {
5568 var off = (bit / 26) | 0;
5569 var wbit = bit % 26;
5570
5571 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
5572 }
5573
5574 return w;
5575 }
5576
5577 // Number of trailing zero bits
5578 BN.prototype.zeroBits = function zeroBits () {
5579 if (this.isZero()) return 0;
5580
5581 var r = 0;
5582 for (var i = 0; i < this.length; i++) {
5583 var b = this._zeroBits(this.words[i]);
5584 r += b;
5585 if (b !== 26) break;
5586 }
5587 return r;
5588 };
5589
5590 BN.prototype.byteLength = function byteLength () {
5591 return Math.ceil(this.bitLength() / 8);
5592 };
5593
5594 BN.prototype.toTwos = function toTwos (width) {
5595 if (this.negative !== 0) {
5596 return this.abs().inotn(width).iaddn(1);
5597 }
5598 return this.clone();
5599 };
5600
5601 BN.prototype.fromTwos = function fromTwos (width) {
5602 if (this.testn(width - 1)) {
5603 return this.notn(width).iaddn(1).ineg();
5604 }
5605 return this.clone();
5606 };
5607
5608 BN.prototype.isNeg = function isNeg () {
5609 return this.negative !== 0;
5610 };
5611
5612 // Return negative clone of `this`
5613 BN.prototype.neg = function neg () {
5614 return this.clone().ineg();
5615 };
5616
5617 BN.prototype.ineg = function ineg () {
5618 if (!this.isZero()) {
5619 this.negative ^= 1;
5620 }
5621
5622 return this;
5623 };
5624
5625 // Or `num` with `this` in-place
5626 BN.prototype.iuor = function iuor (num) {
5627 while (this.length < num.length) {
5628 this.words[this.length++] = 0;
5629 }
5630
5631 for (var i = 0; i < num.length; i++) {
5632 this.words[i] = this.words[i] | num.words[i];
5633 }
5634
5635 return this.strip();
5636 };
5637
5638 BN.prototype.ior = function ior (num) {
5639 assert((this.negative | num.negative) === 0);
5640 return this.iuor(num);
5641 };
5642
5643 // Or `num` with `this`
5644 BN.prototype.or = function or (num) {
5645 if (this.length > num.length) return this.clone().ior(num);
5646 return num.clone().ior(this);
5647 };
5648
5649 BN.prototype.uor = function uor (num) {
5650 if (this.length > num.length) return this.clone().iuor(num);
5651 return num.clone().iuor(this);
5652 };
5653
5654 // And `num` with `this` in-place
5655 BN.prototype.iuand = function iuand (num) {
5656 // b = min-length(num, this)
5657 var b;
5658 if (this.length > num.length) {
5659 b = num;
5660 } else {
5661 b = this;
5662 }
5663
5664 for (var i = 0; i < b.length; i++) {
5665 this.words[i] = this.words[i] & num.words[i];
5666 }
5667
5668 this.length = b.length;
5669
5670 return this.strip();
5671 };
5672
5673 BN.prototype.iand = function iand (num) {
5674 assert((this.negative | num.negative) === 0);
5675 return this.iuand(num);
5676 };
5677
5678 // And `num` with `this`
5679 BN.prototype.and = function and (num) {
5680 if (this.length > num.length) return this.clone().iand(num);
5681 return num.clone().iand(this);
5682 };
5683
5684 BN.prototype.uand = function uand (num) {
5685 if (this.length > num.length) return this.clone().iuand(num);
5686 return num.clone().iuand(this);
5687 };
5688
5689 // Xor `num` with `this` in-place
5690 BN.prototype.iuxor = function iuxor (num) {
5691 // a.length > b.length
5692 var a;
5693 var b;
5694 if (this.length > num.length) {
5695 a = this;
5696 b = num;
5697 } else {
5698 a = num;
5699 b = this;
5700 }
5701
5702 for (var i = 0; i < b.length; i++) {
5703 this.words[i] = a.words[i] ^ b.words[i];
5704 }
5705
5706 if (this !== a) {
5707 for (; i < a.length; i++) {
5708 this.words[i] = a.words[i];
5709 }
5710 }
5711
5712 this.length = a.length;
5713
5714 return this.strip();
5715 };
5716
5717 BN.prototype.ixor = function ixor (num) {
5718 assert((this.negative | num.negative) === 0);
5719 return this.iuxor(num);
5720 };
5721
5722 // Xor `num` with `this`
5723 BN.prototype.xor = function xor (num) {
5724 if (this.length > num.length) return this.clone().ixor(num);
5725 return num.clone().ixor(this);
5726 };
5727
5728 BN.prototype.uxor = function uxor (num) {
5729 if (this.length > num.length) return this.clone().iuxor(num);
5730 return num.clone().iuxor(this);
5731 };
5732
5733 // Not ``this`` with ``width`` bitwidth
5734 BN.prototype.inotn = function inotn (width) {
5735 assert(typeof width === 'number' && width >= 0);
5736
5737 var bytesNeeded = Math.ceil(width / 26) | 0;
5738 var bitsLeft = width % 26;
5739
5740 // Extend the buffer with leading zeroes
5741 this._expand(bytesNeeded);
5742
5743 if (bitsLeft > 0) {
5744 bytesNeeded--;
5745 }
5746
5747 // Handle complete words
5748 for (var i = 0; i < bytesNeeded; i++) {
5749 this.words[i] = ~this.words[i] & 0x3ffffff;
5750 }
5751
5752 // Handle the residue
5753 if (bitsLeft > 0) {
5754 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
5755 }
5756
5757 // And remove leading zeroes
5758 return this.strip();
5759 };
5760
5761 BN.prototype.notn = function notn (width) {
5762 return this.clone().inotn(width);
5763 };
5764
5765 // Set `bit` of `this`
5766 BN.prototype.setn = function setn (bit, val) {
5767 assert(typeof bit === 'number' && bit >= 0);
5768
5769 var off = (bit / 26) | 0;
5770 var wbit = bit % 26;
5771
5772 this._expand(off + 1);
5773
5774 if (val) {
5775 this.words[off] = this.words[off] | (1 << wbit);
5776 } else {
5777 this.words[off] = this.words[off] & ~(1 << wbit);
5778 }
5779
5780 return this.strip();
5781 };
5782
5783 // Add `num` to `this` in-place
5784 BN.prototype.iadd = function iadd (num) {
5785 var r;
5786
5787 // negative + positive
5788 if (this.negative !== 0 && num.negative === 0) {
5789 this.negative = 0;
5790 r = this.isub(num);
5791 this.negative ^= 1;
5792 return this._normSign();
5793
5794 // positive + negative
5795 } else if (this.negative === 0 && num.negative !== 0) {
5796 num.negative = 0;
5797 r = this.isub(num);
5798 num.negative = 1;
5799 return r._normSign();
5800 }
5801
5802 // a.length > b.length
5803 var a, b;
5804 if (this.length > num.length) {
5805 a = this;
5806 b = num;
5807 } else {
5808 a = num;
5809 b = this;
5810 }
5811
5812 var carry = 0;
5813 for (var i = 0; i < b.length; i++) {
5814 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
5815 this.words[i] = r & 0x3ffffff;
5816 carry = r >>> 26;
5817 }
5818 for (; carry !== 0 && i < a.length; i++) {
5819 r = (a.words[i] | 0) + carry;
5820 this.words[i] = r & 0x3ffffff;
5821 carry = r >>> 26;
5822 }
5823
5824 this.length = a.length;
5825 if (carry !== 0) {
5826 this.words[this.length] = carry;
5827 this.length++;
5828 // Copy the rest of the words
5829 } else if (a !== this) {
5830 for (; i < a.length; i++) {
5831 this.words[i] = a.words[i];
5832 }
5833 }
5834
5835 return this;
5836 };
5837
5838 // Add `num` to `this`
5839 BN.prototype.add = function add (num) {
5840 var res;
5841 if (num.negative !== 0 && this.negative === 0) {
5842 num.negative = 0;
5843 res = this.sub(num);
5844 num.negative ^= 1;
5845 return res;
5846 } else if (num.negative === 0 && this.negative !== 0) {
5847 this.negative = 0;
5848 res = num.sub(this);
5849 this.negative = 1;
5850 return res;
5851 }
5852
5853 if (this.length > num.length) return this.clone().iadd(num);
5854
5855 return num.clone().iadd(this);
5856 };
5857
5858 // Subtract `num` from `this` in-place
5859 BN.prototype.isub = function isub (num) {
5860 // this - (-num) = this + num
5861 if (num.negative !== 0) {
5862 num.negative = 0;
5863 var r = this.iadd(num);
5864 num.negative = 1;
5865 return r._normSign();
5866
5867 // -this - num = -(this + num)
5868 } else if (this.negative !== 0) {
5869 this.negative = 0;
5870 this.iadd(num);
5871 this.negative = 1;
5872 return this._normSign();
5873 }
5874
5875 // At this point both numbers are positive
5876 var cmp = this.cmp(num);
5877
5878 // Optimization - zeroify
5879 if (cmp === 0) {
5880 this.negative = 0;
5881 this.length = 1;
5882 this.words[0] = 0;
5883 return this;
5884 }
5885
5886 // a > b
5887 var a, b;
5888 if (cmp > 0) {
5889 a = this;
5890 b = num;
5891 } else {
5892 a = num;
5893 b = this;
5894 }
5895
5896 var carry = 0;
5897 for (var i = 0; i < b.length; i++) {
5898 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
5899 carry = r >> 26;
5900 this.words[i] = r & 0x3ffffff;
5901 }
5902 for (; carry !== 0 && i < a.length; i++) {
5903 r = (a.words[i] | 0) + carry;
5904 carry = r >> 26;
5905 this.words[i] = r & 0x3ffffff;
5906 }
5907
5908 // Copy rest of the words
5909 if (carry === 0 && i < a.length && a !== this) {
5910 for (; i < a.length; i++) {
5911 this.words[i] = a.words[i];
5912 }
5913 }
5914
5915 this.length = Math.max(this.length, i);
5916
5917 if (a !== this) {
5918 this.negative = 1;
5919 }
5920
5921 return this.strip();
5922 };
5923
5924 // Subtract `num` from `this`
5925 BN.prototype.sub = function sub (num) {
5926 return this.clone().isub(num);
5927 };
5928
5929 function smallMulTo (self, num, out) {
5930 out.negative = num.negative ^ self.negative;
5931 var len = (self.length + num.length) | 0;
5932 out.length = len;
5933 len = (len - 1) | 0;
5934
5935 // Peel one iteration (compiler can't do it, because of code complexity)
5936 var a = self.words[0] | 0;
5937 var b = num.words[0] | 0;
5938 var r = a * b;
5939
5940 var lo = r & 0x3ffffff;
5941 var carry = (r / 0x4000000) | 0;
5942 out.words[0] = lo;
5943
5944 for (var k = 1; k < len; k++) {
5945 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
5946 // note that ncarry could be >= 0x3ffffff
5947 var ncarry = carry >>> 26;
5948 var rword = carry & 0x3ffffff;
5949 var maxJ = Math.min(k, num.length - 1);
5950 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
5951 var i = (k - j) | 0;
5952 a = self.words[i] | 0;
5953 b = num.words[j] | 0;
5954 r = a * b + rword;
5955 ncarry += (r / 0x4000000) | 0;
5956 rword = r & 0x3ffffff;
5957 }
5958 out.words[k] = rword | 0;
5959 carry = ncarry | 0;
5960 }
5961 if (carry !== 0) {
5962 out.words[k] = carry | 0;
5963 } else {
5964 out.length--;
5965 }
5966
5967 return out.strip();
5968 }
5969
5970 // TODO(indutny): it may be reasonable to omit it for users who don't need
5971 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
5972 // multiplication (like elliptic secp256k1).
5973 var comb10MulTo = function comb10MulTo (self, num, out) {
5974 var a = self.words;
5975 var b = num.words;
5976 var o = out.words;
5977 var c = 0;
5978 var lo;
5979 var mid;
5980 var hi;
5981 var a0 = a[0] | 0;
5982 var al0 = a0 & 0x1fff;
5983 var ah0 = a0 >>> 13;
5984 var a1 = a[1] | 0;
5985 var al1 = a1 & 0x1fff;
5986 var ah1 = a1 >>> 13;
5987 var a2 = a[2] | 0;
5988 var al2 = a2 & 0x1fff;
5989 var ah2 = a2 >>> 13;
5990 var a3 = a[3] | 0;
5991 var al3 = a3 & 0x1fff;
5992 var ah3 = a3 >>> 13;
5993 var a4 = a[4] | 0;
5994 var al4 = a4 & 0x1fff;
5995 var ah4 = a4 >>> 13;
5996 var a5 = a[5] | 0;
5997 var al5 = a5 & 0x1fff;
5998 var ah5 = a5 >>> 13;
5999 var a6 = a[6] | 0;
6000 var al6 = a6 & 0x1fff;
6001 var ah6 = a6 >>> 13;
6002 var a7 = a[7] | 0;
6003 var al7 = a7 & 0x1fff;
6004 var ah7 = a7 >>> 13;
6005 var a8 = a[8] | 0;
6006 var al8 = a8 & 0x1fff;
6007 var ah8 = a8 >>> 13;
6008 var a9 = a[9] | 0;
6009 var al9 = a9 & 0x1fff;
6010 var ah9 = a9 >>> 13;
6011 var b0 = b[0] | 0;
6012 var bl0 = b0 & 0x1fff;
6013 var bh0 = b0 >>> 13;
6014 var b1 = b[1] | 0;
6015 var bl1 = b1 & 0x1fff;
6016 var bh1 = b1 >>> 13;
6017 var b2 = b[2] | 0;
6018 var bl2 = b2 & 0x1fff;
6019 var bh2 = b2 >>> 13;
6020 var b3 = b[3] | 0;
6021 var bl3 = b3 & 0x1fff;
6022 var bh3 = b3 >>> 13;
6023 var b4 = b[4] | 0;
6024 var bl4 = b4 & 0x1fff;
6025 var bh4 = b4 >>> 13;
6026 var b5 = b[5] | 0;
6027 var bl5 = b5 & 0x1fff;
6028 var bh5 = b5 >>> 13;
6029 var b6 = b[6] | 0;
6030 var bl6 = b6 & 0x1fff;
6031 var bh6 = b6 >>> 13;
6032 var b7 = b[7] | 0;
6033 var bl7 = b7 & 0x1fff;
6034 var bh7 = b7 >>> 13;
6035 var b8 = b[8] | 0;
6036 var bl8 = b8 & 0x1fff;
6037 var bh8 = b8 >>> 13;
6038 var b9 = b[9] | 0;
6039 var bl9 = b9 & 0x1fff;
6040 var bh9 = b9 >>> 13;
6041
6042 out.negative = self.negative ^ num.negative;
6043 out.length = 19;
6044 /* k = 0 */
6045 lo = Math.imul(al0, bl0);
6046 mid = Math.imul(al0, bh0);
6047 mid = (mid + Math.imul(ah0, bl0)) | 0;
6048 hi = Math.imul(ah0, bh0);
6049 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6050 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
6051 w0 &= 0x3ffffff;
6052 /* k = 1 */
6053 lo = Math.imul(al1, bl0);
6054 mid = Math.imul(al1, bh0);
6055 mid = (mid + Math.imul(ah1, bl0)) | 0;
6056 hi = Math.imul(ah1, bh0);
6057 lo = (lo + Math.imul(al0, bl1)) | 0;
6058 mid = (mid + Math.imul(al0, bh1)) | 0;
6059 mid = (mid + Math.imul(ah0, bl1)) | 0;
6060 hi = (hi + Math.imul(ah0, bh1)) | 0;
6061 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6062 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
6063 w1 &= 0x3ffffff;
6064 /* k = 2 */
6065 lo = Math.imul(al2, bl0);
6066 mid = Math.imul(al2, bh0);
6067 mid = (mid + Math.imul(ah2, bl0)) | 0;
6068 hi = Math.imul(ah2, bh0);
6069 lo = (lo + Math.imul(al1, bl1)) | 0;
6070 mid = (mid + Math.imul(al1, bh1)) | 0;
6071 mid = (mid + Math.imul(ah1, bl1)) | 0;
6072 hi = (hi + Math.imul(ah1, bh1)) | 0;
6073 lo = (lo + Math.imul(al0, bl2)) | 0;
6074 mid = (mid + Math.imul(al0, bh2)) | 0;
6075 mid = (mid + Math.imul(ah0, bl2)) | 0;
6076 hi = (hi + Math.imul(ah0, bh2)) | 0;
6077 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6078 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
6079 w2 &= 0x3ffffff;
6080 /* k = 3 */
6081 lo = Math.imul(al3, bl0);
6082 mid = Math.imul(al3, bh0);
6083 mid = (mid + Math.imul(ah3, bl0)) | 0;
6084 hi = Math.imul(ah3, bh0);
6085 lo = (lo + Math.imul(al2, bl1)) | 0;
6086 mid = (mid + Math.imul(al2, bh1)) | 0;
6087 mid = (mid + Math.imul(ah2, bl1)) | 0;
6088 hi = (hi + Math.imul(ah2, bh1)) | 0;
6089 lo = (lo + Math.imul(al1, bl2)) | 0;
6090 mid = (mid + Math.imul(al1, bh2)) | 0;
6091 mid = (mid + Math.imul(ah1, bl2)) | 0;
6092 hi = (hi + Math.imul(ah1, bh2)) | 0;
6093 lo = (lo + Math.imul(al0, bl3)) | 0;
6094 mid = (mid + Math.imul(al0, bh3)) | 0;
6095 mid = (mid + Math.imul(ah0, bl3)) | 0;
6096 hi = (hi + Math.imul(ah0, bh3)) | 0;
6097 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6098 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
6099 w3 &= 0x3ffffff;
6100 /* k = 4 */
6101 lo = Math.imul(al4, bl0);
6102 mid = Math.imul(al4, bh0);
6103 mid = (mid + Math.imul(ah4, bl0)) | 0;
6104 hi = Math.imul(ah4, bh0);
6105 lo = (lo + Math.imul(al3, bl1)) | 0;
6106 mid = (mid + Math.imul(al3, bh1)) | 0;
6107 mid = (mid + Math.imul(ah3, bl1)) | 0;
6108 hi = (hi + Math.imul(ah3, bh1)) | 0;
6109 lo = (lo + Math.imul(al2, bl2)) | 0;
6110 mid = (mid + Math.imul(al2, bh2)) | 0;
6111 mid = (mid + Math.imul(ah2, bl2)) | 0;
6112 hi = (hi + Math.imul(ah2, bh2)) | 0;
6113 lo = (lo + Math.imul(al1, bl3)) | 0;
6114 mid = (mid + Math.imul(al1, bh3)) | 0;
6115 mid = (mid + Math.imul(ah1, bl3)) | 0;
6116 hi = (hi + Math.imul(ah1, bh3)) | 0;
6117 lo = (lo + Math.imul(al0, bl4)) | 0;
6118 mid = (mid + Math.imul(al0, bh4)) | 0;
6119 mid = (mid + Math.imul(ah0, bl4)) | 0;
6120 hi = (hi + Math.imul(ah0, bh4)) | 0;
6121 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6122 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
6123 w4 &= 0x3ffffff;
6124 /* k = 5 */
6125 lo = Math.imul(al5, bl0);
6126 mid = Math.imul(al5, bh0);
6127 mid = (mid + Math.imul(ah5, bl0)) | 0;
6128 hi = Math.imul(ah5, bh0);
6129 lo = (lo + Math.imul(al4, bl1)) | 0;
6130 mid = (mid + Math.imul(al4, bh1)) | 0;
6131 mid = (mid + Math.imul(ah4, bl1)) | 0;
6132 hi = (hi + Math.imul(ah4, bh1)) | 0;
6133 lo = (lo + Math.imul(al3, bl2)) | 0;
6134 mid = (mid + Math.imul(al3, bh2)) | 0;
6135 mid = (mid + Math.imul(ah3, bl2)) | 0;
6136 hi = (hi + Math.imul(ah3, bh2)) | 0;
6137 lo = (lo + Math.imul(al2, bl3)) | 0;
6138 mid = (mid + Math.imul(al2, bh3)) | 0;
6139 mid = (mid + Math.imul(ah2, bl3)) | 0;
6140 hi = (hi + Math.imul(ah2, bh3)) | 0;
6141 lo = (lo + Math.imul(al1, bl4)) | 0;
6142 mid = (mid + Math.imul(al1, bh4)) | 0;
6143 mid = (mid + Math.imul(ah1, bl4)) | 0;
6144 hi = (hi + Math.imul(ah1, bh4)) | 0;
6145 lo = (lo + Math.imul(al0, bl5)) | 0;
6146 mid = (mid + Math.imul(al0, bh5)) | 0;
6147 mid = (mid + Math.imul(ah0, bl5)) | 0;
6148 hi = (hi + Math.imul(ah0, bh5)) | 0;
6149 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6150 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
6151 w5 &= 0x3ffffff;
6152 /* k = 6 */
6153 lo = Math.imul(al6, bl0);
6154 mid = Math.imul(al6, bh0);
6155 mid = (mid + Math.imul(ah6, bl0)) | 0;
6156 hi = Math.imul(ah6, bh0);
6157 lo = (lo + Math.imul(al5, bl1)) | 0;
6158 mid = (mid + Math.imul(al5, bh1)) | 0;
6159 mid = (mid + Math.imul(ah5, bl1)) | 0;
6160 hi = (hi + Math.imul(ah5, bh1)) | 0;
6161 lo = (lo + Math.imul(al4, bl2)) | 0;
6162 mid = (mid + Math.imul(al4, bh2)) | 0;
6163 mid = (mid + Math.imul(ah4, bl2)) | 0;
6164 hi = (hi + Math.imul(ah4, bh2)) | 0;
6165 lo = (lo + Math.imul(al3, bl3)) | 0;
6166 mid = (mid + Math.imul(al3, bh3)) | 0;
6167 mid = (mid + Math.imul(ah3, bl3)) | 0;
6168 hi = (hi + Math.imul(ah3, bh3)) | 0;
6169 lo = (lo + Math.imul(al2, bl4)) | 0;
6170 mid = (mid + Math.imul(al2, bh4)) | 0;
6171 mid = (mid + Math.imul(ah2, bl4)) | 0;
6172 hi = (hi + Math.imul(ah2, bh4)) | 0;
6173 lo = (lo + Math.imul(al1, bl5)) | 0;
6174 mid = (mid + Math.imul(al1, bh5)) | 0;
6175 mid = (mid + Math.imul(ah1, bl5)) | 0;
6176 hi = (hi + Math.imul(ah1, bh5)) | 0;
6177 lo = (lo + Math.imul(al0, bl6)) | 0;
6178 mid = (mid + Math.imul(al0, bh6)) | 0;
6179 mid = (mid + Math.imul(ah0, bl6)) | 0;
6180 hi = (hi + Math.imul(ah0, bh6)) | 0;
6181 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6182 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
6183 w6 &= 0x3ffffff;
6184 /* k = 7 */
6185 lo = Math.imul(al7, bl0);
6186 mid = Math.imul(al7, bh0);
6187 mid = (mid + Math.imul(ah7, bl0)) | 0;
6188 hi = Math.imul(ah7, bh0);
6189 lo = (lo + Math.imul(al6, bl1)) | 0;
6190 mid = (mid + Math.imul(al6, bh1)) | 0;
6191 mid = (mid + Math.imul(ah6, bl1)) | 0;
6192 hi = (hi + Math.imul(ah6, bh1)) | 0;
6193 lo = (lo + Math.imul(al5, bl2)) | 0;
6194 mid = (mid + Math.imul(al5, bh2)) | 0;
6195 mid = (mid + Math.imul(ah5, bl2)) | 0;
6196 hi = (hi + Math.imul(ah5, bh2)) | 0;
6197 lo = (lo + Math.imul(al4, bl3)) | 0;
6198 mid = (mid + Math.imul(al4, bh3)) | 0;
6199 mid = (mid + Math.imul(ah4, bl3)) | 0;
6200 hi = (hi + Math.imul(ah4, bh3)) | 0;
6201 lo = (lo + Math.imul(al3, bl4)) | 0;
6202 mid = (mid + Math.imul(al3, bh4)) | 0;
6203 mid = (mid + Math.imul(ah3, bl4)) | 0;
6204 hi = (hi + Math.imul(ah3, bh4)) | 0;
6205 lo = (lo + Math.imul(al2, bl5)) | 0;
6206 mid = (mid + Math.imul(al2, bh5)) | 0;
6207 mid = (mid + Math.imul(ah2, bl5)) | 0;
6208 hi = (hi + Math.imul(ah2, bh5)) | 0;
6209 lo = (lo + Math.imul(al1, bl6)) | 0;
6210 mid = (mid + Math.imul(al1, bh6)) | 0;
6211 mid = (mid + Math.imul(ah1, bl6)) | 0;
6212 hi = (hi + Math.imul(ah1, bh6)) | 0;
6213 lo = (lo + Math.imul(al0, bl7)) | 0;
6214 mid = (mid + Math.imul(al0, bh7)) | 0;
6215 mid = (mid + Math.imul(ah0, bl7)) | 0;
6216 hi = (hi + Math.imul(ah0, bh7)) | 0;
6217 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6218 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
6219 w7 &= 0x3ffffff;
6220 /* k = 8 */
6221 lo = Math.imul(al8, bl0);
6222 mid = Math.imul(al8, bh0);
6223 mid = (mid + Math.imul(ah8, bl0)) | 0;
6224 hi = Math.imul(ah8, bh0);
6225 lo = (lo + Math.imul(al7, bl1)) | 0;
6226 mid = (mid + Math.imul(al7, bh1)) | 0;
6227 mid = (mid + Math.imul(ah7, bl1)) | 0;
6228 hi = (hi + Math.imul(ah7, bh1)) | 0;
6229 lo = (lo + Math.imul(al6, bl2)) | 0;
6230 mid = (mid + Math.imul(al6, bh2)) | 0;
6231 mid = (mid + Math.imul(ah6, bl2)) | 0;
6232 hi = (hi + Math.imul(ah6, bh2)) | 0;
6233 lo = (lo + Math.imul(al5, bl3)) | 0;
6234 mid = (mid + Math.imul(al5, bh3)) | 0;
6235 mid = (mid + Math.imul(ah5, bl3)) | 0;
6236 hi = (hi + Math.imul(ah5, bh3)) | 0;
6237 lo = (lo + Math.imul(al4, bl4)) | 0;
6238 mid = (mid + Math.imul(al4, bh4)) | 0;
6239 mid = (mid + Math.imul(ah4, bl4)) | 0;
6240 hi = (hi + Math.imul(ah4, bh4)) | 0;
6241 lo = (lo + Math.imul(al3, bl5)) | 0;
6242 mid = (mid + Math.imul(al3, bh5)) | 0;
6243 mid = (mid + Math.imul(ah3, bl5)) | 0;
6244 hi = (hi + Math.imul(ah3, bh5)) | 0;
6245 lo = (lo + Math.imul(al2, bl6)) | 0;
6246 mid = (mid + Math.imul(al2, bh6)) | 0;
6247 mid = (mid + Math.imul(ah2, bl6)) | 0;
6248 hi = (hi + Math.imul(ah2, bh6)) | 0;
6249 lo = (lo + Math.imul(al1, bl7)) | 0;
6250 mid = (mid + Math.imul(al1, bh7)) | 0;
6251 mid = (mid + Math.imul(ah1, bl7)) | 0;
6252 hi = (hi + Math.imul(ah1, bh7)) | 0;
6253 lo = (lo + Math.imul(al0, bl8)) | 0;
6254 mid = (mid + Math.imul(al0, bh8)) | 0;
6255 mid = (mid + Math.imul(ah0, bl8)) | 0;
6256 hi = (hi + Math.imul(ah0, bh8)) | 0;
6257 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6258 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
6259 w8 &= 0x3ffffff;
6260 /* k = 9 */
6261 lo = Math.imul(al9, bl0);
6262 mid = Math.imul(al9, bh0);
6263 mid = (mid + Math.imul(ah9, bl0)) | 0;
6264 hi = Math.imul(ah9, bh0);
6265 lo = (lo + Math.imul(al8, bl1)) | 0;
6266 mid = (mid + Math.imul(al8, bh1)) | 0;
6267 mid = (mid + Math.imul(ah8, bl1)) | 0;
6268 hi = (hi + Math.imul(ah8, bh1)) | 0;
6269 lo = (lo + Math.imul(al7, bl2)) | 0;
6270 mid = (mid + Math.imul(al7, bh2)) | 0;
6271 mid = (mid + Math.imul(ah7, bl2)) | 0;
6272 hi = (hi + Math.imul(ah7, bh2)) | 0;
6273 lo = (lo + Math.imul(al6, bl3)) | 0;
6274 mid = (mid + Math.imul(al6, bh3)) | 0;
6275 mid = (mid + Math.imul(ah6, bl3)) | 0;
6276 hi = (hi + Math.imul(ah6, bh3)) | 0;
6277 lo = (lo + Math.imul(al5, bl4)) | 0;
6278 mid = (mid + Math.imul(al5, bh4)) | 0;
6279 mid = (mid + Math.imul(ah5, bl4)) | 0;
6280 hi = (hi + Math.imul(ah5, bh4)) | 0;
6281 lo = (lo + Math.imul(al4, bl5)) | 0;
6282 mid = (mid + Math.imul(al4, bh5)) | 0;
6283 mid = (mid + Math.imul(ah4, bl5)) | 0;
6284 hi = (hi + Math.imul(ah4, bh5)) | 0;
6285 lo = (lo + Math.imul(al3, bl6)) | 0;
6286 mid = (mid + Math.imul(al3, bh6)) | 0;
6287 mid = (mid + Math.imul(ah3, bl6)) | 0;
6288 hi = (hi + Math.imul(ah3, bh6)) | 0;
6289 lo = (lo + Math.imul(al2, bl7)) | 0;
6290 mid = (mid + Math.imul(al2, bh7)) | 0;
6291 mid = (mid + Math.imul(ah2, bl7)) | 0;
6292 hi = (hi + Math.imul(ah2, bh7)) | 0;
6293 lo = (lo + Math.imul(al1, bl8)) | 0;
6294 mid = (mid + Math.imul(al1, bh8)) | 0;
6295 mid = (mid + Math.imul(ah1, bl8)) | 0;
6296 hi = (hi + Math.imul(ah1, bh8)) | 0;
6297 lo = (lo + Math.imul(al0, bl9)) | 0;
6298 mid = (mid + Math.imul(al0, bh9)) | 0;
6299 mid = (mid + Math.imul(ah0, bl9)) | 0;
6300 hi = (hi + Math.imul(ah0, bh9)) | 0;
6301 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6302 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
6303 w9 &= 0x3ffffff;
6304 /* k = 10 */
6305 lo = Math.imul(al9, bl1);
6306 mid = Math.imul(al9, bh1);
6307 mid = (mid + Math.imul(ah9, bl1)) | 0;
6308 hi = Math.imul(ah9, bh1);
6309 lo = (lo + Math.imul(al8, bl2)) | 0;
6310 mid = (mid + Math.imul(al8, bh2)) | 0;
6311 mid = (mid + Math.imul(ah8, bl2)) | 0;
6312 hi = (hi + Math.imul(ah8, bh2)) | 0;
6313 lo = (lo + Math.imul(al7, bl3)) | 0;
6314 mid = (mid + Math.imul(al7, bh3)) | 0;
6315 mid = (mid + Math.imul(ah7, bl3)) | 0;
6316 hi = (hi + Math.imul(ah7, bh3)) | 0;
6317 lo = (lo + Math.imul(al6, bl4)) | 0;
6318 mid = (mid + Math.imul(al6, bh4)) | 0;
6319 mid = (mid + Math.imul(ah6, bl4)) | 0;
6320 hi = (hi + Math.imul(ah6, bh4)) | 0;
6321 lo = (lo + Math.imul(al5, bl5)) | 0;
6322 mid = (mid + Math.imul(al5, bh5)) | 0;
6323 mid = (mid + Math.imul(ah5, bl5)) | 0;
6324 hi = (hi + Math.imul(ah5, bh5)) | 0;
6325 lo = (lo + Math.imul(al4, bl6)) | 0;
6326 mid = (mid + Math.imul(al4, bh6)) | 0;
6327 mid = (mid + Math.imul(ah4, bl6)) | 0;
6328 hi = (hi + Math.imul(ah4, bh6)) | 0;
6329 lo = (lo + Math.imul(al3, bl7)) | 0;
6330 mid = (mid + Math.imul(al3, bh7)) | 0;
6331 mid = (mid + Math.imul(ah3, bl7)) | 0;
6332 hi = (hi + Math.imul(ah3, bh7)) | 0;
6333 lo = (lo + Math.imul(al2, bl8)) | 0;
6334 mid = (mid + Math.imul(al2, bh8)) | 0;
6335 mid = (mid + Math.imul(ah2, bl8)) | 0;
6336 hi = (hi + Math.imul(ah2, bh8)) | 0;
6337 lo = (lo + Math.imul(al1, bl9)) | 0;
6338 mid = (mid + Math.imul(al1, bh9)) | 0;
6339 mid = (mid + Math.imul(ah1, bl9)) | 0;
6340 hi = (hi + Math.imul(ah1, bh9)) | 0;
6341 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6342 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
6343 w10 &= 0x3ffffff;
6344 /* k = 11 */
6345 lo = Math.imul(al9, bl2);
6346 mid = Math.imul(al9, bh2);
6347 mid = (mid + Math.imul(ah9, bl2)) | 0;
6348 hi = Math.imul(ah9, bh2);
6349 lo = (lo + Math.imul(al8, bl3)) | 0;
6350 mid = (mid + Math.imul(al8, bh3)) | 0;
6351 mid = (mid + Math.imul(ah8, bl3)) | 0;
6352 hi = (hi + Math.imul(ah8, bh3)) | 0;
6353 lo = (lo + Math.imul(al7, bl4)) | 0;
6354 mid = (mid + Math.imul(al7, bh4)) | 0;
6355 mid = (mid + Math.imul(ah7, bl4)) | 0;
6356 hi = (hi + Math.imul(ah7, bh4)) | 0;
6357 lo = (lo + Math.imul(al6, bl5)) | 0;
6358 mid = (mid + Math.imul(al6, bh5)) | 0;
6359 mid = (mid + Math.imul(ah6, bl5)) | 0;
6360 hi = (hi + Math.imul(ah6, bh5)) | 0;
6361 lo = (lo + Math.imul(al5, bl6)) | 0;
6362 mid = (mid + Math.imul(al5, bh6)) | 0;
6363 mid = (mid + Math.imul(ah5, bl6)) | 0;
6364 hi = (hi + Math.imul(ah5, bh6)) | 0;
6365 lo = (lo + Math.imul(al4, bl7)) | 0;
6366 mid = (mid + Math.imul(al4, bh7)) | 0;
6367 mid = (mid + Math.imul(ah4, bl7)) | 0;
6368 hi = (hi + Math.imul(ah4, bh7)) | 0;
6369 lo = (lo + Math.imul(al3, bl8)) | 0;
6370 mid = (mid + Math.imul(al3, bh8)) | 0;
6371 mid = (mid + Math.imul(ah3, bl8)) | 0;
6372 hi = (hi + Math.imul(ah3, bh8)) | 0;
6373 lo = (lo + Math.imul(al2, bl9)) | 0;
6374 mid = (mid + Math.imul(al2, bh9)) | 0;
6375 mid = (mid + Math.imul(ah2, bl9)) | 0;
6376 hi = (hi + Math.imul(ah2, bh9)) | 0;
6377 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6378 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
6379 w11 &= 0x3ffffff;
6380 /* k = 12 */
6381 lo = Math.imul(al9, bl3);
6382 mid = Math.imul(al9, bh3);
6383 mid = (mid + Math.imul(ah9, bl3)) | 0;
6384 hi = Math.imul(ah9, bh3);
6385 lo = (lo + Math.imul(al8, bl4)) | 0;
6386 mid = (mid + Math.imul(al8, bh4)) | 0;
6387 mid = (mid + Math.imul(ah8, bl4)) | 0;
6388 hi = (hi + Math.imul(ah8, bh4)) | 0;
6389 lo = (lo + Math.imul(al7, bl5)) | 0;
6390 mid = (mid + Math.imul(al7, bh5)) | 0;
6391 mid = (mid + Math.imul(ah7, bl5)) | 0;
6392 hi = (hi + Math.imul(ah7, bh5)) | 0;
6393 lo = (lo + Math.imul(al6, bl6)) | 0;
6394 mid = (mid + Math.imul(al6, bh6)) | 0;
6395 mid = (mid + Math.imul(ah6, bl6)) | 0;
6396 hi = (hi + Math.imul(ah6, bh6)) | 0;
6397 lo = (lo + Math.imul(al5, bl7)) | 0;
6398 mid = (mid + Math.imul(al5, bh7)) | 0;
6399 mid = (mid + Math.imul(ah5, bl7)) | 0;
6400 hi = (hi + Math.imul(ah5, bh7)) | 0;
6401 lo = (lo + Math.imul(al4, bl8)) | 0;
6402 mid = (mid + Math.imul(al4, bh8)) | 0;
6403 mid = (mid + Math.imul(ah4, bl8)) | 0;
6404 hi = (hi + Math.imul(ah4, bh8)) | 0;
6405 lo = (lo + Math.imul(al3, bl9)) | 0;
6406 mid = (mid + Math.imul(al3, bh9)) | 0;
6407 mid = (mid + Math.imul(ah3, bl9)) | 0;
6408 hi = (hi + Math.imul(ah3, bh9)) | 0;
6409 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6410 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
6411 w12 &= 0x3ffffff;
6412 /* k = 13 */
6413 lo = Math.imul(al9, bl4);
6414 mid = Math.imul(al9, bh4);
6415 mid = (mid + Math.imul(ah9, bl4)) | 0;
6416 hi = Math.imul(ah9, bh4);
6417 lo = (lo + Math.imul(al8, bl5)) | 0;
6418 mid = (mid + Math.imul(al8, bh5)) | 0;
6419 mid = (mid + Math.imul(ah8, bl5)) | 0;
6420 hi = (hi + Math.imul(ah8, bh5)) | 0;
6421 lo = (lo + Math.imul(al7, bl6)) | 0;
6422 mid = (mid + Math.imul(al7, bh6)) | 0;
6423 mid = (mid + Math.imul(ah7, bl6)) | 0;
6424 hi = (hi + Math.imul(ah7, bh6)) | 0;
6425 lo = (lo + Math.imul(al6, bl7)) | 0;
6426 mid = (mid + Math.imul(al6, bh7)) | 0;
6427 mid = (mid + Math.imul(ah6, bl7)) | 0;
6428 hi = (hi + Math.imul(ah6, bh7)) | 0;
6429 lo = (lo + Math.imul(al5, bl8)) | 0;
6430 mid = (mid + Math.imul(al5, bh8)) | 0;
6431 mid = (mid + Math.imul(ah5, bl8)) | 0;
6432 hi = (hi + Math.imul(ah5, bh8)) | 0;
6433 lo = (lo + Math.imul(al4, bl9)) | 0;
6434 mid = (mid + Math.imul(al4, bh9)) | 0;
6435 mid = (mid + Math.imul(ah4, bl9)) | 0;
6436 hi = (hi + Math.imul(ah4, bh9)) | 0;
6437 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6438 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
6439 w13 &= 0x3ffffff;
6440 /* k = 14 */
6441 lo = Math.imul(al9, bl5);
6442 mid = Math.imul(al9, bh5);
6443 mid = (mid + Math.imul(ah9, bl5)) | 0;
6444 hi = Math.imul(ah9, bh5);
6445 lo = (lo + Math.imul(al8, bl6)) | 0;
6446 mid = (mid + Math.imul(al8, bh6)) | 0;
6447 mid = (mid + Math.imul(ah8, bl6)) | 0;
6448 hi = (hi + Math.imul(ah8, bh6)) | 0;
6449 lo = (lo + Math.imul(al7, bl7)) | 0;
6450 mid = (mid + Math.imul(al7, bh7)) | 0;
6451 mid = (mid + Math.imul(ah7, bl7)) | 0;
6452 hi = (hi + Math.imul(ah7, bh7)) | 0;
6453 lo = (lo + Math.imul(al6, bl8)) | 0;
6454 mid = (mid + Math.imul(al6, bh8)) | 0;
6455 mid = (mid + Math.imul(ah6, bl8)) | 0;
6456 hi = (hi + Math.imul(ah6, bh8)) | 0;
6457 lo = (lo + Math.imul(al5, bl9)) | 0;
6458 mid = (mid + Math.imul(al5, bh9)) | 0;
6459 mid = (mid + Math.imul(ah5, bl9)) | 0;
6460 hi = (hi + Math.imul(ah5, bh9)) | 0;
6461 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6462 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
6463 w14 &= 0x3ffffff;
6464 /* k = 15 */
6465 lo = Math.imul(al9, bl6);
6466 mid = Math.imul(al9, bh6);
6467 mid = (mid + Math.imul(ah9, bl6)) | 0;
6468 hi = Math.imul(ah9, bh6);
6469 lo = (lo + Math.imul(al8, bl7)) | 0;
6470 mid = (mid + Math.imul(al8, bh7)) | 0;
6471 mid = (mid + Math.imul(ah8, bl7)) | 0;
6472 hi = (hi + Math.imul(ah8, bh7)) | 0;
6473 lo = (lo + Math.imul(al7, bl8)) | 0;
6474 mid = (mid + Math.imul(al7, bh8)) | 0;
6475 mid = (mid + Math.imul(ah7, bl8)) | 0;
6476 hi = (hi + Math.imul(ah7, bh8)) | 0;
6477 lo = (lo + Math.imul(al6, bl9)) | 0;
6478 mid = (mid + Math.imul(al6, bh9)) | 0;
6479 mid = (mid + Math.imul(ah6, bl9)) | 0;
6480 hi = (hi + Math.imul(ah6, bh9)) | 0;
6481 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6482 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
6483 w15 &= 0x3ffffff;
6484 /* k = 16 */
6485 lo = Math.imul(al9, bl7);
6486 mid = Math.imul(al9, bh7);
6487 mid = (mid + Math.imul(ah9, bl7)) | 0;
6488 hi = Math.imul(ah9, bh7);
6489 lo = (lo + Math.imul(al8, bl8)) | 0;
6490 mid = (mid + Math.imul(al8, bh8)) | 0;
6491 mid = (mid + Math.imul(ah8, bl8)) | 0;
6492 hi = (hi + Math.imul(ah8, bh8)) | 0;
6493 lo = (lo + Math.imul(al7, bl9)) | 0;
6494 mid = (mid + Math.imul(al7, bh9)) | 0;
6495 mid = (mid + Math.imul(ah7, bl9)) | 0;
6496 hi = (hi + Math.imul(ah7, bh9)) | 0;
6497 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6498 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
6499 w16 &= 0x3ffffff;
6500 /* k = 17 */
6501 lo = Math.imul(al9, bl8);
6502 mid = Math.imul(al9, bh8);
6503 mid = (mid + Math.imul(ah9, bl8)) | 0;
6504 hi = Math.imul(ah9, bh8);
6505 lo = (lo + Math.imul(al8, bl9)) | 0;
6506 mid = (mid + Math.imul(al8, bh9)) | 0;
6507 mid = (mid + Math.imul(ah8, bl9)) | 0;
6508 hi = (hi + Math.imul(ah8, bh9)) | 0;
6509 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6510 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
6511 w17 &= 0x3ffffff;
6512 /* k = 18 */
6513 lo = Math.imul(al9, bl9);
6514 mid = Math.imul(al9, bh9);
6515 mid = (mid + Math.imul(ah9, bl9)) | 0;
6516 hi = Math.imul(ah9, bh9);
6517 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
6518 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
6519 w18 &= 0x3ffffff;
6520 o[0] = w0;
6521 o[1] = w1;
6522 o[2] = w2;
6523 o[3] = w3;
6524 o[4] = w4;
6525 o[5] = w5;
6526 o[6] = w6;
6527 o[7] = w7;
6528 o[8] = w8;
6529 o[9] = w9;
6530 o[10] = w10;
6531 o[11] = w11;
6532 o[12] = w12;
6533 o[13] = w13;
6534 o[14] = w14;
6535 o[15] = w15;
6536 o[16] = w16;
6537 o[17] = w17;
6538 o[18] = w18;
6539 if (c !== 0) {
6540 o[19] = c;
6541 out.length++;
6542 }
6543 return out;
6544 };
6545
6546 // Polyfill comb
6547 if (!Math.imul) {
6548 comb10MulTo = smallMulTo;
6549 }
6550
6551 function bigMulTo (self, num, out) {
6552 out.negative = num.negative ^ self.negative;
6553 out.length = self.length + num.length;
6554
6555 var carry = 0;
6556 var hncarry = 0;
6557 for (var k = 0; k < out.length - 1; k++) {
6558 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
6559 // note that ncarry could be >= 0x3ffffff
6560 var ncarry = hncarry;
6561 hncarry = 0;
6562 var rword = carry & 0x3ffffff;
6563 var maxJ = Math.min(k, num.length - 1);
6564 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
6565 var i = k - j;
6566 var a = self.words[i] | 0;
6567 var b = num.words[j] | 0;
6568 var r = a * b;
6569
6570 var lo = r & 0x3ffffff;
6571 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
6572 lo = (lo + rword) | 0;
6573 rword = lo & 0x3ffffff;
6574 ncarry = (ncarry + (lo >>> 26)) | 0;
6575
6576 hncarry += ncarry >>> 26;
6577 ncarry &= 0x3ffffff;
6578 }
6579 out.words[k] = rword;
6580 carry = ncarry;
6581 ncarry = hncarry;
6582 }
6583 if (carry !== 0) {
6584 out.words[k] = carry;
6585 } else {
6586 out.length--;
6587 }
6588
6589 return out.strip();
6590 }
6591
6592 function jumboMulTo (self, num, out) {
6593 var fftm = new FFTM();
6594 return fftm.mulp(self, num, out);
6595 }
6596
6597 BN.prototype.mulTo = function mulTo (num, out) {
6598 var res;
6599 var len = this.length + num.length;
6600 if (this.length === 10 && num.length === 10) {
6601 res = comb10MulTo(this, num, out);
6602 } else if (len < 63) {
6603 res = smallMulTo(this, num, out);
6604 } else if (len < 1024) {
6605 res = bigMulTo(this, num, out);
6606 } else {
6607 res = jumboMulTo(this, num, out);
6608 }
6609
6610 return res;
6611 };
6612
6613 // Cooley-Tukey algorithm for FFT
6614 // slightly revisited to rely on looping instead of recursion
6615
6616 function FFTM (x, y) {
6617 this.x = x;
6618 this.y = y;
6619 }
6620
6621 FFTM.prototype.makeRBT = function makeRBT (N) {
6622 var t = new Array(N);
6623 var l = BN.prototype._countBits(N) - 1;
6624 for (var i = 0; i < N; i++) {
6625 t[i] = this.revBin(i, l, N);
6626 }
6627
6628 return t;
6629 };
6630
6631 // Returns binary-reversed representation of `x`
6632 FFTM.prototype.revBin = function revBin (x, l, N) {
6633 if (x === 0 || x === N - 1) return x;
6634
6635 var rb = 0;
6636 for (var i = 0; i < l; i++) {
6637 rb |= (x & 1) << (l - i - 1);
6638 x >>= 1;
6639 }
6640
6641 return rb;
6642 };
6643
6644 // Performs "tweedling" phase, therefore 'emulating'
6645 // behaviour of the recursive algorithm
6646 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
6647 for (var i = 0; i < N; i++) {
6648 rtws[i] = rws[rbt[i]];
6649 itws[i] = iws[rbt[i]];
6650 }
6651 };
6652
6653 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
6654 this.permute(rbt, rws, iws, rtws, itws, N);
6655
6656 for (var s = 1; s < N; s <<= 1) {
6657 var l = s << 1;
6658
6659 var rtwdf = Math.cos(2 * Math.PI / l);
6660 var itwdf = Math.sin(2 * Math.PI / l);
6661
6662 for (var p = 0; p < N; p += l) {
6663 var rtwdf_ = rtwdf;
6664 var itwdf_ = itwdf;
6665
6666 for (var j = 0; j < s; j++) {
6667 var re = rtws[p + j];
6668 var ie = itws[p + j];
6669
6670 var ro = rtws[p + j + s];
6671 var io = itws[p + j + s];
6672
6673 var rx = rtwdf_ * ro - itwdf_ * io;
6674
6675 io = rtwdf_ * io + itwdf_ * ro;
6676 ro = rx;
6677
6678 rtws[p + j] = re + ro;
6679 itws[p + j] = ie + io;
6680
6681 rtws[p + j + s] = re - ro;
6682 itws[p + j + s] = ie - io;
6683
6684 /* jshint maxdepth : false */
6685 if (j !== l) {
6686 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
6687
6688 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
6689 rtwdf_ = rx;
6690 }
6691 }
6692 }
6693 }
6694 };
6695
6696 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
6697 var N = Math.max(m, n) | 1;
6698 var odd = N & 1;
6699 var i = 0;
6700 for (N = N / 2 | 0; N; N = N >>> 1) {
6701 i++;
6702 }
6703
6704 return 1 << i + 1 + odd;
6705 };
6706
6707 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
6708 if (N <= 1) return;
6709
6710 for (var i = 0; i < N / 2; i++) {
6711 var t = rws[i];
6712
6713 rws[i] = rws[N - i - 1];
6714 rws[N - i - 1] = t;
6715
6716 t = iws[i];
6717
6718 iws[i] = -iws[N - i - 1];
6719 iws[N - i - 1] = -t;
6720 }
6721 };
6722
6723 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
6724 var carry = 0;
6725 for (var i = 0; i < N / 2; i++) {
6726 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
6727 Math.round(ws[2 * i] / N) +
6728 carry;
6729
6730 ws[i] = w & 0x3ffffff;
6731
6732 if (w < 0x4000000) {
6733 carry = 0;
6734 } else {
6735 carry = w / 0x4000000 | 0;
6736 }
6737 }
6738
6739 return ws;
6740 };
6741
6742 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
6743 var carry = 0;
6744 for (var i = 0; i < len; i++) {
6745 carry = carry + (ws[i] | 0);
6746
6747 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
6748 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
6749 }
6750
6751 // Pad with zeroes
6752 for (i = 2 * len; i < N; ++i) {
6753 rws[i] = 0;
6754 }
6755
6756 assert(carry === 0);
6757 assert((carry & ~0x1fff) === 0);
6758 };
6759
6760 FFTM.prototype.stub = function stub (N) {
6761 var ph = new Array(N);
6762 for (var i = 0; i < N; i++) {
6763 ph[i] = 0;
6764 }
6765
6766 return ph;
6767 };
6768
6769 FFTM.prototype.mulp = function mulp (x, y, out) {
6770 var N = 2 * this.guessLen13b(x.length, y.length);
6771
6772 var rbt = this.makeRBT(N);
6773
6774 var _ = this.stub(N);
6775
6776 var rws = new Array(N);
6777 var rwst = new Array(N);
6778 var iwst = new Array(N);
6779
6780 var nrws = new Array(N);
6781 var nrwst = new Array(N);
6782 var niwst = new Array(N);
6783
6784 var rmws = out.words;
6785 rmws.length = N;
6786
6787 this.convert13b(x.words, x.length, rws, N);
6788 this.convert13b(y.words, y.length, nrws, N);
6789
6790 this.transform(rws, _, rwst, iwst, N, rbt);
6791 this.transform(nrws, _, nrwst, niwst, N, rbt);
6792
6793 for (var i = 0; i < N; i++) {
6794 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
6795 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
6796 rwst[i] = rx;
6797 }
6798
6799 this.conjugate(rwst, iwst, N);
6800 this.transform(rwst, iwst, rmws, _, N, rbt);
6801 this.conjugate(rmws, _, N);
6802 this.normalize13b(rmws, N);
6803
6804 out.negative = x.negative ^ y.negative;
6805 out.length = x.length + y.length;
6806 return out.strip();
6807 };
6808
6809 // Multiply `this` by `num`
6810 BN.prototype.mul = function mul (num) {
6811 var out = new BN(null);
6812 out.words = new Array(this.length + num.length);
6813 return this.mulTo(num, out);
6814 };
6815
6816 // Multiply employing FFT
6817 BN.prototype.mulf = function mulf (num) {
6818 var out = new BN(null);
6819 out.words = new Array(this.length + num.length);
6820 return jumboMulTo(this, num, out);
6821 };
6822
6823 // In-place Multiplication
6824 BN.prototype.imul = function imul (num) {
6825 return this.clone().mulTo(num, this);
6826 };
6827
6828 BN.prototype.imuln = function imuln (num) {
6829 assert(typeof num === 'number');
6830 assert(num < 0x4000000);
6831
6832 // Carry
6833 var carry = 0;
6834 for (var i = 0; i < this.length; i++) {
6835 var w = (this.words[i] | 0) * num;
6836 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
6837 carry >>= 26;
6838 carry += (w / 0x4000000) | 0;
6839 // NOTE: lo is 27bit maximum
6840 carry += lo >>> 26;
6841 this.words[i] = lo & 0x3ffffff;
6842 }
6843
6844 if (carry !== 0) {
6845 this.words[i] = carry;
6846 this.length++;
6847 }
6848
6849 return this;
6850 };
6851
6852 BN.prototype.muln = function muln (num) {
6853 return this.clone().imuln(num);
6854 };
6855
6856 // `this` * `this`
6857 BN.prototype.sqr = function sqr () {
6858 return this.mul(this);
6859 };
6860
6861 // `this` * `this` in-place
6862 BN.prototype.isqr = function isqr () {
6863 return this.imul(this.clone());
6864 };
6865
6866 // Math.pow(`this`, `num`)
6867 BN.prototype.pow = function pow (num) {
6868 var w = toBitArray(num);
6869 if (w.length === 0) return new BN(1);
6870
6871 // Skip leading zeroes
6872 var res = this;
6873 for (var i = 0; i < w.length; i++, res = res.sqr()) {
6874 if (w[i] !== 0) break;
6875 }
6876
6877 if (++i < w.length) {
6878 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
6879 if (w[i] === 0) continue;
6880
6881 res = res.mul(q);
6882 }
6883 }
6884
6885 return res;
6886 };
6887
6888 // Shift-left in-place
6889 BN.prototype.iushln = function iushln (bits) {
6890 assert(typeof bits === 'number' && bits >= 0);
6891 var r = bits % 26;
6892 var s = (bits - r) / 26;
6893 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
6894 var i;
6895
6896 if (r !== 0) {
6897 var carry = 0;
6898
6899 for (i = 0; i < this.length; i++) {
6900 var newCarry = this.words[i] & carryMask;
6901 var c = ((this.words[i] | 0) - newCarry) << r;
6902 this.words[i] = c | carry;
6903 carry = newCarry >>> (26 - r);
6904 }
6905
6906 if (carry) {
6907 this.words[i] = carry;
6908 this.length++;
6909 }
6910 }
6911
6912 if (s !== 0) {
6913 for (i = this.length - 1; i >= 0; i--) {
6914 this.words[i + s] = this.words[i];
6915 }
6916
6917 for (i = 0; i < s; i++) {
6918 this.words[i] = 0;
6919 }
6920
6921 this.length += s;
6922 }
6923
6924 return this.strip();
6925 };
6926
6927 BN.prototype.ishln = function ishln (bits) {
6928 // TODO(indutny): implement me
6929 assert(this.negative === 0);
6930 return this.iushln(bits);
6931 };
6932
6933 // Shift-right in-place
6934 // NOTE: `hint` is a lowest bit before trailing zeroes
6935 // NOTE: if `extended` is present - it will be filled with destroyed bits
6936 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
6937 assert(typeof bits === 'number' && bits >= 0);
6938 var h;
6939 if (hint) {
6940 h = (hint - (hint % 26)) / 26;
6941 } else {
6942 h = 0;
6943 }
6944
6945 var r = bits % 26;
6946 var s = Math.min((bits - r) / 26, this.length);
6947 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
6948 var maskedWords = extended;
6949
6950 h -= s;
6951 h = Math.max(0, h);
6952
6953 // Extended mode, copy masked part
6954 if (maskedWords) {
6955 for (var i = 0; i < s; i++) {
6956 maskedWords.words[i] = this.words[i];
6957 }
6958 maskedWords.length = s;
6959 }
6960
6961 if (s === 0) {
6962 // No-op, we should not move anything at all
6963 } else if (this.length > s) {
6964 this.length -= s;
6965 for (i = 0; i < this.length; i++) {
6966 this.words[i] = this.words[i + s];
6967 }
6968 } else {
6969 this.words[0] = 0;
6970 this.length = 1;
6971 }
6972
6973 var carry = 0;
6974 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
6975 var word = this.words[i] | 0;
6976 this.words[i] = (carry << (26 - r)) | (word >>> r);
6977 carry = word & mask;
6978 }
6979
6980 // Push carried bits as a mask
6981 if (maskedWords && carry !== 0) {
6982 maskedWords.words[maskedWords.length++] = carry;
6983 }
6984
6985 if (this.length === 0) {
6986 this.words[0] = 0;
6987 this.length = 1;
6988 }
6989
6990 return this.strip();
6991 };
6992
6993 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
6994 // TODO(indutny): implement me
6995 assert(this.negative === 0);
6996 return this.iushrn(bits, hint, extended);
6997 };
6998
6999 // Shift-left
7000 BN.prototype.shln = function shln (bits) {
7001 return this.clone().ishln(bits);
7002 };
7003
7004 BN.prototype.ushln = function ushln (bits) {
7005 return this.clone().iushln(bits);
7006 };
7007
7008 // Shift-right
7009 BN.prototype.shrn = function shrn (bits) {
7010 return this.clone().ishrn(bits);
7011 };
7012
7013 BN.prototype.ushrn = function ushrn (bits) {
7014 return this.clone().iushrn(bits);
7015 };
7016
7017 // Test if n bit is set
7018 BN.prototype.testn = function testn (bit) {
7019 assert(typeof bit === 'number' && bit >= 0);
7020 var r = bit % 26;
7021 var s = (bit - r) / 26;
7022 var q = 1 << r;
7023
7024 // Fast case: bit is much higher than all existing words
7025 if (this.length <= s) return false;
7026
7027 // Check bit and return
7028 var w = this.words[s];
7029
7030 return !!(w & q);
7031 };
7032
7033 // Return only lowers bits of number (in-place)
7034 BN.prototype.imaskn = function imaskn (bits) {
7035 assert(typeof bits === 'number' && bits >= 0);
7036 var r = bits % 26;
7037 var s = (bits - r) / 26;
7038
7039 assert(this.negative === 0, 'imaskn works only with positive numbers');
7040
7041 if (this.length <= s) {
7042 return this;
7043 }
7044
7045 if (r !== 0) {
7046 s++;
7047 }
7048 this.length = Math.min(s, this.length);
7049
7050 if (r !== 0) {
7051 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
7052 this.words[this.length - 1] &= mask;
7053 }
7054
7055 return this.strip();
7056 };
7057
7058 // Return only lowers bits of number
7059 BN.prototype.maskn = function maskn (bits) {
7060 return this.clone().imaskn(bits);
7061 };
7062
7063 // Add plain number `num` to `this`
7064 BN.prototype.iaddn = function iaddn (num) {
7065 assert(typeof num === 'number');
7066 assert(num < 0x4000000);
7067 if (num < 0) return this.isubn(-num);
7068
7069 // Possible sign change
7070 if (this.negative !== 0) {
7071 if (this.length === 1 && (this.words[0] | 0) < num) {
7072 this.words[0] = num - (this.words[0] | 0);
7073 this.negative = 0;
7074 return this;
7075 }
7076
7077 this.negative = 0;
7078 this.isubn(num);
7079 this.negative = 1;
7080 return this;
7081 }
7082
7083 // Add without checks
7084 return this._iaddn(num);
7085 };
7086
7087 BN.prototype._iaddn = function _iaddn (num) {
7088 this.words[0] += num;
7089
7090 // Carry
7091 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
7092 this.words[i] -= 0x4000000;
7093 if (i === this.length - 1) {
7094 this.words[i + 1] = 1;
7095 } else {
7096 this.words[i + 1]++;
7097 }
7098 }
7099 this.length = Math.max(this.length, i + 1);
7100
7101 return this;
7102 };
7103
7104 // Subtract plain number `num` from `this`
7105 BN.prototype.isubn = function isubn (num) {
7106 assert(typeof num === 'number');
7107 assert(num < 0x4000000);
7108 if (num < 0) return this.iaddn(-num);
7109
7110 if (this.negative !== 0) {
7111 this.negative = 0;
7112 this.iaddn(num);
7113 this.negative = 1;
7114 return this;
7115 }
7116
7117 this.words[0] -= num;
7118
7119 if (this.length === 1 && this.words[0] < 0) {
7120 this.words[0] = -this.words[0];
7121 this.negative = 1;
7122 } else {
7123 // Carry
7124 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
7125 this.words[i] += 0x4000000;
7126 this.words[i + 1] -= 1;
7127 }
7128 }
7129
7130 return this.strip();
7131 };
7132
7133 BN.prototype.addn = function addn (num) {
7134 return this.clone().iaddn(num);
7135 };
7136
7137 BN.prototype.subn = function subn (num) {
7138 return this.clone().isubn(num);
7139 };
7140
7141 BN.prototype.iabs = function iabs () {
7142 this.negative = 0;
7143
7144 return this;
7145 };
7146
7147 BN.prototype.abs = function abs () {
7148 return this.clone().iabs();
7149 };
7150
7151 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
7152 var len = num.length + shift;
7153 var i;
7154
7155 this._expand(len);
7156
7157 var w;
7158 var carry = 0;
7159 for (i = 0; i < num.length; i++) {
7160 w = (this.words[i + shift] | 0) + carry;
7161 var right = (num.words[i] | 0) * mul;
7162 w -= right & 0x3ffffff;
7163 carry = (w >> 26) - ((right / 0x4000000) | 0);
7164 this.words[i + shift] = w & 0x3ffffff;
7165 }
7166 for (; i < this.length - shift; i++) {
7167 w = (this.words[i + shift] | 0) + carry;
7168 carry = w >> 26;
7169 this.words[i + shift] = w & 0x3ffffff;
7170 }
7171
7172 if (carry === 0) return this.strip();
7173
7174 // Subtraction overflow
7175 assert(carry === -1);
7176 carry = 0;
7177 for (i = 0; i < this.length; i++) {
7178 w = -(this.words[i] | 0) + carry;
7179 carry = w >> 26;
7180 this.words[i] = w & 0x3ffffff;
7181 }
7182 this.negative = 1;
7183
7184 return this.strip();
7185 };
7186
7187 BN.prototype._wordDiv = function _wordDiv (num, mode) {
7188 var shift = this.length - num.length;
7189
7190 var a = this.clone();
7191 var b = num;
7192
7193 // Normalize
7194 var bhi = b.words[b.length - 1] | 0;
7195 var bhiBits = this._countBits(bhi);
7196 shift = 26 - bhiBits;
7197 if (shift !== 0) {
7198 b = b.ushln(shift);
7199 a.iushln(shift);
7200 bhi = b.words[b.length - 1] | 0;
7201 }
7202
7203 // Initialize quotient
7204 var m = a.length - b.length;
7205 var q;
7206
7207 if (mode !== 'mod') {
7208 q = new BN(null);
7209 q.length = m + 1;
7210 q.words = new Array(q.length);
7211 for (var i = 0; i < q.length; i++) {
7212 q.words[i] = 0;
7213 }
7214 }
7215
7216 var diff = a.clone()._ishlnsubmul(b, 1, m);
7217 if (diff.negative === 0) {
7218 a = diff;
7219 if (q) {
7220 q.words[m] = 1;
7221 }
7222 }
7223
7224 for (var j = m - 1; j >= 0; j--) {
7225 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
7226 (a.words[b.length + j - 1] | 0);
7227
7228 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
7229 // (0x7ffffff)
7230 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
7231
7232 a._ishlnsubmul(b, qj, j);
7233 while (a.negative !== 0) {
7234 qj--;
7235 a.negative = 0;
7236 a._ishlnsubmul(b, 1, j);
7237 if (!a.isZero()) {
7238 a.negative ^= 1;
7239 }
7240 }
7241 if (q) {
7242 q.words[j] = qj;
7243 }
7244 }
7245 if (q) {
7246 q.strip();
7247 }
7248 a.strip();
7249
7250 // Denormalize
7251 if (mode !== 'div' && shift !== 0) {
7252 a.iushrn(shift);
7253 }
7254
7255 return {
7256 div: q || null,
7257 mod: a
7258 };
7259 };
7260
7261 // NOTE: 1) `mode` can be set to `mod` to request mod only,
7262 // to `div` to request div only, or be absent to
7263 // request both div & mod
7264 // 2) `positive` is true if unsigned mod is requested
7265 BN.prototype.divmod = function divmod (num, mode, positive) {
7266 assert(!num.isZero());
7267
7268 if (this.isZero()) {
7269 return {
7270 div: new BN(0),
7271 mod: new BN(0)
7272 };
7273 }
7274
7275 var div, mod, res;
7276 if (this.negative !== 0 && num.negative === 0) {
7277 res = this.neg().divmod(num, mode);
7278
7279 if (mode !== 'mod') {
7280 div = res.div.neg();
7281 }
7282
7283 if (mode !== 'div') {
7284 mod = res.mod.neg();
7285 if (positive && mod.negative !== 0) {
7286 mod.iadd(num);
7287 }
7288 }
7289
7290 return {
7291 div: div,
7292 mod: mod
7293 };
7294 }
7295
7296 if (this.negative === 0 && num.negative !== 0) {
7297 res = this.divmod(num.neg(), mode);
7298
7299 if (mode !== 'mod') {
7300 div = res.div.neg();
7301 }
7302
7303 return {
7304 div: div,
7305 mod: res.mod
7306 };
7307 }
7308
7309 if ((this.negative & num.negative) !== 0) {
7310 res = this.neg().divmod(num.neg(), mode);
7311
7312 if (mode !== 'div') {
7313 mod = res.mod.neg();
7314 if (positive && mod.negative !== 0) {
7315 mod.isub(num);
7316 }
7317 }
7318
7319 return {
7320 div: res.div,
7321 mod: mod
7322 };
7323 }
7324
7325 // Both numbers are positive at this point
7326
7327 // Strip both numbers to approximate shift value
7328 if (num.length > this.length || this.cmp(num) < 0) {
7329 return {
7330 div: new BN(0),
7331 mod: this
7332 };
7333 }
7334
7335 // Very short reduction
7336 if (num.length === 1) {
7337 if (mode === 'div') {
7338 return {
7339 div: this.divn(num.words[0]),
7340 mod: null
7341 };
7342 }
7343
7344 if (mode === 'mod') {
7345 return {
7346 div: null,
7347 mod: new BN(this.modn(num.words[0]))
7348 };
7349 }
7350
7351 return {
7352 div: this.divn(num.words[0]),
7353 mod: new BN(this.modn(num.words[0]))
7354 };
7355 }
7356
7357 return this._wordDiv(num, mode);
7358 };
7359
7360 // Find `this` / `num`
7361 BN.prototype.div = function div (num) {
7362 return this.divmod(num, 'div', false).div;
7363 };
7364
7365 // Find `this` % `num`
7366 BN.prototype.mod = function mod (num) {
7367 return this.divmod(num, 'mod', false).mod;
7368 };
7369
7370 BN.prototype.umod = function umod (num) {
7371 return this.divmod(num, 'mod', true).mod;
7372 };
7373
7374 // Find Round(`this` / `num`)
7375 BN.prototype.divRound = function divRound (num) {
7376 var dm = this.divmod(num);
7377
7378 // Fast case - exact division
7379 if (dm.mod.isZero()) return dm.div;
7380
7381 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
7382
7383 var half = num.ushrn(1);
7384 var r2 = num.andln(1);
7385 var cmp = mod.cmp(half);
7386
7387 // Round down
7388 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
7389
7390 // Round up
7391 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
7392 };
7393
7394 BN.prototype.modn = function modn (num) {
7395 assert(num <= 0x3ffffff);
7396 var p = (1 << 26) % num;
7397
7398 var acc = 0;
7399 for (var i = this.length - 1; i >= 0; i--) {
7400 acc = (p * acc + (this.words[i] | 0)) % num;
7401 }
7402
7403 return acc;
7404 };
7405
7406 // In-place division by number
7407 BN.prototype.idivn = function idivn (num) {
7408 assert(num <= 0x3ffffff);
7409
7410 var carry = 0;
7411 for (var i = this.length - 1; i >= 0; i--) {
7412 var w = (this.words[i] | 0) + carry * 0x4000000;
7413 this.words[i] = (w / num) | 0;
7414 carry = w % num;
7415 }
7416
7417 return this.strip();
7418 };
7419
7420 BN.prototype.divn = function divn (num) {
7421 return this.clone().idivn(num);
7422 };
7423
7424 BN.prototype.egcd = function egcd (p) {
7425 assert(p.negative === 0);
7426 assert(!p.isZero());
7427
7428 var x = this;
7429 var y = p.clone();
7430
7431 if (x.negative !== 0) {
7432 x = x.umod(p);
7433 } else {
7434 x = x.clone();
7435 }
7436
7437 // A * x + B * y = x
7438 var A = new BN(1);
7439 var B = new BN(0);
7440
7441 // C * x + D * y = y
7442 var C = new BN(0);
7443 var D = new BN(1);
7444
7445 var g = 0;
7446
7447 while (x.isEven() && y.isEven()) {
7448 x.iushrn(1);
7449 y.iushrn(1);
7450 ++g;
7451 }
7452
7453 var yp = y.clone();
7454 var xp = x.clone();
7455
7456 while (!x.isZero()) {
7457 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
7458 if (i > 0) {
7459 x.iushrn(i);
7460 while (i-- > 0) {
7461 if (A.isOdd() || B.isOdd()) {
7462 A.iadd(yp);
7463 B.isub(xp);
7464 }
7465
7466 A.iushrn(1);
7467 B.iushrn(1);
7468 }
7469 }
7470
7471 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
7472 if (j > 0) {
7473 y.iushrn(j);
7474 while (j-- > 0) {
7475 if (C.isOdd() || D.isOdd()) {
7476 C.iadd(yp);
7477 D.isub(xp);
7478 }
7479
7480 C.iushrn(1);
7481 D.iushrn(1);
7482 }
7483 }
7484
7485 if (x.cmp(y) >= 0) {
7486 x.isub(y);
7487 A.isub(C);
7488 B.isub(D);
7489 } else {
7490 y.isub(x);
7491 C.isub(A);
7492 D.isub(B);
7493 }
7494 }
7495
7496 return {
7497 a: C,
7498 b: D,
7499 gcd: y.iushln(g)
7500 };
7501 };
7502
7503 // This is reduced incarnation of the binary EEA
7504 // above, designated to invert members of the
7505 // _prime_ fields F(p) at a maximal speed
7506 BN.prototype._invmp = function _invmp (p) {
7507 assert(p.negative === 0);
7508 assert(!p.isZero());
7509
7510 var a = this;
7511 var b = p.clone();
7512
7513 if (a.negative !== 0) {
7514 a = a.umod(p);
7515 } else {
7516 a = a.clone();
7517 }
7518
7519 var x1 = new BN(1);
7520 var x2 = new BN(0);
7521
7522 var delta = b.clone();
7523
7524 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
7525 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
7526 if (i > 0) {
7527 a.iushrn(i);
7528 while (i-- > 0) {
7529 if (x1.isOdd()) {
7530 x1.iadd(delta);
7531 }
7532
7533 x1.iushrn(1);
7534 }
7535 }
7536
7537 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
7538 if (j > 0) {
7539 b.iushrn(j);
7540 while (j-- > 0) {
7541 if (x2.isOdd()) {
7542 x2.iadd(delta);
7543 }
7544
7545 x2.iushrn(1);
7546 }
7547 }
7548
7549 if (a.cmp(b) >= 0) {
7550 a.isub(b);
7551 x1.isub(x2);
7552 } else {
7553 b.isub(a);
7554 x2.isub(x1);
7555 }
7556 }
7557
7558 var res;
7559 if (a.cmpn(1) === 0) {
7560 res = x1;
7561 } else {
7562 res = x2;
7563 }
7564
7565 if (res.cmpn(0) < 0) {
7566 res.iadd(p);
7567 }
7568
7569 return res;
7570 };
7571
7572 BN.prototype.gcd = function gcd (num) {
7573 if (this.isZero()) return num.abs();
7574 if (num.isZero()) return this.abs();
7575
7576 var a = this.clone();
7577 var b = num.clone();
7578 a.negative = 0;
7579 b.negative = 0;
7580
7581 // Remove common factor of two
7582 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
7583 a.iushrn(1);
7584 b.iushrn(1);
7585 }
7586
7587 do {
7588 while (a.isEven()) {
7589 a.iushrn(1);
7590 }
7591 while (b.isEven()) {
7592 b.iushrn(1);
7593 }
7594
7595 var r = a.cmp(b);
7596 if (r < 0) {
7597 // Swap `a` and `b` to make `a` always bigger than `b`
7598 var t = a;
7599 a = b;
7600 b = t;
7601 } else if (r === 0 || b.cmpn(1) === 0) {
7602 break;
7603 }
7604
7605 a.isub(b);
7606 } while (true);
7607
7608 return b.iushln(shift);
7609 };
7610
7611 // Invert number in the field F(num)
7612 BN.prototype.invm = function invm (num) {
7613 return this.egcd(num).a.umod(num);
7614 };
7615
7616 BN.prototype.isEven = function isEven () {
7617 return (this.words[0] & 1) === 0;
7618 };
7619
7620 BN.prototype.isOdd = function isOdd () {
7621 return (this.words[0] & 1) === 1;
7622 };
7623
7624 // And first word and num
7625 BN.prototype.andln = function andln (num) {
7626 return this.words[0] & num;
7627 };
7628
7629 // Increment at the bit position in-line
7630 BN.prototype.bincn = function bincn (bit) {
7631 assert(typeof bit === 'number');
7632 var r = bit % 26;
7633 var s = (bit - r) / 26;
7634 var q = 1 << r;
7635
7636 // Fast case: bit is much higher than all existing words
7637 if (this.length <= s) {
7638 this._expand(s + 1);
7639 this.words[s] |= q;
7640 return this;
7641 }
7642
7643 // Add bit and propagate, if needed
7644 var carry = q;
7645 for (var i = s; carry !== 0 && i < this.length; i++) {
7646 var w = this.words[i] | 0;
7647 w += carry;
7648 carry = w >>> 26;
7649 w &= 0x3ffffff;
7650 this.words[i] = w;
7651 }
7652 if (carry !== 0) {
7653 this.words[i] = carry;
7654 this.length++;
7655 }
7656 return this;
7657 };
7658
7659 BN.prototype.isZero = function isZero () {
7660 return this.length === 1 && this.words[0] === 0;
7661 };
7662
7663 BN.prototype.cmpn = function cmpn (num) {
7664 var negative = num < 0;
7665
7666 if (this.negative !== 0 && !negative) return -1;
7667 if (this.negative === 0 && negative) return 1;
7668
7669 this.strip();
7670
7671 var res;
7672 if (this.length > 1) {
7673 res = 1;
7674 } else {
7675 if (negative) {
7676 num = -num;
7677 }
7678
7679 assert(num <= 0x3ffffff, 'Number is too big');
7680
7681 var w = this.words[0] | 0;
7682 res = w === num ? 0 : w < num ? -1 : 1;
7683 }
7684 if (this.negative !== 0) return -res | 0;
7685 return res;
7686 };
7687
7688 // Compare two numbers and return:
7689 // 1 - if `this` > `num`
7690 // 0 - if `this` == `num`
7691 // -1 - if `this` < `num`
7692 BN.prototype.cmp = function cmp (num) {
7693 if (this.negative !== 0 && num.negative === 0) return -1;
7694 if (this.negative === 0 && num.negative !== 0) return 1;
7695
7696 var res = this.ucmp(num);
7697 if (this.negative !== 0) return -res | 0;
7698 return res;
7699 };
7700
7701 // Unsigned comparison
7702 BN.prototype.ucmp = function ucmp (num) {
7703 // At this point both numbers have the same sign
7704 if (this.length > num.length) return 1;
7705 if (this.length < num.length) return -1;
7706
7707 var res = 0;
7708 for (var i = this.length - 1; i >= 0; i--) {
7709 var a = this.words[i] | 0;
7710 var b = num.words[i] | 0;
7711
7712 if (a === b) continue;
7713 if (a < b) {
7714 res = -1;
7715 } else if (a > b) {
7716 res = 1;
7717 }
7718 break;
7719 }
7720 return res;
7721 };
7722
7723 BN.prototype.gtn = function gtn (num) {
7724 return this.cmpn(num) === 1;
7725 };
7726
7727 BN.prototype.gt = function gt (num) {
7728 return this.cmp(num) === 1;
7729 };
7730
7731 BN.prototype.gten = function gten (num) {
7732 return this.cmpn(num) >= 0;
7733 };
7734
7735 BN.prototype.gte = function gte (num) {
7736 return this.cmp(num) >= 0;
7737 };
7738
7739 BN.prototype.ltn = function ltn (num) {
7740 return this.cmpn(num) === -1;
7741 };
7742
7743 BN.prototype.lt = function lt (num) {
7744 return this.cmp(num) === -1;
7745 };
7746
7747 BN.prototype.lten = function lten (num) {
7748 return this.cmpn(num) <= 0;
7749 };
7750
7751 BN.prototype.lte = function lte (num) {
7752 return this.cmp(num) <= 0;
7753 };
7754
7755 BN.prototype.eqn = function eqn (num) {
7756 return this.cmpn(num) === 0;
7757 };
7758
7759 BN.prototype.eq = function eq (num) {
7760 return this.cmp(num) === 0;
7761 };
7762
7763 //
7764 // A reduce context, could be using montgomery or something better, depending
7765 // on the `m` itself.
7766 //
7767 BN.red = function red (num) {
7768 return new Red(num);
7769 };
7770
7771 BN.prototype.toRed = function toRed (ctx) {
7772 assert(!this.red, 'Already a number in reduction context');
7773 assert(this.negative === 0, 'red works only with positives');
7774 return ctx.convertTo(this)._forceRed(ctx);
7775 };
7776
7777 BN.prototype.fromRed = function fromRed () {
7778 assert(this.red, 'fromRed works only with numbers in reduction context');
7779 return this.red.convertFrom(this);
7780 };
7781
7782 BN.prototype._forceRed = function _forceRed (ctx) {
7783 this.red = ctx;
7784 return this;
7785 };
7786
7787 BN.prototype.forceRed = function forceRed (ctx) {
7788 assert(!this.red, 'Already a number in reduction context');
7789 return this._forceRed(ctx);
7790 };
7791
7792 BN.prototype.redAdd = function redAdd (num) {
7793 assert(this.red, 'redAdd works only with red numbers');
7794 return this.red.add(this, num);
7795 };
7796
7797 BN.prototype.redIAdd = function redIAdd (num) {
7798 assert(this.red, 'redIAdd works only with red numbers');
7799 return this.red.iadd(this, num);
7800 };
7801
7802 BN.prototype.redSub = function redSub (num) {
7803 assert(this.red, 'redSub works only with red numbers');
7804 return this.red.sub(this, num);
7805 };
7806
7807 BN.prototype.redISub = function redISub (num) {
7808 assert(this.red, 'redISub works only with red numbers');
7809 return this.red.isub(this, num);
7810 };
7811
7812 BN.prototype.redShl = function redShl (num) {
7813 assert(this.red, 'redShl works only with red numbers');
7814 return this.red.shl(this, num);
7815 };
7816
7817 BN.prototype.redMul = function redMul (num) {
7818 assert(this.red, 'redMul works only with red numbers');
7819 this.red._verify2(this, num);
7820 return this.red.mul(this, num);
7821 };
7822
7823 BN.prototype.redIMul = function redIMul (num) {
7824 assert(this.red, 'redMul works only with red numbers');
7825 this.red._verify2(this, num);
7826 return this.red.imul(this, num);
7827 };
7828
7829 BN.prototype.redSqr = function redSqr () {
7830 assert(this.red, 'redSqr works only with red numbers');
7831 this.red._verify1(this);
7832 return this.red.sqr(this);
7833 };
7834
7835 BN.prototype.redISqr = function redISqr () {
7836 assert(this.red, 'redISqr works only with red numbers');
7837 this.red._verify1(this);
7838 return this.red.isqr(this);
7839 };
7840
7841 // Square root over p
7842 BN.prototype.redSqrt = function redSqrt () {
7843 assert(this.red, 'redSqrt works only with red numbers');
7844 this.red._verify1(this);
7845 return this.red.sqrt(this);
7846 };
7847
7848 BN.prototype.redInvm = function redInvm () {
7849 assert(this.red, 'redInvm works only with red numbers');
7850 this.red._verify1(this);
7851 return this.red.invm(this);
7852 };
7853
7854 // Return negative clone of `this` % `red modulo`
7855 BN.prototype.redNeg = function redNeg () {
7856 assert(this.red, 'redNeg works only with red numbers');
7857 this.red._verify1(this);
7858 return this.red.neg(this);
7859 };
7860
7861 BN.prototype.redPow = function redPow (num) {
7862 assert(this.red && !num.red, 'redPow(normalNum)');
7863 this.red._verify1(this);
7864 return this.red.pow(this, num);
7865 };
7866
7867 // Prime numbers with efficient reduction
7868 var primes = {
7869 k256: null,
7870 p224: null,
7871 p192: null,
7872 p25519: null
7873 };
7874
7875 // Pseudo-Mersenne prime
7876 function MPrime (name, p) {
7877 // P = 2 ^ N - K
7878 this.name = name;
7879 this.p = new BN(p, 16);
7880 this.n = this.p.bitLength();
7881 this.k = new BN(1).iushln(this.n).isub(this.p);
7882
7883 this.tmp = this._tmp();
7884 }
7885
7886 MPrime.prototype._tmp = function _tmp () {
7887 var tmp = new BN(null);
7888 tmp.words = new Array(Math.ceil(this.n / 13));
7889 return tmp;
7890 };
7891
7892 MPrime.prototype.ireduce = function ireduce (num) {
7893 // Assumes that `num` is less than `P^2`
7894 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
7895 var r = num;
7896 var rlen;
7897
7898 do {
7899 this.split(r, this.tmp);
7900 r = this.imulK(r);
7901 r = r.iadd(this.tmp);
7902 rlen = r.bitLength();
7903 } while (rlen > this.n);
7904
7905 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
7906 if (cmp === 0) {
7907 r.words[0] = 0;
7908 r.length = 1;
7909 } else if (cmp > 0) {
7910 r.isub(this.p);
7911 } else {
7912 r.strip();
7913 }
7914
7915 return r;
7916 };
7917
7918 MPrime.prototype.split = function split (input, out) {
7919 input.iushrn(this.n, 0, out);
7920 };
7921
7922 MPrime.prototype.imulK = function imulK (num) {
7923 return num.imul(this.k);
7924 };
7925
7926 function K256 () {
7927 MPrime.call(
7928 this,
7929 'k256',
7930 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
7931 }
7932 inherits(K256, MPrime);
7933
7934 K256.prototype.split = function split (input, output) {
7935 // 256 = 9 * 26 + 22
7936 var mask = 0x3fffff;
7937
7938 var outLen = Math.min(input.length, 9);
7939 for (var i = 0; i < outLen; i++) {
7940 output.words[i] = input.words[i];
7941 }
7942 output.length = outLen;
7943
7944 if (input.length <= 9) {
7945 input.words[0] = 0;
7946 input.length = 1;
7947 return;
7948 }
7949
7950 // Shift by 9 limbs
7951 var prev = input.words[9];
7952 output.words[output.length++] = prev & mask;
7953
7954 for (i = 10; i < input.length; i++) {
7955 var next = input.words[i] | 0;
7956 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
7957 prev = next;
7958 }
7959 prev >>>= 22;
7960 input.words[i - 10] = prev;
7961 if (prev === 0 && input.length > 10) {
7962 input.length -= 10;
7963 } else {
7964 input.length -= 9;
7965 }
7966 };
7967
7968 K256.prototype.imulK = function imulK (num) {
7969 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
7970 num.words[num.length] = 0;
7971 num.words[num.length + 1] = 0;
7972 num.length += 2;
7973
7974 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
7975 var lo = 0;
7976 for (var i = 0; i < num.length; i++) {
7977 var w = num.words[i] | 0;
7978 lo += w * 0x3d1;
7979 num.words[i] = lo & 0x3ffffff;
7980 lo = w * 0x40 + ((lo / 0x4000000) | 0);
7981 }
7982
7983 // Fast length reduction
7984 if (num.words[num.length - 1] === 0) {
7985 num.length--;
7986 if (num.words[num.length - 1] === 0) {
7987 num.length--;
7988 }
7989 }
7990 return num;
7991 };
7992
7993 function P224 () {
7994 MPrime.call(
7995 this,
7996 'p224',
7997 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
7998 }
7999 inherits(P224, MPrime);
8000
8001 function P192 () {
8002 MPrime.call(
8003 this,
8004 'p192',
8005 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
8006 }
8007 inherits(P192, MPrime);
8008
8009 function P25519 () {
8010 // 2 ^ 255 - 19
8011 MPrime.call(
8012 this,
8013 '25519',
8014 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
8015 }
8016 inherits(P25519, MPrime);
8017
8018 P25519.prototype.imulK = function imulK (num) {
8019 // K = 0x13
8020 var carry = 0;
8021 for (var i = 0; i < num.length; i++) {
8022 var hi = (num.words[i] | 0) * 0x13 + carry;
8023 var lo = hi & 0x3ffffff;
8024 hi >>>= 26;
8025
8026 num.words[i] = lo;
8027 carry = hi;
8028 }
8029 if (carry !== 0) {
8030 num.words[num.length++] = carry;
8031 }
8032 return num;
8033 };
8034
8035 // Exported mostly for testing purposes, use plain name instead
8036 BN._prime = function prime (name) {
8037 // Cached version of prime
8038 if (primes[name]) return primes[name];
8039
8040 var prime;
8041 if (name === 'k256') {
8042 prime = new K256();
8043 } else if (name === 'p224') {
8044 prime = new P224();
8045 } else if (name === 'p192') {
8046 prime = new P192();
8047 } else if (name === 'p25519') {
8048 prime = new P25519();
8049 } else {
8050 throw new Error('Unknown prime ' + name);
8051 }
8052 primes[name] = prime;
8053
8054 return prime;
8055 };
8056
8057 //
8058 // Base reduction engine
8059 //
8060 function Red (m) {
8061 if (typeof m === 'string') {
8062 var prime = BN._prime(m);
8063 this.m = prime.p;
8064 this.prime = prime;
8065 } else {
8066 assert(m.gtn(1), 'modulus must be greater than 1');
8067 this.m = m;
8068 this.prime = null;
8069 }
8070 }
8071
8072 Red.prototype._verify1 = function _verify1 (a) {
8073 assert(a.negative === 0, 'red works only with positives');
8074 assert(a.red, 'red works only with red numbers');
8075 };
8076
8077 Red.prototype._verify2 = function _verify2 (a, b) {
8078 assert((a.negative | b.negative) === 0, 'red works only with positives');
8079 assert(a.red && a.red === b.red,
8080 'red works only with red numbers');
8081 };
8082
8083 Red.prototype.imod = function imod (a) {
8084 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
8085 return a.umod(this.m)._forceRed(this);
8086 };
8087
8088 Red.prototype.neg = function neg (a) {
8089 if (a.isZero()) {
8090 return a.clone();
8091 }
8092
8093 return this.m.sub(a)._forceRed(this);
8094 };
8095
8096 Red.prototype.add = function add (a, b) {
8097 this._verify2(a, b);
8098
8099 var res = a.add(b);
8100 if (res.cmp(this.m) >= 0) {
8101 res.isub(this.m);
8102 }
8103 return res._forceRed(this);
8104 };
8105
8106 Red.prototype.iadd = function iadd (a, b) {
8107 this._verify2(a, b);
8108
8109 var res = a.iadd(b);
8110 if (res.cmp(this.m) >= 0) {
8111 res.isub(this.m);
8112 }
8113 return res;
8114 };
8115
8116 Red.prototype.sub = function sub (a, b) {
8117 this._verify2(a, b);
8118
8119 var res = a.sub(b);
8120 if (res.cmpn(0) < 0) {
8121 res.iadd(this.m);
8122 }
8123 return res._forceRed(this);
8124 };
8125
8126 Red.prototype.isub = function isub (a, b) {
8127 this._verify2(a, b);
8128
8129 var res = a.isub(b);
8130 if (res.cmpn(0) < 0) {
8131 res.iadd(this.m);
8132 }
8133 return res;
8134 };
8135
8136 Red.prototype.shl = function shl (a, num) {
8137 this._verify1(a);
8138 return this.imod(a.ushln(num));
8139 };
8140
8141 Red.prototype.imul = function imul (a, b) {
8142 this._verify2(a, b);
8143 return this.imod(a.imul(b));
8144 };
8145
8146 Red.prototype.mul = function mul (a, b) {
8147 this._verify2(a, b);
8148 return this.imod(a.mul(b));
8149 };
8150
8151 Red.prototype.isqr = function isqr (a) {
8152 return this.imul(a, a.clone());
8153 };
8154
8155 Red.prototype.sqr = function sqr (a) {
8156 return this.mul(a, a);
8157 };
8158
8159 Red.prototype.sqrt = function sqrt (a) {
8160 if (a.isZero()) return a.clone();
8161
8162 var mod3 = this.m.andln(3);
8163 assert(mod3 % 2 === 1);
8164
8165 // Fast case
8166 if (mod3 === 3) {
8167 var pow = this.m.add(new BN(1)).iushrn(2);
8168 return this.pow(a, pow);
8169 }
8170
8171 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
8172 //
8173 // Find Q and S, that Q * 2 ^ S = (P - 1)
8174 var q = this.m.subn(1);
8175 var s = 0;
8176 while (!q.isZero() && q.andln(1) === 0) {
8177 s++;
8178 q.iushrn(1);
8179 }
8180 assert(!q.isZero());
8181
8182 var one = new BN(1).toRed(this);
8183 var nOne = one.redNeg();
8184
8185 // Find quadratic non-residue
8186 // NOTE: Max is such because of generalized Riemann hypothesis.
8187 var lpow = this.m.subn(1).iushrn(1);
8188 var z = this.m.bitLength();
8189 z = new BN(2 * z * z).toRed(this);
8190
8191 while (this.pow(z, lpow).cmp(nOne) !== 0) {
8192 z.redIAdd(nOne);
8193 }
8194
8195 var c = this.pow(z, q);
8196 var r = this.pow(a, q.addn(1).iushrn(1));
8197 var t = this.pow(a, q);
8198 var m = s;
8199 while (t.cmp(one) !== 0) {
8200 var tmp = t;
8201 for (var i = 0; tmp.cmp(one) !== 0; i++) {
8202 tmp = tmp.redSqr();
8203 }
8204 assert(i < m);
8205 var b = this.pow(c, new BN(1).iushln(m - i - 1));
8206
8207 r = r.redMul(b);
8208 c = b.redSqr();
8209 t = t.redMul(c);
8210 m = i;
8211 }
8212
8213 return r;
8214 };
8215
8216 Red.prototype.invm = function invm (a) {
8217 var inv = a._invmp(this.m);
8218 if (inv.negative !== 0) {
8219 inv.negative = 0;
8220 return this.imod(inv).redNeg();
8221 } else {
8222 return this.imod(inv);
8223 }
8224 };
8225
8226 Red.prototype.pow = function pow (a, num) {
8227 if (num.isZero()) return new BN(1).toRed(this);
8228 if (num.cmpn(1) === 0) return a.clone();
8229
8230 var windowSize = 4;
8231 var wnd = new Array(1 << windowSize);
8232 wnd[0] = new BN(1).toRed(this);
8233 wnd[1] = a;
8234 for (var i = 2; i < wnd.length; i++) {
8235 wnd[i] = this.mul(wnd[i - 1], a);
8236 }
8237
8238 var res = wnd[0];
8239 var current = 0;
8240 var currentLen = 0;
8241 var start = num.bitLength() % 26;
8242 if (start === 0) {
8243 start = 26;
8244 }
8245
8246 for (i = num.length - 1; i >= 0; i--) {
8247 var word = num.words[i];
8248 for (var j = start - 1; j >= 0; j--) {
8249 var bit = (word >> j) & 1;
8250 if (res !== wnd[0]) {
8251 res = this.sqr(res);
8252 }
8253
8254 if (bit === 0 && current === 0) {
8255 currentLen = 0;
8256 continue;
8257 }
8258
8259 current <<= 1;
8260 current |= bit;
8261 currentLen++;
8262 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
8263
8264 res = this.mul(res, wnd[current]);
8265 currentLen = 0;
8266 current = 0;
8267 }
8268 start = 26;
8269 }
8270
8271 return res;
8272 };
8273
8274 Red.prototype.convertTo = function convertTo (num) {
8275 var r = num.umod(this.m);
8276
8277 return r === num ? r.clone() : r;
8278 };
8279
8280 Red.prototype.convertFrom = function convertFrom (num) {
8281 var res = num.clone();
8282 res.red = null;
8283 return res;
8284 };
8285
8286 //
8287 // Montgomery method engine
8288 //
8289
8290 BN.mont = function mont (num) {
8291 return new Mont(num);
8292 };
8293
8294 function Mont (m) {
8295 Red.call(this, m);
8296
8297 this.shift = this.m.bitLength();
8298 if (this.shift % 26 !== 0) {
8299 this.shift += 26 - (this.shift % 26);
8300 }
8301
8302 this.r = new BN(1).iushln(this.shift);
8303 this.r2 = this.imod(this.r.sqr());
8304 this.rinv = this.r._invmp(this.m);
8305
8306 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
8307 this.minv = this.minv.umod(this.r);
8308 this.minv = this.r.sub(this.minv);
8309 }
8310 inherits(Mont, Red);
8311
8312 Mont.prototype.convertTo = function convertTo (num) {
8313 return this.imod(num.ushln(this.shift));
8314 };
8315
8316 Mont.prototype.convertFrom = function convertFrom (num) {
8317 var r = this.imod(num.mul(this.rinv));
8318 r.red = null;
8319 return r;
8320 };
8321
8322 Mont.prototype.imul = function imul (a, b) {
8323 if (a.isZero() || b.isZero()) {
8324 a.words[0] = 0;
8325 a.length = 1;
8326 return a;
8327 }
8328
8329 var t = a.imul(b);
8330 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
8331 var u = t.isub(c).iushrn(this.shift);
8332 var res = u;
8333
8334 if (u.cmp(this.m) >= 0) {
8335 res = u.isub(this.m);
8336 } else if (u.cmpn(0) < 0) {
8337 res = u.iadd(this.m);
8338 }
8339
8340 return res._forceRed(this);
8341 };
8342
8343 Mont.prototype.mul = function mul (a, b) {
8344 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
8345
8346 var t = a.mul(b);
8347 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
8348 var u = t.isub(c).iushrn(this.shift);
8349 var res = u;
8350 if (u.cmp(this.m) >= 0) {
8351 res = u.isub(this.m);
8352 } else if (u.cmpn(0) < 0) {
8353 res = u.iadd(this.m);
8354 }
8355
8356 return res._forceRed(this);
8357 };
8358
8359 Mont.prototype.invm = function invm (a) {
8360 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
8361 var res = this.imod(a._invmp(this.m).mul(this.r2));
8362 return res._forceRed(this);
8363 };
8364})(typeof module === 'undefined' || module, this);
8365
8366},{"buffer":20}],19:[function(require,module,exports){
8367var r;
8368
8369module.exports = function rand(len) {
8370 if (!r)
8371 r = new Rand(null);
8372
8373 return r.generate(len);
8374};
8375
8376function Rand(rand) {
8377 this.rand = rand;
8378}
8379module.exports.Rand = Rand;
8380
8381Rand.prototype.generate = function generate(len) {
8382 return this._rand(len);
8383};
8384
8385// Emulate crypto API using randy
8386Rand.prototype._rand = function _rand(n) {
8387 if (this.rand.getBytes)
8388 return this.rand.getBytes(n);
8389
8390 var res = new Uint8Array(n);
8391 for (var i = 0; i < res.length; i++)
8392 res[i] = this.rand.getByte();
8393 return res;
8394};
8395
8396if (typeof self === 'object') {
8397 if (self.crypto && self.crypto.getRandomValues) {
8398 // Modern browsers
8399 Rand.prototype._rand = function _rand(n) {
8400 var arr = new Uint8Array(n);
8401 self.crypto.getRandomValues(arr);
8402 return arr;
8403 };
8404 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
8405 // IE
8406 Rand.prototype._rand = function _rand(n) {
8407 var arr = new Uint8Array(n);
8408 self.msCrypto.getRandomValues(arr);
8409 return arr;
8410 };
8411
8412 // Safari's WebWorkers do not have `crypto`
8413 } else if (typeof window === 'object') {
8414 // Old junk
8415 Rand.prototype._rand = function() {
8416 throw new Error('Not implemented yet');
8417 };
8418 }
8419} else {
8420 // Node.js or Web worker with no crypto support
8421 try {
8422 var crypto = require('crypto');
8423 if (typeof crypto.randomBytes !== 'function')
8424 throw new Error('Not supported');
8425
8426 Rand.prototype._rand = function _rand(n) {
8427 return crypto.randomBytes(n);
8428 };
8429 } catch (e) {
8430 }
8431}
8432
8433},{"crypto":20}],20:[function(require,module,exports){
8434
8435},{}],21:[function(require,module,exports){
8436// based on the aes implimentation in triple sec
8437// https://github.com/keybase/triplesec
8438// which is in turn based on the one from crypto-js
8439// https://code.google.com/p/crypto-js/
8440
8441var Buffer = require('safe-buffer').Buffer
8442
8443function asUInt32Array (buf) {
8444 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
8445
8446 var len = (buf.length / 4) | 0
8447 var out = new Array(len)
8448
8449 for (var i = 0; i < len; i++) {
8450 out[i] = buf.readUInt32BE(i * 4)
8451 }
8452
8453 return out
8454}
8455
8456function scrubVec (v) {
8457 for (var i = 0; i < v.length; v++) {
8458 v[i] = 0
8459 }
8460}
8461
8462function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
8463 var SUB_MIX0 = SUB_MIX[0]
8464 var SUB_MIX1 = SUB_MIX[1]
8465 var SUB_MIX2 = SUB_MIX[2]
8466 var SUB_MIX3 = SUB_MIX[3]
8467
8468 var s0 = M[0] ^ keySchedule[0]
8469 var s1 = M[1] ^ keySchedule[1]
8470 var s2 = M[2] ^ keySchedule[2]
8471 var s3 = M[3] ^ keySchedule[3]
8472 var t0, t1, t2, t3
8473 var ksRow = 4
8474
8475 for (var round = 1; round < nRounds; round++) {
8476 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
8477 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
8478 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
8479 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
8480 s0 = t0
8481 s1 = t1
8482 s2 = t2
8483 s3 = t3
8484 }
8485
8486 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
8487 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
8488 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
8489 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
8490 t0 = t0 >>> 0
8491 t1 = t1 >>> 0
8492 t2 = t2 >>> 0
8493 t3 = t3 >>> 0
8494
8495 return [t0, t1, t2, t3]
8496}
8497
8498// AES constants
8499var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
8500var G = (function () {
8501 // Compute double table
8502 var d = new Array(256)
8503 for (var j = 0; j < 256; j++) {
8504 if (j < 128) {
8505 d[j] = j << 1
8506 } else {
8507 d[j] = (j << 1) ^ 0x11b
8508 }
8509 }
8510
8511 var SBOX = []
8512 var INV_SBOX = []
8513 var SUB_MIX = [[], [], [], []]
8514 var INV_SUB_MIX = [[], [], [], []]
8515
8516 // Walk GF(2^8)
8517 var x = 0
8518 var xi = 0
8519 for (var i = 0; i < 256; ++i) {
8520 // Compute sbox
8521 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
8522 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
8523 SBOX[x] = sx
8524 INV_SBOX[sx] = x
8525
8526 // Compute multiplication
8527 var x2 = d[x]
8528 var x4 = d[x2]
8529 var x8 = d[x4]
8530
8531 // Compute sub bytes, mix columns tables
8532 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
8533 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
8534 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
8535 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
8536 SUB_MIX[3][x] = t
8537
8538 // Compute inv sub bytes, inv mix columns tables
8539 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
8540 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
8541 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
8542 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
8543 INV_SUB_MIX[3][sx] = t
8544
8545 if (x === 0) {
8546 x = xi = 1
8547 } else {
8548 x = x2 ^ d[d[d[x8 ^ x2]]]
8549 xi ^= d[d[xi]]
8550 }
8551 }
8552
8553 return {
8554 SBOX: SBOX,
8555 INV_SBOX: INV_SBOX,
8556 SUB_MIX: SUB_MIX,
8557 INV_SUB_MIX: INV_SUB_MIX
8558 }
8559})()
8560
8561function AES (key) {
8562 this._key = asUInt32Array(key)
8563 this._reset()
8564}
8565
8566AES.blockSize = 4 * 4
8567AES.keySize = 256 / 8
8568AES.prototype.blockSize = AES.blockSize
8569AES.prototype.keySize = AES.keySize
8570AES.prototype._reset = function () {
8571 var keyWords = this._key
8572 var keySize = keyWords.length
8573 var nRounds = keySize + 6
8574 var ksRows = (nRounds + 1) * 4
8575
8576 var keySchedule = []
8577 for (var k = 0; k < keySize; k++) {
8578 keySchedule[k] = keyWords[k]
8579 }
8580
8581 for (k = keySize; k < ksRows; k++) {
8582 var t = keySchedule[k - 1]
8583
8584 if (k % keySize === 0) {
8585 t = (t << 8) | (t >>> 24)
8586 t =
8587 (G.SBOX[t >>> 24] << 24) |
8588 (G.SBOX[(t >>> 16) & 0xff] << 16) |
8589 (G.SBOX[(t >>> 8) & 0xff] << 8) |
8590 (G.SBOX[t & 0xff])
8591
8592 t ^= RCON[(k / keySize) | 0] << 24
8593 } else if (keySize > 6 && k % keySize === 4) {
8594 t =
8595 (G.SBOX[t >>> 24] << 24) |
8596 (G.SBOX[(t >>> 16) & 0xff] << 16) |
8597 (G.SBOX[(t >>> 8) & 0xff] << 8) |
8598 (G.SBOX[t & 0xff])
8599 }
8600
8601 keySchedule[k] = keySchedule[k - keySize] ^ t
8602 }
8603
8604 var invKeySchedule = []
8605 for (var ik = 0; ik < ksRows; ik++) {
8606 var ksR = ksRows - ik
8607 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
8608
8609 if (ik < 4 || ksR <= 4) {
8610 invKeySchedule[ik] = tt
8611 } else {
8612 invKeySchedule[ik] =
8613 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
8614 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
8615 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
8616 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
8617 }
8618 }
8619
8620 this._nRounds = nRounds
8621 this._keySchedule = keySchedule
8622 this._invKeySchedule = invKeySchedule
8623}
8624
8625AES.prototype.encryptBlockRaw = function (M) {
8626 M = asUInt32Array(M)
8627 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
8628}
8629
8630AES.prototype.encryptBlock = function (M) {
8631 var out = this.encryptBlockRaw(M)
8632 var buf = Buffer.allocUnsafe(16)
8633 buf.writeUInt32BE(out[0], 0)
8634 buf.writeUInt32BE(out[1], 4)
8635 buf.writeUInt32BE(out[2], 8)
8636 buf.writeUInt32BE(out[3], 12)
8637 return buf
8638}
8639
8640AES.prototype.decryptBlock = function (M) {
8641 M = asUInt32Array(M)
8642
8643 // swap
8644 var m1 = M[1]
8645 M[1] = M[3]
8646 M[3] = m1
8647
8648 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
8649 var buf = Buffer.allocUnsafe(16)
8650 buf.writeUInt32BE(out[0], 0)
8651 buf.writeUInt32BE(out[3], 4)
8652 buf.writeUInt32BE(out[2], 8)
8653 buf.writeUInt32BE(out[1], 12)
8654 return buf
8655}
8656
8657AES.prototype.scrub = function () {
8658 scrubVec(this._keySchedule)
8659 scrubVec(this._invKeySchedule)
8660 scrubVec(this._key)
8661}
8662
8663module.exports.AES = AES
8664
8665},{"safe-buffer":398}],22:[function(require,module,exports){
8666var aes = require('./aes')
8667var Buffer = require('safe-buffer').Buffer
8668var Transform = require('cipher-base')
8669var inherits = require('inherits')
8670var GHASH = require('./ghash')
8671var xor = require('buffer-xor')
8672var incr32 = require('./incr32')
8673
8674function xorTest (a, b) {
8675 var out = 0
8676 if (a.length !== b.length) out++
8677
8678 var len = Math.min(a.length, b.length)
8679 for (var i = 0; i < len; ++i) {
8680 out += (a[i] ^ b[i])
8681 }
8682
8683 return out
8684}
8685
8686function calcIv (self, iv, ck) {
8687 if (iv.length === 12) {
8688 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
8689 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
8690 }
8691 var ghash = new GHASH(ck)
8692 var len = iv.length
8693 var toPad = len % 16
8694 ghash.update(iv)
8695 if (toPad) {
8696 toPad = 16 - toPad
8697 ghash.update(Buffer.alloc(toPad, 0))
8698 }
8699 ghash.update(Buffer.alloc(8, 0))
8700 var ivBits = len * 8
8701 var tail = Buffer.alloc(8)
8702 tail.writeUIntBE(ivBits, 0, 8)
8703 ghash.update(tail)
8704 self._finID = ghash.state
8705 var out = Buffer.from(self._finID)
8706 incr32(out)
8707 return out
8708}
8709function StreamCipher (mode, key, iv, decrypt) {
8710 Transform.call(this)
8711
8712 var h = Buffer.alloc(4, 0)
8713
8714 this._cipher = new aes.AES(key)
8715 var ck = this._cipher.encryptBlock(h)
8716 this._ghash = new GHASH(ck)
8717 iv = calcIv(this, iv, ck)
8718
8719 this._prev = Buffer.from(iv)
8720 this._cache = Buffer.allocUnsafe(0)
8721 this._secCache = Buffer.allocUnsafe(0)
8722 this._decrypt = decrypt
8723 this._alen = 0
8724 this._len = 0
8725 this._mode = mode
8726
8727 this._authTag = null
8728 this._called = false
8729}
8730
8731inherits(StreamCipher, Transform)
8732
8733StreamCipher.prototype._update = function (chunk) {
8734 if (!this._called && this._alen) {
8735 var rump = 16 - (this._alen % 16)
8736 if (rump < 16) {
8737 rump = Buffer.alloc(rump, 0)
8738 this._ghash.update(rump)
8739 }
8740 }
8741
8742 this._called = true
8743 var out = this._mode.encrypt(this, chunk)
8744 if (this._decrypt) {
8745 this._ghash.update(chunk)
8746 } else {
8747 this._ghash.update(out)
8748 }
8749 this._len += chunk.length
8750 return out
8751}
8752
8753StreamCipher.prototype._final = function () {
8754 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
8755
8756 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
8757 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
8758
8759 this._authTag = tag
8760 this._cipher.scrub()
8761}
8762
8763StreamCipher.prototype.getAuthTag = function getAuthTag () {
8764 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
8765
8766 return this._authTag
8767}
8768
8769StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
8770 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
8771
8772 this._authTag = tag
8773}
8774
8775StreamCipher.prototype.setAAD = function setAAD (buf) {
8776 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
8777
8778 this._ghash.update(buf)
8779 this._alen += buf.length
8780}
8781
8782module.exports = StreamCipher
8783
8784},{"./aes":21,"./ghash":26,"./incr32":27,"buffer-xor":49,"cipher-base":51,"inherits":119,"safe-buffer":398}],23:[function(require,module,exports){
8785var ciphers = require('./encrypter')
8786var deciphers = require('./decrypter')
8787var modes = require('./modes/list.json')
8788
8789function getCiphers () {
8790 return Object.keys(modes)
8791}
8792
8793exports.createCipher = exports.Cipher = ciphers.createCipher
8794exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
8795exports.createDecipher = exports.Decipher = deciphers.createDecipher
8796exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
8797exports.listCiphers = exports.getCiphers = getCiphers
8798
8799},{"./decrypter":24,"./encrypter":25,"./modes/list.json":35}],24:[function(require,module,exports){
8800var AuthCipher = require('./authCipher')
8801var Buffer = require('safe-buffer').Buffer
8802var MODES = require('./modes')
8803var StreamCipher = require('./streamCipher')
8804var Transform = require('cipher-base')
8805var aes = require('./aes')
8806var ebtk = require('evp_bytestokey')
8807var inherits = require('inherits')
8808
8809function Decipher (mode, key, iv) {
8810 Transform.call(this)
8811
8812 this._cache = new Splitter()
8813 this._last = void 0
8814 this._cipher = new aes.AES(key)
8815 this._prev = Buffer.from(iv)
8816 this._mode = mode
8817 this._autopadding = true
8818}
8819
8820inherits(Decipher, Transform)
8821
8822Decipher.prototype._update = function (data) {
8823 this._cache.add(data)
8824 var chunk
8825 var thing
8826 var out = []
8827 while ((chunk = this._cache.get(this._autopadding))) {
8828 thing = this._mode.decrypt(this, chunk)
8829 out.push(thing)
8830 }
8831 return Buffer.concat(out)
8832}
8833
8834Decipher.prototype._final = function () {
8835 var chunk = this._cache.flush()
8836 if (this._autopadding) {
8837 return unpad(this._mode.decrypt(this, chunk))
8838 } else if (chunk) {
8839 throw new Error('data not multiple of block length')
8840 }
8841}
8842
8843Decipher.prototype.setAutoPadding = function (setTo) {
8844 this._autopadding = !!setTo
8845 return this
8846}
8847
8848function Splitter () {
8849 this.cache = Buffer.allocUnsafe(0)
8850}
8851
8852Splitter.prototype.add = function (data) {
8853 this.cache = Buffer.concat([this.cache, data])
8854}
8855
8856Splitter.prototype.get = function (autoPadding) {
8857 var out
8858 if (autoPadding) {
8859 if (this.cache.length > 16) {
8860 out = this.cache.slice(0, 16)
8861 this.cache = this.cache.slice(16)
8862 return out
8863 }
8864 } else {
8865 if (this.cache.length >= 16) {
8866 out = this.cache.slice(0, 16)
8867 this.cache = this.cache.slice(16)
8868 return out
8869 }
8870 }
8871
8872 return null
8873}
8874
8875Splitter.prototype.flush = function () {
8876 if (this.cache.length) return this.cache
8877}
8878
8879function unpad (last) {
8880 var padded = last[15]
8881 if (padded < 1 || padded > 16) {
8882 throw new Error('unable to decrypt data')
8883 }
8884 var i = -1
8885 while (++i < padded) {
8886 if (last[(i + (16 - padded))] !== padded) {
8887 throw new Error('unable to decrypt data')
8888 }
8889 }
8890 if (padded === 16) return
8891
8892 return last.slice(0, 16 - padded)
8893}
8894
8895function createDecipheriv (suite, password, iv) {
8896 var config = MODES[suite.toLowerCase()]
8897 if (!config) throw new TypeError('invalid suite type')
8898
8899 if (typeof iv === 'string') iv = Buffer.from(iv)
8900 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
8901
8902 if (typeof password === 'string') password = Buffer.from(password)
8903 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
8904
8905 if (config.type === 'stream') {
8906 return new StreamCipher(config.module, password, iv, true)
8907 } else if (config.type === 'auth') {
8908 return new AuthCipher(config.module, password, iv, true)
8909 }
8910
8911 return new Decipher(config.module, password, iv)
8912}
8913
8914function createDecipher (suite, password) {
8915 var config = MODES[suite.toLowerCase()]
8916 if (!config) throw new TypeError('invalid suite type')
8917
8918 var keys = ebtk(password, false, config.key, config.iv)
8919 return createDecipheriv(suite, keys.key, keys.iv)
8920}
8921
8922exports.createDecipher = createDecipher
8923exports.createDecipheriv = createDecipheriv
8924
8925},{"./aes":21,"./authCipher":22,"./modes":34,"./streamCipher":37,"cipher-base":51,"evp_bytestokey":103,"inherits":119,"safe-buffer":398}],25:[function(require,module,exports){
8926var MODES = require('./modes')
8927var AuthCipher = require('./authCipher')
8928var Buffer = require('safe-buffer').Buffer
8929var StreamCipher = require('./streamCipher')
8930var Transform = require('cipher-base')
8931var aes = require('./aes')
8932var ebtk = require('evp_bytestokey')
8933var inherits = require('inherits')
8934
8935function Cipher (mode, key, iv) {
8936 Transform.call(this)
8937
8938 this._cache = new Splitter()
8939 this._cipher = new aes.AES(key)
8940 this._prev = Buffer.from(iv)
8941 this._mode = mode
8942 this._autopadding = true
8943}
8944
8945inherits(Cipher, Transform)
8946
8947Cipher.prototype._update = function (data) {
8948 this._cache.add(data)
8949 var chunk
8950 var thing
8951 var out = []
8952
8953 while ((chunk = this._cache.get())) {
8954 thing = this._mode.encrypt(this, chunk)
8955 out.push(thing)
8956 }
8957
8958 return Buffer.concat(out)
8959}
8960
8961var PADDING = Buffer.alloc(16, 0x10)
8962
8963Cipher.prototype._final = function () {
8964 var chunk = this._cache.flush()
8965 if (this._autopadding) {
8966 chunk = this._mode.encrypt(this, chunk)
8967 this._cipher.scrub()
8968 return chunk
8969 }
8970
8971 if (!chunk.equals(PADDING)) {
8972 this._cipher.scrub()
8973 throw new Error('data not multiple of block length')
8974 }
8975}
8976
8977Cipher.prototype.setAutoPadding = function (setTo) {
8978 this._autopadding = !!setTo
8979 return this
8980}
8981
8982function Splitter () {
8983 this.cache = Buffer.allocUnsafe(0)
8984}
8985
8986Splitter.prototype.add = function (data) {
8987 this.cache = Buffer.concat([this.cache, data])
8988}
8989
8990Splitter.prototype.get = function () {
8991 if (this.cache.length > 15) {
8992 var out = this.cache.slice(0, 16)
8993 this.cache = this.cache.slice(16)
8994 return out
8995 }
8996 return null
8997}
8998
8999Splitter.prototype.flush = function () {
9000 var len = 16 - this.cache.length
9001 var padBuff = Buffer.allocUnsafe(len)
9002
9003 var i = -1
9004 while (++i < len) {
9005 padBuff.writeUInt8(len, i)
9006 }
9007
9008 return Buffer.concat([this.cache, padBuff])
9009}
9010
9011function createCipheriv (suite, password, iv) {
9012 var config = MODES[suite.toLowerCase()]
9013 if (!config) throw new TypeError('invalid suite type')
9014
9015 if (typeof password === 'string') password = Buffer.from(password)
9016 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
9017
9018 if (typeof iv === 'string') iv = Buffer.from(iv)
9019 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
9020
9021 if (config.type === 'stream') {
9022 return new StreamCipher(config.module, password, iv)
9023 } else if (config.type === 'auth') {
9024 return new AuthCipher(config.module, password, iv)
9025 }
9026
9027 return new Cipher(config.module, password, iv)
9028}
9029
9030function createCipher (suite, password) {
9031 var config = MODES[suite.toLowerCase()]
9032 if (!config) throw new TypeError('invalid suite type')
9033
9034 var keys = ebtk(password, false, config.key, config.iv)
9035 return createCipheriv(suite, keys.key, keys.iv)
9036}
9037
9038exports.createCipheriv = createCipheriv
9039exports.createCipher = createCipher
9040
9041},{"./aes":21,"./authCipher":22,"./modes":34,"./streamCipher":37,"cipher-base":51,"evp_bytestokey":103,"inherits":119,"safe-buffer":398}],26:[function(require,module,exports){
9042var Buffer = require('safe-buffer').Buffer
9043var ZEROES = Buffer.alloc(16, 0)
9044
9045function toArray (buf) {
9046 return [
9047 buf.readUInt32BE(0),
9048 buf.readUInt32BE(4),
9049 buf.readUInt32BE(8),
9050 buf.readUInt32BE(12)
9051 ]
9052}
9053
9054function fromArray (out) {
9055 var buf = Buffer.allocUnsafe(16)
9056 buf.writeUInt32BE(out[0] >>> 0, 0)
9057 buf.writeUInt32BE(out[1] >>> 0, 4)
9058 buf.writeUInt32BE(out[2] >>> 0, 8)
9059 buf.writeUInt32BE(out[3] >>> 0, 12)
9060 return buf
9061}
9062
9063function GHASH (key) {
9064 this.h = key
9065 this.state = Buffer.alloc(16, 0)
9066 this.cache = Buffer.allocUnsafe(0)
9067}
9068
9069// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
9070// by Juho Vähä-Herttua
9071GHASH.prototype.ghash = function (block) {
9072 var i = -1
9073 while (++i < block.length) {
9074 this.state[i] ^= block[i]
9075 }
9076 this._multiply()
9077}
9078
9079GHASH.prototype._multiply = function () {
9080 var Vi = toArray(this.h)
9081 var Zi = [0, 0, 0, 0]
9082 var j, xi, lsbVi
9083 var i = -1
9084 while (++i < 128) {
9085 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
9086 if (xi) {
9087 // Z_i+1 = Z_i ^ V_i
9088 Zi[0] ^= Vi[0]
9089 Zi[1] ^= Vi[1]
9090 Zi[2] ^= Vi[2]
9091 Zi[3] ^= Vi[3]
9092 }
9093
9094 // Store the value of LSB(V_i)
9095 lsbVi = (Vi[3] & 1) !== 0
9096
9097 // V_i+1 = V_i >> 1
9098 for (j = 3; j > 0; j--) {
9099 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
9100 }
9101 Vi[0] = Vi[0] >>> 1
9102
9103 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
9104 if (lsbVi) {
9105 Vi[0] = Vi[0] ^ (0xe1 << 24)
9106 }
9107 }
9108 this.state = fromArray(Zi)
9109}
9110
9111GHASH.prototype.update = function (buf) {
9112 this.cache = Buffer.concat([this.cache, buf])
9113 var chunk
9114 while (this.cache.length >= 16) {
9115 chunk = this.cache.slice(0, 16)
9116 this.cache = this.cache.slice(16)
9117 this.ghash(chunk)
9118 }
9119}
9120
9121GHASH.prototype.final = function (abl, bl) {
9122 if (this.cache.length) {
9123 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
9124 }
9125
9126 this.ghash(fromArray([0, abl, 0, bl]))
9127 return this.state
9128}
9129
9130module.exports = GHASH
9131
9132},{"safe-buffer":398}],27:[function(require,module,exports){
9133function incr32 (iv) {
9134 var len = iv.length
9135 var item
9136 while (len--) {
9137 item = iv.readUInt8(len)
9138 if (item === 255) {
9139 iv.writeUInt8(0, len)
9140 } else {
9141 item++
9142 iv.writeUInt8(item, len)
9143 break
9144 }
9145 }
9146}
9147module.exports = incr32
9148
9149},{}],28:[function(require,module,exports){
9150var xor = require('buffer-xor')
9151
9152exports.encrypt = function (self, block) {
9153 var data = xor(block, self._prev)
9154
9155 self._prev = self._cipher.encryptBlock(data)
9156 return self._prev
9157}
9158
9159exports.decrypt = function (self, block) {
9160 var pad = self._prev
9161
9162 self._prev = block
9163 var out = self._cipher.decryptBlock(block)
9164
9165 return xor(out, pad)
9166}
9167
9168},{"buffer-xor":49}],29:[function(require,module,exports){
9169var Buffer = require('safe-buffer').Buffer
9170var xor = require('buffer-xor')
9171
9172function encryptStart (self, data, decrypt) {
9173 var len = data.length
9174 var out = xor(data, self._cache)
9175 self._cache = self._cache.slice(len)
9176 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
9177 return out
9178}
9179
9180exports.encrypt = function (self, data, decrypt) {
9181 var out = Buffer.allocUnsafe(0)
9182 var len
9183
9184 while (data.length) {
9185 if (self._cache.length === 0) {
9186 self._cache = self._cipher.encryptBlock(self._prev)
9187 self._prev = Buffer.allocUnsafe(0)
9188 }
9189
9190 if (self._cache.length <= data.length) {
9191 len = self._cache.length
9192 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
9193 data = data.slice(len)
9194 } else {
9195 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
9196 break
9197 }
9198 }
9199
9200 return out
9201}
9202
9203},{"buffer-xor":49,"safe-buffer":398}],30:[function(require,module,exports){
9204var Buffer = require('safe-buffer').Buffer
9205
9206function encryptByte (self, byteParam, decrypt) {
9207 var pad
9208 var i = -1
9209 var len = 8
9210 var out = 0
9211 var bit, value
9212 while (++i < len) {
9213 pad = self._cipher.encryptBlock(self._prev)
9214 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
9215 value = pad[0] ^ bit
9216 out += ((value & 0x80) >> (i % 8))
9217 self._prev = shiftIn(self._prev, decrypt ? bit : value)
9218 }
9219 return out
9220}
9221
9222function shiftIn (buffer, value) {
9223 var len = buffer.length
9224 var i = -1
9225 var out = Buffer.allocUnsafe(buffer.length)
9226 buffer = Buffer.concat([buffer, Buffer.from([value])])
9227
9228 while (++i < len) {
9229 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
9230 }
9231
9232 return out
9233}
9234
9235exports.encrypt = function (self, chunk, decrypt) {
9236 var len = chunk.length
9237 var out = Buffer.allocUnsafe(len)
9238 var i = -1
9239
9240 while (++i < len) {
9241 out[i] = encryptByte(self, chunk[i], decrypt)
9242 }
9243
9244 return out
9245}
9246
9247},{"safe-buffer":398}],31:[function(require,module,exports){
9248var Buffer = require('safe-buffer').Buffer
9249
9250function encryptByte (self, byteParam, decrypt) {
9251 var pad = self._cipher.encryptBlock(self._prev)
9252 var out = pad[0] ^ byteParam
9253
9254 self._prev = Buffer.concat([
9255 self._prev.slice(1),
9256 Buffer.from([decrypt ? byteParam : out])
9257 ])
9258
9259 return out
9260}
9261
9262exports.encrypt = function (self, chunk, decrypt) {
9263 var len = chunk.length
9264 var out = Buffer.allocUnsafe(len)
9265 var i = -1
9266
9267 while (++i < len) {
9268 out[i] = encryptByte(self, chunk[i], decrypt)
9269 }
9270
9271 return out
9272}
9273
9274},{"safe-buffer":398}],32:[function(require,module,exports){
9275var xor = require('buffer-xor')
9276var Buffer = require('safe-buffer').Buffer
9277var incr32 = require('../incr32')
9278
9279function getBlock (self) {
9280 var out = self._cipher.encryptBlockRaw(self._prev)
9281 incr32(self._prev)
9282 return out
9283}
9284
9285var blockSize = 16
9286exports.encrypt = function (self, chunk) {
9287 var chunkNum = Math.ceil(chunk.length / blockSize)
9288 var start = self._cache.length
9289 self._cache = Buffer.concat([
9290 self._cache,
9291 Buffer.allocUnsafe(chunkNum * blockSize)
9292 ])
9293 for (var i = 0; i < chunkNum; i++) {
9294 var out = getBlock(self)
9295 var offset = start + i * blockSize
9296 self._cache.writeUInt32BE(out[0], offset + 0)
9297 self._cache.writeUInt32BE(out[1], offset + 4)
9298 self._cache.writeUInt32BE(out[2], offset + 8)
9299 self._cache.writeUInt32BE(out[3], offset + 12)
9300 }
9301 var pad = self._cache.slice(0, chunk.length)
9302 self._cache = self._cache.slice(chunk.length)
9303 return xor(chunk, pad)
9304}
9305
9306},{"../incr32":27,"buffer-xor":49,"safe-buffer":398}],33:[function(require,module,exports){
9307exports.encrypt = function (self, block) {
9308 return self._cipher.encryptBlock(block)
9309}
9310
9311exports.decrypt = function (self, block) {
9312 return self._cipher.decryptBlock(block)
9313}
9314
9315},{}],34:[function(require,module,exports){
9316var modeModules = {
9317 ECB: require('./ecb'),
9318 CBC: require('./cbc'),
9319 CFB: require('./cfb'),
9320 CFB8: require('./cfb8'),
9321 CFB1: require('./cfb1'),
9322 OFB: require('./ofb'),
9323 CTR: require('./ctr'),
9324 GCM: require('./ctr')
9325}
9326
9327var modes = require('./list.json')
9328
9329for (var key in modes) {
9330 modes[key].module = modeModules[modes[key].mode]
9331}
9332
9333module.exports = modes
9334
9335},{"./cbc":28,"./cfb":29,"./cfb1":30,"./cfb8":31,"./ctr":32,"./ecb":33,"./list.json":35,"./ofb":36}],35:[function(require,module,exports){
9336module.exports={
9337 "aes-128-ecb": {
9338 "cipher": "AES",
9339 "key": 128,
9340 "iv": 0,
9341 "mode": "ECB",
9342 "type": "block"
9343 },
9344 "aes-192-ecb": {
9345 "cipher": "AES",
9346 "key": 192,
9347 "iv": 0,
9348 "mode": "ECB",
9349 "type": "block"
9350 },
9351 "aes-256-ecb": {
9352 "cipher": "AES",
9353 "key": 256,
9354 "iv": 0,
9355 "mode": "ECB",
9356 "type": "block"
9357 },
9358 "aes-128-cbc": {
9359 "cipher": "AES",
9360 "key": 128,
9361 "iv": 16,
9362 "mode": "CBC",
9363 "type": "block"
9364 },
9365 "aes-192-cbc": {
9366 "cipher": "AES",
9367 "key": 192,
9368 "iv": 16,
9369 "mode": "CBC",
9370 "type": "block"
9371 },
9372 "aes-256-cbc": {
9373 "cipher": "AES",
9374 "key": 256,
9375 "iv": 16,
9376 "mode": "CBC",
9377 "type": "block"
9378 },
9379 "aes128": {
9380 "cipher": "AES",
9381 "key": 128,
9382 "iv": 16,
9383 "mode": "CBC",
9384 "type": "block"
9385 },
9386 "aes192": {
9387 "cipher": "AES",
9388 "key": 192,
9389 "iv": 16,
9390 "mode": "CBC",
9391 "type": "block"
9392 },
9393 "aes256": {
9394 "cipher": "AES",
9395 "key": 256,
9396 "iv": 16,
9397 "mode": "CBC",
9398 "type": "block"
9399 },
9400 "aes-128-cfb": {
9401 "cipher": "AES",
9402 "key": 128,
9403 "iv": 16,
9404 "mode": "CFB",
9405 "type": "stream"
9406 },
9407 "aes-192-cfb": {
9408 "cipher": "AES",
9409 "key": 192,
9410 "iv": 16,
9411 "mode": "CFB",
9412 "type": "stream"
9413 },
9414 "aes-256-cfb": {
9415 "cipher": "AES",
9416 "key": 256,
9417 "iv": 16,
9418 "mode": "CFB",
9419 "type": "stream"
9420 },
9421 "aes-128-cfb8": {
9422 "cipher": "AES",
9423 "key": 128,
9424 "iv": 16,
9425 "mode": "CFB8",
9426 "type": "stream"
9427 },
9428 "aes-192-cfb8": {
9429 "cipher": "AES",
9430 "key": 192,
9431 "iv": 16,
9432 "mode": "CFB8",
9433 "type": "stream"
9434 },
9435 "aes-256-cfb8": {
9436 "cipher": "AES",
9437 "key": 256,
9438 "iv": 16,
9439 "mode": "CFB8",
9440 "type": "stream"
9441 },
9442 "aes-128-cfb1": {
9443 "cipher": "AES",
9444 "key": 128,
9445 "iv": 16,
9446 "mode": "CFB1",
9447 "type": "stream"
9448 },
9449 "aes-192-cfb1": {
9450 "cipher": "AES",
9451 "key": 192,
9452 "iv": 16,
9453 "mode": "CFB1",
9454 "type": "stream"
9455 },
9456 "aes-256-cfb1": {
9457 "cipher": "AES",
9458 "key": 256,
9459 "iv": 16,
9460 "mode": "CFB1",
9461 "type": "stream"
9462 },
9463 "aes-128-ofb": {
9464 "cipher": "AES",
9465 "key": 128,
9466 "iv": 16,
9467 "mode": "OFB",
9468 "type": "stream"
9469 },
9470 "aes-192-ofb": {
9471 "cipher": "AES",
9472 "key": 192,
9473 "iv": 16,
9474 "mode": "OFB",
9475 "type": "stream"
9476 },
9477 "aes-256-ofb": {
9478 "cipher": "AES",
9479 "key": 256,
9480 "iv": 16,
9481 "mode": "OFB",
9482 "type": "stream"
9483 },
9484 "aes-128-ctr": {
9485 "cipher": "AES",
9486 "key": 128,
9487 "iv": 16,
9488 "mode": "CTR",
9489 "type": "stream"
9490 },
9491 "aes-192-ctr": {
9492 "cipher": "AES",
9493 "key": 192,
9494 "iv": 16,
9495 "mode": "CTR",
9496 "type": "stream"
9497 },
9498 "aes-256-ctr": {
9499 "cipher": "AES",
9500 "key": 256,
9501 "iv": 16,
9502 "mode": "CTR",
9503 "type": "stream"
9504 },
9505 "aes-128-gcm": {
9506 "cipher": "AES",
9507 "key": 128,
9508 "iv": 12,
9509 "mode": "GCM",
9510 "type": "auth"
9511 },
9512 "aes-192-gcm": {
9513 "cipher": "AES",
9514 "key": 192,
9515 "iv": 12,
9516 "mode": "GCM",
9517 "type": "auth"
9518 },
9519 "aes-256-gcm": {
9520 "cipher": "AES",
9521 "key": 256,
9522 "iv": 12,
9523 "mode": "GCM",
9524 "type": "auth"
9525 }
9526}
9527
9528},{}],36:[function(require,module,exports){
9529(function (Buffer){
9530var xor = require('buffer-xor')
9531
9532function getBlock (self) {
9533 self._prev = self._cipher.encryptBlock(self._prev)
9534 return self._prev
9535}
9536
9537exports.encrypt = function (self, chunk) {
9538 while (self._cache.length < chunk.length) {
9539 self._cache = Buffer.concat([self._cache, getBlock(self)])
9540 }
9541
9542 var pad = self._cache.slice(0, chunk.length)
9543 self._cache = self._cache.slice(chunk.length)
9544 return xor(chunk, pad)
9545}
9546
9547}).call(this,require("buffer").Buffer)
9548},{"buffer":50,"buffer-xor":49}],37:[function(require,module,exports){
9549var aes = require('./aes')
9550var Buffer = require('safe-buffer').Buffer
9551var Transform = require('cipher-base')
9552var inherits = require('inherits')
9553
9554function StreamCipher (mode, key, iv, decrypt) {
9555 Transform.call(this)
9556
9557 this._cipher = new aes.AES(key)
9558 this._prev = Buffer.from(iv)
9559 this._cache = Buffer.allocUnsafe(0)
9560 this._secCache = Buffer.allocUnsafe(0)
9561 this._decrypt = decrypt
9562 this._mode = mode
9563}
9564
9565inherits(StreamCipher, Transform)
9566
9567StreamCipher.prototype._update = function (chunk) {
9568 return this._mode.encrypt(this, chunk, this._decrypt)
9569}
9570
9571StreamCipher.prototype._final = function () {
9572 this._cipher.scrub()
9573}
9574
9575module.exports = StreamCipher
9576
9577},{"./aes":21,"cipher-base":51,"inherits":119,"safe-buffer":398}],38:[function(require,module,exports){
9578var DES = require('browserify-des')
9579var aes = require('browserify-aes/browser')
9580var aesModes = require('browserify-aes/modes')
9581var desModes = require('browserify-des/modes')
9582var ebtk = require('evp_bytestokey')
9583
9584function createCipher (suite, password) {
9585 suite = suite.toLowerCase()
9586
9587 var keyLen, ivLen
9588 if (aesModes[suite]) {
9589 keyLen = aesModes[suite].key
9590 ivLen = aesModes[suite].iv
9591 } else if (desModes[suite]) {
9592 keyLen = desModes[suite].key * 8
9593 ivLen = desModes[suite].iv
9594 } else {
9595 throw new TypeError('invalid suite type')
9596 }
9597
9598 var keys = ebtk(password, false, keyLen, ivLen)
9599 return createCipheriv(suite, keys.key, keys.iv)
9600}
9601
9602function createDecipher (suite, password) {
9603 suite = suite.toLowerCase()
9604
9605 var keyLen, ivLen
9606 if (aesModes[suite]) {
9607 keyLen = aesModes[suite].key
9608 ivLen = aesModes[suite].iv
9609 } else if (desModes[suite]) {
9610 keyLen = desModes[suite].key * 8
9611 ivLen = desModes[suite].iv
9612 } else {
9613 throw new TypeError('invalid suite type')
9614 }
9615
9616 var keys = ebtk(password, false, keyLen, ivLen)
9617 return createDecipheriv(suite, keys.key, keys.iv)
9618}
9619
9620function createCipheriv (suite, key, iv) {
9621 suite = suite.toLowerCase()
9622 if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)
9623 if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })
9624
9625 throw new TypeError('invalid suite type')
9626}
9627
9628function createDecipheriv (suite, key, iv) {
9629 suite = suite.toLowerCase()
9630 if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)
9631 if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })
9632
9633 throw new TypeError('invalid suite type')
9634}
9635
9636function getCiphers () {
9637 return Object.keys(desModes).concat(aes.getCiphers())
9638}
9639
9640exports.createCipher = exports.Cipher = createCipher
9641exports.createCipheriv = exports.Cipheriv = createCipheriv
9642exports.createDecipher = exports.Decipher = createDecipher
9643exports.createDecipheriv = exports.Decipheriv = createDecipheriv
9644exports.listCiphers = exports.getCiphers = getCiphers
9645
9646},{"browserify-aes/browser":23,"browserify-aes/modes":34,"browserify-des":39,"browserify-des/modes":40,"evp_bytestokey":103}],39:[function(require,module,exports){
9647var CipherBase = require('cipher-base')
9648var des = require('des.js')
9649var inherits = require('inherits')
9650var Buffer = require('safe-buffer').Buffer
9651
9652var modes = {
9653 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
9654 'des-ede3': des.EDE,
9655 'des-ede-cbc': des.CBC.instantiate(des.EDE),
9656 'des-ede': des.EDE,
9657 'des-cbc': des.CBC.instantiate(des.DES),
9658 'des-ecb': des.DES
9659}
9660modes.des = modes['des-cbc']
9661modes.des3 = modes['des-ede3-cbc']
9662module.exports = DES
9663inherits(DES, CipherBase)
9664function DES (opts) {
9665 CipherBase.call(this)
9666 var modeName = opts.mode.toLowerCase()
9667 var mode = modes[modeName]
9668 var type
9669 if (opts.decrypt) {
9670 type = 'decrypt'
9671 } else {
9672 type = 'encrypt'
9673 }
9674 var key = opts.key
9675 if (!Buffer.isBuffer(key)) {
9676 key = Buffer.from(key)
9677 }
9678 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
9679 key = Buffer.concat([key, key.slice(0, 8)])
9680 }
9681 var iv = opts.iv
9682 if (!Buffer.isBuffer(iv)) {
9683 iv = Buffer.from(iv)
9684 }
9685 this._des = mode.create({
9686 key: key,
9687 iv: iv,
9688 type: type
9689 })
9690}
9691DES.prototype._update = function (data) {
9692 return Buffer.from(this._des.update(data))
9693}
9694DES.prototype._final = function () {
9695 return Buffer.from(this._des.final())
9696}
9697
9698},{"cipher-base":51,"des.js":74,"inherits":119,"safe-buffer":398}],40:[function(require,module,exports){
9699exports['des-ecb'] = {
9700 key: 8,
9701 iv: 0
9702}
9703exports['des-cbc'] = exports.des = {
9704 key: 8,
9705 iv: 8
9706}
9707exports['des-ede3-cbc'] = exports.des3 = {
9708 key: 24,
9709 iv: 8
9710}
9711exports['des-ede3'] = {
9712 key: 24,
9713 iv: 0
9714}
9715exports['des-ede-cbc'] = {
9716 key: 16,
9717 iv: 8
9718}
9719exports['des-ede'] = {
9720 key: 16,
9721 iv: 0
9722}
9723
9724},{}],41:[function(require,module,exports){
9725(function (Buffer){
9726var bn = require('bn.js');
9727var randomBytes = require('randombytes');
9728module.exports = crt;
9729function blind(priv) {
9730 var r = getr(priv);
9731 var blinder = r.toRed(bn.mont(priv.modulus))
9732 .redPow(new bn(priv.publicExponent)).fromRed();
9733 return {
9734 blinder: blinder,
9735 unblinder:r.invm(priv.modulus)
9736 };
9737}
9738function crt(msg, priv) {
9739 var blinds = blind(priv);
9740 var len = priv.modulus.byteLength();
9741 var mod = bn.mont(priv.modulus);
9742 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
9743 var c1 = blinded.toRed(bn.mont(priv.prime1));
9744 var c2 = blinded.toRed(bn.mont(priv.prime2));
9745 var qinv = priv.coefficient;
9746 var p = priv.prime1;
9747 var q = priv.prime2;
9748 var m1 = c1.redPow(priv.exponent1);
9749 var m2 = c2.redPow(priv.exponent2);
9750 m1 = m1.fromRed();
9751 m2 = m2.fromRed();
9752 var h = m1.isub(m2).imul(qinv).umod(p);
9753 h.imul(q);
9754 m2.iadd(h);
9755 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
9756}
9757crt.getr = getr;
9758function getr(priv) {
9759 var len = priv.modulus.byteLength();
9760 var r = new bn(randomBytes(len));
9761 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
9762 r = new bn(randomBytes(len));
9763 }
9764 return r;
9765}
9766
9767}).call(this,require("buffer").Buffer)
9768},{"bn.js":18,"buffer":50,"randombytes":381}],42:[function(require,module,exports){
9769module.exports = require('./browser/algorithms.json')
9770
9771},{"./browser/algorithms.json":43}],43:[function(require,module,exports){
9772module.exports={
9773 "sha224WithRSAEncryption": {
9774 "sign": "rsa",
9775 "hash": "sha224",
9776 "id": "302d300d06096086480165030402040500041c"
9777 },
9778 "RSA-SHA224": {
9779 "sign": "ecdsa/rsa",
9780 "hash": "sha224",
9781 "id": "302d300d06096086480165030402040500041c"
9782 },
9783 "sha256WithRSAEncryption": {
9784 "sign": "rsa",
9785 "hash": "sha256",
9786 "id": "3031300d060960864801650304020105000420"
9787 },
9788 "RSA-SHA256": {
9789 "sign": "ecdsa/rsa",
9790 "hash": "sha256",
9791 "id": "3031300d060960864801650304020105000420"
9792 },
9793 "sha384WithRSAEncryption": {
9794 "sign": "rsa",
9795 "hash": "sha384",
9796 "id": "3041300d060960864801650304020205000430"
9797 },
9798 "RSA-SHA384": {
9799 "sign": "ecdsa/rsa",
9800 "hash": "sha384",
9801 "id": "3041300d060960864801650304020205000430"
9802 },
9803 "sha512WithRSAEncryption": {
9804 "sign": "rsa",
9805 "hash": "sha512",
9806 "id": "3051300d060960864801650304020305000440"
9807 },
9808 "RSA-SHA512": {
9809 "sign": "ecdsa/rsa",
9810 "hash": "sha512",
9811 "id": "3051300d060960864801650304020305000440"
9812 },
9813 "RSA-SHA1": {
9814 "sign": "rsa",
9815 "hash": "sha1",
9816 "id": "3021300906052b0e03021a05000414"
9817 },
9818 "ecdsa-with-SHA1": {
9819 "sign": "ecdsa",
9820 "hash": "sha1",
9821 "id": ""
9822 },
9823 "sha256": {
9824 "sign": "ecdsa",
9825 "hash": "sha256",
9826 "id": ""
9827 },
9828 "sha224": {
9829 "sign": "ecdsa",
9830 "hash": "sha224",
9831 "id": ""
9832 },
9833 "sha384": {
9834 "sign": "ecdsa",
9835 "hash": "sha384",
9836 "id": ""
9837 },
9838 "sha512": {
9839 "sign": "ecdsa",
9840 "hash": "sha512",
9841 "id": ""
9842 },
9843 "DSA-SHA": {
9844 "sign": "dsa",
9845 "hash": "sha1",
9846 "id": ""
9847 },
9848 "DSA-SHA1": {
9849 "sign": "dsa",
9850 "hash": "sha1",
9851 "id": ""
9852 },
9853 "DSA": {
9854 "sign": "dsa",
9855 "hash": "sha1",
9856 "id": ""
9857 },
9858 "DSA-WITH-SHA224": {
9859 "sign": "dsa",
9860 "hash": "sha224",
9861 "id": ""
9862 },
9863 "DSA-SHA224": {
9864 "sign": "dsa",
9865 "hash": "sha224",
9866 "id": ""
9867 },
9868 "DSA-WITH-SHA256": {
9869 "sign": "dsa",
9870 "hash": "sha256",
9871 "id": ""
9872 },
9873 "DSA-SHA256": {
9874 "sign": "dsa",
9875 "hash": "sha256",
9876 "id": ""
9877 },
9878 "DSA-WITH-SHA384": {
9879 "sign": "dsa",
9880 "hash": "sha384",
9881 "id": ""
9882 },
9883 "DSA-SHA384": {
9884 "sign": "dsa",
9885 "hash": "sha384",
9886 "id": ""
9887 },
9888 "DSA-WITH-SHA512": {
9889 "sign": "dsa",
9890 "hash": "sha512",
9891 "id": ""
9892 },
9893 "DSA-SHA512": {
9894 "sign": "dsa",
9895 "hash": "sha512",
9896 "id": ""
9897 },
9898 "DSA-RIPEMD160": {
9899 "sign": "dsa",
9900 "hash": "rmd160",
9901 "id": ""
9902 },
9903 "ripemd160WithRSA": {
9904 "sign": "rsa",
9905 "hash": "rmd160",
9906 "id": "3021300906052b2403020105000414"
9907 },
9908 "RSA-RIPEMD160": {
9909 "sign": "rsa",
9910 "hash": "rmd160",
9911 "id": "3021300906052b2403020105000414"
9912 },
9913 "md5WithRSAEncryption": {
9914 "sign": "rsa",
9915 "hash": "md5",
9916 "id": "3020300c06082a864886f70d020505000410"
9917 },
9918 "RSA-MD5": {
9919 "sign": "rsa",
9920 "hash": "md5",
9921 "id": "3020300c06082a864886f70d020505000410"
9922 }
9923}
9924
9925},{}],44:[function(require,module,exports){
9926module.exports={
9927 "1.3.132.0.10": "secp256k1",
9928 "1.3.132.0.33": "p224",
9929 "1.2.840.10045.3.1.1": "p192",
9930 "1.2.840.10045.3.1.7": "p256",
9931 "1.3.132.0.34": "p384",
9932 "1.3.132.0.35": "p521"
9933}
9934
9935},{}],45:[function(require,module,exports){
9936(function (Buffer){
9937var createHash = require('create-hash')
9938var stream = require('stream')
9939var inherits = require('inherits')
9940var sign = require('./sign')
9941var verify = require('./verify')
9942
9943var algorithms = require('./algorithms.json')
9944Object.keys(algorithms).forEach(function (key) {
9945 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
9946 algorithms[key.toLowerCase()] = algorithms[key]
9947})
9948
9949function Sign (algorithm) {
9950 stream.Writable.call(this)
9951
9952 var data = algorithms[algorithm]
9953 if (!data) throw new Error('Unknown message digest')
9954
9955 this._hashType = data.hash
9956 this._hash = createHash(data.hash)
9957 this._tag = data.id
9958 this._signType = data.sign
9959}
9960inherits(Sign, stream.Writable)
9961
9962Sign.prototype._write = function _write (data, _, done) {
9963 this._hash.update(data)
9964 done()
9965}
9966
9967Sign.prototype.update = function update (data, enc) {
9968 if (typeof data === 'string') data = new Buffer(data, enc)
9969
9970 this._hash.update(data)
9971 return this
9972}
9973
9974Sign.prototype.sign = function signMethod (key, enc) {
9975 this.end()
9976 var hash = this._hash.digest()
9977 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
9978
9979 return enc ? sig.toString(enc) : sig
9980}
9981
9982function Verify (algorithm) {
9983 stream.Writable.call(this)
9984
9985 var data = algorithms[algorithm]
9986 if (!data) throw new Error('Unknown message digest')
9987
9988 this._hash = createHash(data.hash)
9989 this._tag = data.id
9990 this._signType = data.sign
9991}
9992inherits(Verify, stream.Writable)
9993
9994Verify.prototype._write = function _write (data, _, done) {
9995 this._hash.update(data)
9996 done()
9997}
9998
9999Verify.prototype.update = function update (data, enc) {
10000 if (typeof data === 'string') data = new Buffer(data, enc)
10001
10002 this._hash.update(data)
10003 return this
10004}
10005
10006Verify.prototype.verify = function verifyMethod (key, sig, enc) {
10007 if (typeof sig === 'string') sig = new Buffer(sig, enc)
10008
10009 this.end()
10010 var hash = this._hash.digest()
10011 return verify(sig, hash, key, this._signType, this._tag)
10012}
10013
10014function createSign (algorithm) {
10015 return new Sign(algorithm)
10016}
10017
10018function createVerify (algorithm) {
10019 return new Verify(algorithm)
10020}
10021
10022module.exports = {
10023 Sign: createSign,
10024 Verify: createVerify,
10025 createSign: createSign,
10026 createVerify: createVerify
10027}
10028
10029}).call(this,require("buffer").Buffer)
10030},{"./algorithms.json":43,"./sign":46,"./verify":47,"buffer":50,"create-hash":68,"inherits":119,"stream":437}],46:[function(require,module,exports){
10031(function (Buffer){
10032// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
10033var createHmac = require('create-hmac')
10034var crt = require('browserify-rsa')
10035var EC = require('elliptic').ec
10036var BN = require('bn.js')
10037var parseKeys = require('parse-asn1')
10038var curves = require('./curves.json')
10039
10040function sign (hash, key, hashType, signType, tag) {
10041 var priv = parseKeys(key)
10042 if (priv.curve) {
10043 // rsa keys can be interpreted as ecdsa ones in openssl
10044 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
10045 return ecSign(hash, priv)
10046 } else if (priv.type === 'dsa') {
10047 if (signType !== 'dsa') throw new Error('wrong private key type')
10048 return dsaSign(hash, priv, hashType)
10049 } else {
10050 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
10051 }
10052 hash = Buffer.concat([tag, hash])
10053 var len = priv.modulus.byteLength()
10054 var pad = [ 0, 1 ]
10055 while (hash.length + pad.length + 1 < len) pad.push(0xff)
10056 pad.push(0x00)
10057 var i = -1
10058 while (++i < hash.length) pad.push(hash[i])
10059
10060 var out = crt(pad, priv)
10061 return out
10062}
10063
10064function ecSign (hash, priv) {
10065 var curveId = curves[priv.curve.join('.')]
10066 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
10067
10068 var curve = new EC(curveId)
10069 var key = curve.keyFromPrivate(priv.privateKey)
10070 var out = key.sign(hash)
10071
10072 return new Buffer(out.toDER())
10073}
10074
10075function dsaSign (hash, priv, algo) {
10076 var x = priv.params.priv_key
10077 var p = priv.params.p
10078 var q = priv.params.q
10079 var g = priv.params.g
10080 var r = new BN(0)
10081 var k
10082 var H = bits2int(hash, q).mod(q)
10083 var s = false
10084 var kv = getKey(x, q, hash, algo)
10085 while (s === false) {
10086 k = makeKey(q, kv, algo)
10087 r = makeR(g, k, p, q)
10088 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
10089 if (s.cmpn(0) === 0) {
10090 s = false
10091 r = new BN(0)
10092 }
10093 }
10094 return toDER(r, s)
10095}
10096
10097function toDER (r, s) {
10098 r = r.toArray()
10099 s = s.toArray()
10100
10101 // Pad values
10102 if (r[0] & 0x80) r = [ 0 ].concat(r)
10103 if (s[0] & 0x80) s = [ 0 ].concat(s)
10104
10105 var total = r.length + s.length + 4
10106 var res = [ 0x30, total, 0x02, r.length ]
10107 res = res.concat(r, [ 0x02, s.length ], s)
10108 return new Buffer(res)
10109}
10110
10111function getKey (x, q, hash, algo) {
10112 x = new Buffer(x.toArray())
10113 if (x.length < q.byteLength()) {
10114 var zeros = new Buffer(q.byteLength() - x.length)
10115 zeros.fill(0)
10116 x = Buffer.concat([ zeros, x ])
10117 }
10118 var hlen = hash.length
10119 var hbits = bits2octets(hash, q)
10120 var v = new Buffer(hlen)
10121 v.fill(1)
10122 var k = new Buffer(hlen)
10123 k.fill(0)
10124 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
10125 v = createHmac(algo, k).update(v).digest()
10126 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
10127 v = createHmac(algo, k).update(v).digest()
10128 return { k: k, v: v }
10129}
10130
10131function bits2int (obits, q) {
10132 var bits = new BN(obits)
10133 var shift = (obits.length << 3) - q.bitLength()
10134 if (shift > 0) bits.ishrn(shift)
10135 return bits
10136}
10137
10138function bits2octets (bits, q) {
10139 bits = bits2int(bits, q)
10140 bits = bits.mod(q)
10141 var out = new Buffer(bits.toArray())
10142 if (out.length < q.byteLength()) {
10143 var zeros = new Buffer(q.byteLength() - out.length)
10144 zeros.fill(0)
10145 out = Buffer.concat([ zeros, out ])
10146 }
10147 return out
10148}
10149
10150function makeKey (q, kv, algo) {
10151 var t
10152 var k
10153
10154 do {
10155 t = new Buffer(0)
10156
10157 while (t.length * 8 < q.bitLength()) {
10158 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
10159 t = Buffer.concat([ t, kv.v ])
10160 }
10161
10162 k = bits2int(t, q)
10163 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
10164 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
10165 } while (k.cmp(q) !== -1)
10166
10167 return k
10168}
10169
10170function makeR (g, k, p, q) {
10171 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
10172}
10173
10174module.exports = sign
10175module.exports.getKey = getKey
10176module.exports.makeKey = makeKey
10177
10178}).call(this,require("buffer").Buffer)
10179},{"./curves.json":44,"bn.js":18,"browserify-rsa":41,"buffer":50,"create-hmac":70,"elliptic":86,"parse-asn1":366}],47:[function(require,module,exports){
10180(function (Buffer){
10181// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
10182var BN = require('bn.js')
10183var EC = require('elliptic').ec
10184var parseKeys = require('parse-asn1')
10185var curves = require('./curves.json')
10186
10187function verify (sig, hash, key, signType, tag) {
10188 var pub = parseKeys(key)
10189 if (pub.type === 'ec') {
10190 // rsa keys can be interpreted as ecdsa ones in openssl
10191 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
10192 return ecVerify(sig, hash, pub)
10193 } else if (pub.type === 'dsa') {
10194 if (signType !== 'dsa') throw new Error('wrong public key type')
10195 return dsaVerify(sig, hash, pub)
10196 } else {
10197 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
10198 }
10199 hash = Buffer.concat([tag, hash])
10200 var len = pub.modulus.byteLength()
10201 var pad = [ 1 ]
10202 var padNum = 0
10203 while (hash.length + pad.length + 2 < len) {
10204 pad.push(0xff)
10205 padNum++
10206 }
10207 pad.push(0x00)
10208 var i = -1
10209 while (++i < hash.length) {
10210 pad.push(hash[i])
10211 }
10212 pad = new Buffer(pad)
10213 var red = BN.mont(pub.modulus)
10214 sig = new BN(sig).toRed(red)
10215
10216 sig = sig.redPow(new BN(pub.publicExponent))
10217 sig = new Buffer(sig.fromRed().toArray())
10218 var out = padNum < 8 ? 1 : 0
10219 len = Math.min(sig.length, pad.length)
10220 if (sig.length !== pad.length) out = 1
10221
10222 i = -1
10223 while (++i < len) out |= sig[i] ^ pad[i]
10224 return out === 0
10225}
10226
10227function ecVerify (sig, hash, pub) {
10228 var curveId = curves[pub.data.algorithm.curve.join('.')]
10229 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
10230
10231 var curve = new EC(curveId)
10232 var pubkey = pub.data.subjectPrivateKey.data
10233
10234 return curve.verify(hash, sig, pubkey)
10235}
10236
10237function dsaVerify (sig, hash, pub) {
10238 var p = pub.data.p
10239 var q = pub.data.q
10240 var g = pub.data.g
10241 var y = pub.data.pub_key
10242 var unpacked = parseKeys.signature.decode(sig, 'der')
10243 var s = unpacked.s
10244 var r = unpacked.r
10245 checkValue(s, q)
10246 checkValue(r, q)
10247 var montp = BN.mont(p)
10248 var w = s.invm(q)
10249 var v = g.toRed(montp)
10250 .redPow(new BN(hash).mul(w).mod(q))
10251 .fromRed()
10252 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
10253 .mod(p)
10254 .mod(q)
10255 return v.cmp(r) === 0
10256}
10257
10258function checkValue (b, q) {
10259 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
10260 if (b.cmp(q) >= q) throw new Error('invalid sig')
10261}
10262
10263module.exports = verify
10264
10265}).call(this,require("buffer").Buffer)
10266},{"./curves.json":44,"bn.js":18,"buffer":50,"elliptic":86,"parse-asn1":366}],48:[function(require,module,exports){
10267arguments[4][20][0].apply(exports,arguments)
10268},{"dup":20}],49:[function(require,module,exports){
10269(function (Buffer){
10270module.exports = function xor (a, b) {
10271 var length = Math.min(a.length, b.length)
10272 var buffer = new Buffer(length)
10273
10274 for (var i = 0; i < length; ++i) {
10275 buffer[i] = a[i] ^ b[i]
10276 }
10277
10278 return buffer
10279}
10280
10281}).call(this,require("buffer").Buffer)
10282},{"buffer":50}],50:[function(require,module,exports){
10283/*!
10284 * The buffer module from node.js, for the browser.
10285 *
10286 * @author Feross Aboukhadijeh <https://feross.org>
10287 * @license MIT
10288 */
10289/* eslint-disable no-proto */
10290
10291'use strict'
10292
10293var base64 = require('base64-js')
10294var ieee754 = require('ieee754')
10295
10296exports.Buffer = Buffer
10297exports.SlowBuffer = SlowBuffer
10298exports.INSPECT_MAX_BYTES = 50
10299
10300var K_MAX_LENGTH = 0x7fffffff
10301exports.kMaxLength = K_MAX_LENGTH
10302
10303/**
10304 * If `Buffer.TYPED_ARRAY_SUPPORT`:
10305 * === true Use Uint8Array implementation (fastest)
10306 * === false Print warning and recommend using `buffer` v4.x which has an Object
10307 * implementation (most compatible, even IE6)
10308 *
10309 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
10310 * Opera 11.6+, iOS 4.2+.
10311 *
10312 * We report that the browser does not support typed arrays if the are not subclassable
10313 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
10314 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
10315 * for __proto__ and has a buggy typed array implementation.
10316 */
10317Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
10318
10319if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
10320 typeof console.error === 'function') {
10321 console.error(
10322 'This browser lacks typed array (Uint8Array) support which is required by ' +
10323 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
10324 )
10325}
10326
10327function typedArraySupport () {
10328 // Can typed array instances can be augmented?
10329 try {
10330 var arr = new Uint8Array(1)
10331 arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }
10332 return arr.foo() === 42
10333 } catch (e) {
10334 return false
10335 }
10336}
10337
10338Object.defineProperty(Buffer.prototype, 'parent', {
10339 enumerable: true,
10340 get: function () {
10341 if (!Buffer.isBuffer(this)) return undefined
10342 return this.buffer
10343 }
10344})
10345
10346Object.defineProperty(Buffer.prototype, 'offset', {
10347 enumerable: true,
10348 get: function () {
10349 if (!Buffer.isBuffer(this)) return undefined
10350 return this.byteOffset
10351 }
10352})
10353
10354function createBuffer (length) {
10355 if (length > K_MAX_LENGTH) {
10356 throw new RangeError('The value "' + length + '" is invalid for option "size"')
10357 }
10358 // Return an augmented `Uint8Array` instance
10359 var buf = new Uint8Array(length)
10360 buf.__proto__ = Buffer.prototype
10361 return buf
10362}
10363
10364/**
10365 * The Buffer constructor returns instances of `Uint8Array` that have their
10366 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
10367 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
10368 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
10369 * returns a single octet.
10370 *
10371 * The `Uint8Array` prototype remains unmodified.
10372 */
10373
10374function Buffer (arg, encodingOrOffset, length) {
10375 // Common case.
10376 if (typeof arg === 'number') {
10377 if (typeof encodingOrOffset === 'string') {
10378 throw new TypeError(
10379 'The "string" argument must be of type string. Received type number'
10380 )
10381 }
10382 return allocUnsafe(arg)
10383 }
10384 return from(arg, encodingOrOffset, length)
10385}
10386
10387// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
10388if (typeof Symbol !== 'undefined' && Symbol.species != null &&
10389 Buffer[Symbol.species] === Buffer) {
10390 Object.defineProperty(Buffer, Symbol.species, {
10391 value: null,
10392 configurable: true,
10393 enumerable: false,
10394 writable: false
10395 })
10396}
10397
10398Buffer.poolSize = 8192 // not used by this implementation
10399
10400function from (value, encodingOrOffset, length) {
10401 if (typeof value === 'string') {
10402 return fromString(value, encodingOrOffset)
10403 }
10404
10405 if (ArrayBuffer.isView(value)) {
10406 return fromArrayLike(value)
10407 }
10408
10409 if (value == null) {
10410 throw TypeError(
10411 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
10412 'or Array-like Object. Received type ' + (typeof value)
10413 )
10414 }
10415
10416 if (isInstance(value, ArrayBuffer) ||
10417 (value && isInstance(value.buffer, ArrayBuffer))) {
10418 return fromArrayBuffer(value, encodingOrOffset, length)
10419 }
10420
10421 if (typeof value === 'number') {
10422 throw new TypeError(
10423 'The "value" argument must not be of type number. Received type number'
10424 )
10425 }
10426
10427 var valueOf = value.valueOf && value.valueOf()
10428 if (valueOf != null && valueOf !== value) {
10429 return Buffer.from(valueOf, encodingOrOffset, length)
10430 }
10431
10432 var b = fromObject(value)
10433 if (b) return b
10434
10435 if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
10436 typeof value[Symbol.toPrimitive] === 'function') {
10437 return Buffer.from(
10438 value[Symbol.toPrimitive]('string'), encodingOrOffset, length
10439 )
10440 }
10441
10442 throw new TypeError(
10443 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
10444 'or Array-like Object. Received type ' + (typeof value)
10445 )
10446}
10447
10448/**
10449 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
10450 * if value is a number.
10451 * Buffer.from(str[, encoding])
10452 * Buffer.from(array)
10453 * Buffer.from(buffer)
10454 * Buffer.from(arrayBuffer[, byteOffset[, length]])
10455 **/
10456Buffer.from = function (value, encodingOrOffset, length) {
10457 return from(value, encodingOrOffset, length)
10458}
10459
10460// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
10461// https://github.com/feross/buffer/pull/148
10462Buffer.prototype.__proto__ = Uint8Array.prototype
10463Buffer.__proto__ = Uint8Array
10464
10465function assertSize (size) {
10466 if (typeof size !== 'number') {
10467 throw new TypeError('"size" argument must be of type number')
10468 } else if (size < 0) {
10469 throw new RangeError('The value "' + size + '" is invalid for option "size"')
10470 }
10471}
10472
10473function alloc (size, fill, encoding) {
10474 assertSize(size)
10475 if (size <= 0) {
10476 return createBuffer(size)
10477 }
10478 if (fill !== undefined) {
10479 // Only pay attention to encoding if it's a string. This
10480 // prevents accidentally sending in a number that would
10481 // be interpretted as a start offset.
10482 return typeof encoding === 'string'
10483 ? createBuffer(size).fill(fill, encoding)
10484 : createBuffer(size).fill(fill)
10485 }
10486 return createBuffer(size)
10487}
10488
10489/**
10490 * Creates a new filled Buffer instance.
10491 * alloc(size[, fill[, encoding]])
10492 **/
10493Buffer.alloc = function (size, fill, encoding) {
10494 return alloc(size, fill, encoding)
10495}
10496
10497function allocUnsafe (size) {
10498 assertSize(size)
10499 return createBuffer(size < 0 ? 0 : checked(size) | 0)
10500}
10501
10502/**
10503 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
10504 * */
10505Buffer.allocUnsafe = function (size) {
10506 return allocUnsafe(size)
10507}
10508/**
10509 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
10510 */
10511Buffer.allocUnsafeSlow = function (size) {
10512 return allocUnsafe(size)
10513}
10514
10515function fromString (string, encoding) {
10516 if (typeof encoding !== 'string' || encoding === '') {
10517 encoding = 'utf8'
10518 }
10519
10520 if (!Buffer.isEncoding(encoding)) {
10521 throw new TypeError('Unknown encoding: ' + encoding)
10522 }
10523
10524 var length = byteLength(string, encoding) | 0
10525 var buf = createBuffer(length)
10526
10527 var actual = buf.write(string, encoding)
10528
10529 if (actual !== length) {
10530 // Writing a hex string, for example, that contains invalid characters will
10531 // cause everything after the first invalid character to be ignored. (e.g.
10532 // 'abxxcd' will be treated as 'ab')
10533 buf = buf.slice(0, actual)
10534 }
10535
10536 return buf
10537}
10538
10539function fromArrayLike (array) {
10540 var length = array.length < 0 ? 0 : checked(array.length) | 0
10541 var buf = createBuffer(length)
10542 for (var i = 0; i < length; i += 1) {
10543 buf[i] = array[i] & 255
10544 }
10545 return buf
10546}
10547
10548function fromArrayBuffer (array, byteOffset, length) {
10549 if (byteOffset < 0 || array.byteLength < byteOffset) {
10550 throw new RangeError('"offset" is outside of buffer bounds')
10551 }
10552
10553 if (array.byteLength < byteOffset + (length || 0)) {
10554 throw new RangeError('"length" is outside of buffer bounds')
10555 }
10556
10557 var buf
10558 if (byteOffset === undefined && length === undefined) {
10559 buf = new Uint8Array(array)
10560 } else if (length === undefined) {
10561 buf = new Uint8Array(array, byteOffset)
10562 } else {
10563 buf = new Uint8Array(array, byteOffset, length)
10564 }
10565
10566 // Return an augmented `Uint8Array` instance
10567 buf.__proto__ = Buffer.prototype
10568 return buf
10569}
10570
10571function fromObject (obj) {
10572 if (Buffer.isBuffer(obj)) {
10573 var len = checked(obj.length) | 0
10574 var buf = createBuffer(len)
10575
10576 if (buf.length === 0) {
10577 return buf
10578 }
10579
10580 obj.copy(buf, 0, 0, len)
10581 return buf
10582 }
10583
10584 if (obj.length !== undefined) {
10585 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
10586 return createBuffer(0)
10587 }
10588 return fromArrayLike(obj)
10589 }
10590
10591 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
10592 return fromArrayLike(obj.data)
10593 }
10594}
10595
10596function checked (length) {
10597 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
10598 // length is NaN (which is otherwise coerced to zero.)
10599 if (length >= K_MAX_LENGTH) {
10600 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
10601 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
10602 }
10603 return length | 0
10604}
10605
10606function SlowBuffer (length) {
10607 if (+length != length) { // eslint-disable-line eqeqeq
10608 length = 0
10609 }
10610 return Buffer.alloc(+length)
10611}
10612
10613Buffer.isBuffer = function isBuffer (b) {
10614 return b != null && b._isBuffer === true &&
10615 b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
10616}
10617
10618Buffer.compare = function compare (a, b) {
10619 if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
10620 if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
10621 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
10622 throw new TypeError(
10623 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
10624 )
10625 }
10626
10627 if (a === b) return 0
10628
10629 var x = a.length
10630 var y = b.length
10631
10632 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
10633 if (a[i] !== b[i]) {
10634 x = a[i]
10635 y = b[i]
10636 break
10637 }
10638 }
10639
10640 if (x < y) return -1
10641 if (y < x) return 1
10642 return 0
10643}
10644
10645Buffer.isEncoding = function isEncoding (encoding) {
10646 switch (String(encoding).toLowerCase()) {
10647 case 'hex':
10648 case 'utf8':
10649 case 'utf-8':
10650 case 'ascii':
10651 case 'latin1':
10652 case 'binary':
10653 case 'base64':
10654 case 'ucs2':
10655 case 'ucs-2':
10656 case 'utf16le':
10657 case 'utf-16le':
10658 return true
10659 default:
10660 return false
10661 }
10662}
10663
10664Buffer.concat = function concat (list, length) {
10665 if (!Array.isArray(list)) {
10666 throw new TypeError('"list" argument must be an Array of Buffers')
10667 }
10668
10669 if (list.length === 0) {
10670 return Buffer.alloc(0)
10671 }
10672
10673 var i
10674 if (length === undefined) {
10675 length = 0
10676 for (i = 0; i < list.length; ++i) {
10677 length += list[i].length
10678 }
10679 }
10680
10681 var buffer = Buffer.allocUnsafe(length)
10682 var pos = 0
10683 for (i = 0; i < list.length; ++i) {
10684 var buf = list[i]
10685 if (isInstance(buf, Uint8Array)) {
10686 buf = Buffer.from(buf)
10687 }
10688 if (!Buffer.isBuffer(buf)) {
10689 throw new TypeError('"list" argument must be an Array of Buffers')
10690 }
10691 buf.copy(buffer, pos)
10692 pos += buf.length
10693 }
10694 return buffer
10695}
10696
10697function byteLength (string, encoding) {
10698 if (Buffer.isBuffer(string)) {
10699 return string.length
10700 }
10701 if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
10702 return string.byteLength
10703 }
10704 if (typeof string !== 'string') {
10705 throw new TypeError(
10706 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
10707 'Received type ' + typeof string
10708 )
10709 }
10710
10711 var len = string.length
10712 var mustMatch = (arguments.length > 2 && arguments[2] === true)
10713 if (!mustMatch && len === 0) return 0
10714
10715 // Use a for loop to avoid recursion
10716 var loweredCase = false
10717 for (;;) {
10718 switch (encoding) {
10719 case 'ascii':
10720 case 'latin1':
10721 case 'binary':
10722 return len
10723 case 'utf8':
10724 case 'utf-8':
10725 return utf8ToBytes(string).length
10726 case 'ucs2':
10727 case 'ucs-2':
10728 case 'utf16le':
10729 case 'utf-16le':
10730 return len * 2
10731 case 'hex':
10732 return len >>> 1
10733 case 'base64':
10734 return base64ToBytes(string).length
10735 default:
10736 if (loweredCase) {
10737 return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
10738 }
10739 encoding = ('' + encoding).toLowerCase()
10740 loweredCase = true
10741 }
10742 }
10743}
10744Buffer.byteLength = byteLength
10745
10746function slowToString (encoding, start, end) {
10747 var loweredCase = false
10748
10749 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
10750 // property of a typed array.
10751
10752 // This behaves neither like String nor Uint8Array in that we set start/end
10753 // to their upper/lower bounds if the value passed is out of range.
10754 // undefined is handled specially as per ECMA-262 6th Edition,
10755 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
10756 if (start === undefined || start < 0) {
10757 start = 0
10758 }
10759 // Return early if start > this.length. Done here to prevent potential uint32
10760 // coercion fail below.
10761 if (start > this.length) {
10762 return ''
10763 }
10764
10765 if (end === undefined || end > this.length) {
10766 end = this.length
10767 }
10768
10769 if (end <= 0) {
10770 return ''
10771 }
10772
10773 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
10774 end >>>= 0
10775 start >>>= 0
10776
10777 if (end <= start) {
10778 return ''
10779 }
10780
10781 if (!encoding) encoding = 'utf8'
10782
10783 while (true) {
10784 switch (encoding) {
10785 case 'hex':
10786 return hexSlice(this, start, end)
10787
10788 case 'utf8':
10789 case 'utf-8':
10790 return utf8Slice(this, start, end)
10791
10792 case 'ascii':
10793 return asciiSlice(this, start, end)
10794
10795 case 'latin1':
10796 case 'binary':
10797 return latin1Slice(this, start, end)
10798
10799 case 'base64':
10800 return base64Slice(this, start, end)
10801
10802 case 'ucs2':
10803 case 'ucs-2':
10804 case 'utf16le':
10805 case 'utf-16le':
10806 return utf16leSlice(this, start, end)
10807
10808 default:
10809 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
10810 encoding = (encoding + '').toLowerCase()
10811 loweredCase = true
10812 }
10813 }
10814}
10815
10816// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
10817// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
10818// reliably in a browserify context because there could be multiple different
10819// copies of the 'buffer' package in use. This method works even for Buffer
10820// instances that were created from another copy of the `buffer` package.
10821// See: https://github.com/feross/buffer/issues/154
10822Buffer.prototype._isBuffer = true
10823
10824function swap (b, n, m) {
10825 var i = b[n]
10826 b[n] = b[m]
10827 b[m] = i
10828}
10829
10830Buffer.prototype.swap16 = function swap16 () {
10831 var len = this.length
10832 if (len % 2 !== 0) {
10833 throw new RangeError('Buffer size must be a multiple of 16-bits')
10834 }
10835 for (var i = 0; i < len; i += 2) {
10836 swap(this, i, i + 1)
10837 }
10838 return this
10839}
10840
10841Buffer.prototype.swap32 = function swap32 () {
10842 var len = this.length
10843 if (len % 4 !== 0) {
10844 throw new RangeError('Buffer size must be a multiple of 32-bits')
10845 }
10846 for (var i = 0; i < len; i += 4) {
10847 swap(this, i, i + 3)
10848 swap(this, i + 1, i + 2)
10849 }
10850 return this
10851}
10852
10853Buffer.prototype.swap64 = function swap64 () {
10854 var len = this.length
10855 if (len % 8 !== 0) {
10856 throw new RangeError('Buffer size must be a multiple of 64-bits')
10857 }
10858 for (var i = 0; i < len; i += 8) {
10859 swap(this, i, i + 7)
10860 swap(this, i + 1, i + 6)
10861 swap(this, i + 2, i + 5)
10862 swap(this, i + 3, i + 4)
10863 }
10864 return this
10865}
10866
10867Buffer.prototype.toString = function toString () {
10868 var length = this.length
10869 if (length === 0) return ''
10870 if (arguments.length === 0) return utf8Slice(this, 0, length)
10871 return slowToString.apply(this, arguments)
10872}
10873
10874Buffer.prototype.toLocaleString = Buffer.prototype.toString
10875
10876Buffer.prototype.equals = function equals (b) {
10877 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
10878 if (this === b) return true
10879 return Buffer.compare(this, b) === 0
10880}
10881
10882Buffer.prototype.inspect = function inspect () {
10883 var str = ''
10884 var max = exports.INSPECT_MAX_BYTES
10885 str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
10886 if (this.length > max) str += ' ... '
10887 return '<Buffer ' + str + '>'
10888}
10889
10890Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
10891 if (isInstance(target, Uint8Array)) {
10892 target = Buffer.from(target, target.offset, target.byteLength)
10893 }
10894 if (!Buffer.isBuffer(target)) {
10895 throw new TypeError(
10896 'The "target" argument must be one of type Buffer or Uint8Array. ' +
10897 'Received type ' + (typeof target)
10898 )
10899 }
10900
10901 if (start === undefined) {
10902 start = 0
10903 }
10904 if (end === undefined) {
10905 end = target ? target.length : 0
10906 }
10907 if (thisStart === undefined) {
10908 thisStart = 0
10909 }
10910 if (thisEnd === undefined) {
10911 thisEnd = this.length
10912 }
10913
10914 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
10915 throw new RangeError('out of range index')
10916 }
10917
10918 if (thisStart >= thisEnd && start >= end) {
10919 return 0
10920 }
10921 if (thisStart >= thisEnd) {
10922 return -1
10923 }
10924 if (start >= end) {
10925 return 1
10926 }
10927
10928 start >>>= 0
10929 end >>>= 0
10930 thisStart >>>= 0
10931 thisEnd >>>= 0
10932
10933 if (this === target) return 0
10934
10935 var x = thisEnd - thisStart
10936 var y = end - start
10937 var len = Math.min(x, y)
10938
10939 var thisCopy = this.slice(thisStart, thisEnd)
10940 var targetCopy = target.slice(start, end)
10941
10942 for (var i = 0; i < len; ++i) {
10943 if (thisCopy[i] !== targetCopy[i]) {
10944 x = thisCopy[i]
10945 y = targetCopy[i]
10946 break
10947 }
10948 }
10949
10950 if (x < y) return -1
10951 if (y < x) return 1
10952 return 0
10953}
10954
10955// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
10956// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
10957//
10958// Arguments:
10959// - buffer - a Buffer to search
10960// - val - a string, Buffer, or number
10961// - byteOffset - an index into `buffer`; will be clamped to an int32
10962// - encoding - an optional encoding, relevant is val is a string
10963// - dir - true for indexOf, false for lastIndexOf
10964function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
10965 // Empty buffer means no match
10966 if (buffer.length === 0) return -1
10967
10968 // Normalize byteOffset
10969 if (typeof byteOffset === 'string') {
10970 encoding = byteOffset
10971 byteOffset = 0
10972 } else if (byteOffset > 0x7fffffff) {
10973 byteOffset = 0x7fffffff
10974 } else if (byteOffset < -0x80000000) {
10975 byteOffset = -0x80000000
10976 }
10977 byteOffset = +byteOffset // Coerce to Number.
10978 if (numberIsNaN(byteOffset)) {
10979 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
10980 byteOffset = dir ? 0 : (buffer.length - 1)
10981 }
10982
10983 // Normalize byteOffset: negative offsets start from the end of the buffer
10984 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
10985 if (byteOffset >= buffer.length) {
10986 if (dir) return -1
10987 else byteOffset = buffer.length - 1
10988 } else if (byteOffset < 0) {
10989 if (dir) byteOffset = 0
10990 else return -1
10991 }
10992
10993 // Normalize val
10994 if (typeof val === 'string') {
10995 val = Buffer.from(val, encoding)
10996 }
10997
10998 // Finally, search either indexOf (if dir is true) or lastIndexOf
10999 if (Buffer.isBuffer(val)) {
11000 // Special case: looking for empty string/buffer always fails
11001 if (val.length === 0) {
11002 return -1
11003 }
11004 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
11005 } else if (typeof val === 'number') {
11006 val = val & 0xFF // Search for a byte value [0-255]
11007 if (typeof Uint8Array.prototype.indexOf === 'function') {
11008 if (dir) {
11009 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
11010 } else {
11011 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
11012 }
11013 }
11014 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
11015 }
11016
11017 throw new TypeError('val must be string, number or Buffer')
11018}
11019
11020function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
11021 var indexSize = 1
11022 var arrLength = arr.length
11023 var valLength = val.length
11024
11025 if (encoding !== undefined) {
11026 encoding = String(encoding).toLowerCase()
11027 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
11028 encoding === 'utf16le' || encoding === 'utf-16le') {
11029 if (arr.length < 2 || val.length < 2) {
11030 return -1
11031 }
11032 indexSize = 2
11033 arrLength /= 2
11034 valLength /= 2
11035 byteOffset /= 2
11036 }
11037 }
11038
11039 function read (buf, i) {
11040 if (indexSize === 1) {
11041 return buf[i]
11042 } else {
11043 return buf.readUInt16BE(i * indexSize)
11044 }
11045 }
11046
11047 var i
11048 if (dir) {
11049 var foundIndex = -1
11050 for (i = byteOffset; i < arrLength; i++) {
11051 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
11052 if (foundIndex === -1) foundIndex = i
11053 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
11054 } else {
11055 if (foundIndex !== -1) i -= i - foundIndex
11056 foundIndex = -1
11057 }
11058 }
11059 } else {
11060 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
11061 for (i = byteOffset; i >= 0; i--) {
11062 var found = true
11063 for (var j = 0; j < valLength; j++) {
11064 if (read(arr, i + j) !== read(val, j)) {
11065 found = false
11066 break
11067 }
11068 }
11069 if (found) return i
11070 }
11071 }
11072
11073 return -1
11074}
11075
11076Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
11077 return this.indexOf(val, byteOffset, encoding) !== -1
11078}
11079
11080Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
11081 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
11082}
11083
11084Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
11085 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
11086}
11087
11088function hexWrite (buf, string, offset, length) {
11089 offset = Number(offset) || 0
11090 var remaining = buf.length - offset
11091 if (!length) {
11092 length = remaining
11093 } else {
11094 length = Number(length)
11095 if (length > remaining) {
11096 length = remaining
11097 }
11098 }
11099
11100 var strLen = string.length
11101
11102 if (length > strLen / 2) {
11103 length = strLen / 2
11104 }
11105 for (var i = 0; i < length; ++i) {
11106 var parsed = parseInt(string.substr(i * 2, 2), 16)
11107 if (numberIsNaN(parsed)) return i
11108 buf[offset + i] = parsed
11109 }
11110 return i
11111}
11112
11113function utf8Write (buf, string, offset, length) {
11114 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
11115}
11116
11117function asciiWrite (buf, string, offset, length) {
11118 return blitBuffer(asciiToBytes(string), buf, offset, length)
11119}
11120
11121function latin1Write (buf, string, offset, length) {
11122 return asciiWrite(buf, string, offset, length)
11123}
11124
11125function base64Write (buf, string, offset, length) {
11126 return blitBuffer(base64ToBytes(string), buf, offset, length)
11127}
11128
11129function ucs2Write (buf, string, offset, length) {
11130 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
11131}
11132
11133Buffer.prototype.write = function write (string, offset, length, encoding) {
11134 // Buffer#write(string)
11135 if (offset === undefined) {
11136 encoding = 'utf8'
11137 length = this.length
11138 offset = 0
11139 // Buffer#write(string, encoding)
11140 } else if (length === undefined && typeof offset === 'string') {
11141 encoding = offset
11142 length = this.length
11143 offset = 0
11144 // Buffer#write(string, offset[, length][, encoding])
11145 } else if (isFinite(offset)) {
11146 offset = offset >>> 0
11147 if (isFinite(length)) {
11148 length = length >>> 0
11149 if (encoding === undefined) encoding = 'utf8'
11150 } else {
11151 encoding = length
11152 length = undefined
11153 }
11154 } else {
11155 throw new Error(
11156 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
11157 )
11158 }
11159
11160 var remaining = this.length - offset
11161 if (length === undefined || length > remaining) length = remaining
11162
11163 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
11164 throw new RangeError('Attempt to write outside buffer bounds')
11165 }
11166
11167 if (!encoding) encoding = 'utf8'
11168
11169 var loweredCase = false
11170 for (;;) {
11171 switch (encoding) {
11172 case 'hex':
11173 return hexWrite(this, string, offset, length)
11174
11175 case 'utf8':
11176 case 'utf-8':
11177 return utf8Write(this, string, offset, length)
11178
11179 case 'ascii':
11180 return asciiWrite(this, string, offset, length)
11181
11182 case 'latin1':
11183 case 'binary':
11184 return latin1Write(this, string, offset, length)
11185
11186 case 'base64':
11187 // Warning: maxLength not taken into account in base64Write
11188 return base64Write(this, string, offset, length)
11189
11190 case 'ucs2':
11191 case 'ucs-2':
11192 case 'utf16le':
11193 case 'utf-16le':
11194 return ucs2Write(this, string, offset, length)
11195
11196 default:
11197 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
11198 encoding = ('' + encoding).toLowerCase()
11199 loweredCase = true
11200 }
11201 }
11202}
11203
11204Buffer.prototype.toJSON = function toJSON () {
11205 return {
11206 type: 'Buffer',
11207 data: Array.prototype.slice.call(this._arr || this, 0)
11208 }
11209}
11210
11211function base64Slice (buf, start, end) {
11212 if (start === 0 && end === buf.length) {
11213 return base64.fromByteArray(buf)
11214 } else {
11215 return base64.fromByteArray(buf.slice(start, end))
11216 }
11217}
11218
11219function utf8Slice (buf, start, end) {
11220 end = Math.min(buf.length, end)
11221 var res = []
11222
11223 var i = start
11224 while (i < end) {
11225 var firstByte = buf[i]
11226 var codePoint = null
11227 var bytesPerSequence = (firstByte > 0xEF) ? 4
11228 : (firstByte > 0xDF) ? 3
11229 : (firstByte > 0xBF) ? 2
11230 : 1
11231
11232 if (i + bytesPerSequence <= end) {
11233 var secondByte, thirdByte, fourthByte, tempCodePoint
11234
11235 switch (bytesPerSequence) {
11236 case 1:
11237 if (firstByte < 0x80) {
11238 codePoint = firstByte
11239 }
11240 break
11241 case 2:
11242 secondByte = buf[i + 1]
11243 if ((secondByte & 0xC0) === 0x80) {
11244 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
11245 if (tempCodePoint > 0x7F) {
11246 codePoint = tempCodePoint
11247 }
11248 }
11249 break
11250 case 3:
11251 secondByte = buf[i + 1]
11252 thirdByte = buf[i + 2]
11253 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
11254 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
11255 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
11256 codePoint = tempCodePoint
11257 }
11258 }
11259 break
11260 case 4:
11261 secondByte = buf[i + 1]
11262 thirdByte = buf[i + 2]
11263 fourthByte = buf[i + 3]
11264 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
11265 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
11266 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
11267 codePoint = tempCodePoint
11268 }
11269 }
11270 }
11271 }
11272
11273 if (codePoint === null) {
11274 // we did not generate a valid codePoint so insert a
11275 // replacement char (U+FFFD) and advance only 1 byte
11276 codePoint = 0xFFFD
11277 bytesPerSequence = 1
11278 } else if (codePoint > 0xFFFF) {
11279 // encode to utf16 (surrogate pair dance)
11280 codePoint -= 0x10000
11281 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
11282 codePoint = 0xDC00 | codePoint & 0x3FF
11283 }
11284
11285 res.push(codePoint)
11286 i += bytesPerSequence
11287 }
11288
11289 return decodeCodePointsArray(res)
11290}
11291
11292// Based on http://stackoverflow.com/a/22747272/680742, the browser with
11293// the lowest limit is Chrome, with 0x10000 args.
11294// We go 1 magnitude less, for safety
11295var MAX_ARGUMENTS_LENGTH = 0x1000
11296
11297function decodeCodePointsArray (codePoints) {
11298 var len = codePoints.length
11299 if (len <= MAX_ARGUMENTS_LENGTH) {
11300 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
11301 }
11302
11303 // Decode in chunks to avoid "call stack size exceeded".
11304 var res = ''
11305 var i = 0
11306 while (i < len) {
11307 res += String.fromCharCode.apply(
11308 String,
11309 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
11310 )
11311 }
11312 return res
11313}
11314
11315function asciiSlice (buf, start, end) {
11316 var ret = ''
11317 end = Math.min(buf.length, end)
11318
11319 for (var i = start; i < end; ++i) {
11320 ret += String.fromCharCode(buf[i] & 0x7F)
11321 }
11322 return ret
11323}
11324
11325function latin1Slice (buf, start, end) {
11326 var ret = ''
11327 end = Math.min(buf.length, end)
11328
11329 for (var i = start; i < end; ++i) {
11330 ret += String.fromCharCode(buf[i])
11331 }
11332 return ret
11333}
11334
11335function hexSlice (buf, start, end) {
11336 var len = buf.length
11337
11338 if (!start || start < 0) start = 0
11339 if (!end || end < 0 || end > len) end = len
11340
11341 var out = ''
11342 for (var i = start; i < end; ++i) {
11343 out += toHex(buf[i])
11344 }
11345 return out
11346}
11347
11348function utf16leSlice (buf, start, end) {
11349 var bytes = buf.slice(start, end)
11350 var res = ''
11351 for (var i = 0; i < bytes.length; i += 2) {
11352 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
11353 }
11354 return res
11355}
11356
11357Buffer.prototype.slice = function slice (start, end) {
11358 var len = this.length
11359 start = ~~start
11360 end = end === undefined ? len : ~~end
11361
11362 if (start < 0) {
11363 start += len
11364 if (start < 0) start = 0
11365 } else if (start > len) {
11366 start = len
11367 }
11368
11369 if (end < 0) {
11370 end += len
11371 if (end < 0) end = 0
11372 } else if (end > len) {
11373 end = len
11374 }
11375
11376 if (end < start) end = start
11377
11378 var newBuf = this.subarray(start, end)
11379 // Return an augmented `Uint8Array` instance
11380 newBuf.__proto__ = Buffer.prototype
11381 return newBuf
11382}
11383
11384/*
11385 * Need to make sure that buffer isn't trying to write out of bounds.
11386 */
11387function checkOffset (offset, ext, length) {
11388 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
11389 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
11390}
11391
11392Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
11393 offset = offset >>> 0
11394 byteLength = byteLength >>> 0
11395 if (!noAssert) checkOffset(offset, byteLength, this.length)
11396
11397 var val = this[offset]
11398 var mul = 1
11399 var i = 0
11400 while (++i < byteLength && (mul *= 0x100)) {
11401 val += this[offset + i] * mul
11402 }
11403
11404 return val
11405}
11406
11407Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
11408 offset = offset >>> 0
11409 byteLength = byteLength >>> 0
11410 if (!noAssert) {
11411 checkOffset(offset, byteLength, this.length)
11412 }
11413
11414 var val = this[offset + --byteLength]
11415 var mul = 1
11416 while (byteLength > 0 && (mul *= 0x100)) {
11417 val += this[offset + --byteLength] * mul
11418 }
11419
11420 return val
11421}
11422
11423Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
11424 offset = offset >>> 0
11425 if (!noAssert) checkOffset(offset, 1, this.length)
11426 return this[offset]
11427}
11428
11429Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
11430 offset = offset >>> 0
11431 if (!noAssert) checkOffset(offset, 2, this.length)
11432 return this[offset] | (this[offset + 1] << 8)
11433}
11434
11435Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
11436 offset = offset >>> 0
11437 if (!noAssert) checkOffset(offset, 2, this.length)
11438 return (this[offset] << 8) | this[offset + 1]
11439}
11440
11441Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
11442 offset = offset >>> 0
11443 if (!noAssert) checkOffset(offset, 4, this.length)
11444
11445 return ((this[offset]) |
11446 (this[offset + 1] << 8) |
11447 (this[offset + 2] << 16)) +
11448 (this[offset + 3] * 0x1000000)
11449}
11450
11451Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
11452 offset = offset >>> 0
11453 if (!noAssert) checkOffset(offset, 4, this.length)
11454
11455 return (this[offset] * 0x1000000) +
11456 ((this[offset + 1] << 16) |
11457 (this[offset + 2] << 8) |
11458 this[offset + 3])
11459}
11460
11461Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
11462 offset = offset >>> 0
11463 byteLength = byteLength >>> 0
11464 if (!noAssert) checkOffset(offset, byteLength, this.length)
11465
11466 var val = this[offset]
11467 var mul = 1
11468 var i = 0
11469 while (++i < byteLength && (mul *= 0x100)) {
11470 val += this[offset + i] * mul
11471 }
11472 mul *= 0x80
11473
11474 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
11475
11476 return val
11477}
11478
11479Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
11480 offset = offset >>> 0
11481 byteLength = byteLength >>> 0
11482 if (!noAssert) checkOffset(offset, byteLength, this.length)
11483
11484 var i = byteLength
11485 var mul = 1
11486 var val = this[offset + --i]
11487 while (i > 0 && (mul *= 0x100)) {
11488 val += this[offset + --i] * mul
11489 }
11490 mul *= 0x80
11491
11492 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
11493
11494 return val
11495}
11496
11497Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
11498 offset = offset >>> 0
11499 if (!noAssert) checkOffset(offset, 1, this.length)
11500 if (!(this[offset] & 0x80)) return (this[offset])
11501 return ((0xff - this[offset] + 1) * -1)
11502}
11503
11504Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
11505 offset = offset >>> 0
11506 if (!noAssert) checkOffset(offset, 2, this.length)
11507 var val = this[offset] | (this[offset + 1] << 8)
11508 return (val & 0x8000) ? val | 0xFFFF0000 : val
11509}
11510
11511Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
11512 offset = offset >>> 0
11513 if (!noAssert) checkOffset(offset, 2, this.length)
11514 var val = this[offset + 1] | (this[offset] << 8)
11515 return (val & 0x8000) ? val | 0xFFFF0000 : val
11516}
11517
11518Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
11519 offset = offset >>> 0
11520 if (!noAssert) checkOffset(offset, 4, this.length)
11521
11522 return (this[offset]) |
11523 (this[offset + 1] << 8) |
11524 (this[offset + 2] << 16) |
11525 (this[offset + 3] << 24)
11526}
11527
11528Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
11529 offset = offset >>> 0
11530 if (!noAssert) checkOffset(offset, 4, this.length)
11531
11532 return (this[offset] << 24) |
11533 (this[offset + 1] << 16) |
11534 (this[offset + 2] << 8) |
11535 (this[offset + 3])
11536}
11537
11538Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
11539 offset = offset >>> 0
11540 if (!noAssert) checkOffset(offset, 4, this.length)
11541 return ieee754.read(this, offset, true, 23, 4)
11542}
11543
11544Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
11545 offset = offset >>> 0
11546 if (!noAssert) checkOffset(offset, 4, this.length)
11547 return ieee754.read(this, offset, false, 23, 4)
11548}
11549
11550Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
11551 offset = offset >>> 0
11552 if (!noAssert) checkOffset(offset, 8, this.length)
11553 return ieee754.read(this, offset, true, 52, 8)
11554}
11555
11556Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
11557 offset = offset >>> 0
11558 if (!noAssert) checkOffset(offset, 8, this.length)
11559 return ieee754.read(this, offset, false, 52, 8)
11560}
11561
11562function checkInt (buf, value, offset, ext, max, min) {
11563 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
11564 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
11565 if (offset + ext > buf.length) throw new RangeError('Index out of range')
11566}
11567
11568Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
11569 value = +value
11570 offset = offset >>> 0
11571 byteLength = byteLength >>> 0
11572 if (!noAssert) {
11573 var maxBytes = Math.pow(2, 8 * byteLength) - 1
11574 checkInt(this, value, offset, byteLength, maxBytes, 0)
11575 }
11576
11577 var mul = 1
11578 var i = 0
11579 this[offset] = value & 0xFF
11580 while (++i < byteLength && (mul *= 0x100)) {
11581 this[offset + i] = (value / mul) & 0xFF
11582 }
11583
11584 return offset + byteLength
11585}
11586
11587Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
11588 value = +value
11589 offset = offset >>> 0
11590 byteLength = byteLength >>> 0
11591 if (!noAssert) {
11592 var maxBytes = Math.pow(2, 8 * byteLength) - 1
11593 checkInt(this, value, offset, byteLength, maxBytes, 0)
11594 }
11595
11596 var i = byteLength - 1
11597 var mul = 1
11598 this[offset + i] = value & 0xFF
11599 while (--i >= 0 && (mul *= 0x100)) {
11600 this[offset + i] = (value / mul) & 0xFF
11601 }
11602
11603 return offset + byteLength
11604}
11605
11606Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
11607 value = +value
11608 offset = offset >>> 0
11609 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
11610 this[offset] = (value & 0xff)
11611 return offset + 1
11612}
11613
11614Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
11615 value = +value
11616 offset = offset >>> 0
11617 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
11618 this[offset] = (value & 0xff)
11619 this[offset + 1] = (value >>> 8)
11620 return offset + 2
11621}
11622
11623Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
11624 value = +value
11625 offset = offset >>> 0
11626 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
11627 this[offset] = (value >>> 8)
11628 this[offset + 1] = (value & 0xff)
11629 return offset + 2
11630}
11631
11632Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
11633 value = +value
11634 offset = offset >>> 0
11635 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
11636 this[offset + 3] = (value >>> 24)
11637 this[offset + 2] = (value >>> 16)
11638 this[offset + 1] = (value >>> 8)
11639 this[offset] = (value & 0xff)
11640 return offset + 4
11641}
11642
11643Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
11644 value = +value
11645 offset = offset >>> 0
11646 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
11647 this[offset] = (value >>> 24)
11648 this[offset + 1] = (value >>> 16)
11649 this[offset + 2] = (value >>> 8)
11650 this[offset + 3] = (value & 0xff)
11651 return offset + 4
11652}
11653
11654Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
11655 value = +value
11656 offset = offset >>> 0
11657 if (!noAssert) {
11658 var limit = Math.pow(2, (8 * byteLength) - 1)
11659
11660 checkInt(this, value, offset, byteLength, limit - 1, -limit)
11661 }
11662
11663 var i = 0
11664 var mul = 1
11665 var sub = 0
11666 this[offset] = value & 0xFF
11667 while (++i < byteLength && (mul *= 0x100)) {
11668 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
11669 sub = 1
11670 }
11671 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
11672 }
11673
11674 return offset + byteLength
11675}
11676
11677Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
11678 value = +value
11679 offset = offset >>> 0
11680 if (!noAssert) {
11681 var limit = Math.pow(2, (8 * byteLength) - 1)
11682
11683 checkInt(this, value, offset, byteLength, limit - 1, -limit)
11684 }
11685
11686 var i = byteLength - 1
11687 var mul = 1
11688 var sub = 0
11689 this[offset + i] = value & 0xFF
11690 while (--i >= 0 && (mul *= 0x100)) {
11691 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
11692 sub = 1
11693 }
11694 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
11695 }
11696
11697 return offset + byteLength
11698}
11699
11700Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
11701 value = +value
11702 offset = offset >>> 0
11703 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
11704 if (value < 0) value = 0xff + value + 1
11705 this[offset] = (value & 0xff)
11706 return offset + 1
11707}
11708
11709Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
11710 value = +value
11711 offset = offset >>> 0
11712 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
11713 this[offset] = (value & 0xff)
11714 this[offset + 1] = (value >>> 8)
11715 return offset + 2
11716}
11717
11718Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
11719 value = +value
11720 offset = offset >>> 0
11721 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
11722 this[offset] = (value >>> 8)
11723 this[offset + 1] = (value & 0xff)
11724 return offset + 2
11725}
11726
11727Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
11728 value = +value
11729 offset = offset >>> 0
11730 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
11731 this[offset] = (value & 0xff)
11732 this[offset + 1] = (value >>> 8)
11733 this[offset + 2] = (value >>> 16)
11734 this[offset + 3] = (value >>> 24)
11735 return offset + 4
11736}
11737
11738Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
11739 value = +value
11740 offset = offset >>> 0
11741 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
11742 if (value < 0) value = 0xffffffff + value + 1
11743 this[offset] = (value >>> 24)
11744 this[offset + 1] = (value >>> 16)
11745 this[offset + 2] = (value >>> 8)
11746 this[offset + 3] = (value & 0xff)
11747 return offset + 4
11748}
11749
11750function checkIEEE754 (buf, value, offset, ext, max, min) {
11751 if (offset + ext > buf.length) throw new RangeError('Index out of range')
11752 if (offset < 0) throw new RangeError('Index out of range')
11753}
11754
11755function writeFloat (buf, value, offset, littleEndian, noAssert) {
11756 value = +value
11757 offset = offset >>> 0
11758 if (!noAssert) {
11759 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
11760 }
11761 ieee754.write(buf, value, offset, littleEndian, 23, 4)
11762 return offset + 4
11763}
11764
11765Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
11766 return writeFloat(this, value, offset, true, noAssert)
11767}
11768
11769Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
11770 return writeFloat(this, value, offset, false, noAssert)
11771}
11772
11773function writeDouble (buf, value, offset, littleEndian, noAssert) {
11774 value = +value
11775 offset = offset >>> 0
11776 if (!noAssert) {
11777 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
11778 }
11779 ieee754.write(buf, value, offset, littleEndian, 52, 8)
11780 return offset + 8
11781}
11782
11783Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
11784 return writeDouble(this, value, offset, true, noAssert)
11785}
11786
11787Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
11788 return writeDouble(this, value, offset, false, noAssert)
11789}
11790
11791// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
11792Buffer.prototype.copy = function copy (target, targetStart, start, end) {
11793 if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
11794 if (!start) start = 0
11795 if (!end && end !== 0) end = this.length
11796 if (targetStart >= target.length) targetStart = target.length
11797 if (!targetStart) targetStart = 0
11798 if (end > 0 && end < start) end = start
11799
11800 // Copy 0 bytes; we're done
11801 if (end === start) return 0
11802 if (target.length === 0 || this.length === 0) return 0
11803
11804 // Fatal error conditions
11805 if (targetStart < 0) {
11806 throw new RangeError('targetStart out of bounds')
11807 }
11808 if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
11809 if (end < 0) throw new RangeError('sourceEnd out of bounds')
11810
11811 // Are we oob?
11812 if (end > this.length) end = this.length
11813 if (target.length - targetStart < end - start) {
11814 end = target.length - targetStart + start
11815 }
11816
11817 var len = end - start
11818
11819 if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
11820 // Use built-in when available, missing from IE11
11821 this.copyWithin(targetStart, start, end)
11822 } else if (this === target && start < targetStart && targetStart < end) {
11823 // descending copy from end
11824 for (var i = len - 1; i >= 0; --i) {
11825 target[i + targetStart] = this[i + start]
11826 }
11827 } else {
11828 Uint8Array.prototype.set.call(
11829 target,
11830 this.subarray(start, end),
11831 targetStart
11832 )
11833 }
11834
11835 return len
11836}
11837
11838// Usage:
11839// buffer.fill(number[, offset[, end]])
11840// buffer.fill(buffer[, offset[, end]])
11841// buffer.fill(string[, offset[, end]][, encoding])
11842Buffer.prototype.fill = function fill (val, start, end, encoding) {
11843 // Handle string cases:
11844 if (typeof val === 'string') {
11845 if (typeof start === 'string') {
11846 encoding = start
11847 start = 0
11848 end = this.length
11849 } else if (typeof end === 'string') {
11850 encoding = end
11851 end = this.length
11852 }
11853 if (encoding !== undefined && typeof encoding !== 'string') {
11854 throw new TypeError('encoding must be a string')
11855 }
11856 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
11857 throw new TypeError('Unknown encoding: ' + encoding)
11858 }
11859 if (val.length === 1) {
11860 var code = val.charCodeAt(0)
11861 if ((encoding === 'utf8' && code < 128) ||
11862 encoding === 'latin1') {
11863 // Fast path: If `val` fits into a single byte, use that numeric value.
11864 val = code
11865 }
11866 }
11867 } else if (typeof val === 'number') {
11868 val = val & 255
11869 }
11870
11871 // Invalid ranges are not set to a default, so can range check early.
11872 if (start < 0 || this.length < start || this.length < end) {
11873 throw new RangeError('Out of range index')
11874 }
11875
11876 if (end <= start) {
11877 return this
11878 }
11879
11880 start = start >>> 0
11881 end = end === undefined ? this.length : end >>> 0
11882
11883 if (!val) val = 0
11884
11885 var i
11886 if (typeof val === 'number') {
11887 for (i = start; i < end; ++i) {
11888 this[i] = val
11889 }
11890 } else {
11891 var bytes = Buffer.isBuffer(val)
11892 ? val
11893 : Buffer.from(val, encoding)
11894 var len = bytes.length
11895 if (len === 0) {
11896 throw new TypeError('The value "' + val +
11897 '" is invalid for argument "value"')
11898 }
11899 for (i = 0; i < end - start; ++i) {
11900 this[i + start] = bytes[i % len]
11901 }
11902 }
11903
11904 return this
11905}
11906
11907// HELPER FUNCTIONS
11908// ================
11909
11910var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
11911
11912function base64clean (str) {
11913 // Node takes equal signs as end of the Base64 encoding
11914 str = str.split('=')[0]
11915 // Node strips out invalid characters like \n and \t from the string, base64-js does not
11916 str = str.trim().replace(INVALID_BASE64_RE, '')
11917 // Node converts strings with length < 2 to ''
11918 if (str.length < 2) return ''
11919 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
11920 while (str.length % 4 !== 0) {
11921 str = str + '='
11922 }
11923 return str
11924}
11925
11926function toHex (n) {
11927 if (n < 16) return '0' + n.toString(16)
11928 return n.toString(16)
11929}
11930
11931function utf8ToBytes (string, units) {
11932 units = units || Infinity
11933 var codePoint
11934 var length = string.length
11935 var leadSurrogate = null
11936 var bytes = []
11937
11938 for (var i = 0; i < length; ++i) {
11939 codePoint = string.charCodeAt(i)
11940
11941 // is surrogate component
11942 if (codePoint > 0xD7FF && codePoint < 0xE000) {
11943 // last char was a lead
11944 if (!leadSurrogate) {
11945 // no lead yet
11946 if (codePoint > 0xDBFF) {
11947 // unexpected trail
11948 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
11949 continue
11950 } else if (i + 1 === length) {
11951 // unpaired lead
11952 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
11953 continue
11954 }
11955
11956 // valid lead
11957 leadSurrogate = codePoint
11958
11959 continue
11960 }
11961
11962 // 2 leads in a row
11963 if (codePoint < 0xDC00) {
11964 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
11965 leadSurrogate = codePoint
11966 continue
11967 }
11968
11969 // valid surrogate pair
11970 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
11971 } else if (leadSurrogate) {
11972 // valid bmp char, but last char was a lead
11973 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
11974 }
11975
11976 leadSurrogate = null
11977
11978 // encode utf8
11979 if (codePoint < 0x80) {
11980 if ((units -= 1) < 0) break
11981 bytes.push(codePoint)
11982 } else if (codePoint < 0x800) {
11983 if ((units -= 2) < 0) break
11984 bytes.push(
11985 codePoint >> 0x6 | 0xC0,
11986 codePoint & 0x3F | 0x80
11987 )
11988 } else if (codePoint < 0x10000) {
11989 if ((units -= 3) < 0) break
11990 bytes.push(
11991 codePoint >> 0xC | 0xE0,
11992 codePoint >> 0x6 & 0x3F | 0x80,
11993 codePoint & 0x3F | 0x80
11994 )
11995 } else if (codePoint < 0x110000) {
11996 if ((units -= 4) < 0) break
11997 bytes.push(
11998 codePoint >> 0x12 | 0xF0,
11999 codePoint >> 0xC & 0x3F | 0x80,
12000 codePoint >> 0x6 & 0x3F | 0x80,
12001 codePoint & 0x3F | 0x80
12002 )
12003 } else {
12004 throw new Error('Invalid code point')
12005 }
12006 }
12007
12008 return bytes
12009}
12010
12011function asciiToBytes (str) {
12012 var byteArray = []
12013 for (var i = 0; i < str.length; ++i) {
12014 // Node's code seems to be doing this and not & 0x7F..
12015 byteArray.push(str.charCodeAt(i) & 0xFF)
12016 }
12017 return byteArray
12018}
12019
12020function utf16leToBytes (str, units) {
12021 var c, hi, lo
12022 var byteArray = []
12023 for (var i = 0; i < str.length; ++i) {
12024 if ((units -= 2) < 0) break
12025
12026 c = str.charCodeAt(i)
12027 hi = c >> 8
12028 lo = c % 256
12029 byteArray.push(lo)
12030 byteArray.push(hi)
12031 }
12032
12033 return byteArray
12034}
12035
12036function base64ToBytes (str) {
12037 return base64.toByteArray(base64clean(str))
12038}
12039
12040function blitBuffer (src, dst, offset, length) {
12041 for (var i = 0; i < length; ++i) {
12042 if ((i + offset >= dst.length) || (i >= src.length)) break
12043 dst[i + offset] = src[i]
12044 }
12045 return i
12046}
12047
12048// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
12049// the `instanceof` check but they should be treated as of that type.
12050// See: https://github.com/feross/buffer/issues/166
12051function isInstance (obj, type) {
12052 return obj instanceof type ||
12053 (obj != null && obj.constructor != null && obj.constructor.name != null &&
12054 obj.constructor.name === type.name)
12055}
12056function numberIsNaN (obj) {
12057 // For IE11 support
12058 return obj !== obj // eslint-disable-line no-self-compare
12059}
12060
12061},{"base64-js":16,"ieee754":118}],51:[function(require,module,exports){
12062var Buffer = require('safe-buffer').Buffer
12063var Transform = require('stream').Transform
12064var StringDecoder = require('string_decoder').StringDecoder
12065var inherits = require('inherits')
12066
12067function CipherBase (hashMode) {
12068 Transform.call(this)
12069 this.hashMode = typeof hashMode === 'string'
12070 if (this.hashMode) {
12071 this[hashMode] = this._finalOrDigest
12072 } else {
12073 this.final = this._finalOrDigest
12074 }
12075 if (this._final) {
12076 this.__final = this._final
12077 this._final = null
12078 }
12079 this._decoder = null
12080 this._encoding = null
12081}
12082inherits(CipherBase, Transform)
12083
12084CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
12085 if (typeof data === 'string') {
12086 data = Buffer.from(data, inputEnc)
12087 }
12088
12089 var outData = this._update(data)
12090 if (this.hashMode) return this
12091
12092 if (outputEnc) {
12093 outData = this._toString(outData, outputEnc)
12094 }
12095
12096 return outData
12097}
12098
12099CipherBase.prototype.setAutoPadding = function () {}
12100CipherBase.prototype.getAuthTag = function () {
12101 throw new Error('trying to get auth tag in unsupported state')
12102}
12103
12104CipherBase.prototype.setAuthTag = function () {
12105 throw new Error('trying to set auth tag in unsupported state')
12106}
12107
12108CipherBase.prototype.setAAD = function () {
12109 throw new Error('trying to set aad in unsupported state')
12110}
12111
12112CipherBase.prototype._transform = function (data, _, next) {
12113 var err
12114 try {
12115 if (this.hashMode) {
12116 this._update(data)
12117 } else {
12118 this.push(this._update(data))
12119 }
12120 } catch (e) {
12121 err = e
12122 } finally {
12123 next(err)
12124 }
12125}
12126CipherBase.prototype._flush = function (done) {
12127 var err
12128 try {
12129 this.push(this.__final())
12130 } catch (e) {
12131 err = e
12132 }
12133
12134 done(err)
12135}
12136CipherBase.prototype._finalOrDigest = function (outputEnc) {
12137 var outData = this.__final() || Buffer.alloc(0)
12138 if (outputEnc) {
12139 outData = this._toString(outData, outputEnc, true)
12140 }
12141 return outData
12142}
12143
12144CipherBase.prototype._toString = function (value, enc, fin) {
12145 if (!this._decoder) {
12146 this._decoder = new StringDecoder(enc)
12147 this._encoding = enc
12148 }
12149
12150 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
12151
12152 var out = this._decoder.write(value)
12153 if (fin) {
12154 out += this._decoder.end()
12155 }
12156
12157 return out
12158}
12159
12160module.exports = CipherBase
12161
12162},{"inherits":119,"safe-buffer":398,"stream":437,"string_decoder":438}],52:[function(require,module,exports){
12163(function (Buffer){
12164// Copyright Joyent, Inc. and other Node contributors.
12165//
12166// Permission is hereby granted, free of charge, to any person obtaining a
12167// copy of this software and associated documentation files (the
12168// "Software"), to deal in the Software without restriction, including
12169// without limitation the rights to use, copy, modify, merge, publish,
12170// distribute, sublicense, and/or sell copies of the Software, and to permit
12171// persons to whom the Software is furnished to do so, subject to the
12172// following conditions:
12173//
12174// The above copyright notice and this permission notice shall be included
12175// in all copies or substantial portions of the Software.
12176//
12177// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12178// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12179// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12180// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12181// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12182// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12183// USE OR OTHER DEALINGS IN THE SOFTWARE.
12184
12185// NOTE: These type checking functions intentionally don't use `instanceof`
12186// because it is fragile and can be easily faked with `Object.create()`.
12187
12188function isArray(arg) {
12189 if (Array.isArray) {
12190 return Array.isArray(arg);
12191 }
12192 return objectToString(arg) === '[object Array]';
12193}
12194exports.isArray = isArray;
12195
12196function isBoolean(arg) {
12197 return typeof arg === 'boolean';
12198}
12199exports.isBoolean = isBoolean;
12200
12201function isNull(arg) {
12202 return arg === null;
12203}
12204exports.isNull = isNull;
12205
12206function isNullOrUndefined(arg) {
12207 return arg == null;
12208}
12209exports.isNullOrUndefined = isNullOrUndefined;
12210
12211function isNumber(arg) {
12212 return typeof arg === 'number';
12213}
12214exports.isNumber = isNumber;
12215
12216function isString(arg) {
12217 return typeof arg === 'string';
12218}
12219exports.isString = isString;
12220
12221function isSymbol(arg) {
12222 return typeof arg === 'symbol';
12223}
12224exports.isSymbol = isSymbol;
12225
12226function isUndefined(arg) {
12227 return arg === void 0;
12228}
12229exports.isUndefined = isUndefined;
12230
12231function isRegExp(re) {
12232 return objectToString(re) === '[object RegExp]';
12233}
12234exports.isRegExp = isRegExp;
12235
12236function isObject(arg) {
12237 return typeof arg === 'object' && arg !== null;
12238}
12239exports.isObject = isObject;
12240
12241function isDate(d) {
12242 return objectToString(d) === '[object Date]';
12243}
12244exports.isDate = isDate;
12245
12246function isError(e) {
12247 return (objectToString(e) === '[object Error]' || e instanceof Error);
12248}
12249exports.isError = isError;
12250
12251function isFunction(arg) {
12252 return typeof arg === 'function';
12253}
12254exports.isFunction = isFunction;
12255
12256function isPrimitive(arg) {
12257 return arg === null ||
12258 typeof arg === 'boolean' ||
12259 typeof arg === 'number' ||
12260 typeof arg === 'string' ||
12261 typeof arg === 'symbol' || // ES6 symbol
12262 typeof arg === 'undefined';
12263}
12264exports.isPrimitive = isPrimitive;
12265
12266exports.isBuffer = Buffer.isBuffer;
12267
12268function objectToString(o) {
12269 return Object.prototype.toString.call(o);
12270}
12271
12272}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
12273},{"../../is-buffer/index.js":120}],53:[function(require,module,exports){
12274'use strict';
12275
12276var _buffer = require('buffer');
12277
12278var _create_buffer = require('./create_buffer');
12279
12280var _create_buffer2 = _interopRequireDefault(_create_buffer);
12281
12282var _define_crc = require('./define_crc');
12283
12284var _define_crc2 = _interopRequireDefault(_define_crc);
12285
12286function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12287
12288module.exports = (0, _define_crc2.default)('crc1', function (buf, previous) {
12289 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12290
12291 var crc = ~~previous;
12292 var accum = 0;
12293
12294 for (var index = 0; index < buf.length; index++) {
12295 var byte = buf[index];
12296 accum += byte;
12297 }
12298
12299 crc += accum % 256;
12300 return crc % 256;
12301});
12302},{"./create_buffer":64,"./define_crc":65,"buffer":50}],54:[function(require,module,exports){
12303'use strict';
12304
12305var _buffer = require('buffer');
12306
12307var _create_buffer = require('./create_buffer');
12308
12309var _create_buffer2 = _interopRequireDefault(_create_buffer);
12310
12311var _define_crc = require('./define_crc');
12312
12313var _define_crc2 = _interopRequireDefault(_define_crc);
12314
12315function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12316
12317// Generated by `./pycrc.py --algorithm=table-driven --model=crc-16 --generate=c`
12318var TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040];
12319
12320if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12321
12322module.exports = (0, _define_crc2.default)('crc-16', function (buf, previous) {
12323 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12324
12325 var crc = ~~previous;
12326
12327 for (var index = 0; index < buf.length; index++) {
12328 var byte = buf[index];
12329 crc = (TABLE[(crc ^ byte) & 0xff] ^ crc >> 8) & 0xffff;
12330 }
12331
12332 return crc;
12333});
12334},{"./create_buffer":64,"./define_crc":65,"buffer":50}],55:[function(require,module,exports){
12335'use strict';
12336
12337var _buffer = require('buffer');
12338
12339var _create_buffer = require('./create_buffer');
12340
12341var _create_buffer2 = _interopRequireDefault(_create_buffer);
12342
12343var _define_crc = require('./define_crc');
12344
12345var _define_crc2 = _interopRequireDefault(_define_crc);
12346
12347function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12348
12349// Generated by `./pycrc.py --algorithm=table-driven --model=ccitt --generate=c`
12350var TABLE = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0];
12351
12352if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12353
12354module.exports = (0, _define_crc2.default)('ccitt', function (buf, previous) {
12355 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12356
12357 var crc = typeof previous !== 'undefined' ? ~~previous : 0xffff;
12358
12359 for (var index = 0; index < buf.length; index++) {
12360 var byte = buf[index];
12361 crc = (TABLE[(crc >> 8 ^ byte) & 0xff] ^ crc << 8) & 0xffff;
12362 }
12363
12364 return crc;
12365});
12366},{"./create_buffer":64,"./define_crc":65,"buffer":50}],56:[function(require,module,exports){
12367'use strict';
12368
12369var _buffer = require('buffer');
12370
12371var _create_buffer = require('./create_buffer');
12372
12373var _create_buffer2 = _interopRequireDefault(_create_buffer);
12374
12375var _define_crc = require('./define_crc');
12376
12377var _define_crc2 = _interopRequireDefault(_define_crc);
12378
12379function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12380
12381// Generated by `./pycrc.py --algorithm=table-driven --model=kermit --generate=c`
12382var TABLE = [0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78];
12383
12384if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12385
12386module.exports = (0, _define_crc2.default)('kermit', function (buf, previous) {
12387 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12388
12389 var crc = typeof previous !== 'undefined' ? ~~previous : 0x0000;
12390
12391 for (var index = 0; index < buf.length; index++) {
12392 var byte = buf[index];
12393 crc = (TABLE[(crc ^ byte) & 0xff] ^ crc >> 8) & 0xffff;
12394 }
12395
12396 return crc;
12397});
12398},{"./create_buffer":64,"./define_crc":65,"buffer":50}],57:[function(require,module,exports){
12399'use strict';
12400
12401var _buffer = require('buffer');
12402
12403var _create_buffer = require('./create_buffer');
12404
12405var _create_buffer2 = _interopRequireDefault(_create_buffer);
12406
12407var _define_crc = require('./define_crc');
12408
12409var _define_crc2 = _interopRequireDefault(_define_crc);
12410
12411function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12412
12413// Generated by `./pycrc.py --algorithm=table-driven --model=crc-16-modbus --generate=c`
12414var TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040];
12415
12416if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12417
12418module.exports = (0, _define_crc2.default)('crc-16-modbus', function (buf, previous) {
12419 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12420
12421 var crc = typeof previous !== 'undefined' ? ~~previous : 0xffff;
12422
12423 for (var index = 0; index < buf.length; index++) {
12424 var byte = buf[index];
12425 crc = (TABLE[(crc ^ byte) & 0xff] ^ crc >> 8) & 0xffff;
12426 }
12427
12428 return crc;
12429});
12430},{"./create_buffer":64,"./define_crc":65,"buffer":50}],58:[function(require,module,exports){
12431'use strict';
12432
12433var _buffer = require('buffer');
12434
12435var _create_buffer = require('./create_buffer');
12436
12437var _create_buffer2 = _interopRequireDefault(_create_buffer);
12438
12439var _define_crc = require('./define_crc');
12440
12441var _define_crc2 = _interopRequireDefault(_define_crc);
12442
12443function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12444
12445module.exports = (0, _define_crc2.default)('xmodem', function (buf, previous) {
12446 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12447
12448 var crc = typeof previous !== 'undefined' ? ~~previous : 0x0;
12449
12450 for (var index = 0; index < buf.length; index++) {
12451 var byte = buf[index];
12452 var code = crc >>> 8 & 0xFF;
12453
12454 code ^= byte & 0xFF;
12455 code ^= code >>> 4;
12456 crc = crc << 8 & 0xFFFF;
12457 crc ^= code;
12458 code = code << 5 & 0xFFFF;
12459 crc ^= code;
12460 code = code << 7 & 0xFFFF;
12461 crc ^= code;
12462 }
12463
12464 return crc;
12465});
12466},{"./create_buffer":64,"./define_crc":65,"buffer":50}],59:[function(require,module,exports){
12467'use strict';
12468
12469var _buffer = require('buffer');
12470
12471var _create_buffer = require('./create_buffer');
12472
12473var _create_buffer2 = _interopRequireDefault(_create_buffer);
12474
12475var _define_crc = require('./define_crc');
12476
12477var _define_crc2 = _interopRequireDefault(_define_crc);
12478
12479function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12480
12481// Generated by `./pycrc.py --algorithm=table-drive --model=crc-24 --generate=c`
12482var TABLE = [0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec, 0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23, 0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868, 0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646, 0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4, 0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b, 0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60, 0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077, 0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5, 0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8, 0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a, 0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad, 0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f, 0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0, 0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302, 0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15, 0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e, 0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791, 0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145, 0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b, 0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20, 0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef, 0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d, 0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a, 0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498, 0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de, 0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c, 0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80, 0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042, 0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604, 0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6, 0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1, 0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673, 0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc, 0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7, 0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9, 0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538];
12483
12484if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12485
12486module.exports = (0, _define_crc2.default)('crc-24', function (buf, previous) {
12487 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12488
12489 var crc = typeof previous !== 'undefined' ? ~~previous : 0xb704ce;
12490
12491 for (var index = 0; index < buf.length; index++) {
12492 var byte = buf[index];
12493 crc = (TABLE[(crc >> 16 ^ byte) & 0xff] ^ crc << 8) & 0xffffff;
12494 }
12495
12496 return crc;
12497});
12498},{"./create_buffer":64,"./define_crc":65,"buffer":50}],60:[function(require,module,exports){
12499'use strict';
12500
12501var _buffer = require('buffer');
12502
12503var _create_buffer = require('./create_buffer');
12504
12505var _create_buffer2 = _interopRequireDefault(_create_buffer);
12506
12507var _define_crc = require('./define_crc');
12508
12509var _define_crc2 = _interopRequireDefault(_define_crc);
12510
12511function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12512
12513// Generated by `./pycrc.py --algorithm=table-driven --model=crc-32 --generate=c`
12514var TABLE = [0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d];
12515
12516if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12517
12518module.exports = (0, _define_crc2.default)('crc-32', function (buf, previous) {
12519 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12520
12521 var crc = previous === 0 ? 0 : ~~previous ^ -1;
12522
12523 for (var index = 0; index < buf.length; index++) {
12524 var byte = buf[index];
12525 crc = TABLE[(crc ^ byte) & 0xff] ^ crc >>> 8;
12526 }
12527
12528 return crc ^ -1;
12529});
12530},{"./create_buffer":64,"./define_crc":65,"buffer":50}],61:[function(require,module,exports){
12531'use strict';
12532
12533var _buffer = require('buffer');
12534
12535var _create_buffer = require('./create_buffer');
12536
12537var _create_buffer2 = _interopRequireDefault(_create_buffer);
12538
12539var _define_crc = require('./define_crc');
12540
12541var _define_crc2 = _interopRequireDefault(_define_crc);
12542
12543function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12544
12545// Generated by `./pycrc.py --algorithm=table-driven --model=crc-8 --generate=c`
12546var TABLE = [0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3];
12547
12548if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12549
12550module.exports = (0, _define_crc2.default)('crc-8', function (buf, previous) {
12551 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12552
12553 var crc = ~~previous;
12554
12555 for (var index = 0; index < buf.length; index++) {
12556 var byte = buf[index];
12557 crc = TABLE[(crc ^ byte) & 0xff] & 0xff;
12558 }
12559
12560 return crc;
12561});
12562},{"./create_buffer":64,"./define_crc":65,"buffer":50}],62:[function(require,module,exports){
12563'use strict';
12564
12565var _buffer = require('buffer');
12566
12567var _create_buffer = require('./create_buffer');
12568
12569var _create_buffer2 = _interopRequireDefault(_create_buffer);
12570
12571var _define_crc = require('./define_crc');
12572
12573var _define_crc2 = _interopRequireDefault(_define_crc);
12574
12575function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12576
12577// Generated by `./pycrc.py --algorithm=table-driven --model=dallas-1-wire --generate=c`
12578var TABLE = [0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35];
12579
12580if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12581
12582module.exports = (0, _define_crc2.default)('dallas-1-wire', function (buf, previous) {
12583 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12584
12585 var crc = ~~previous;
12586
12587 for (var index = 0; index < buf.length; index++) {
12588 var byte = buf[index];
12589 crc = TABLE[(crc ^ byte) & 0xff] & 0xff;
12590 }
12591
12592 return crc;
12593});
12594},{"./create_buffer":64,"./define_crc":65,"buffer":50}],63:[function(require,module,exports){
12595'use strict';
12596
12597var _buffer = require('buffer');
12598
12599var _create_buffer = require('./create_buffer');
12600
12601var _create_buffer2 = _interopRequireDefault(_create_buffer);
12602
12603var _define_crc = require('./define_crc');
12604
12605var _define_crc2 = _interopRequireDefault(_define_crc);
12606
12607function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12608
12609// Generated by `./pycrc.py --algorithm=table-driven --model=jam --generate=c`
12610var TABLE = [0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d];
12611
12612if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
12613
12614module.exports = (0, _define_crc2.default)('jam', function (buf) {
12615 var previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
12616
12617 if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf);
12618
12619 var crc = previous === 0 ? 0 : ~~previous;
12620
12621 for (var index = 0; index < buf.length; index++) {
12622 var byte = buf[index];
12623 crc = TABLE[(crc ^ byte) & 0xff] ^ crc >>> 8;
12624 }
12625
12626 return crc;
12627});
12628},{"./create_buffer":64,"./define_crc":65,"buffer":50}],64:[function(require,module,exports){
12629'use strict';
12630
12631Object.defineProperty(exports, "__esModule", {
12632 value: true
12633});
12634
12635var _buffer = require('buffer');
12636
12637var createBuffer = _buffer.Buffer.from && _buffer.Buffer.alloc && _buffer.Buffer.allocUnsafe && _buffer.Buffer.allocUnsafeSlow ? _buffer.Buffer.from
12638
12639// support for Node < 5.10
12640: function (val) {
12641 return new _buffer.Buffer(val);
12642};
12643
12644exports.default = createBuffer;
12645},{"buffer":50}],65:[function(require,module,exports){
12646"use strict";
12647
12648Object.defineProperty(exports, "__esModule", {
12649 value: true
12650});
12651
12652exports.default = function (model, calc) {
12653 var fn = function fn(buf, previous) {
12654 return calc(buf, previous) >>> 0;
12655 };
12656 fn.signed = calc;
12657 fn.unsigned = fn;
12658 fn.model = model;
12659
12660 return fn;
12661};
12662},{}],66:[function(require,module,exports){
12663'use strict';
12664
12665module.exports = {
12666 crc1: require('./crc1'),
12667 crc8: require('./crc8'),
12668 crc81wire: require('./crc8_1wire'),
12669 crc16: require('./crc16'),
12670 crc16ccitt: require('./crc16_ccitt'),
12671 crc16modbus: require('./crc16_modbus'),
12672 crc16xmodem: require('./crc16_xmodem'),
12673 crc16kermit: require('./crc16_kermit'),
12674 crc24: require('./crc24'),
12675 crc32: require('./crc32'),
12676 crcjam: require('./crcjam')
12677};
12678},{"./crc1":53,"./crc16":54,"./crc16_ccitt":55,"./crc16_kermit":56,"./crc16_modbus":57,"./crc16_xmodem":58,"./crc24":59,"./crc32":60,"./crc8":61,"./crc8_1wire":62,"./crcjam":63}],67:[function(require,module,exports){
12679(function (Buffer){
12680var elliptic = require('elliptic')
12681var BN = require('bn.js')
12682
12683module.exports = function createECDH (curve) {
12684 return new ECDH(curve)
12685}
12686
12687var aliases = {
12688 secp256k1: {
12689 name: 'secp256k1',
12690 byteLength: 32
12691 },
12692 secp224r1: {
12693 name: 'p224',
12694 byteLength: 28
12695 },
12696 prime256v1: {
12697 name: 'p256',
12698 byteLength: 32
12699 },
12700 prime192v1: {
12701 name: 'p192',
12702 byteLength: 24
12703 },
12704 ed25519: {
12705 name: 'ed25519',
12706 byteLength: 32
12707 },
12708 secp384r1: {
12709 name: 'p384',
12710 byteLength: 48
12711 },
12712 secp521r1: {
12713 name: 'p521',
12714 byteLength: 66
12715 }
12716}
12717
12718aliases.p224 = aliases.secp224r1
12719aliases.p256 = aliases.secp256r1 = aliases.prime256v1
12720aliases.p192 = aliases.secp192r1 = aliases.prime192v1
12721aliases.p384 = aliases.secp384r1
12722aliases.p521 = aliases.secp521r1
12723
12724function ECDH (curve) {
12725 this.curveType = aliases[curve]
12726 if (!this.curveType) {
12727 this.curveType = {
12728 name: curve
12729 }
12730 }
12731 this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap
12732 this.keys = void 0
12733}
12734
12735ECDH.prototype.generateKeys = function (enc, format) {
12736 this.keys = this.curve.genKeyPair()
12737 return this.getPublicKey(enc, format)
12738}
12739
12740ECDH.prototype.computeSecret = function (other, inenc, enc) {
12741 inenc = inenc || 'utf8'
12742 if (!Buffer.isBuffer(other)) {
12743 other = new Buffer(other, inenc)
12744 }
12745 var otherPub = this.curve.keyFromPublic(other).getPublic()
12746 var out = otherPub.mul(this.keys.getPrivate()).getX()
12747 return formatReturnValue(out, enc, this.curveType.byteLength)
12748}
12749
12750ECDH.prototype.getPublicKey = function (enc, format) {
12751 var key = this.keys.getPublic(format === 'compressed', true)
12752 if (format === 'hybrid') {
12753 if (key[key.length - 1] % 2) {
12754 key[0] = 7
12755 } else {
12756 key[0] = 6
12757 }
12758 }
12759 return formatReturnValue(key, enc)
12760}
12761
12762ECDH.prototype.getPrivateKey = function (enc) {
12763 return formatReturnValue(this.keys.getPrivate(), enc)
12764}
12765
12766ECDH.prototype.setPublicKey = function (pub, enc) {
12767 enc = enc || 'utf8'
12768 if (!Buffer.isBuffer(pub)) {
12769 pub = new Buffer(pub, enc)
12770 }
12771 this.keys._importPublic(pub)
12772 return this
12773}
12774
12775ECDH.prototype.setPrivateKey = function (priv, enc) {
12776 enc = enc || 'utf8'
12777 if (!Buffer.isBuffer(priv)) {
12778 priv = new Buffer(priv, enc)
12779 }
12780
12781 var _priv = new BN(priv)
12782 _priv = _priv.toString(16)
12783 this.keys = this.curve.genKeyPair()
12784 this.keys._importPrivate(_priv)
12785 return this
12786}
12787
12788function formatReturnValue (bn, enc, len) {
12789 if (!Array.isArray(bn)) {
12790 bn = bn.toArray()
12791 }
12792 var buf = new Buffer(bn)
12793 if (len && buf.length < len) {
12794 var zeros = new Buffer(len - buf.length)
12795 zeros.fill(0)
12796 buf = Buffer.concat([zeros, buf])
12797 }
12798 if (!enc) {
12799 return buf
12800 } else {
12801 return buf.toString(enc)
12802 }
12803}
12804
12805}).call(this,require("buffer").Buffer)
12806},{"bn.js":18,"buffer":50,"elliptic":86}],68:[function(require,module,exports){
12807'use strict'
12808var inherits = require('inherits')
12809var MD5 = require('md5.js')
12810var RIPEMD160 = require('ripemd160')
12811var sha = require('sha.js')
12812var Base = require('cipher-base')
12813
12814function Hash (hash) {
12815 Base.call(this, 'digest')
12816
12817 this._hash = hash
12818}
12819
12820inherits(Hash, Base)
12821
12822Hash.prototype._update = function (data) {
12823 this._hash.update(data)
12824}
12825
12826Hash.prototype._final = function () {
12827 return this._hash.digest()
12828}
12829
12830module.exports = function createHash (alg) {
12831 alg = alg.toLowerCase()
12832 if (alg === 'md5') return new MD5()
12833 if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()
12834
12835 return new Hash(sha(alg))
12836}
12837
12838},{"cipher-base":51,"inherits":119,"md5.js":358,"ripemd160":397,"sha.js":400}],69:[function(require,module,exports){
12839var MD5 = require('md5.js')
12840
12841module.exports = function (buffer) {
12842 return new MD5().update(buffer).digest()
12843}
12844
12845},{"md5.js":358}],70:[function(require,module,exports){
12846'use strict'
12847var inherits = require('inherits')
12848var Legacy = require('./legacy')
12849var Base = require('cipher-base')
12850var Buffer = require('safe-buffer').Buffer
12851var md5 = require('create-hash/md5')
12852var RIPEMD160 = require('ripemd160')
12853
12854var sha = require('sha.js')
12855
12856var ZEROS = Buffer.alloc(128)
12857
12858function Hmac (alg, key) {
12859 Base.call(this, 'digest')
12860 if (typeof key === 'string') {
12861 key = Buffer.from(key)
12862 }
12863
12864 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
12865
12866 this._alg = alg
12867 this._key = key
12868 if (key.length > blocksize) {
12869 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
12870 key = hash.update(key).digest()
12871 } else if (key.length < blocksize) {
12872 key = Buffer.concat([key, ZEROS], blocksize)
12873 }
12874
12875 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
12876 var opad = this._opad = Buffer.allocUnsafe(blocksize)
12877
12878 for (var i = 0; i < blocksize; i++) {
12879 ipad[i] = key[i] ^ 0x36
12880 opad[i] = key[i] ^ 0x5C
12881 }
12882 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
12883 this._hash.update(ipad)
12884}
12885
12886inherits(Hmac, Base)
12887
12888Hmac.prototype._update = function (data) {
12889 this._hash.update(data)
12890}
12891
12892Hmac.prototype._final = function () {
12893 var h = this._hash.digest()
12894 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
12895 return hash.update(this._opad).update(h).digest()
12896}
12897
12898module.exports = function createHmac (alg, key) {
12899 alg = alg.toLowerCase()
12900 if (alg === 'rmd160' || alg === 'ripemd160') {
12901 return new Hmac('rmd160', key)
12902 }
12903 if (alg === 'md5') {
12904 return new Legacy(md5, key)
12905 }
12906 return new Hmac(alg, key)
12907}
12908
12909},{"./legacy":71,"cipher-base":51,"create-hash/md5":69,"inherits":119,"ripemd160":397,"safe-buffer":398,"sha.js":400}],71:[function(require,module,exports){
12910'use strict'
12911var inherits = require('inherits')
12912var Buffer = require('safe-buffer').Buffer
12913
12914var Base = require('cipher-base')
12915
12916var ZEROS = Buffer.alloc(128)
12917var blocksize = 64
12918
12919function Hmac (alg, key) {
12920 Base.call(this, 'digest')
12921 if (typeof key === 'string') {
12922 key = Buffer.from(key)
12923 }
12924
12925 this._alg = alg
12926 this._key = key
12927
12928 if (key.length > blocksize) {
12929 key = alg(key)
12930 } else if (key.length < blocksize) {
12931 key = Buffer.concat([key, ZEROS], blocksize)
12932 }
12933
12934 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
12935 var opad = this._opad = Buffer.allocUnsafe(blocksize)
12936
12937 for (var i = 0; i < blocksize; i++) {
12938 ipad[i] = key[i] ^ 0x36
12939 opad[i] = key[i] ^ 0x5C
12940 }
12941
12942 this._hash = [ipad]
12943}
12944
12945inherits(Hmac, Base)
12946
12947Hmac.prototype._update = function (data) {
12948 this._hash.push(data)
12949}
12950
12951Hmac.prototype._final = function () {
12952 var h = this._alg(Buffer.concat(this._hash))
12953 return this._alg(Buffer.concat([this._opad, h]))
12954}
12955module.exports = Hmac
12956
12957},{"cipher-base":51,"inherits":119,"safe-buffer":398}],72:[function(require,module,exports){
12958'use strict'
12959
12960exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
12961exports.createHash = exports.Hash = require('create-hash')
12962exports.createHmac = exports.Hmac = require('create-hmac')
12963
12964var algos = require('browserify-sign/algos')
12965var algoKeys = Object.keys(algos)
12966var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)
12967exports.getHashes = function () {
12968 return hashes
12969}
12970
12971var p = require('pbkdf2')
12972exports.pbkdf2 = p.pbkdf2
12973exports.pbkdf2Sync = p.pbkdf2Sync
12974
12975var aes = require('browserify-cipher')
12976
12977exports.Cipher = aes.Cipher
12978exports.createCipher = aes.createCipher
12979exports.Cipheriv = aes.Cipheriv
12980exports.createCipheriv = aes.createCipheriv
12981exports.Decipher = aes.Decipher
12982exports.createDecipher = aes.createDecipher
12983exports.Decipheriv = aes.Decipheriv
12984exports.createDecipheriv = aes.createDecipheriv
12985exports.getCiphers = aes.getCiphers
12986exports.listCiphers = aes.listCiphers
12987
12988var dh = require('diffie-hellman')
12989
12990exports.DiffieHellmanGroup = dh.DiffieHellmanGroup
12991exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup
12992exports.getDiffieHellman = dh.getDiffieHellman
12993exports.createDiffieHellman = dh.createDiffieHellman
12994exports.DiffieHellman = dh.DiffieHellman
12995
12996var sign = require('browserify-sign')
12997
12998exports.createSign = sign.createSign
12999exports.Sign = sign.Sign
13000exports.createVerify = sign.createVerify
13001exports.Verify = sign.Verify
13002
13003exports.createECDH = require('create-ecdh')
13004
13005var publicEncrypt = require('public-encrypt')
13006
13007exports.publicEncrypt = publicEncrypt.publicEncrypt
13008exports.privateEncrypt = publicEncrypt.privateEncrypt
13009exports.publicDecrypt = publicEncrypt.publicDecrypt
13010exports.privateDecrypt = publicEncrypt.privateDecrypt
13011
13012// the least I can do is make error messages for the rest of the node.js/crypto api.
13013// ;[
13014// 'createCredentials'
13015// ].forEach(function (name) {
13016// exports[name] = function () {
13017// throw new Error([
13018// 'sorry, ' + name + ' is not implemented yet',
13019// 'we accept pull requests',
13020// 'https://github.com/crypto-browserify/crypto-browserify'
13021// ].join('\n'))
13022// }
13023// })
13024
13025var rf = require('randomfill')
13026
13027exports.randomFill = rf.randomFill
13028exports.randomFillSync = rf.randomFillSync
13029
13030exports.createCredentials = function () {
13031 throw new Error([
13032 'sorry, createCredentials is not implemented yet',
13033 'we accept pull requests',
13034 'https://github.com/crypto-browserify/crypto-browserify'
13035 ].join('\n'))
13036}
13037
13038exports.constants = {
13039 'DH_CHECK_P_NOT_SAFE_PRIME': 2,
13040 'DH_CHECK_P_NOT_PRIME': 1,
13041 'DH_UNABLE_TO_CHECK_GENERATOR': 4,
13042 'DH_NOT_SUITABLE_GENERATOR': 8,
13043 'NPN_ENABLED': 1,
13044 'ALPN_ENABLED': 1,
13045 'RSA_PKCS1_PADDING': 1,
13046 'RSA_SSLV23_PADDING': 2,
13047 'RSA_NO_PADDING': 3,
13048 'RSA_PKCS1_OAEP_PADDING': 4,
13049 'RSA_X931_PADDING': 5,
13050 'RSA_PKCS1_PSS_PADDING': 6,
13051 'POINT_CONVERSION_COMPRESSED': 2,
13052 'POINT_CONVERSION_UNCOMPRESSED': 4,
13053 'POINT_CONVERSION_HYBRID': 6
13054}
13055
13056},{"browserify-cipher":38,"browserify-sign":45,"browserify-sign/algos":42,"create-ecdh":67,"create-hash":68,"create-hmac":70,"diffie-hellman":80,"pbkdf2":368,"public-encrypt":375,"randombytes":381,"randomfill":382}],73:[function(require,module,exports){
13057(function (Buffer){
13058var Cursor = function(buffer)
13059{
13060 if (!(this instanceof Cursor))
13061 {
13062 return new Cursor(buffer);
13063 }
13064
13065 if (!(buffer instanceof Buffer))
13066 {
13067 buffer = new Buffer(buffer);
13068 }
13069
13070 this._setBuffer(buffer);
13071 this.rewind();
13072};
13073
13074Cursor.prototype._setBuffer = function(buffer)
13075{
13076 this._buffer = buffer;
13077 this.length = buffer.length;
13078};
13079
13080Cursor.prototype.buffer = function()
13081{
13082 return this._buffer;
13083};
13084
13085Cursor.prototype.tap = function(cb)
13086{
13087 cb(this);
13088 return this;
13089};
13090
13091Cursor.prototype.clone = function(newIndex)
13092{
13093 var c = new this.constructor(this.buffer());
13094 c.seek(arguments.length === 0 ? this.tell() : newIndex);
13095
13096 return c;
13097};
13098
13099Cursor.prototype.tell = function()
13100{
13101 return this._index;
13102};
13103
13104Cursor.prototype.seek = function(op, index)
13105{
13106 if (arguments.length == 1)
13107 {
13108 index = op;
13109 op = '=';
13110 }
13111
13112 if (op == '+')
13113 {
13114 this._index += index;
13115 }
13116 else if (op == '-')
13117 {
13118 this._index -= index;
13119 }
13120 else
13121 {
13122 this._index = index;
13123 }
13124
13125 return this;
13126};
13127
13128Cursor.prototype.rewind = function()
13129{
13130 return this.seek(0);
13131};
13132
13133Cursor.prototype.eof = function()
13134{
13135 return this.tell() == this.buffer().length;
13136};
13137
13138Cursor.prototype.write = function(string, length, encoding)
13139{
13140 return this.seek('+', this.buffer().write(string, this.tell(), length, encoding));
13141};
13142
13143Cursor.prototype.fill = function(value, length)
13144{
13145 if (arguments.length == 1)
13146 {
13147 length = this.buffer().length - this.tell();
13148 }
13149
13150 this.buffer().fill(value, this.tell(), this.tell() + length);
13151 this.seek('+', length);
13152
13153 return this;
13154};
13155
13156Cursor.prototype.slice = function(length)
13157{
13158 if (arguments.length === 0)
13159 {
13160 length = this.length - this.tell();
13161 }
13162
13163 var c = new this.constructor(this.buffer().slice(this.tell(), this.tell() + length));
13164 this.seek('+', length);
13165
13166 return c;
13167};
13168
13169Cursor.prototype.copyFrom = function(source)
13170{
13171 var buf = source instanceof Buffer ? source: source.buffer();
13172 buf.copy(this.buffer(), this.tell(), 0, buf.length);
13173 this.seek('+', buf.length);
13174
13175 return this;
13176};
13177
13178Cursor.prototype.concat = function(list)
13179{
13180 for (var i in list)
13181 {
13182 if (list[i] instanceof Cursor)
13183 {
13184 list[i] = list[i].buffer();
13185 }
13186 }
13187
13188 list.unshift(this.buffer());
13189
13190 var b = Buffer.concat(list);
13191 this._setBuffer(b);
13192
13193 return this;
13194};
13195
13196Cursor.prototype.toString = function(encoding, length)
13197{
13198 if (arguments.length === 0)
13199 {
13200 encoding = 'utf8';
13201 length = this.buffer().length - this.tell();
13202 }
13203 else if (arguments.length === 1)
13204 {
13205 length = this.buffer().length - this.tell();
13206 }
13207
13208 var val = this.buffer().toString(encoding, this.tell(), this.tell() + length);
13209 this.seek('+', length);
13210
13211 return val;
13212};
13213
13214[
13215 [1, ['readInt8', 'readUInt8']],
13216 [2, ['readInt16BE', 'readInt16LE', 'readUInt16BE', 'readUInt16LE']],
13217 [4, ['readInt32BE', 'readInt32LE', 'readUInt32BE', 'readUInt32LE', 'readFloatBE', 'readFloatLE']],
13218 [8, ['readDoubleBE', 'readDoubleLE']]
13219].forEach(function(arr)
13220{
13221 arr[1].forEach(function(method)
13222 {
13223 Cursor.prototype[method] = function()
13224 {
13225 var val = this.buffer()[method](this.tell());
13226 this.seek('+', arr[0]);
13227
13228 return val;
13229 };
13230 });
13231});
13232
13233[
13234 [1, ['writeInt8', 'writeUInt8']],
13235 [2, ['writeInt16BE', 'writeInt16LE', 'writeUInt16BE', 'writeUInt16LE']],
13236 [4, ['writeInt32BE', 'writeInt32LE', 'writeUInt32BE', 'writeUInt32LE', 'writeFloatBE', 'writeFloatLE']],
13237 [8, ['writeDoubleBE', 'writeDoubleLE']]
13238].forEach(function(arr)
13239{
13240 arr[1].forEach(function(method)
13241 {
13242 Cursor.prototype[method] = function(val)
13243 {
13244 val = this.buffer()[method](val, this.tell());
13245 this.seek('+', arr[0]);
13246
13247 return this;
13248 };
13249 });
13250});
13251
13252//basic extend functionality to facilitate
13253//writing your own cursor while still providing
13254//access to low level r/w functionality
13255Cursor.extend = function(C, proto)
13256{
13257 var parent = this;
13258
13259 if (arguments.length === 1)
13260 {
13261 proto = C;
13262 C = null;
13263 }
13264
13265 proto = proto || {};
13266
13267 C = C || function ctor(buffer)
13268 {
13269 if (!(this instanceof C))
13270 {
13271 return new C(buffer);
13272 }
13273
13274 parent.call(this, buffer);
13275 };
13276
13277 require('util').inherits(C, parent);
13278
13279 C.extend = parent.extend;
13280 C.define = parent.define;
13281
13282 for (var i in proto)
13283 {
13284 C.define(i, proto[i]);
13285 }
13286
13287 return C;
13288};
13289
13290Cursor.define = function(name, fn)
13291{
13292 var proto = this.prototype[name];
13293
13294 this.prototype[name] = proto && function()
13295 {
13296 this.__super = proto;
13297 return fn.apply(this, arguments);
13298 } || fn;
13299};
13300
13301module.exports = Cursor;
13302
13303}).call(this,require("buffer").Buffer)
13304},{"buffer":50,"util":443}],74:[function(require,module,exports){
13305'use strict';
13306
13307exports.utils = require('./des/utils');
13308exports.Cipher = require('./des/cipher');
13309exports.DES = require('./des/des');
13310exports.CBC = require('./des/cbc');
13311exports.EDE = require('./des/ede');
13312
13313},{"./des/cbc":75,"./des/cipher":76,"./des/des":77,"./des/ede":78,"./des/utils":79}],75:[function(require,module,exports){
13314'use strict';
13315
13316var assert = require('minimalistic-assert');
13317var inherits = require('inherits');
13318
13319var proto = {};
13320
13321function CBCState(iv) {
13322 assert.equal(iv.length, 8, 'Invalid IV length');
13323
13324 this.iv = new Array(8);
13325 for (var i = 0; i < this.iv.length; i++)
13326 this.iv[i] = iv[i];
13327}
13328
13329function instantiate(Base) {
13330 function CBC(options) {
13331 Base.call(this, options);
13332 this._cbcInit();
13333 }
13334 inherits(CBC, Base);
13335
13336 var keys = Object.keys(proto);
13337 for (var i = 0; i < keys.length; i++) {
13338 var key = keys[i];
13339 CBC.prototype[key] = proto[key];
13340 }
13341
13342 CBC.create = function create(options) {
13343 return new CBC(options);
13344 };
13345
13346 return CBC;
13347}
13348
13349exports.instantiate = instantiate;
13350
13351proto._cbcInit = function _cbcInit() {
13352 var state = new CBCState(this.options.iv);
13353 this._cbcState = state;
13354};
13355
13356proto._update = function _update(inp, inOff, out, outOff) {
13357 var state = this._cbcState;
13358 var superProto = this.constructor.super_.prototype;
13359
13360 var iv = state.iv;
13361 if (this.type === 'encrypt') {
13362 for (var i = 0; i < this.blockSize; i++)
13363 iv[i] ^= inp[inOff + i];
13364
13365 superProto._update.call(this, iv, 0, out, outOff);
13366
13367 for (var i = 0; i < this.blockSize; i++)
13368 iv[i] = out[outOff + i];
13369 } else {
13370 superProto._update.call(this, inp, inOff, out, outOff);
13371
13372 for (var i = 0; i < this.blockSize; i++)
13373 out[outOff + i] ^= iv[i];
13374
13375 for (var i = 0; i < this.blockSize; i++)
13376 iv[i] = inp[inOff + i];
13377 }
13378};
13379
13380},{"inherits":119,"minimalistic-assert":360}],76:[function(require,module,exports){
13381'use strict';
13382
13383var assert = require('minimalistic-assert');
13384
13385function Cipher(options) {
13386 this.options = options;
13387
13388 this.type = this.options.type;
13389 this.blockSize = 8;
13390 this._init();
13391
13392 this.buffer = new Array(this.blockSize);
13393 this.bufferOff = 0;
13394}
13395module.exports = Cipher;
13396
13397Cipher.prototype._init = function _init() {
13398 // Might be overrided
13399};
13400
13401Cipher.prototype.update = function update(data) {
13402 if (data.length === 0)
13403 return [];
13404
13405 if (this.type === 'decrypt')
13406 return this._updateDecrypt(data);
13407 else
13408 return this._updateEncrypt(data);
13409};
13410
13411Cipher.prototype._buffer = function _buffer(data, off) {
13412 // Append data to buffer
13413 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
13414 for (var i = 0; i < min; i++)
13415 this.buffer[this.bufferOff + i] = data[off + i];
13416 this.bufferOff += min;
13417
13418 // Shift next
13419 return min;
13420};
13421
13422Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
13423 this._update(this.buffer, 0, out, off);
13424 this.bufferOff = 0;
13425 return this.blockSize;
13426};
13427
13428Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
13429 var inputOff = 0;
13430 var outputOff = 0;
13431
13432 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
13433 var out = new Array(count * this.blockSize);
13434
13435 if (this.bufferOff !== 0) {
13436 inputOff += this._buffer(data, inputOff);
13437
13438 if (this.bufferOff === this.buffer.length)
13439 outputOff += this._flushBuffer(out, outputOff);
13440 }
13441
13442 // Write blocks
13443 var max = data.length - ((data.length - inputOff) % this.blockSize);
13444 for (; inputOff < max; inputOff += this.blockSize) {
13445 this._update(data, inputOff, out, outputOff);
13446 outputOff += this.blockSize;
13447 }
13448
13449 // Queue rest
13450 for (; inputOff < data.length; inputOff++, this.bufferOff++)
13451 this.buffer[this.bufferOff] = data[inputOff];
13452
13453 return out;
13454};
13455
13456Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
13457 var inputOff = 0;
13458 var outputOff = 0;
13459
13460 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
13461 var out = new Array(count * this.blockSize);
13462
13463 // TODO(indutny): optimize it, this is far from optimal
13464 for (; count > 0; count--) {
13465 inputOff += this._buffer(data, inputOff);
13466 outputOff += this._flushBuffer(out, outputOff);
13467 }
13468
13469 // Buffer rest of the input
13470 inputOff += this._buffer(data, inputOff);
13471
13472 return out;
13473};
13474
13475Cipher.prototype.final = function final(buffer) {
13476 var first;
13477 if (buffer)
13478 first = this.update(buffer);
13479
13480 var last;
13481 if (this.type === 'encrypt')
13482 last = this._finalEncrypt();
13483 else
13484 last = this._finalDecrypt();
13485
13486 if (first)
13487 return first.concat(last);
13488 else
13489 return last;
13490};
13491
13492Cipher.prototype._pad = function _pad(buffer, off) {
13493 if (off === 0)
13494 return false;
13495
13496 while (off < buffer.length)
13497 buffer[off++] = 0;
13498
13499 return true;
13500};
13501
13502Cipher.prototype._finalEncrypt = function _finalEncrypt() {
13503 if (!this._pad(this.buffer, this.bufferOff))
13504 return [];
13505
13506 var out = new Array(this.blockSize);
13507 this._update(this.buffer, 0, out, 0);
13508 return out;
13509};
13510
13511Cipher.prototype._unpad = function _unpad(buffer) {
13512 return buffer;
13513};
13514
13515Cipher.prototype._finalDecrypt = function _finalDecrypt() {
13516 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
13517 var out = new Array(this.blockSize);
13518 this._flushBuffer(out, 0);
13519
13520 return this._unpad(out);
13521};
13522
13523},{"minimalistic-assert":360}],77:[function(require,module,exports){
13524'use strict';
13525
13526var assert = require('minimalistic-assert');
13527var inherits = require('inherits');
13528
13529var des = require('../des');
13530var utils = des.utils;
13531var Cipher = des.Cipher;
13532
13533function DESState() {
13534 this.tmp = new Array(2);
13535 this.keys = null;
13536}
13537
13538function DES(options) {
13539 Cipher.call(this, options);
13540
13541 var state = new DESState();
13542 this._desState = state;
13543
13544 this.deriveKeys(state, options.key);
13545}
13546inherits(DES, Cipher);
13547module.exports = DES;
13548
13549DES.create = function create(options) {
13550 return new DES(options);
13551};
13552
13553var shiftTable = [
13554 1, 1, 2, 2, 2, 2, 2, 2,
13555 1, 2, 2, 2, 2, 2, 2, 1
13556];
13557
13558DES.prototype.deriveKeys = function deriveKeys(state, key) {
13559 state.keys = new Array(16 * 2);
13560
13561 assert.equal(key.length, this.blockSize, 'Invalid key length');
13562
13563 var kL = utils.readUInt32BE(key, 0);
13564 var kR = utils.readUInt32BE(key, 4);
13565
13566 utils.pc1(kL, kR, state.tmp, 0);
13567 kL = state.tmp[0];
13568 kR = state.tmp[1];
13569 for (var i = 0; i < state.keys.length; i += 2) {
13570 var shift = shiftTable[i >>> 1];
13571 kL = utils.r28shl(kL, shift);
13572 kR = utils.r28shl(kR, shift);
13573 utils.pc2(kL, kR, state.keys, i);
13574 }
13575};
13576
13577DES.prototype._update = function _update(inp, inOff, out, outOff) {
13578 var state = this._desState;
13579
13580 var l = utils.readUInt32BE(inp, inOff);
13581 var r = utils.readUInt32BE(inp, inOff + 4);
13582
13583 // Initial Permutation
13584 utils.ip(l, r, state.tmp, 0);
13585 l = state.tmp[0];
13586 r = state.tmp[1];
13587
13588 if (this.type === 'encrypt')
13589 this._encrypt(state, l, r, state.tmp, 0);
13590 else
13591 this._decrypt(state, l, r, state.tmp, 0);
13592
13593 l = state.tmp[0];
13594 r = state.tmp[1];
13595
13596 utils.writeUInt32BE(out, l, outOff);
13597 utils.writeUInt32BE(out, r, outOff + 4);
13598};
13599
13600DES.prototype._pad = function _pad(buffer, off) {
13601 var value = buffer.length - off;
13602 for (var i = off; i < buffer.length; i++)
13603 buffer[i] = value;
13604
13605 return true;
13606};
13607
13608DES.prototype._unpad = function _unpad(buffer) {
13609 var pad = buffer[buffer.length - 1];
13610 for (var i = buffer.length - pad; i < buffer.length; i++)
13611 assert.equal(buffer[i], pad);
13612
13613 return buffer.slice(0, buffer.length - pad);
13614};
13615
13616DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
13617 var l = lStart;
13618 var r = rStart;
13619
13620 // Apply f() x16 times
13621 for (var i = 0; i < state.keys.length; i += 2) {
13622 var keyL = state.keys[i];
13623 var keyR = state.keys[i + 1];
13624
13625 // f(r, k)
13626 utils.expand(r, state.tmp, 0);
13627
13628 keyL ^= state.tmp[0];
13629 keyR ^= state.tmp[1];
13630 var s = utils.substitute(keyL, keyR);
13631 var f = utils.permute(s);
13632
13633 var t = r;
13634 r = (l ^ f) >>> 0;
13635 l = t;
13636 }
13637
13638 // Reverse Initial Permutation
13639 utils.rip(r, l, out, off);
13640};
13641
13642DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
13643 var l = rStart;
13644 var r = lStart;
13645
13646 // Apply f() x16 times
13647 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
13648 var keyL = state.keys[i];
13649 var keyR = state.keys[i + 1];
13650
13651 // f(r, k)
13652 utils.expand(l, state.tmp, 0);
13653
13654 keyL ^= state.tmp[0];
13655 keyR ^= state.tmp[1];
13656 var s = utils.substitute(keyL, keyR);
13657 var f = utils.permute(s);
13658
13659 var t = l;
13660 l = (r ^ f) >>> 0;
13661 r = t;
13662 }
13663
13664 // Reverse Initial Permutation
13665 utils.rip(l, r, out, off);
13666};
13667
13668},{"../des":74,"inherits":119,"minimalistic-assert":360}],78:[function(require,module,exports){
13669'use strict';
13670
13671var assert = require('minimalistic-assert');
13672var inherits = require('inherits');
13673
13674var des = require('../des');
13675var Cipher = des.Cipher;
13676var DES = des.DES;
13677
13678function EDEState(type, key) {
13679 assert.equal(key.length, 24, 'Invalid key length');
13680
13681 var k1 = key.slice(0, 8);
13682 var k2 = key.slice(8, 16);
13683 var k3 = key.slice(16, 24);
13684
13685 if (type === 'encrypt') {
13686 this.ciphers = [
13687 DES.create({ type: 'encrypt', key: k1 }),
13688 DES.create({ type: 'decrypt', key: k2 }),
13689 DES.create({ type: 'encrypt', key: k3 })
13690 ];
13691 } else {
13692 this.ciphers = [
13693 DES.create({ type: 'decrypt', key: k3 }),
13694 DES.create({ type: 'encrypt', key: k2 }),
13695 DES.create({ type: 'decrypt', key: k1 })
13696 ];
13697 }
13698}
13699
13700function EDE(options) {
13701 Cipher.call(this, options);
13702
13703 var state = new EDEState(this.type, this.options.key);
13704 this._edeState = state;
13705}
13706inherits(EDE, Cipher);
13707
13708module.exports = EDE;
13709
13710EDE.create = function create(options) {
13711 return new EDE(options);
13712};
13713
13714EDE.prototype._update = function _update(inp, inOff, out, outOff) {
13715 var state = this._edeState;
13716
13717 state.ciphers[0]._update(inp, inOff, out, outOff);
13718 state.ciphers[1]._update(out, outOff, out, outOff);
13719 state.ciphers[2]._update(out, outOff, out, outOff);
13720};
13721
13722EDE.prototype._pad = DES.prototype._pad;
13723EDE.prototype._unpad = DES.prototype._unpad;
13724
13725},{"../des":74,"inherits":119,"minimalistic-assert":360}],79:[function(require,module,exports){
13726'use strict';
13727
13728exports.readUInt32BE = function readUInt32BE(bytes, off) {
13729 var res = (bytes[0 + off] << 24) |
13730 (bytes[1 + off] << 16) |
13731 (bytes[2 + off] << 8) |
13732 bytes[3 + off];
13733 return res >>> 0;
13734};
13735
13736exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
13737 bytes[0 + off] = value >>> 24;
13738 bytes[1 + off] = (value >>> 16) & 0xff;
13739 bytes[2 + off] = (value >>> 8) & 0xff;
13740 bytes[3 + off] = value & 0xff;
13741};
13742
13743exports.ip = function ip(inL, inR, out, off) {
13744 var outL = 0;
13745 var outR = 0;
13746
13747 for (var i = 6; i >= 0; i -= 2) {
13748 for (var j = 0; j <= 24; j += 8) {
13749 outL <<= 1;
13750 outL |= (inR >>> (j + i)) & 1;
13751 }
13752 for (var j = 0; j <= 24; j += 8) {
13753 outL <<= 1;
13754 outL |= (inL >>> (j + i)) & 1;
13755 }
13756 }
13757
13758 for (var i = 6; i >= 0; i -= 2) {
13759 for (var j = 1; j <= 25; j += 8) {
13760 outR <<= 1;
13761 outR |= (inR >>> (j + i)) & 1;
13762 }
13763 for (var j = 1; j <= 25; j += 8) {
13764 outR <<= 1;
13765 outR |= (inL >>> (j + i)) & 1;
13766 }
13767 }
13768
13769 out[off + 0] = outL >>> 0;
13770 out[off + 1] = outR >>> 0;
13771};
13772
13773exports.rip = function rip(inL, inR, out, off) {
13774 var outL = 0;
13775 var outR = 0;
13776
13777 for (var i = 0; i < 4; i++) {
13778 for (var j = 24; j >= 0; j -= 8) {
13779 outL <<= 1;
13780 outL |= (inR >>> (j + i)) & 1;
13781 outL <<= 1;
13782 outL |= (inL >>> (j + i)) & 1;
13783 }
13784 }
13785 for (var i = 4; i < 8; i++) {
13786 for (var j = 24; j >= 0; j -= 8) {
13787 outR <<= 1;
13788 outR |= (inR >>> (j + i)) & 1;
13789 outR <<= 1;
13790 outR |= (inL >>> (j + i)) & 1;
13791 }
13792 }
13793
13794 out[off + 0] = outL >>> 0;
13795 out[off + 1] = outR >>> 0;
13796};
13797
13798exports.pc1 = function pc1(inL, inR, out, off) {
13799 var outL = 0;
13800 var outR = 0;
13801
13802 // 7, 15, 23, 31, 39, 47, 55, 63
13803 // 6, 14, 22, 30, 39, 47, 55, 63
13804 // 5, 13, 21, 29, 39, 47, 55, 63
13805 // 4, 12, 20, 28
13806 for (var i = 7; i >= 5; i--) {
13807 for (var j = 0; j <= 24; j += 8) {
13808 outL <<= 1;
13809 outL |= (inR >> (j + i)) & 1;
13810 }
13811 for (var j = 0; j <= 24; j += 8) {
13812 outL <<= 1;
13813 outL |= (inL >> (j + i)) & 1;
13814 }
13815 }
13816 for (var j = 0; j <= 24; j += 8) {
13817 outL <<= 1;
13818 outL |= (inR >> (j + i)) & 1;
13819 }
13820
13821 // 1, 9, 17, 25, 33, 41, 49, 57
13822 // 2, 10, 18, 26, 34, 42, 50, 58
13823 // 3, 11, 19, 27, 35, 43, 51, 59
13824 // 36, 44, 52, 60
13825 for (var i = 1; i <= 3; i++) {
13826 for (var j = 0; j <= 24; j += 8) {
13827 outR <<= 1;
13828 outR |= (inR >> (j + i)) & 1;
13829 }
13830 for (var j = 0; j <= 24; j += 8) {
13831 outR <<= 1;
13832 outR |= (inL >> (j + i)) & 1;
13833 }
13834 }
13835 for (var j = 0; j <= 24; j += 8) {
13836 outR <<= 1;
13837 outR |= (inL >> (j + i)) & 1;
13838 }
13839
13840 out[off + 0] = outL >>> 0;
13841 out[off + 1] = outR >>> 0;
13842};
13843
13844exports.r28shl = function r28shl(num, shift) {
13845 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
13846};
13847
13848var pc2table = [
13849 // inL => outL
13850 14, 11, 17, 4, 27, 23, 25, 0,
13851 13, 22, 7, 18, 5, 9, 16, 24,
13852 2, 20, 12, 21, 1, 8, 15, 26,
13853
13854 // inR => outR
13855 15, 4, 25, 19, 9, 1, 26, 16,
13856 5, 11, 23, 8, 12, 7, 17, 0,
13857 22, 3, 10, 14, 6, 20, 27, 24
13858];
13859
13860exports.pc2 = function pc2(inL, inR, out, off) {
13861 var outL = 0;
13862 var outR = 0;
13863
13864 var len = pc2table.length >>> 1;
13865 for (var i = 0; i < len; i++) {
13866 outL <<= 1;
13867 outL |= (inL >>> pc2table[i]) & 0x1;
13868 }
13869 for (var i = len; i < pc2table.length; i++) {
13870 outR <<= 1;
13871 outR |= (inR >>> pc2table[i]) & 0x1;
13872 }
13873
13874 out[off + 0] = outL >>> 0;
13875 out[off + 1] = outR >>> 0;
13876};
13877
13878exports.expand = function expand(r, out, off) {
13879 var outL = 0;
13880 var outR = 0;
13881
13882 outL = ((r & 1) << 5) | (r >>> 27);
13883 for (var i = 23; i >= 15; i -= 4) {
13884 outL <<= 6;
13885 outL |= (r >>> i) & 0x3f;
13886 }
13887 for (var i = 11; i >= 3; i -= 4) {
13888 outR |= (r >>> i) & 0x3f;
13889 outR <<= 6;
13890 }
13891 outR |= ((r & 0x1f) << 1) | (r >>> 31);
13892
13893 out[off + 0] = outL >>> 0;
13894 out[off + 1] = outR >>> 0;
13895};
13896
13897var sTable = [
13898 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
13899 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
13900 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
13901 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
13902
13903 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
13904 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
13905 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
13906 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
13907
13908 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
13909 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
13910 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
13911 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
13912
13913 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
13914 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
13915 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
13916 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
13917
13918 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
13919 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
13920 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
13921 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
13922
13923 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
13924 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
13925 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
13926 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
13927
13928 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
13929 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
13930 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
13931 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
13932
13933 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
13934 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
13935 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
13936 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
13937];
13938
13939exports.substitute = function substitute(inL, inR) {
13940 var out = 0;
13941 for (var i = 0; i < 4; i++) {
13942 var b = (inL >>> (18 - i * 6)) & 0x3f;
13943 var sb = sTable[i * 0x40 + b];
13944
13945 out <<= 4;
13946 out |= sb;
13947 }
13948 for (var i = 0; i < 4; i++) {
13949 var b = (inR >>> (18 - i * 6)) & 0x3f;
13950 var sb = sTable[4 * 0x40 + i * 0x40 + b];
13951
13952 out <<= 4;
13953 out |= sb;
13954 }
13955 return out >>> 0;
13956};
13957
13958var permuteTable = [
13959 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
13960 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
13961];
13962
13963exports.permute = function permute(num) {
13964 var out = 0;
13965 for (var i = 0; i < permuteTable.length; i++) {
13966 out <<= 1;
13967 out |= (num >>> permuteTable[i]) & 0x1;
13968 }
13969 return out >>> 0;
13970};
13971
13972exports.padSplit = function padSplit(num, size, group) {
13973 var str = num.toString(2);
13974 while (str.length < size)
13975 str = '0' + str;
13976
13977 var out = [];
13978 for (var i = 0; i < size; i += group)
13979 out.push(str.slice(i, i + group));
13980 return out.join(' ');
13981};
13982
13983},{}],80:[function(require,module,exports){
13984(function (Buffer){
13985var generatePrime = require('./lib/generatePrime')
13986var primes = require('./lib/primes.json')
13987
13988var DH = require('./lib/dh')
13989
13990function getDiffieHellman (mod) {
13991 var prime = new Buffer(primes[mod].prime, 'hex')
13992 var gen = new Buffer(primes[mod].gen, 'hex')
13993
13994 return new DH(prime, gen)
13995}
13996
13997var ENCODINGS = {
13998 'binary': true, 'hex': true, 'base64': true
13999}
14000
14001function createDiffieHellman (prime, enc, generator, genc) {
14002 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
14003 return createDiffieHellman(prime, 'binary', enc, generator)
14004 }
14005
14006 enc = enc || 'binary'
14007 genc = genc || 'binary'
14008 generator = generator || new Buffer([2])
14009
14010 if (!Buffer.isBuffer(generator)) {
14011 generator = new Buffer(generator, genc)
14012 }
14013
14014 if (typeof prime === 'number') {
14015 return new DH(generatePrime(prime, generator), generator, true)
14016 }
14017
14018 if (!Buffer.isBuffer(prime)) {
14019 prime = new Buffer(prime, enc)
14020 }
14021
14022 return new DH(prime, generator, true)
14023}
14024
14025exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
14026exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
14027
14028}).call(this,require("buffer").Buffer)
14029},{"./lib/dh":81,"./lib/generatePrime":82,"./lib/primes.json":83,"buffer":50}],81:[function(require,module,exports){
14030(function (Buffer){
14031var BN = require('bn.js');
14032var MillerRabin = require('miller-rabin');
14033var millerRabin = new MillerRabin();
14034var TWENTYFOUR = new BN(24);
14035var ELEVEN = new BN(11);
14036var TEN = new BN(10);
14037var THREE = new BN(3);
14038var SEVEN = new BN(7);
14039var primes = require('./generatePrime');
14040var randomBytes = require('randombytes');
14041module.exports = DH;
14042
14043function setPublicKey(pub, enc) {
14044 enc = enc || 'utf8';
14045 if (!Buffer.isBuffer(pub)) {
14046 pub = new Buffer(pub, enc);
14047 }
14048 this._pub = new BN(pub);
14049 return this;
14050}
14051
14052function setPrivateKey(priv, enc) {
14053 enc = enc || 'utf8';
14054 if (!Buffer.isBuffer(priv)) {
14055 priv = new Buffer(priv, enc);
14056 }
14057 this._priv = new BN(priv);
14058 return this;
14059}
14060
14061var primeCache = {};
14062function checkPrime(prime, generator) {
14063 var gen = generator.toString('hex');
14064 var hex = [gen, prime.toString(16)].join('_');
14065 if (hex in primeCache) {
14066 return primeCache[hex];
14067 }
14068 var error = 0;
14069
14070 if (prime.isEven() ||
14071 !primes.simpleSieve ||
14072 !primes.fermatTest(prime) ||
14073 !millerRabin.test(prime)) {
14074 //not a prime so +1
14075 error += 1;
14076
14077 if (gen === '02' || gen === '05') {
14078 // we'd be able to check the generator
14079 // it would fail so +8
14080 error += 8;
14081 } else {
14082 //we wouldn't be able to test the generator
14083 // so +4
14084 error += 4;
14085 }
14086 primeCache[hex] = error;
14087 return error;
14088 }
14089 if (!millerRabin.test(prime.shrn(1))) {
14090 //not a safe prime
14091 error += 2;
14092 }
14093 var rem;
14094 switch (gen) {
14095 case '02':
14096 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
14097 // unsuidable generator
14098 error += 8;
14099 }
14100 break;
14101 case '05':
14102 rem = prime.mod(TEN);
14103 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
14104 // prime mod 10 needs to equal 3 or 7
14105 error += 8;
14106 }
14107 break;
14108 default:
14109 error += 4;
14110 }
14111 primeCache[hex] = error;
14112 return error;
14113}
14114
14115function DH(prime, generator, malleable) {
14116 this.setGenerator(generator);
14117 this.__prime = new BN(prime);
14118 this._prime = BN.mont(this.__prime);
14119 this._primeLen = prime.length;
14120 this._pub = undefined;
14121 this._priv = undefined;
14122 this._primeCode = undefined;
14123 if (malleable) {
14124 this.setPublicKey = setPublicKey;
14125 this.setPrivateKey = setPrivateKey;
14126 } else {
14127 this._primeCode = 8;
14128 }
14129}
14130Object.defineProperty(DH.prototype, 'verifyError', {
14131 enumerable: true,
14132 get: function () {
14133 if (typeof this._primeCode !== 'number') {
14134 this._primeCode = checkPrime(this.__prime, this.__gen);
14135 }
14136 return this._primeCode;
14137 }
14138});
14139DH.prototype.generateKeys = function () {
14140 if (!this._priv) {
14141 this._priv = new BN(randomBytes(this._primeLen));
14142 }
14143 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
14144 return this.getPublicKey();
14145};
14146
14147DH.prototype.computeSecret = function (other) {
14148 other = new BN(other);
14149 other = other.toRed(this._prime);
14150 var secret = other.redPow(this._priv).fromRed();
14151 var out = new Buffer(secret.toArray());
14152 var prime = this.getPrime();
14153 if (out.length < prime.length) {
14154 var front = new Buffer(prime.length - out.length);
14155 front.fill(0);
14156 out = Buffer.concat([front, out]);
14157 }
14158 return out;
14159};
14160
14161DH.prototype.getPublicKey = function getPublicKey(enc) {
14162 return formatReturnValue(this._pub, enc);
14163};
14164
14165DH.prototype.getPrivateKey = function getPrivateKey(enc) {
14166 return formatReturnValue(this._priv, enc);
14167};
14168
14169DH.prototype.getPrime = function (enc) {
14170 return formatReturnValue(this.__prime, enc);
14171};
14172
14173DH.prototype.getGenerator = function (enc) {
14174 return formatReturnValue(this._gen, enc);
14175};
14176
14177DH.prototype.setGenerator = function (gen, enc) {
14178 enc = enc || 'utf8';
14179 if (!Buffer.isBuffer(gen)) {
14180 gen = new Buffer(gen, enc);
14181 }
14182 this.__gen = gen;
14183 this._gen = new BN(gen);
14184 return this;
14185};
14186
14187function formatReturnValue(bn, enc) {
14188 var buf = new Buffer(bn.toArray());
14189 if (!enc) {
14190 return buf;
14191 } else {
14192 return buf.toString(enc);
14193 }
14194}
14195
14196}).call(this,require("buffer").Buffer)
14197},{"./generatePrime":82,"bn.js":18,"buffer":50,"miller-rabin":359,"randombytes":381}],82:[function(require,module,exports){
14198var randomBytes = require('randombytes');
14199module.exports = findPrime;
14200findPrime.simpleSieve = simpleSieve;
14201findPrime.fermatTest = fermatTest;
14202var BN = require('bn.js');
14203var TWENTYFOUR = new BN(24);
14204var MillerRabin = require('miller-rabin');
14205var millerRabin = new MillerRabin();
14206var ONE = new BN(1);
14207var TWO = new BN(2);
14208var FIVE = new BN(5);
14209var SIXTEEN = new BN(16);
14210var EIGHT = new BN(8);
14211var TEN = new BN(10);
14212var THREE = new BN(3);
14213var SEVEN = new BN(7);
14214var ELEVEN = new BN(11);
14215var FOUR = new BN(4);
14216var TWELVE = new BN(12);
14217var primes = null;
14218
14219function _getPrimes() {
14220 if (primes !== null)
14221 return primes;
14222
14223 var limit = 0x100000;
14224 var res = [];
14225 res[0] = 2;
14226 for (var i = 1, k = 3; k < limit; k += 2) {
14227 var sqrt = Math.ceil(Math.sqrt(k));
14228 for (var j = 0; j < i && res[j] <= sqrt; j++)
14229 if (k % res[j] === 0)
14230 break;
14231
14232 if (i !== j && res[j] <= sqrt)
14233 continue;
14234
14235 res[i++] = k;
14236 }
14237 primes = res;
14238 return res;
14239}
14240
14241function simpleSieve(p) {
14242 var primes = _getPrimes();
14243
14244 for (var i = 0; i < primes.length; i++)
14245 if (p.modn(primes[i]) === 0) {
14246 if (p.cmpn(primes[i]) === 0) {
14247 return true;
14248 } else {
14249 return false;
14250 }
14251 }
14252
14253 return true;
14254}
14255
14256function fermatTest(p) {
14257 var red = BN.mont(p);
14258 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
14259}
14260
14261function findPrime(bits, gen) {
14262 if (bits < 16) {
14263 // this is what openssl does
14264 if (gen === 2 || gen === 5) {
14265 return new BN([0x8c, 0x7b]);
14266 } else {
14267 return new BN([0x8c, 0x27]);
14268 }
14269 }
14270 gen = new BN(gen);
14271
14272 var num, n2;
14273
14274 while (true) {
14275 num = new BN(randomBytes(Math.ceil(bits / 8)));
14276 while (num.bitLength() > bits) {
14277 num.ishrn(1);
14278 }
14279 if (num.isEven()) {
14280 num.iadd(ONE);
14281 }
14282 if (!num.testn(1)) {
14283 num.iadd(TWO);
14284 }
14285 if (!gen.cmp(TWO)) {
14286 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
14287 num.iadd(FOUR);
14288 }
14289 } else if (!gen.cmp(FIVE)) {
14290 while (num.mod(TEN).cmp(THREE)) {
14291 num.iadd(FOUR);
14292 }
14293 }
14294 n2 = num.shrn(1);
14295 if (simpleSieve(n2) && simpleSieve(num) &&
14296 fermatTest(n2) && fermatTest(num) &&
14297 millerRabin.test(n2) && millerRabin.test(num)) {
14298 return num;
14299 }
14300 }
14301
14302}
14303
14304},{"bn.js":18,"miller-rabin":359,"randombytes":381}],83:[function(require,module,exports){
14305module.exports={
14306 "modp1": {
14307 "gen": "02",
14308 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
14309 },
14310 "modp2": {
14311 "gen": "02",
14312 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
14313 },
14314 "modp5": {
14315 "gen": "02",
14316 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
14317 },
14318 "modp14": {
14319 "gen": "02",
14320 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
14321 },
14322 "modp15": {
14323 "gen": "02",
14324 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
14325 },
14326 "modp16": {
14327 "gen": "02",
14328 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
14329 },
14330 "modp17": {
14331 "gen": "02",
14332 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
14333 },
14334 "modp18": {
14335 "gen": "02",
14336 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
14337 }
14338}
14339},{}],84:[function(require,module,exports){
14340(function (Buffer){
14341"use strict";
14342Object.defineProperty(exports, "__esModule", { value: true });
14343const createHmac = require("create-hmac");
14344const naclFactory = require("js-nacl");
14345const utils_1 = require("./utils");
14346const ED25519_CURVE = 'ed25519 seed';
14347const HARDENED_OFFSET = 0x80000000;
14348let naclInstance;
14349naclFactory.instantiate((nacl) => (naclInstance = nacl));
14350exports.getMasterKeyFromSeed = (seed) => {
14351 const hmac = createHmac('sha512', ED25519_CURVE);
14352 const I = hmac.update(Buffer.from(seed, 'hex')).digest();
14353 const IL = I.slice(0, 32);
14354 const IR = I.slice(32);
14355 return {
14356 key: IL,
14357 chainCode: IR,
14358 };
14359};
14360const CKDPriv = ({ key, chainCode }, index) => {
14361 const indexBuffer = Buffer.allocUnsafe(4);
14362 indexBuffer.writeUInt32BE(index, 0);
14363 const data = Buffer.concat([Buffer.alloc(1, 0), key, indexBuffer]);
14364 const I = createHmac('sha512', chainCode)
14365 .update(data)
14366 .digest();
14367 const IL = I.slice(0, 32);
14368 const IR = I.slice(32);
14369 return {
14370 key: IL,
14371 chainCode: IR,
14372 };
14373};
14374exports.getPublicKey = (privateKey, withZeroByte = true) => {
14375 const { signPk } = naclInstance.crypto_sign_seed_keypair(privateKey);
14376 const zero = Buffer.alloc(1, 0);
14377 return withZeroByte ?
14378 Buffer.concat([zero, Buffer.from(signPk)]) :
14379 Buffer.from(signPk);
14380};
14381exports.isValidPath = (path) => {
14382 if (!utils_1.pathRegex.test(path)) {
14383 return false;
14384 }
14385 return !path
14386 .split('/')
14387 .slice(1)
14388 .map(utils_1.replaceDerive)
14389 .some(isNaN);
14390};
14391exports.derivePath = (path, seed) => {
14392 if (!exports.isValidPath(path)) {
14393 throw new Error('Invalid derivation path');
14394 }
14395 const { key, chainCode } = exports.getMasterKeyFromSeed(seed);
14396 const segments = path
14397 .split('/')
14398 .slice(1)
14399 .map(utils_1.replaceDerive)
14400 .map(el => parseInt(el, 10));
14401 return segments.reduce((parentKeys, segment) => CKDPriv(parentKeys, segment + HARDENED_OFFSET), { key, chainCode });
14402};
14403
14404}).call(this,require("buffer").Buffer)
14405},{"./utils":85,"buffer":50,"create-hmac":70,"js-nacl":122}],85:[function(require,module,exports){
14406"use strict";
14407Object.defineProperty(exports, "__esModule", { value: true });
14408exports.pathRegex = new RegExp("^m(\\/[0-9]+')+$");
14409exports.replaceDerive = (val) => val.replace("'", '');
14410
14411},{}],86:[function(require,module,exports){
14412'use strict';
14413
14414var elliptic = exports;
14415
14416elliptic.version = require('../package.json').version;
14417elliptic.utils = require('./elliptic/utils');
14418elliptic.rand = require('brorand');
14419elliptic.curve = require('./elliptic/curve');
14420elliptic.curves = require('./elliptic/curves');
14421
14422// Protocols
14423elliptic.ec = require('./elliptic/ec');
14424elliptic.eddsa = require('./elliptic/eddsa');
14425
14426},{"../package.json":101,"./elliptic/curve":89,"./elliptic/curves":92,"./elliptic/ec":93,"./elliptic/eddsa":96,"./elliptic/utils":100,"brorand":19}],87:[function(require,module,exports){
14427'use strict';
14428
14429var BN = require('bn.js');
14430var elliptic = require('../../elliptic');
14431var utils = elliptic.utils;
14432var getNAF = utils.getNAF;
14433var getJSF = utils.getJSF;
14434var assert = utils.assert;
14435
14436function BaseCurve(type, conf) {
14437 this.type = type;
14438 this.p = new BN(conf.p, 16);
14439
14440 // Use Montgomery, when there is no fast reduction for the prime
14441 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
14442
14443 // Useful for many curves
14444 this.zero = new BN(0).toRed(this.red);
14445 this.one = new BN(1).toRed(this.red);
14446 this.two = new BN(2).toRed(this.red);
14447
14448 // Curve configuration, optional
14449 this.n = conf.n && new BN(conf.n, 16);
14450 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
14451
14452 // Temporary arrays
14453 this._wnafT1 = new Array(4);
14454 this._wnafT2 = new Array(4);
14455 this._wnafT3 = new Array(4);
14456 this._wnafT4 = new Array(4);
14457
14458 // Generalized Greg Maxwell's trick
14459 var adjustCount = this.n && this.p.div(this.n);
14460 if (!adjustCount || adjustCount.cmpn(100) > 0) {
14461 this.redN = null;
14462 } else {
14463 this._maxwellTrick = true;
14464 this.redN = this.n.toRed(this.red);
14465 }
14466}
14467module.exports = BaseCurve;
14468
14469BaseCurve.prototype.point = function point() {
14470 throw new Error('Not implemented');
14471};
14472
14473BaseCurve.prototype.validate = function validate() {
14474 throw new Error('Not implemented');
14475};
14476
14477BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
14478 assert(p.precomputed);
14479 var doubles = p._getDoubles();
14480
14481 var naf = getNAF(k, 1);
14482 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
14483 I /= 3;
14484
14485 // Translate into more windowed form
14486 var repr = [];
14487 for (var j = 0; j < naf.length; j += doubles.step) {
14488 var nafW = 0;
14489 for (var k = j + doubles.step - 1; k >= j; k--)
14490 nafW = (nafW << 1) + naf[k];
14491 repr.push(nafW);
14492 }
14493
14494 var a = this.jpoint(null, null, null);
14495 var b = this.jpoint(null, null, null);
14496 for (var i = I; i > 0; i--) {
14497 for (var j = 0; j < repr.length; j++) {
14498 var nafW = repr[j];
14499 if (nafW === i)
14500 b = b.mixedAdd(doubles.points[j]);
14501 else if (nafW === -i)
14502 b = b.mixedAdd(doubles.points[j].neg());
14503 }
14504 a = a.add(b);
14505 }
14506 return a.toP();
14507};
14508
14509BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
14510 var w = 4;
14511
14512 // Precompute window
14513 var nafPoints = p._getNAFPoints(w);
14514 w = nafPoints.wnd;
14515 var wnd = nafPoints.points;
14516
14517 // Get NAF form
14518 var naf = getNAF(k, w);
14519
14520 // Add `this`*(N+1) for every w-NAF index
14521 var acc = this.jpoint(null, null, null);
14522 for (var i = naf.length - 1; i >= 0; i--) {
14523 // Count zeroes
14524 for (var k = 0; i >= 0 && naf[i] === 0; i--)
14525 k++;
14526 if (i >= 0)
14527 k++;
14528 acc = acc.dblp(k);
14529
14530 if (i < 0)
14531 break;
14532 var z = naf[i];
14533 assert(z !== 0);
14534 if (p.type === 'affine') {
14535 // J +- P
14536 if (z > 0)
14537 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
14538 else
14539 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
14540 } else {
14541 // J +- J
14542 if (z > 0)
14543 acc = acc.add(wnd[(z - 1) >> 1]);
14544 else
14545 acc = acc.add(wnd[(-z - 1) >> 1].neg());
14546 }
14547 }
14548 return p.type === 'affine' ? acc.toP() : acc;
14549};
14550
14551BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
14552 points,
14553 coeffs,
14554 len,
14555 jacobianResult) {
14556 var wndWidth = this._wnafT1;
14557 var wnd = this._wnafT2;
14558 var naf = this._wnafT3;
14559
14560 // Fill all arrays
14561 var max = 0;
14562 for (var i = 0; i < len; i++) {
14563 var p = points[i];
14564 var nafPoints = p._getNAFPoints(defW);
14565 wndWidth[i] = nafPoints.wnd;
14566 wnd[i] = nafPoints.points;
14567 }
14568
14569 // Comb small window NAFs
14570 for (var i = len - 1; i >= 1; i -= 2) {
14571 var a = i - 1;
14572 var b = i;
14573 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
14574 naf[a] = getNAF(coeffs[a], wndWidth[a]);
14575 naf[b] = getNAF(coeffs[b], wndWidth[b]);
14576 max = Math.max(naf[a].length, max);
14577 max = Math.max(naf[b].length, max);
14578 continue;
14579 }
14580
14581 var comb = [
14582 points[a], /* 1 */
14583 null, /* 3 */
14584 null, /* 5 */
14585 points[b] /* 7 */
14586 ];
14587
14588 // Try to avoid Projective points, if possible
14589 if (points[a].y.cmp(points[b].y) === 0) {
14590 comb[1] = points[a].add(points[b]);
14591 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
14592 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
14593 comb[1] = points[a].toJ().mixedAdd(points[b]);
14594 comb[2] = points[a].add(points[b].neg());
14595 } else {
14596 comb[1] = points[a].toJ().mixedAdd(points[b]);
14597 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
14598 }
14599
14600 var index = [
14601 -3, /* -1 -1 */
14602 -1, /* -1 0 */
14603 -5, /* -1 1 */
14604 -7, /* 0 -1 */
14605 0, /* 0 0 */
14606 7, /* 0 1 */
14607 5, /* 1 -1 */
14608 1, /* 1 0 */
14609 3 /* 1 1 */
14610 ];
14611
14612 var jsf = getJSF(coeffs[a], coeffs[b]);
14613 max = Math.max(jsf[0].length, max);
14614 naf[a] = new Array(max);
14615 naf[b] = new Array(max);
14616 for (var j = 0; j < max; j++) {
14617 var ja = jsf[0][j] | 0;
14618 var jb = jsf[1][j] | 0;
14619
14620 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
14621 naf[b][j] = 0;
14622 wnd[a] = comb;
14623 }
14624 }
14625
14626 var acc = this.jpoint(null, null, null);
14627 var tmp = this._wnafT4;
14628 for (var i = max; i >= 0; i--) {
14629 var k = 0;
14630
14631 while (i >= 0) {
14632 var zero = true;
14633 for (var j = 0; j < len; j++) {
14634 tmp[j] = naf[j][i] | 0;
14635 if (tmp[j] !== 0)
14636 zero = false;
14637 }
14638 if (!zero)
14639 break;
14640 k++;
14641 i--;
14642 }
14643 if (i >= 0)
14644 k++;
14645 acc = acc.dblp(k);
14646 if (i < 0)
14647 break;
14648
14649 for (var j = 0; j < len; j++) {
14650 var z = tmp[j];
14651 var p;
14652 if (z === 0)
14653 continue;
14654 else if (z > 0)
14655 p = wnd[j][(z - 1) >> 1];
14656 else if (z < 0)
14657 p = wnd[j][(-z - 1) >> 1].neg();
14658
14659 if (p.type === 'affine')
14660 acc = acc.mixedAdd(p);
14661 else
14662 acc = acc.add(p);
14663 }
14664 }
14665 // Zeroify references
14666 for (var i = 0; i < len; i++)
14667 wnd[i] = null;
14668
14669 if (jacobianResult)
14670 return acc;
14671 else
14672 return acc.toP();
14673};
14674
14675function BasePoint(curve, type) {
14676 this.curve = curve;
14677 this.type = type;
14678 this.precomputed = null;
14679}
14680BaseCurve.BasePoint = BasePoint;
14681
14682BasePoint.prototype.eq = function eq(/*other*/) {
14683 throw new Error('Not implemented');
14684};
14685
14686BasePoint.prototype.validate = function validate() {
14687 return this.curve.validate(this);
14688};
14689
14690BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
14691 bytes = utils.toArray(bytes, enc);
14692
14693 var len = this.p.byteLength();
14694
14695 // uncompressed, hybrid-odd, hybrid-even
14696 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
14697 bytes.length - 1 === 2 * len) {
14698 if (bytes[0] === 0x06)
14699 assert(bytes[bytes.length - 1] % 2 === 0);
14700 else if (bytes[0] === 0x07)
14701 assert(bytes[bytes.length - 1] % 2 === 1);
14702
14703 var res = this.point(bytes.slice(1, 1 + len),
14704 bytes.slice(1 + len, 1 + 2 * len));
14705
14706 return res;
14707 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
14708 bytes.length - 1 === len) {
14709 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
14710 }
14711 throw new Error('Unknown point format');
14712};
14713
14714BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
14715 return this.encode(enc, true);
14716};
14717
14718BasePoint.prototype._encode = function _encode(compact) {
14719 var len = this.curve.p.byteLength();
14720 var x = this.getX().toArray('be', len);
14721
14722 if (compact)
14723 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
14724
14725 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
14726};
14727
14728BasePoint.prototype.encode = function encode(enc, compact) {
14729 return utils.encode(this._encode(compact), enc);
14730};
14731
14732BasePoint.prototype.precompute = function precompute(power) {
14733 if (this.precomputed)
14734 return this;
14735
14736 var precomputed = {
14737 doubles: null,
14738 naf: null,
14739 beta: null
14740 };
14741 precomputed.naf = this._getNAFPoints(8);
14742 precomputed.doubles = this._getDoubles(4, power);
14743 precomputed.beta = this._getBeta();
14744 this.precomputed = precomputed;
14745
14746 return this;
14747};
14748
14749BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
14750 if (!this.precomputed)
14751 return false;
14752
14753 var doubles = this.precomputed.doubles;
14754 if (!doubles)
14755 return false;
14756
14757 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
14758};
14759
14760BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
14761 if (this.precomputed && this.precomputed.doubles)
14762 return this.precomputed.doubles;
14763
14764 var doubles = [ this ];
14765 var acc = this;
14766 for (var i = 0; i < power; i += step) {
14767 for (var j = 0; j < step; j++)
14768 acc = acc.dbl();
14769 doubles.push(acc);
14770 }
14771 return {
14772 step: step,
14773 points: doubles
14774 };
14775};
14776
14777BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
14778 if (this.precomputed && this.precomputed.naf)
14779 return this.precomputed.naf;
14780
14781 var res = [ this ];
14782 var max = (1 << wnd) - 1;
14783 var dbl = max === 1 ? null : this.dbl();
14784 for (var i = 1; i < max; i++)
14785 res[i] = res[i - 1].add(dbl);
14786 return {
14787 wnd: wnd,
14788 points: res
14789 };
14790};
14791
14792BasePoint.prototype._getBeta = function _getBeta() {
14793 return null;
14794};
14795
14796BasePoint.prototype.dblp = function dblp(k) {
14797 var r = this;
14798 for (var i = 0; i < k; i++)
14799 r = r.dbl();
14800 return r;
14801};
14802
14803},{"../../elliptic":86,"bn.js":18}],88:[function(require,module,exports){
14804'use strict';
14805
14806var curve = require('../curve');
14807var elliptic = require('../../elliptic');
14808var BN = require('bn.js');
14809var inherits = require('inherits');
14810var Base = curve.base;
14811
14812var assert = elliptic.utils.assert;
14813
14814function EdwardsCurve(conf) {
14815 // NOTE: Important as we are creating point in Base.call()
14816 this.twisted = (conf.a | 0) !== 1;
14817 this.mOneA = this.twisted && (conf.a | 0) === -1;
14818 this.extended = this.mOneA;
14819
14820 Base.call(this, 'edwards', conf);
14821
14822 this.a = new BN(conf.a, 16).umod(this.red.m);
14823 this.a = this.a.toRed(this.red);
14824 this.c = new BN(conf.c, 16).toRed(this.red);
14825 this.c2 = this.c.redSqr();
14826 this.d = new BN(conf.d, 16).toRed(this.red);
14827 this.dd = this.d.redAdd(this.d);
14828
14829 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
14830 this.oneC = (conf.c | 0) === 1;
14831}
14832inherits(EdwardsCurve, Base);
14833module.exports = EdwardsCurve;
14834
14835EdwardsCurve.prototype._mulA = function _mulA(num) {
14836 if (this.mOneA)
14837 return num.redNeg();
14838 else
14839 return this.a.redMul(num);
14840};
14841
14842EdwardsCurve.prototype._mulC = function _mulC(num) {
14843 if (this.oneC)
14844 return num;
14845 else
14846 return this.c.redMul(num);
14847};
14848
14849// Just for compatibility with Short curve
14850EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
14851 return this.point(x, y, z, t);
14852};
14853
14854EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
14855 x = new BN(x, 16);
14856 if (!x.red)
14857 x = x.toRed(this.red);
14858
14859 var x2 = x.redSqr();
14860 var rhs = this.c2.redSub(this.a.redMul(x2));
14861 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
14862
14863 var y2 = rhs.redMul(lhs.redInvm());
14864 var y = y2.redSqrt();
14865 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
14866 throw new Error('invalid point');
14867
14868 var isOdd = y.fromRed().isOdd();
14869 if (odd && !isOdd || !odd && isOdd)
14870 y = y.redNeg();
14871
14872 return this.point(x, y);
14873};
14874
14875EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
14876 y = new BN(y, 16);
14877 if (!y.red)
14878 y = y.toRed(this.red);
14879
14880 // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)
14881 var y2 = y.redSqr();
14882 var lhs = y2.redSub(this.c2);
14883 var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
14884 var x2 = lhs.redMul(rhs.redInvm());
14885
14886 if (x2.cmp(this.zero) === 0) {
14887 if (odd)
14888 throw new Error('invalid point');
14889 else
14890 return this.point(this.zero, y);
14891 }
14892
14893 var x = x2.redSqrt();
14894 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
14895 throw new Error('invalid point');
14896
14897 if (x.fromRed().isOdd() !== odd)
14898 x = x.redNeg();
14899
14900 return this.point(x, y);
14901};
14902
14903EdwardsCurve.prototype.validate = function validate(point) {
14904 if (point.isInfinity())
14905 return true;
14906
14907 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
14908 point.normalize();
14909
14910 var x2 = point.x.redSqr();
14911 var y2 = point.y.redSqr();
14912 var lhs = x2.redMul(this.a).redAdd(y2);
14913 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
14914
14915 return lhs.cmp(rhs) === 0;
14916};
14917
14918function Point(curve, x, y, z, t) {
14919 Base.BasePoint.call(this, curve, 'projective');
14920 if (x === null && y === null && z === null) {
14921 this.x = this.curve.zero;
14922 this.y = this.curve.one;
14923 this.z = this.curve.one;
14924 this.t = this.curve.zero;
14925 this.zOne = true;
14926 } else {
14927 this.x = new BN(x, 16);
14928 this.y = new BN(y, 16);
14929 this.z = z ? new BN(z, 16) : this.curve.one;
14930 this.t = t && new BN(t, 16);
14931 if (!this.x.red)
14932 this.x = this.x.toRed(this.curve.red);
14933 if (!this.y.red)
14934 this.y = this.y.toRed(this.curve.red);
14935 if (!this.z.red)
14936 this.z = this.z.toRed(this.curve.red);
14937 if (this.t && !this.t.red)
14938 this.t = this.t.toRed(this.curve.red);
14939 this.zOne = this.z === this.curve.one;
14940
14941 // Use extended coordinates
14942 if (this.curve.extended && !this.t) {
14943 this.t = this.x.redMul(this.y);
14944 if (!this.zOne)
14945 this.t = this.t.redMul(this.z.redInvm());
14946 }
14947 }
14948}
14949inherits(Point, Base.BasePoint);
14950
14951EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
14952 return Point.fromJSON(this, obj);
14953};
14954
14955EdwardsCurve.prototype.point = function point(x, y, z, t) {
14956 return new Point(this, x, y, z, t);
14957};
14958
14959Point.fromJSON = function fromJSON(curve, obj) {
14960 return new Point(curve, obj[0], obj[1], obj[2]);
14961};
14962
14963Point.prototype.inspect = function inspect() {
14964 if (this.isInfinity())
14965 return '<EC Point Infinity>';
14966 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
14967 ' y: ' + this.y.fromRed().toString(16, 2) +
14968 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
14969};
14970
14971Point.prototype.isInfinity = function isInfinity() {
14972 // XXX This code assumes that zero is always zero in red
14973 return this.x.cmpn(0) === 0 &&
14974 (this.y.cmp(this.z) === 0 ||
14975 (this.zOne && this.y.cmp(this.curve.c) === 0));
14976};
14977
14978Point.prototype._extDbl = function _extDbl() {
14979 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
14980 // #doubling-dbl-2008-hwcd
14981 // 4M + 4S
14982
14983 // A = X1^2
14984 var a = this.x.redSqr();
14985 // B = Y1^2
14986 var b = this.y.redSqr();
14987 // C = 2 * Z1^2
14988 var c = this.z.redSqr();
14989 c = c.redIAdd(c);
14990 // D = a * A
14991 var d = this.curve._mulA(a);
14992 // E = (X1 + Y1)^2 - A - B
14993 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
14994 // G = D + B
14995 var g = d.redAdd(b);
14996 // F = G - C
14997 var f = g.redSub(c);
14998 // H = D - B
14999 var h = d.redSub(b);
15000 // X3 = E * F
15001 var nx = e.redMul(f);
15002 // Y3 = G * H
15003 var ny = g.redMul(h);
15004 // T3 = E * H
15005 var nt = e.redMul(h);
15006 // Z3 = F * G
15007 var nz = f.redMul(g);
15008 return this.curve.point(nx, ny, nz, nt);
15009};
15010
15011Point.prototype._projDbl = function _projDbl() {
15012 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
15013 // #doubling-dbl-2008-bbjlp
15014 // #doubling-dbl-2007-bl
15015 // and others
15016 // Generally 3M + 4S or 2M + 4S
15017
15018 // B = (X1 + Y1)^2
15019 var b = this.x.redAdd(this.y).redSqr();
15020 // C = X1^2
15021 var c = this.x.redSqr();
15022 // D = Y1^2
15023 var d = this.y.redSqr();
15024
15025 var nx;
15026 var ny;
15027 var nz;
15028 if (this.curve.twisted) {
15029 // E = a * C
15030 var e = this.curve._mulA(c);
15031 // F = E + D
15032 var f = e.redAdd(d);
15033 if (this.zOne) {
15034 // X3 = (B - C - D) * (F - 2)
15035 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
15036 // Y3 = F * (E - D)
15037 ny = f.redMul(e.redSub(d));
15038 // Z3 = F^2 - 2 * F
15039 nz = f.redSqr().redSub(f).redSub(f);
15040 } else {
15041 // H = Z1^2
15042 var h = this.z.redSqr();
15043 // J = F - 2 * H
15044 var j = f.redSub(h).redISub(h);
15045 // X3 = (B-C-D)*J
15046 nx = b.redSub(c).redISub(d).redMul(j);
15047 // Y3 = F * (E - D)
15048 ny = f.redMul(e.redSub(d));
15049 // Z3 = F * J
15050 nz = f.redMul(j);
15051 }
15052 } else {
15053 // E = C + D
15054 var e = c.redAdd(d);
15055 // H = (c * Z1)^2
15056 var h = this.curve._mulC(this.z).redSqr();
15057 // J = E - 2 * H
15058 var j = e.redSub(h).redSub(h);
15059 // X3 = c * (B - E) * J
15060 nx = this.curve._mulC(b.redISub(e)).redMul(j);
15061 // Y3 = c * E * (C - D)
15062 ny = this.curve._mulC(e).redMul(c.redISub(d));
15063 // Z3 = E * J
15064 nz = e.redMul(j);
15065 }
15066 return this.curve.point(nx, ny, nz);
15067};
15068
15069Point.prototype.dbl = function dbl() {
15070 if (this.isInfinity())
15071 return this;
15072
15073 // Double in extended coordinates
15074 if (this.curve.extended)
15075 return this._extDbl();
15076 else
15077 return this._projDbl();
15078};
15079
15080Point.prototype._extAdd = function _extAdd(p) {
15081 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
15082 // #addition-add-2008-hwcd-3
15083 // 8M
15084
15085 // A = (Y1 - X1) * (Y2 - X2)
15086 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
15087 // B = (Y1 + X1) * (Y2 + X2)
15088 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
15089 // C = T1 * k * T2
15090 var c = this.t.redMul(this.curve.dd).redMul(p.t);
15091 // D = Z1 * 2 * Z2
15092 var d = this.z.redMul(p.z.redAdd(p.z));
15093 // E = B - A
15094 var e = b.redSub(a);
15095 // F = D - C
15096 var f = d.redSub(c);
15097 // G = D + C
15098 var g = d.redAdd(c);
15099 // H = B + A
15100 var h = b.redAdd(a);
15101 // X3 = E * F
15102 var nx = e.redMul(f);
15103 // Y3 = G * H
15104 var ny = g.redMul(h);
15105 // T3 = E * H
15106 var nt = e.redMul(h);
15107 // Z3 = F * G
15108 var nz = f.redMul(g);
15109 return this.curve.point(nx, ny, nz, nt);
15110};
15111
15112Point.prototype._projAdd = function _projAdd(p) {
15113 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
15114 // #addition-add-2008-bbjlp
15115 // #addition-add-2007-bl
15116 // 10M + 1S
15117
15118 // A = Z1 * Z2
15119 var a = this.z.redMul(p.z);
15120 // B = A^2
15121 var b = a.redSqr();
15122 // C = X1 * X2
15123 var c = this.x.redMul(p.x);
15124 // D = Y1 * Y2
15125 var d = this.y.redMul(p.y);
15126 // E = d * C * D
15127 var e = this.curve.d.redMul(c).redMul(d);
15128 // F = B - E
15129 var f = b.redSub(e);
15130 // G = B + E
15131 var g = b.redAdd(e);
15132 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
15133 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
15134 var nx = a.redMul(f).redMul(tmp);
15135 var ny;
15136 var nz;
15137 if (this.curve.twisted) {
15138 // Y3 = A * G * (D - a * C)
15139 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
15140 // Z3 = F * G
15141 nz = f.redMul(g);
15142 } else {
15143 // Y3 = A * G * (D - C)
15144 ny = a.redMul(g).redMul(d.redSub(c));
15145 // Z3 = c * F * G
15146 nz = this.curve._mulC(f).redMul(g);
15147 }
15148 return this.curve.point(nx, ny, nz);
15149};
15150
15151Point.prototype.add = function add(p) {
15152 if (this.isInfinity())
15153 return p;
15154 if (p.isInfinity())
15155 return this;
15156
15157 if (this.curve.extended)
15158 return this._extAdd(p);
15159 else
15160 return this._projAdd(p);
15161};
15162
15163Point.prototype.mul = function mul(k) {
15164 if (this._hasDoubles(k))
15165 return this.curve._fixedNafMul(this, k);
15166 else
15167 return this.curve._wnafMul(this, k);
15168};
15169
15170Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
15171 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
15172};
15173
15174Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
15175 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
15176};
15177
15178Point.prototype.normalize = function normalize() {
15179 if (this.zOne)
15180 return this;
15181
15182 // Normalize coordinates
15183 var zi = this.z.redInvm();
15184 this.x = this.x.redMul(zi);
15185 this.y = this.y.redMul(zi);
15186 if (this.t)
15187 this.t = this.t.redMul(zi);
15188 this.z = this.curve.one;
15189 this.zOne = true;
15190 return this;
15191};
15192
15193Point.prototype.neg = function neg() {
15194 return this.curve.point(this.x.redNeg(),
15195 this.y,
15196 this.z,
15197 this.t && this.t.redNeg());
15198};
15199
15200Point.prototype.getX = function getX() {
15201 this.normalize();
15202 return this.x.fromRed();
15203};
15204
15205Point.prototype.getY = function getY() {
15206 this.normalize();
15207 return this.y.fromRed();
15208};
15209
15210Point.prototype.eq = function eq(other) {
15211 return this === other ||
15212 this.getX().cmp(other.getX()) === 0 &&
15213 this.getY().cmp(other.getY()) === 0;
15214};
15215
15216Point.prototype.eqXToP = function eqXToP(x) {
15217 var rx = x.toRed(this.curve.red).redMul(this.z);
15218 if (this.x.cmp(rx) === 0)
15219 return true;
15220
15221 var xc = x.clone();
15222 var t = this.curve.redN.redMul(this.z);
15223 for (;;) {
15224 xc.iadd(this.curve.n);
15225 if (xc.cmp(this.curve.p) >= 0)
15226 return false;
15227
15228 rx.redIAdd(t);
15229 if (this.x.cmp(rx) === 0)
15230 return true;
15231 }
15232};
15233
15234// Compatibility with BaseCurve
15235Point.prototype.toP = Point.prototype.normalize;
15236Point.prototype.mixedAdd = Point.prototype.add;
15237
15238},{"../../elliptic":86,"../curve":89,"bn.js":18,"inherits":119}],89:[function(require,module,exports){
15239'use strict';
15240
15241var curve = exports;
15242
15243curve.base = require('./base');
15244curve.short = require('./short');
15245curve.mont = require('./mont');
15246curve.edwards = require('./edwards');
15247
15248},{"./base":87,"./edwards":88,"./mont":90,"./short":91}],90:[function(require,module,exports){
15249'use strict';
15250
15251var curve = require('../curve');
15252var BN = require('bn.js');
15253var inherits = require('inherits');
15254var Base = curve.base;
15255
15256var elliptic = require('../../elliptic');
15257var utils = elliptic.utils;
15258
15259function MontCurve(conf) {
15260 Base.call(this, 'mont', conf);
15261
15262 this.a = new BN(conf.a, 16).toRed(this.red);
15263 this.b = new BN(conf.b, 16).toRed(this.red);
15264 this.i4 = new BN(4).toRed(this.red).redInvm();
15265 this.two = new BN(2).toRed(this.red);
15266 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
15267}
15268inherits(MontCurve, Base);
15269module.exports = MontCurve;
15270
15271MontCurve.prototype.validate = function validate(point) {
15272 var x = point.normalize().x;
15273 var x2 = x.redSqr();
15274 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
15275 var y = rhs.redSqrt();
15276
15277 return y.redSqr().cmp(rhs) === 0;
15278};
15279
15280function Point(curve, x, z) {
15281 Base.BasePoint.call(this, curve, 'projective');
15282 if (x === null && z === null) {
15283 this.x = this.curve.one;
15284 this.z = this.curve.zero;
15285 } else {
15286 this.x = new BN(x, 16);
15287 this.z = new BN(z, 16);
15288 if (!this.x.red)
15289 this.x = this.x.toRed(this.curve.red);
15290 if (!this.z.red)
15291 this.z = this.z.toRed(this.curve.red);
15292 }
15293}
15294inherits(Point, Base.BasePoint);
15295
15296MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
15297 return this.point(utils.toArray(bytes, enc), 1);
15298};
15299
15300MontCurve.prototype.point = function point(x, z) {
15301 return new Point(this, x, z);
15302};
15303
15304MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
15305 return Point.fromJSON(this, obj);
15306};
15307
15308Point.prototype.precompute = function precompute() {
15309 // No-op
15310};
15311
15312Point.prototype._encode = function _encode() {
15313 return this.getX().toArray('be', this.curve.p.byteLength());
15314};
15315
15316Point.fromJSON = function fromJSON(curve, obj) {
15317 return new Point(curve, obj[0], obj[1] || curve.one);
15318};
15319
15320Point.prototype.inspect = function inspect() {
15321 if (this.isInfinity())
15322 return '<EC Point Infinity>';
15323 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
15324 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
15325};
15326
15327Point.prototype.isInfinity = function isInfinity() {
15328 // XXX This code assumes that zero is always zero in red
15329 return this.z.cmpn(0) === 0;
15330};
15331
15332Point.prototype.dbl = function dbl() {
15333 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
15334 // 2M + 2S + 4A
15335
15336 // A = X1 + Z1
15337 var a = this.x.redAdd(this.z);
15338 // AA = A^2
15339 var aa = a.redSqr();
15340 // B = X1 - Z1
15341 var b = this.x.redSub(this.z);
15342 // BB = B^2
15343 var bb = b.redSqr();
15344 // C = AA - BB
15345 var c = aa.redSub(bb);
15346 // X3 = AA * BB
15347 var nx = aa.redMul(bb);
15348 // Z3 = C * (BB + A24 * C)
15349 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
15350 return this.curve.point(nx, nz);
15351};
15352
15353Point.prototype.add = function add() {
15354 throw new Error('Not supported on Montgomery curve');
15355};
15356
15357Point.prototype.diffAdd = function diffAdd(p, diff) {
15358 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
15359 // 4M + 2S + 6A
15360
15361 // A = X2 + Z2
15362 var a = this.x.redAdd(this.z);
15363 // B = X2 - Z2
15364 var b = this.x.redSub(this.z);
15365 // C = X3 + Z3
15366 var c = p.x.redAdd(p.z);
15367 // D = X3 - Z3
15368 var d = p.x.redSub(p.z);
15369 // DA = D * A
15370 var da = d.redMul(a);
15371 // CB = C * B
15372 var cb = c.redMul(b);
15373 // X5 = Z1 * (DA + CB)^2
15374 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
15375 // Z5 = X1 * (DA - CB)^2
15376 var nz = diff.x.redMul(da.redISub(cb).redSqr());
15377 return this.curve.point(nx, nz);
15378};
15379
15380Point.prototype.mul = function mul(k) {
15381 var t = k.clone();
15382 var a = this; // (N / 2) * Q + Q
15383 var b = this.curve.point(null, null); // (N / 2) * Q
15384 var c = this; // Q
15385
15386 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
15387 bits.push(t.andln(1));
15388
15389 for (var i = bits.length - 1; i >= 0; i--) {
15390 if (bits[i] === 0) {
15391 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
15392 a = a.diffAdd(b, c);
15393 // N * Q = 2 * ((N / 2) * Q + Q))
15394 b = b.dbl();
15395 } else {
15396 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
15397 b = a.diffAdd(b, c);
15398 // N * Q + Q = 2 * ((N / 2) * Q + Q)
15399 a = a.dbl();
15400 }
15401 }
15402 return b;
15403};
15404
15405Point.prototype.mulAdd = function mulAdd() {
15406 throw new Error('Not supported on Montgomery curve');
15407};
15408
15409Point.prototype.jumlAdd = function jumlAdd() {
15410 throw new Error('Not supported on Montgomery curve');
15411};
15412
15413Point.prototype.eq = function eq(other) {
15414 return this.getX().cmp(other.getX()) === 0;
15415};
15416
15417Point.prototype.normalize = function normalize() {
15418 this.x = this.x.redMul(this.z.redInvm());
15419 this.z = this.curve.one;
15420 return this;
15421};
15422
15423Point.prototype.getX = function getX() {
15424 // Normalize coordinates
15425 this.normalize();
15426
15427 return this.x.fromRed();
15428};
15429
15430},{"../../elliptic":86,"../curve":89,"bn.js":18,"inherits":119}],91:[function(require,module,exports){
15431'use strict';
15432
15433var curve = require('../curve');
15434var elliptic = require('../../elliptic');
15435var BN = require('bn.js');
15436var inherits = require('inherits');
15437var Base = curve.base;
15438
15439var assert = elliptic.utils.assert;
15440
15441function ShortCurve(conf) {
15442 Base.call(this, 'short', conf);
15443
15444 this.a = new BN(conf.a, 16).toRed(this.red);
15445 this.b = new BN(conf.b, 16).toRed(this.red);
15446 this.tinv = this.two.redInvm();
15447
15448 this.zeroA = this.a.fromRed().cmpn(0) === 0;
15449 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
15450
15451 // If the curve is endomorphic, precalculate beta and lambda
15452 this.endo = this._getEndomorphism(conf);
15453 this._endoWnafT1 = new Array(4);
15454 this._endoWnafT2 = new Array(4);
15455}
15456inherits(ShortCurve, Base);
15457module.exports = ShortCurve;
15458
15459ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
15460 // No efficient endomorphism
15461 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
15462 return;
15463
15464 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
15465 var beta;
15466 var lambda;
15467 if (conf.beta) {
15468 beta = new BN(conf.beta, 16).toRed(this.red);
15469 } else {
15470 var betas = this._getEndoRoots(this.p);
15471 // Choose the smallest beta
15472 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
15473 beta = beta.toRed(this.red);
15474 }
15475 if (conf.lambda) {
15476 lambda = new BN(conf.lambda, 16);
15477 } else {
15478 // Choose the lambda that is matching selected beta
15479 var lambdas = this._getEndoRoots(this.n);
15480 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
15481 lambda = lambdas[0];
15482 } else {
15483 lambda = lambdas[1];
15484 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
15485 }
15486 }
15487
15488 // Get basis vectors, used for balanced length-two representation
15489 var basis;
15490 if (conf.basis) {
15491 basis = conf.basis.map(function(vec) {
15492 return {
15493 a: new BN(vec.a, 16),
15494 b: new BN(vec.b, 16)
15495 };
15496 });
15497 } else {
15498 basis = this._getEndoBasis(lambda);
15499 }
15500
15501 return {
15502 beta: beta,
15503 lambda: lambda,
15504 basis: basis
15505 };
15506};
15507
15508ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
15509 // Find roots of for x^2 + x + 1 in F
15510 // Root = (-1 +- Sqrt(-3)) / 2
15511 //
15512 var red = num === this.p ? this.red : BN.mont(num);
15513 var tinv = new BN(2).toRed(red).redInvm();
15514 var ntinv = tinv.redNeg();
15515
15516 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
15517
15518 var l1 = ntinv.redAdd(s).fromRed();
15519 var l2 = ntinv.redSub(s).fromRed();
15520 return [ l1, l2 ];
15521};
15522
15523ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
15524 // aprxSqrt >= sqrt(this.n)
15525 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
15526
15527 // 3.74
15528 // Run EGCD, until r(L + 1) < aprxSqrt
15529 var u = lambda;
15530 var v = this.n.clone();
15531 var x1 = new BN(1);
15532 var y1 = new BN(0);
15533 var x2 = new BN(0);
15534 var y2 = new BN(1);
15535
15536 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
15537 var a0;
15538 var b0;
15539 // First vector
15540 var a1;
15541 var b1;
15542 // Second vector
15543 var a2;
15544 var b2;
15545
15546 var prevR;
15547 var i = 0;
15548 var r;
15549 var x;
15550 while (u.cmpn(0) !== 0) {
15551 var q = v.div(u);
15552 r = v.sub(q.mul(u));
15553 x = x2.sub(q.mul(x1));
15554 var y = y2.sub(q.mul(y1));
15555
15556 if (!a1 && r.cmp(aprxSqrt) < 0) {
15557 a0 = prevR.neg();
15558 b0 = x1;
15559 a1 = r.neg();
15560 b1 = x;
15561 } else if (a1 && ++i === 2) {
15562 break;
15563 }
15564 prevR = r;
15565
15566 v = u;
15567 u = r;
15568 x2 = x1;
15569 x1 = x;
15570 y2 = y1;
15571 y1 = y;
15572 }
15573 a2 = r.neg();
15574 b2 = x;
15575
15576 var len1 = a1.sqr().add(b1.sqr());
15577 var len2 = a2.sqr().add(b2.sqr());
15578 if (len2.cmp(len1) >= 0) {
15579 a2 = a0;
15580 b2 = b0;
15581 }
15582
15583 // Normalize signs
15584 if (a1.negative) {
15585 a1 = a1.neg();
15586 b1 = b1.neg();
15587 }
15588 if (a2.negative) {
15589 a2 = a2.neg();
15590 b2 = b2.neg();
15591 }
15592
15593 return [
15594 { a: a1, b: b1 },
15595 { a: a2, b: b2 }
15596 ];
15597};
15598
15599ShortCurve.prototype._endoSplit = function _endoSplit(k) {
15600 var basis = this.endo.basis;
15601 var v1 = basis[0];
15602 var v2 = basis[1];
15603
15604 var c1 = v2.b.mul(k).divRound(this.n);
15605 var c2 = v1.b.neg().mul(k).divRound(this.n);
15606
15607 var p1 = c1.mul(v1.a);
15608 var p2 = c2.mul(v2.a);
15609 var q1 = c1.mul(v1.b);
15610 var q2 = c2.mul(v2.b);
15611
15612 // Calculate answer
15613 var k1 = k.sub(p1).sub(p2);
15614 var k2 = q1.add(q2).neg();
15615 return { k1: k1, k2: k2 };
15616};
15617
15618ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
15619 x = new BN(x, 16);
15620 if (!x.red)
15621 x = x.toRed(this.red);
15622
15623 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
15624 var y = y2.redSqrt();
15625 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
15626 throw new Error('invalid point');
15627
15628 // XXX Is there any way to tell if the number is odd without converting it
15629 // to non-red form?
15630 var isOdd = y.fromRed().isOdd();
15631 if (odd && !isOdd || !odd && isOdd)
15632 y = y.redNeg();
15633
15634 return this.point(x, y);
15635};
15636
15637ShortCurve.prototype.validate = function validate(point) {
15638 if (point.inf)
15639 return true;
15640
15641 var x = point.x;
15642 var y = point.y;
15643
15644 var ax = this.a.redMul(x);
15645 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
15646 return y.redSqr().redISub(rhs).cmpn(0) === 0;
15647};
15648
15649ShortCurve.prototype._endoWnafMulAdd =
15650 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
15651 var npoints = this._endoWnafT1;
15652 var ncoeffs = this._endoWnafT2;
15653 for (var i = 0; i < points.length; i++) {
15654 var split = this._endoSplit(coeffs[i]);
15655 var p = points[i];
15656 var beta = p._getBeta();
15657
15658 if (split.k1.negative) {
15659 split.k1.ineg();
15660 p = p.neg(true);
15661 }
15662 if (split.k2.negative) {
15663 split.k2.ineg();
15664 beta = beta.neg(true);
15665 }
15666
15667 npoints[i * 2] = p;
15668 npoints[i * 2 + 1] = beta;
15669 ncoeffs[i * 2] = split.k1;
15670 ncoeffs[i * 2 + 1] = split.k2;
15671 }
15672 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
15673
15674 // Clean-up references to points and coefficients
15675 for (var j = 0; j < i * 2; j++) {
15676 npoints[j] = null;
15677 ncoeffs[j] = null;
15678 }
15679 return res;
15680};
15681
15682function Point(curve, x, y, isRed) {
15683 Base.BasePoint.call(this, curve, 'affine');
15684 if (x === null && y === null) {
15685 this.x = null;
15686 this.y = null;
15687 this.inf = true;
15688 } else {
15689 this.x = new BN(x, 16);
15690 this.y = new BN(y, 16);
15691 // Force redgomery representation when loading from JSON
15692 if (isRed) {
15693 this.x.forceRed(this.curve.red);
15694 this.y.forceRed(this.curve.red);
15695 }
15696 if (!this.x.red)
15697 this.x = this.x.toRed(this.curve.red);
15698 if (!this.y.red)
15699 this.y = this.y.toRed(this.curve.red);
15700 this.inf = false;
15701 }
15702}
15703inherits(Point, Base.BasePoint);
15704
15705ShortCurve.prototype.point = function point(x, y, isRed) {
15706 return new Point(this, x, y, isRed);
15707};
15708
15709ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
15710 return Point.fromJSON(this, obj, red);
15711};
15712
15713Point.prototype._getBeta = function _getBeta() {
15714 if (!this.curve.endo)
15715 return;
15716
15717 var pre = this.precomputed;
15718 if (pre && pre.beta)
15719 return pre.beta;
15720
15721 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
15722 if (pre) {
15723 var curve = this.curve;
15724 var endoMul = function(p) {
15725 return curve.point(p.x.redMul(curve.endo.beta), p.y);
15726 };
15727 pre.beta = beta;
15728 beta.precomputed = {
15729 beta: null,
15730 naf: pre.naf && {
15731 wnd: pre.naf.wnd,
15732 points: pre.naf.points.map(endoMul)
15733 },
15734 doubles: pre.doubles && {
15735 step: pre.doubles.step,
15736 points: pre.doubles.points.map(endoMul)
15737 }
15738 };
15739 }
15740 return beta;
15741};
15742
15743Point.prototype.toJSON = function toJSON() {
15744 if (!this.precomputed)
15745 return [ this.x, this.y ];
15746
15747 return [ this.x, this.y, this.precomputed && {
15748 doubles: this.precomputed.doubles && {
15749 step: this.precomputed.doubles.step,
15750 points: this.precomputed.doubles.points.slice(1)
15751 },
15752 naf: this.precomputed.naf && {
15753 wnd: this.precomputed.naf.wnd,
15754 points: this.precomputed.naf.points.slice(1)
15755 }
15756 } ];
15757};
15758
15759Point.fromJSON = function fromJSON(curve, obj, red) {
15760 if (typeof obj === 'string')
15761 obj = JSON.parse(obj);
15762 var res = curve.point(obj[0], obj[1], red);
15763 if (!obj[2])
15764 return res;
15765
15766 function obj2point(obj) {
15767 return curve.point(obj[0], obj[1], red);
15768 }
15769
15770 var pre = obj[2];
15771 res.precomputed = {
15772 beta: null,
15773 doubles: pre.doubles && {
15774 step: pre.doubles.step,
15775 points: [ res ].concat(pre.doubles.points.map(obj2point))
15776 },
15777 naf: pre.naf && {
15778 wnd: pre.naf.wnd,
15779 points: [ res ].concat(pre.naf.points.map(obj2point))
15780 }
15781 };
15782 return res;
15783};
15784
15785Point.prototype.inspect = function inspect() {
15786 if (this.isInfinity())
15787 return '<EC Point Infinity>';
15788 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
15789 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
15790};
15791
15792Point.prototype.isInfinity = function isInfinity() {
15793 return this.inf;
15794};
15795
15796Point.prototype.add = function add(p) {
15797 // O + P = P
15798 if (this.inf)
15799 return p;
15800
15801 // P + O = P
15802 if (p.inf)
15803 return this;
15804
15805 // P + P = 2P
15806 if (this.eq(p))
15807 return this.dbl();
15808
15809 // P + (-P) = O
15810 if (this.neg().eq(p))
15811 return this.curve.point(null, null);
15812
15813 // P + Q = O
15814 if (this.x.cmp(p.x) === 0)
15815 return this.curve.point(null, null);
15816
15817 var c = this.y.redSub(p.y);
15818 if (c.cmpn(0) !== 0)
15819 c = c.redMul(this.x.redSub(p.x).redInvm());
15820 var nx = c.redSqr().redISub(this.x).redISub(p.x);
15821 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
15822 return this.curve.point(nx, ny);
15823};
15824
15825Point.prototype.dbl = function dbl() {
15826 if (this.inf)
15827 return this;
15828
15829 // 2P = O
15830 var ys1 = this.y.redAdd(this.y);
15831 if (ys1.cmpn(0) === 0)
15832 return this.curve.point(null, null);
15833
15834 var a = this.curve.a;
15835
15836 var x2 = this.x.redSqr();
15837 var dyinv = ys1.redInvm();
15838 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
15839
15840 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
15841 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
15842 return this.curve.point(nx, ny);
15843};
15844
15845Point.prototype.getX = function getX() {
15846 return this.x.fromRed();
15847};
15848
15849Point.prototype.getY = function getY() {
15850 return this.y.fromRed();
15851};
15852
15853Point.prototype.mul = function mul(k) {
15854 k = new BN(k, 16);
15855
15856 if (this._hasDoubles(k))
15857 return this.curve._fixedNafMul(this, k);
15858 else if (this.curve.endo)
15859 return this.curve._endoWnafMulAdd([ this ], [ k ]);
15860 else
15861 return this.curve._wnafMul(this, k);
15862};
15863
15864Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
15865 var points = [ this, p2 ];
15866 var coeffs = [ k1, k2 ];
15867 if (this.curve.endo)
15868 return this.curve._endoWnafMulAdd(points, coeffs);
15869 else
15870 return this.curve._wnafMulAdd(1, points, coeffs, 2);
15871};
15872
15873Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
15874 var points = [ this, p2 ];
15875 var coeffs = [ k1, k2 ];
15876 if (this.curve.endo)
15877 return this.curve._endoWnafMulAdd(points, coeffs, true);
15878 else
15879 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
15880};
15881
15882Point.prototype.eq = function eq(p) {
15883 return this === p ||
15884 this.inf === p.inf &&
15885 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
15886};
15887
15888Point.prototype.neg = function neg(_precompute) {
15889 if (this.inf)
15890 return this;
15891
15892 var res = this.curve.point(this.x, this.y.redNeg());
15893 if (_precompute && this.precomputed) {
15894 var pre = this.precomputed;
15895 var negate = function(p) {
15896 return p.neg();
15897 };
15898 res.precomputed = {
15899 naf: pre.naf && {
15900 wnd: pre.naf.wnd,
15901 points: pre.naf.points.map(negate)
15902 },
15903 doubles: pre.doubles && {
15904 step: pre.doubles.step,
15905 points: pre.doubles.points.map(negate)
15906 }
15907 };
15908 }
15909 return res;
15910};
15911
15912Point.prototype.toJ = function toJ() {
15913 if (this.inf)
15914 return this.curve.jpoint(null, null, null);
15915
15916 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
15917 return res;
15918};
15919
15920function JPoint(curve, x, y, z) {
15921 Base.BasePoint.call(this, curve, 'jacobian');
15922 if (x === null && y === null && z === null) {
15923 this.x = this.curve.one;
15924 this.y = this.curve.one;
15925 this.z = new BN(0);
15926 } else {
15927 this.x = new BN(x, 16);
15928 this.y = new BN(y, 16);
15929 this.z = new BN(z, 16);
15930 }
15931 if (!this.x.red)
15932 this.x = this.x.toRed(this.curve.red);
15933 if (!this.y.red)
15934 this.y = this.y.toRed(this.curve.red);
15935 if (!this.z.red)
15936 this.z = this.z.toRed(this.curve.red);
15937
15938 this.zOne = this.z === this.curve.one;
15939}
15940inherits(JPoint, Base.BasePoint);
15941
15942ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
15943 return new JPoint(this, x, y, z);
15944};
15945
15946JPoint.prototype.toP = function toP() {
15947 if (this.isInfinity())
15948 return this.curve.point(null, null);
15949
15950 var zinv = this.z.redInvm();
15951 var zinv2 = zinv.redSqr();
15952 var ax = this.x.redMul(zinv2);
15953 var ay = this.y.redMul(zinv2).redMul(zinv);
15954
15955 return this.curve.point(ax, ay);
15956};
15957
15958JPoint.prototype.neg = function neg() {
15959 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
15960};
15961
15962JPoint.prototype.add = function add(p) {
15963 // O + P = P
15964 if (this.isInfinity())
15965 return p;
15966
15967 // P + O = P
15968 if (p.isInfinity())
15969 return this;
15970
15971 // 12M + 4S + 7A
15972 var pz2 = p.z.redSqr();
15973 var z2 = this.z.redSqr();
15974 var u1 = this.x.redMul(pz2);
15975 var u2 = p.x.redMul(z2);
15976 var s1 = this.y.redMul(pz2.redMul(p.z));
15977 var s2 = p.y.redMul(z2.redMul(this.z));
15978
15979 var h = u1.redSub(u2);
15980 var r = s1.redSub(s2);
15981 if (h.cmpn(0) === 0) {
15982 if (r.cmpn(0) !== 0)
15983 return this.curve.jpoint(null, null, null);
15984 else
15985 return this.dbl();
15986 }
15987
15988 var h2 = h.redSqr();
15989 var h3 = h2.redMul(h);
15990 var v = u1.redMul(h2);
15991
15992 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
15993 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
15994 var nz = this.z.redMul(p.z).redMul(h);
15995
15996 return this.curve.jpoint(nx, ny, nz);
15997};
15998
15999JPoint.prototype.mixedAdd = function mixedAdd(p) {
16000 // O + P = P
16001 if (this.isInfinity())
16002 return p.toJ();
16003
16004 // P + O = P
16005 if (p.isInfinity())
16006 return this;
16007
16008 // 8M + 3S + 7A
16009 var z2 = this.z.redSqr();
16010 var u1 = this.x;
16011 var u2 = p.x.redMul(z2);
16012 var s1 = this.y;
16013 var s2 = p.y.redMul(z2).redMul(this.z);
16014
16015 var h = u1.redSub(u2);
16016 var r = s1.redSub(s2);
16017 if (h.cmpn(0) === 0) {
16018 if (r.cmpn(0) !== 0)
16019 return this.curve.jpoint(null, null, null);
16020 else
16021 return this.dbl();
16022 }
16023
16024 var h2 = h.redSqr();
16025 var h3 = h2.redMul(h);
16026 var v = u1.redMul(h2);
16027
16028 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
16029 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
16030 var nz = this.z.redMul(h);
16031
16032 return this.curve.jpoint(nx, ny, nz);
16033};
16034
16035JPoint.prototype.dblp = function dblp(pow) {
16036 if (pow === 0)
16037 return this;
16038 if (this.isInfinity())
16039 return this;
16040 if (!pow)
16041 return this.dbl();
16042
16043 if (this.curve.zeroA || this.curve.threeA) {
16044 var r = this;
16045 for (var i = 0; i < pow; i++)
16046 r = r.dbl();
16047 return r;
16048 }
16049
16050 // 1M + 2S + 1A + N * (4S + 5M + 8A)
16051 // N = 1 => 6M + 6S + 9A
16052 var a = this.curve.a;
16053 var tinv = this.curve.tinv;
16054
16055 var jx = this.x;
16056 var jy = this.y;
16057 var jz = this.z;
16058 var jz4 = jz.redSqr().redSqr();
16059
16060 // Reuse results
16061 var jyd = jy.redAdd(jy);
16062 for (var i = 0; i < pow; i++) {
16063 var jx2 = jx.redSqr();
16064 var jyd2 = jyd.redSqr();
16065 var jyd4 = jyd2.redSqr();
16066 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
16067
16068 var t1 = jx.redMul(jyd2);
16069 var nx = c.redSqr().redISub(t1.redAdd(t1));
16070 var t2 = t1.redISub(nx);
16071 var dny = c.redMul(t2);
16072 dny = dny.redIAdd(dny).redISub(jyd4);
16073 var nz = jyd.redMul(jz);
16074 if (i + 1 < pow)
16075 jz4 = jz4.redMul(jyd4);
16076
16077 jx = nx;
16078 jz = nz;
16079 jyd = dny;
16080 }
16081
16082 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
16083};
16084
16085JPoint.prototype.dbl = function dbl() {
16086 if (this.isInfinity())
16087 return this;
16088
16089 if (this.curve.zeroA)
16090 return this._zeroDbl();
16091 else if (this.curve.threeA)
16092 return this._threeDbl();
16093 else
16094 return this._dbl();
16095};
16096
16097JPoint.prototype._zeroDbl = function _zeroDbl() {
16098 var nx;
16099 var ny;
16100 var nz;
16101 // Z = 1
16102 if (this.zOne) {
16103 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
16104 // #doubling-mdbl-2007-bl
16105 // 1M + 5S + 14A
16106
16107 // XX = X1^2
16108 var xx = this.x.redSqr();
16109 // YY = Y1^2
16110 var yy = this.y.redSqr();
16111 // YYYY = YY^2
16112 var yyyy = yy.redSqr();
16113 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
16114 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
16115 s = s.redIAdd(s);
16116 // M = 3 * XX + a; a = 0
16117 var m = xx.redAdd(xx).redIAdd(xx);
16118 // T = M ^ 2 - 2*S
16119 var t = m.redSqr().redISub(s).redISub(s);
16120
16121 // 8 * YYYY
16122 var yyyy8 = yyyy.redIAdd(yyyy);
16123 yyyy8 = yyyy8.redIAdd(yyyy8);
16124 yyyy8 = yyyy8.redIAdd(yyyy8);
16125
16126 // X3 = T
16127 nx = t;
16128 // Y3 = M * (S - T) - 8 * YYYY
16129 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
16130 // Z3 = 2*Y1
16131 nz = this.y.redAdd(this.y);
16132 } else {
16133 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
16134 // #doubling-dbl-2009-l
16135 // 2M + 5S + 13A
16136
16137 // A = X1^2
16138 var a = this.x.redSqr();
16139 // B = Y1^2
16140 var b = this.y.redSqr();
16141 // C = B^2
16142 var c = b.redSqr();
16143 // D = 2 * ((X1 + B)^2 - A - C)
16144 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
16145 d = d.redIAdd(d);
16146 // E = 3 * A
16147 var e = a.redAdd(a).redIAdd(a);
16148 // F = E^2
16149 var f = e.redSqr();
16150
16151 // 8 * C
16152 var c8 = c.redIAdd(c);
16153 c8 = c8.redIAdd(c8);
16154 c8 = c8.redIAdd(c8);
16155
16156 // X3 = F - 2 * D
16157 nx = f.redISub(d).redISub(d);
16158 // Y3 = E * (D - X3) - 8 * C
16159 ny = e.redMul(d.redISub(nx)).redISub(c8);
16160 // Z3 = 2 * Y1 * Z1
16161 nz = this.y.redMul(this.z);
16162 nz = nz.redIAdd(nz);
16163 }
16164
16165 return this.curve.jpoint(nx, ny, nz);
16166};
16167
16168JPoint.prototype._threeDbl = function _threeDbl() {
16169 var nx;
16170 var ny;
16171 var nz;
16172 // Z = 1
16173 if (this.zOne) {
16174 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
16175 // #doubling-mdbl-2007-bl
16176 // 1M + 5S + 15A
16177
16178 // XX = X1^2
16179 var xx = this.x.redSqr();
16180 // YY = Y1^2
16181 var yy = this.y.redSqr();
16182 // YYYY = YY^2
16183 var yyyy = yy.redSqr();
16184 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
16185 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
16186 s = s.redIAdd(s);
16187 // M = 3 * XX + a
16188 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
16189 // T = M^2 - 2 * S
16190 var t = m.redSqr().redISub(s).redISub(s);
16191 // X3 = T
16192 nx = t;
16193 // Y3 = M * (S - T) - 8 * YYYY
16194 var yyyy8 = yyyy.redIAdd(yyyy);
16195 yyyy8 = yyyy8.redIAdd(yyyy8);
16196 yyyy8 = yyyy8.redIAdd(yyyy8);
16197 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
16198 // Z3 = 2 * Y1
16199 nz = this.y.redAdd(this.y);
16200 } else {
16201 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
16202 // 3M + 5S
16203
16204 // delta = Z1^2
16205 var delta = this.z.redSqr();
16206 // gamma = Y1^2
16207 var gamma = this.y.redSqr();
16208 // beta = X1 * gamma
16209 var beta = this.x.redMul(gamma);
16210 // alpha = 3 * (X1 - delta) * (X1 + delta)
16211 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
16212 alpha = alpha.redAdd(alpha).redIAdd(alpha);
16213 // X3 = alpha^2 - 8 * beta
16214 var beta4 = beta.redIAdd(beta);
16215 beta4 = beta4.redIAdd(beta4);
16216 var beta8 = beta4.redAdd(beta4);
16217 nx = alpha.redSqr().redISub(beta8);
16218 // Z3 = (Y1 + Z1)^2 - gamma - delta
16219 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
16220 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
16221 var ggamma8 = gamma.redSqr();
16222 ggamma8 = ggamma8.redIAdd(ggamma8);
16223 ggamma8 = ggamma8.redIAdd(ggamma8);
16224 ggamma8 = ggamma8.redIAdd(ggamma8);
16225 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
16226 }
16227
16228 return this.curve.jpoint(nx, ny, nz);
16229};
16230
16231JPoint.prototype._dbl = function _dbl() {
16232 var a = this.curve.a;
16233
16234 // 4M + 6S + 10A
16235 var jx = this.x;
16236 var jy = this.y;
16237 var jz = this.z;
16238 var jz4 = jz.redSqr().redSqr();
16239
16240 var jx2 = jx.redSqr();
16241 var jy2 = jy.redSqr();
16242
16243 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
16244
16245 var jxd4 = jx.redAdd(jx);
16246 jxd4 = jxd4.redIAdd(jxd4);
16247 var t1 = jxd4.redMul(jy2);
16248 var nx = c.redSqr().redISub(t1.redAdd(t1));
16249 var t2 = t1.redISub(nx);
16250
16251 var jyd8 = jy2.redSqr();
16252 jyd8 = jyd8.redIAdd(jyd8);
16253 jyd8 = jyd8.redIAdd(jyd8);
16254 jyd8 = jyd8.redIAdd(jyd8);
16255 var ny = c.redMul(t2).redISub(jyd8);
16256 var nz = jy.redAdd(jy).redMul(jz);
16257
16258 return this.curve.jpoint(nx, ny, nz);
16259};
16260
16261JPoint.prototype.trpl = function trpl() {
16262 if (!this.curve.zeroA)
16263 return this.dbl().add(this);
16264
16265 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
16266 // 5M + 10S + ...
16267
16268 // XX = X1^2
16269 var xx = this.x.redSqr();
16270 // YY = Y1^2
16271 var yy = this.y.redSqr();
16272 // ZZ = Z1^2
16273 var zz = this.z.redSqr();
16274 // YYYY = YY^2
16275 var yyyy = yy.redSqr();
16276 // M = 3 * XX + a * ZZ2; a = 0
16277 var m = xx.redAdd(xx).redIAdd(xx);
16278 // MM = M^2
16279 var mm = m.redSqr();
16280 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
16281 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
16282 e = e.redIAdd(e);
16283 e = e.redAdd(e).redIAdd(e);
16284 e = e.redISub(mm);
16285 // EE = E^2
16286 var ee = e.redSqr();
16287 // T = 16*YYYY
16288 var t = yyyy.redIAdd(yyyy);
16289 t = t.redIAdd(t);
16290 t = t.redIAdd(t);
16291 t = t.redIAdd(t);
16292 // U = (M + E)^2 - MM - EE - T
16293 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
16294 // X3 = 4 * (X1 * EE - 4 * YY * U)
16295 var yyu4 = yy.redMul(u);
16296 yyu4 = yyu4.redIAdd(yyu4);
16297 yyu4 = yyu4.redIAdd(yyu4);
16298 var nx = this.x.redMul(ee).redISub(yyu4);
16299 nx = nx.redIAdd(nx);
16300 nx = nx.redIAdd(nx);
16301 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
16302 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
16303 ny = ny.redIAdd(ny);
16304 ny = ny.redIAdd(ny);
16305 ny = ny.redIAdd(ny);
16306 // Z3 = (Z1 + E)^2 - ZZ - EE
16307 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
16308
16309 return this.curve.jpoint(nx, ny, nz);
16310};
16311
16312JPoint.prototype.mul = function mul(k, kbase) {
16313 k = new BN(k, kbase);
16314
16315 return this.curve._wnafMul(this, k);
16316};
16317
16318JPoint.prototype.eq = function eq(p) {
16319 if (p.type === 'affine')
16320 return this.eq(p.toJ());
16321
16322 if (this === p)
16323 return true;
16324
16325 // x1 * z2^2 == x2 * z1^2
16326 var z2 = this.z.redSqr();
16327 var pz2 = p.z.redSqr();
16328 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
16329 return false;
16330
16331 // y1 * z2^3 == y2 * z1^3
16332 var z3 = z2.redMul(this.z);
16333 var pz3 = pz2.redMul(p.z);
16334 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
16335};
16336
16337JPoint.prototype.eqXToP = function eqXToP(x) {
16338 var zs = this.z.redSqr();
16339 var rx = x.toRed(this.curve.red).redMul(zs);
16340 if (this.x.cmp(rx) === 0)
16341 return true;
16342
16343 var xc = x.clone();
16344 var t = this.curve.redN.redMul(zs);
16345 for (;;) {
16346 xc.iadd(this.curve.n);
16347 if (xc.cmp(this.curve.p) >= 0)
16348 return false;
16349
16350 rx.redIAdd(t);
16351 if (this.x.cmp(rx) === 0)
16352 return true;
16353 }
16354};
16355
16356JPoint.prototype.inspect = function inspect() {
16357 if (this.isInfinity())
16358 return '<EC JPoint Infinity>';
16359 return '<EC JPoint x: ' + this.x.toString(16, 2) +
16360 ' y: ' + this.y.toString(16, 2) +
16361 ' z: ' + this.z.toString(16, 2) + '>';
16362};
16363
16364JPoint.prototype.isInfinity = function isInfinity() {
16365 // XXX This code assumes that zero is always zero in red
16366 return this.z.cmpn(0) === 0;
16367};
16368
16369},{"../../elliptic":86,"../curve":89,"bn.js":18,"inherits":119}],92:[function(require,module,exports){
16370'use strict';
16371
16372var curves = exports;
16373
16374var hash = require('hash.js');
16375var elliptic = require('../elliptic');
16376
16377var assert = elliptic.utils.assert;
16378
16379function PresetCurve(options) {
16380 if (options.type === 'short')
16381 this.curve = new elliptic.curve.short(options);
16382 else if (options.type === 'edwards')
16383 this.curve = new elliptic.curve.edwards(options);
16384 else
16385 this.curve = new elliptic.curve.mont(options);
16386 this.g = this.curve.g;
16387 this.n = this.curve.n;
16388 this.hash = options.hash;
16389
16390 assert(this.g.validate(), 'Invalid curve');
16391 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
16392}
16393curves.PresetCurve = PresetCurve;
16394
16395function defineCurve(name, options) {
16396 Object.defineProperty(curves, name, {
16397 configurable: true,
16398 enumerable: true,
16399 get: function() {
16400 var curve = new PresetCurve(options);
16401 Object.defineProperty(curves, name, {
16402 configurable: true,
16403 enumerable: true,
16404 value: curve
16405 });
16406 return curve;
16407 }
16408 });
16409}
16410
16411defineCurve('p192', {
16412 type: 'short',
16413 prime: 'p192',
16414 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
16415 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
16416 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
16417 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
16418 hash: hash.sha256,
16419 gRed: false,
16420 g: [
16421 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
16422 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
16423 ]
16424});
16425
16426defineCurve('p224', {
16427 type: 'short',
16428 prime: 'p224',
16429 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
16430 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
16431 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
16432 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
16433 hash: hash.sha256,
16434 gRed: false,
16435 g: [
16436 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
16437 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
16438 ]
16439});
16440
16441defineCurve('p256', {
16442 type: 'short',
16443 prime: null,
16444 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
16445 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
16446 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
16447 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
16448 hash: hash.sha256,
16449 gRed: false,
16450 g: [
16451 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
16452 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
16453 ]
16454});
16455
16456defineCurve('p384', {
16457 type: 'short',
16458 prime: null,
16459 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16460 'fffffffe ffffffff 00000000 00000000 ffffffff',
16461 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16462 'fffffffe ffffffff 00000000 00000000 fffffffc',
16463 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
16464 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
16465 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
16466 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
16467 hash: hash.sha384,
16468 gRed: false,
16469 g: [
16470 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
16471 '5502f25d bf55296c 3a545e38 72760ab7',
16472 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
16473 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
16474 ]
16475});
16476
16477defineCurve('p521', {
16478 type: 'short',
16479 prime: null,
16480 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16481 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16482 'ffffffff ffffffff ffffffff ffffffff ffffffff',
16483 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16484 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16485 'ffffffff ffffffff ffffffff ffffffff fffffffc',
16486 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
16487 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
16488 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
16489 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
16490 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
16491 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
16492 hash: hash.sha512,
16493 gRed: false,
16494 g: [
16495 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
16496 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
16497 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
16498 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
16499 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
16500 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
16501 ]
16502});
16503
16504defineCurve('curve25519', {
16505 type: 'mont',
16506 prime: 'p25519',
16507 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
16508 a: '76d06',
16509 b: '1',
16510 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
16511 hash: hash.sha256,
16512 gRed: false,
16513 g: [
16514 '9'
16515 ]
16516});
16517
16518defineCurve('ed25519', {
16519 type: 'edwards',
16520 prime: 'p25519',
16521 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
16522 a: '-1',
16523 c: '1',
16524 // -121665 * (121666^(-1)) (mod P)
16525 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
16526 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
16527 hash: hash.sha256,
16528 gRed: false,
16529 g: [
16530 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
16531
16532 // 4/5
16533 '6666666666666666666666666666666666666666666666666666666666666658'
16534 ]
16535});
16536
16537var pre;
16538try {
16539 pre = require('./precomputed/secp256k1');
16540} catch (e) {
16541 pre = undefined;
16542}
16543
16544defineCurve('secp256k1', {
16545 type: 'short',
16546 prime: 'k256',
16547 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
16548 a: '0',
16549 b: '7',
16550 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
16551 h: '1',
16552 hash: hash.sha256,
16553
16554 // Precomputed endomorphism
16555 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
16556 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
16557 basis: [
16558 {
16559 a: '3086d221a7d46bcde86c90e49284eb15',
16560 b: '-e4437ed6010e88286f547fa90abfe4c3'
16561 },
16562 {
16563 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
16564 b: '3086d221a7d46bcde86c90e49284eb15'
16565 }
16566 ],
16567
16568 gRed: false,
16569 g: [
16570 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
16571 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
16572 pre
16573 ]
16574});
16575
16576},{"../elliptic":86,"./precomputed/secp256k1":99,"hash.js":105}],93:[function(require,module,exports){
16577'use strict';
16578
16579var BN = require('bn.js');
16580var HmacDRBG = require('hmac-drbg');
16581var elliptic = require('../../elliptic');
16582var utils = elliptic.utils;
16583var assert = utils.assert;
16584
16585var KeyPair = require('./key');
16586var Signature = require('./signature');
16587
16588function EC(options) {
16589 if (!(this instanceof EC))
16590 return new EC(options);
16591
16592 // Shortcut `elliptic.ec(curve-name)`
16593 if (typeof options === 'string') {
16594 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
16595
16596 options = elliptic.curves[options];
16597 }
16598
16599 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
16600 if (options instanceof elliptic.curves.PresetCurve)
16601 options = { curve: options };
16602
16603 this.curve = options.curve.curve;
16604 this.n = this.curve.n;
16605 this.nh = this.n.ushrn(1);
16606 this.g = this.curve.g;
16607
16608 // Point on curve
16609 this.g = options.curve.g;
16610 this.g.precompute(options.curve.n.bitLength() + 1);
16611
16612 // Hash for function for DRBG
16613 this.hash = options.hash || options.curve.hash;
16614}
16615module.exports = EC;
16616
16617EC.prototype.keyPair = function keyPair(options) {
16618 return new KeyPair(this, options);
16619};
16620
16621EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
16622 return KeyPair.fromPrivate(this, priv, enc);
16623};
16624
16625EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
16626 return KeyPair.fromPublic(this, pub, enc);
16627};
16628
16629EC.prototype.genKeyPair = function genKeyPair(options) {
16630 if (!options)
16631 options = {};
16632
16633 // Instantiate Hmac_DRBG
16634 var drbg = new HmacDRBG({
16635 hash: this.hash,
16636 pers: options.pers,
16637 persEnc: options.persEnc || 'utf8',
16638 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
16639 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
16640 nonce: this.n.toArray()
16641 });
16642
16643 var bytes = this.n.byteLength();
16644 var ns2 = this.n.sub(new BN(2));
16645 do {
16646 var priv = new BN(drbg.generate(bytes));
16647 if (priv.cmp(ns2) > 0)
16648 continue;
16649
16650 priv.iaddn(1);
16651 return this.keyFromPrivate(priv);
16652 } while (true);
16653};
16654
16655EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
16656 var delta = msg.byteLength() * 8 - this.n.bitLength();
16657 if (delta > 0)
16658 msg = msg.ushrn(delta);
16659 if (!truncOnly && msg.cmp(this.n) >= 0)
16660 return msg.sub(this.n);
16661 else
16662 return msg;
16663};
16664
16665EC.prototype.sign = function sign(msg, key, enc, options) {
16666 if (typeof enc === 'object') {
16667 options = enc;
16668 enc = null;
16669 }
16670 if (!options)
16671 options = {};
16672
16673 key = this.keyFromPrivate(key, enc);
16674 msg = this._truncateToN(new BN(msg, 16));
16675
16676 // Zero-extend key to provide enough entropy
16677 var bytes = this.n.byteLength();
16678 var bkey = key.getPrivate().toArray('be', bytes);
16679
16680 // Zero-extend nonce to have the same byte size as N
16681 var nonce = msg.toArray('be', bytes);
16682
16683 // Instantiate Hmac_DRBG
16684 var drbg = new HmacDRBG({
16685 hash: this.hash,
16686 entropy: bkey,
16687 nonce: nonce,
16688 pers: options.pers,
16689 persEnc: options.persEnc || 'utf8'
16690 });
16691
16692 // Number of bytes to generate
16693 var ns1 = this.n.sub(new BN(1));
16694
16695 for (var iter = 0; true; iter++) {
16696 var k = options.k ?
16697 options.k(iter) :
16698 new BN(drbg.generate(this.n.byteLength()));
16699 k = this._truncateToN(k, true);
16700 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
16701 continue;
16702
16703 var kp = this.g.mul(k);
16704 if (kp.isInfinity())
16705 continue;
16706
16707 var kpX = kp.getX();
16708 var r = kpX.umod(this.n);
16709 if (r.cmpn(0) === 0)
16710 continue;
16711
16712 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
16713 s = s.umod(this.n);
16714 if (s.cmpn(0) === 0)
16715 continue;
16716
16717 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
16718 (kpX.cmp(r) !== 0 ? 2 : 0);
16719
16720 // Use complement of `s`, if it is > `n / 2`
16721 if (options.canonical && s.cmp(this.nh) > 0) {
16722 s = this.n.sub(s);
16723 recoveryParam ^= 1;
16724 }
16725
16726 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
16727 }
16728};
16729
16730EC.prototype.verify = function verify(msg, signature, key, enc) {
16731 msg = this._truncateToN(new BN(msg, 16));
16732 key = this.keyFromPublic(key, enc);
16733 signature = new Signature(signature, 'hex');
16734
16735 // Perform primitive values validation
16736 var r = signature.r;
16737 var s = signature.s;
16738 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
16739 return false;
16740 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
16741 return false;
16742
16743 // Validate signature
16744 var sinv = s.invm(this.n);
16745 var u1 = sinv.mul(msg).umod(this.n);
16746 var u2 = sinv.mul(r).umod(this.n);
16747
16748 if (!this.curve._maxwellTrick) {
16749 var p = this.g.mulAdd(u1, key.getPublic(), u2);
16750 if (p.isInfinity())
16751 return false;
16752
16753 return p.getX().umod(this.n).cmp(r) === 0;
16754 }
16755
16756 // NOTE: Greg Maxwell's trick, inspired by:
16757 // https://git.io/vad3K
16758
16759 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
16760 if (p.isInfinity())
16761 return false;
16762
16763 // Compare `p.x` of Jacobian point with `r`,
16764 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
16765 // inverse of `p.z^2`
16766 return p.eqXToP(r);
16767};
16768
16769EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
16770 assert((3 & j) === j, 'The recovery param is more than two bits');
16771 signature = new Signature(signature, enc);
16772
16773 var n = this.n;
16774 var e = new BN(msg);
16775 var r = signature.r;
16776 var s = signature.s;
16777
16778 // A set LSB signifies that the y-coordinate is odd
16779 var isYOdd = j & 1;
16780 var isSecondKey = j >> 1;
16781 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
16782 throw new Error('Unable to find sencond key candinate');
16783
16784 // 1.1. Let x = r + jn.
16785 if (isSecondKey)
16786 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
16787 else
16788 r = this.curve.pointFromX(r, isYOdd);
16789
16790 var rInv = signature.r.invm(n);
16791 var s1 = n.sub(e).mul(rInv).umod(n);
16792 var s2 = s.mul(rInv).umod(n);
16793
16794 // 1.6.1 Compute Q = r^-1 (sR - eG)
16795 // Q = r^-1 (sR + -eG)
16796 return this.g.mulAdd(s1, r, s2);
16797};
16798
16799EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
16800 signature = new Signature(signature, enc);
16801 if (signature.recoveryParam !== null)
16802 return signature.recoveryParam;
16803
16804 for (var i = 0; i < 4; i++) {
16805 var Qprime;
16806 try {
16807 Qprime = this.recoverPubKey(e, signature, i);
16808 } catch (e) {
16809 continue;
16810 }
16811
16812 if (Qprime.eq(Q))
16813 return i;
16814 }
16815 throw new Error('Unable to find valid recovery factor');
16816};
16817
16818},{"../../elliptic":86,"./key":94,"./signature":95,"bn.js":18,"hmac-drbg":117}],94:[function(require,module,exports){
16819'use strict';
16820
16821var BN = require('bn.js');
16822var elliptic = require('../../elliptic');
16823var utils = elliptic.utils;
16824var assert = utils.assert;
16825
16826function KeyPair(ec, options) {
16827 this.ec = ec;
16828 this.priv = null;
16829 this.pub = null;
16830
16831 // KeyPair(ec, { priv: ..., pub: ... })
16832 if (options.priv)
16833 this._importPrivate(options.priv, options.privEnc);
16834 if (options.pub)
16835 this._importPublic(options.pub, options.pubEnc);
16836}
16837module.exports = KeyPair;
16838
16839KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
16840 if (pub instanceof KeyPair)
16841 return pub;
16842
16843 return new KeyPair(ec, {
16844 pub: pub,
16845 pubEnc: enc
16846 });
16847};
16848
16849KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
16850 if (priv instanceof KeyPair)
16851 return priv;
16852
16853 return new KeyPair(ec, {
16854 priv: priv,
16855 privEnc: enc
16856 });
16857};
16858
16859KeyPair.prototype.validate = function validate() {
16860 var pub = this.getPublic();
16861
16862 if (pub.isInfinity())
16863 return { result: false, reason: 'Invalid public key' };
16864 if (!pub.validate())
16865 return { result: false, reason: 'Public key is not a point' };
16866 if (!pub.mul(this.ec.curve.n).isInfinity())
16867 return { result: false, reason: 'Public key * N != O' };
16868
16869 return { result: true, reason: null };
16870};
16871
16872KeyPair.prototype.getPublic = function getPublic(compact, enc) {
16873 // compact is optional argument
16874 if (typeof compact === 'string') {
16875 enc = compact;
16876 compact = null;
16877 }
16878
16879 if (!this.pub)
16880 this.pub = this.ec.g.mul(this.priv);
16881
16882 if (!enc)
16883 return this.pub;
16884
16885 return this.pub.encode(enc, compact);
16886};
16887
16888KeyPair.prototype.getPrivate = function getPrivate(enc) {
16889 if (enc === 'hex')
16890 return this.priv.toString(16, 2);
16891 else
16892 return this.priv;
16893};
16894
16895KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
16896 this.priv = new BN(key, enc || 16);
16897
16898 // Ensure that the priv won't be bigger than n, otherwise we may fail
16899 // in fixed multiplication method
16900 this.priv = this.priv.umod(this.ec.curve.n);
16901};
16902
16903KeyPair.prototype._importPublic = function _importPublic(key, enc) {
16904 if (key.x || key.y) {
16905 // Montgomery points only have an `x` coordinate.
16906 // Weierstrass/Edwards points on the other hand have both `x` and
16907 // `y` coordinates.
16908 if (this.ec.curve.type === 'mont') {
16909 assert(key.x, 'Need x coordinate');
16910 } else if (this.ec.curve.type === 'short' ||
16911 this.ec.curve.type === 'edwards') {
16912 assert(key.x && key.y, 'Need both x and y coordinate');
16913 }
16914 this.pub = this.ec.curve.point(key.x, key.y);
16915 return;
16916 }
16917 this.pub = this.ec.curve.decodePoint(key, enc);
16918};
16919
16920// ECDH
16921KeyPair.prototype.derive = function derive(pub) {
16922 return pub.mul(this.priv).getX();
16923};
16924
16925// ECDSA
16926KeyPair.prototype.sign = function sign(msg, enc, options) {
16927 return this.ec.sign(msg, this, enc, options);
16928};
16929
16930KeyPair.prototype.verify = function verify(msg, signature) {
16931 return this.ec.verify(msg, signature, this);
16932};
16933
16934KeyPair.prototype.inspect = function inspect() {
16935 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
16936 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
16937};
16938
16939},{"../../elliptic":86,"bn.js":18}],95:[function(require,module,exports){
16940'use strict';
16941
16942var BN = require('bn.js');
16943
16944var elliptic = require('../../elliptic');
16945var utils = elliptic.utils;
16946var assert = utils.assert;
16947
16948function Signature(options, enc) {
16949 if (options instanceof Signature)
16950 return options;
16951
16952 if (this._importDER(options, enc))
16953 return;
16954
16955 assert(options.r && options.s, 'Signature without r or s');
16956 this.r = new BN(options.r, 16);
16957 this.s = new BN(options.s, 16);
16958 if (options.recoveryParam === undefined)
16959 this.recoveryParam = null;
16960 else
16961 this.recoveryParam = options.recoveryParam;
16962}
16963module.exports = Signature;
16964
16965function Position() {
16966 this.place = 0;
16967}
16968
16969function getLength(buf, p) {
16970 var initial = buf[p.place++];
16971 if (!(initial & 0x80)) {
16972 return initial;
16973 }
16974 var octetLen = initial & 0xf;
16975 var val = 0;
16976 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
16977 val <<= 8;
16978 val |= buf[off];
16979 }
16980 p.place = off;
16981 return val;
16982}
16983
16984function rmPadding(buf) {
16985 var i = 0;
16986 var len = buf.length - 1;
16987 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
16988 i++;
16989 }
16990 if (i === 0) {
16991 return buf;
16992 }
16993 return buf.slice(i);
16994}
16995
16996Signature.prototype._importDER = function _importDER(data, enc) {
16997 data = utils.toArray(data, enc);
16998 var p = new Position();
16999 if (data[p.place++] !== 0x30) {
17000 return false;
17001 }
17002 var len = getLength(data, p);
17003 if ((len + p.place) !== data.length) {
17004 return false;
17005 }
17006 if (data[p.place++] !== 0x02) {
17007 return false;
17008 }
17009 var rlen = getLength(data, p);
17010 var r = data.slice(p.place, rlen + p.place);
17011 p.place += rlen;
17012 if (data[p.place++] !== 0x02) {
17013 return false;
17014 }
17015 var slen = getLength(data, p);
17016 if (data.length !== slen + p.place) {
17017 return false;
17018 }
17019 var s = data.slice(p.place, slen + p.place);
17020 if (r[0] === 0 && (r[1] & 0x80)) {
17021 r = r.slice(1);
17022 }
17023 if (s[0] === 0 && (s[1] & 0x80)) {
17024 s = s.slice(1);
17025 }
17026
17027 this.r = new BN(r);
17028 this.s = new BN(s);
17029 this.recoveryParam = null;
17030
17031 return true;
17032};
17033
17034function constructLength(arr, len) {
17035 if (len < 0x80) {
17036 arr.push(len);
17037 return;
17038 }
17039 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
17040 arr.push(octets | 0x80);
17041 while (--octets) {
17042 arr.push((len >>> (octets << 3)) & 0xff);
17043 }
17044 arr.push(len);
17045}
17046
17047Signature.prototype.toDER = function toDER(enc) {
17048 var r = this.r.toArray();
17049 var s = this.s.toArray();
17050
17051 // Pad values
17052 if (r[0] & 0x80)
17053 r = [ 0 ].concat(r);
17054 // Pad values
17055 if (s[0] & 0x80)
17056 s = [ 0 ].concat(s);
17057
17058 r = rmPadding(r);
17059 s = rmPadding(s);
17060
17061 while (!s[0] && !(s[1] & 0x80)) {
17062 s = s.slice(1);
17063 }
17064 var arr = [ 0x02 ];
17065 constructLength(arr, r.length);
17066 arr = arr.concat(r);
17067 arr.push(0x02);
17068 constructLength(arr, s.length);
17069 var backHalf = arr.concat(s);
17070 var res = [ 0x30 ];
17071 constructLength(res, backHalf.length);
17072 res = res.concat(backHalf);
17073 return utils.encode(res, enc);
17074};
17075
17076},{"../../elliptic":86,"bn.js":18}],96:[function(require,module,exports){
17077'use strict';
17078
17079var hash = require('hash.js');
17080var elliptic = require('../../elliptic');
17081var utils = elliptic.utils;
17082var assert = utils.assert;
17083var parseBytes = utils.parseBytes;
17084var KeyPair = require('./key');
17085var Signature = require('./signature');
17086
17087function EDDSA(curve) {
17088 assert(curve === 'ed25519', 'only tested with ed25519 so far');
17089
17090 if (!(this instanceof EDDSA))
17091 return new EDDSA(curve);
17092
17093 var curve = elliptic.curves[curve].curve;
17094 this.curve = curve;
17095 this.g = curve.g;
17096 this.g.precompute(curve.n.bitLength() + 1);
17097
17098 this.pointClass = curve.point().constructor;
17099 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
17100 this.hash = hash.sha512;
17101}
17102
17103module.exports = EDDSA;
17104
17105/**
17106* @param {Array|String} message - message bytes
17107* @param {Array|String|KeyPair} secret - secret bytes or a keypair
17108* @returns {Signature} - signature
17109*/
17110EDDSA.prototype.sign = function sign(message, secret) {
17111 message = parseBytes(message);
17112 var key = this.keyFromSecret(secret);
17113 var r = this.hashInt(key.messagePrefix(), message);
17114 var R = this.g.mul(r);
17115 var Rencoded = this.encodePoint(R);
17116 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
17117 .mul(key.priv());
17118 var S = r.add(s_).umod(this.curve.n);
17119 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
17120};
17121
17122/**
17123* @param {Array} message - message bytes
17124* @param {Array|String|Signature} sig - sig bytes
17125* @param {Array|String|Point|KeyPair} pub - public key
17126* @returns {Boolean} - true if public key matches sig of message
17127*/
17128EDDSA.prototype.verify = function verify(message, sig, pub) {
17129 message = parseBytes(message);
17130 sig = this.makeSignature(sig);
17131 var key = this.keyFromPublic(pub);
17132 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
17133 var SG = this.g.mul(sig.S());
17134 var RplusAh = sig.R().add(key.pub().mul(h));
17135 return RplusAh.eq(SG);
17136};
17137
17138EDDSA.prototype.hashInt = function hashInt() {
17139 var hash = this.hash();
17140 for (var i = 0; i < arguments.length; i++)
17141 hash.update(arguments[i]);
17142 return utils.intFromLE(hash.digest()).umod(this.curve.n);
17143};
17144
17145EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
17146 return KeyPair.fromPublic(this, pub);
17147};
17148
17149EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
17150 return KeyPair.fromSecret(this, secret);
17151};
17152
17153EDDSA.prototype.makeSignature = function makeSignature(sig) {
17154 if (sig instanceof Signature)
17155 return sig;
17156 return new Signature(this, sig);
17157};
17158
17159/**
17160* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
17161*
17162* EDDSA defines methods for encoding and decoding points and integers. These are
17163* helper convenience methods, that pass along to utility functions implied
17164* parameters.
17165*
17166*/
17167EDDSA.prototype.encodePoint = function encodePoint(point) {
17168 var enc = point.getY().toArray('le', this.encodingLength);
17169 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
17170 return enc;
17171};
17172
17173EDDSA.prototype.decodePoint = function decodePoint(bytes) {
17174 bytes = utils.parseBytes(bytes);
17175
17176 var lastIx = bytes.length - 1;
17177 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
17178 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
17179
17180 var y = utils.intFromLE(normed);
17181 return this.curve.pointFromY(y, xIsOdd);
17182};
17183
17184EDDSA.prototype.encodeInt = function encodeInt(num) {
17185 return num.toArray('le', this.encodingLength);
17186};
17187
17188EDDSA.prototype.decodeInt = function decodeInt(bytes) {
17189 return utils.intFromLE(bytes);
17190};
17191
17192EDDSA.prototype.isPoint = function isPoint(val) {
17193 return val instanceof this.pointClass;
17194};
17195
17196},{"../../elliptic":86,"./key":97,"./signature":98,"hash.js":105}],97:[function(require,module,exports){
17197'use strict';
17198
17199var elliptic = require('../../elliptic');
17200var utils = elliptic.utils;
17201var assert = utils.assert;
17202var parseBytes = utils.parseBytes;
17203var cachedProperty = utils.cachedProperty;
17204
17205/**
17206* @param {EDDSA} eddsa - instance
17207* @param {Object} params - public/private key parameters
17208*
17209* @param {Array<Byte>} [params.secret] - secret seed bytes
17210* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
17211* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
17212*
17213*/
17214function KeyPair(eddsa, params) {
17215 this.eddsa = eddsa;
17216 this._secret = parseBytes(params.secret);
17217 if (eddsa.isPoint(params.pub))
17218 this._pub = params.pub;
17219 else
17220 this._pubBytes = parseBytes(params.pub);
17221}
17222
17223KeyPair.fromPublic = function fromPublic(eddsa, pub) {
17224 if (pub instanceof KeyPair)
17225 return pub;
17226 return new KeyPair(eddsa, { pub: pub });
17227};
17228
17229KeyPair.fromSecret = function fromSecret(eddsa, secret) {
17230 if (secret instanceof KeyPair)
17231 return secret;
17232 return new KeyPair(eddsa, { secret: secret });
17233};
17234
17235KeyPair.prototype.secret = function secret() {
17236 return this._secret;
17237};
17238
17239cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
17240 return this.eddsa.encodePoint(this.pub());
17241});
17242
17243cachedProperty(KeyPair, 'pub', function pub() {
17244 if (this._pubBytes)
17245 return this.eddsa.decodePoint(this._pubBytes);
17246 return this.eddsa.g.mul(this.priv());
17247});
17248
17249cachedProperty(KeyPair, 'privBytes', function privBytes() {
17250 var eddsa = this.eddsa;
17251 var hash = this.hash();
17252 var lastIx = eddsa.encodingLength - 1;
17253
17254 var a = hash.slice(0, eddsa.encodingLength);
17255 a[0] &= 248;
17256 a[lastIx] &= 127;
17257 a[lastIx] |= 64;
17258
17259 return a;
17260});
17261
17262cachedProperty(KeyPair, 'priv', function priv() {
17263 return this.eddsa.decodeInt(this.privBytes());
17264});
17265
17266cachedProperty(KeyPair, 'hash', function hash() {
17267 return this.eddsa.hash().update(this.secret()).digest();
17268});
17269
17270cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
17271 return this.hash().slice(this.eddsa.encodingLength);
17272});
17273
17274KeyPair.prototype.sign = function sign(message) {
17275 assert(this._secret, 'KeyPair can only verify');
17276 return this.eddsa.sign(message, this);
17277};
17278
17279KeyPair.prototype.verify = function verify(message, sig) {
17280 return this.eddsa.verify(message, sig, this);
17281};
17282
17283KeyPair.prototype.getSecret = function getSecret(enc) {
17284 assert(this._secret, 'KeyPair is public only');
17285 return utils.encode(this.secret(), enc);
17286};
17287
17288KeyPair.prototype.getPublic = function getPublic(enc) {
17289 return utils.encode(this.pubBytes(), enc);
17290};
17291
17292module.exports = KeyPair;
17293
17294},{"../../elliptic":86}],98:[function(require,module,exports){
17295'use strict';
17296
17297var BN = require('bn.js');
17298var elliptic = require('../../elliptic');
17299var utils = elliptic.utils;
17300var assert = utils.assert;
17301var cachedProperty = utils.cachedProperty;
17302var parseBytes = utils.parseBytes;
17303
17304/**
17305* @param {EDDSA} eddsa - eddsa instance
17306* @param {Array<Bytes>|Object} sig -
17307* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
17308* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
17309* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
17310* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
17311*/
17312function Signature(eddsa, sig) {
17313 this.eddsa = eddsa;
17314
17315 if (typeof sig !== 'object')
17316 sig = parseBytes(sig);
17317
17318 if (Array.isArray(sig)) {
17319 sig = {
17320 R: sig.slice(0, eddsa.encodingLength),
17321 S: sig.slice(eddsa.encodingLength)
17322 };
17323 }
17324
17325 assert(sig.R && sig.S, 'Signature without R or S');
17326
17327 if (eddsa.isPoint(sig.R))
17328 this._R = sig.R;
17329 if (sig.S instanceof BN)
17330 this._S = sig.S;
17331
17332 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
17333 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
17334}
17335
17336cachedProperty(Signature, 'S', function S() {
17337 return this.eddsa.decodeInt(this.Sencoded());
17338});
17339
17340cachedProperty(Signature, 'R', function R() {
17341 return this.eddsa.decodePoint(this.Rencoded());
17342});
17343
17344cachedProperty(Signature, 'Rencoded', function Rencoded() {
17345 return this.eddsa.encodePoint(this.R());
17346});
17347
17348cachedProperty(Signature, 'Sencoded', function Sencoded() {
17349 return this.eddsa.encodeInt(this.S());
17350});
17351
17352Signature.prototype.toBytes = function toBytes() {
17353 return this.Rencoded().concat(this.Sencoded());
17354};
17355
17356Signature.prototype.toHex = function toHex() {
17357 return utils.encode(this.toBytes(), 'hex').toUpperCase();
17358};
17359
17360module.exports = Signature;
17361
17362},{"../../elliptic":86,"bn.js":18}],99:[function(require,module,exports){
17363module.exports = {
17364 doubles: {
17365 step: 4,
17366 points: [
17367 [
17368 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
17369 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
17370 ],
17371 [
17372 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
17373 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
17374 ],
17375 [
17376 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
17377 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
17378 ],
17379 [
17380 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
17381 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
17382 ],
17383 [
17384 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
17385 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
17386 ],
17387 [
17388 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
17389 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
17390 ],
17391 [
17392 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
17393 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
17394 ],
17395 [
17396 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
17397 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
17398 ],
17399 [
17400 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
17401 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
17402 ],
17403 [
17404 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
17405 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
17406 ],
17407 [
17408 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
17409 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
17410 ],
17411 [
17412 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
17413 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
17414 ],
17415 [
17416 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
17417 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
17418 ],
17419 [
17420 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
17421 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
17422 ],
17423 [
17424 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
17425 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
17426 ],
17427 [
17428 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
17429 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
17430 ],
17431 [
17432 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
17433 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
17434 ],
17435 [
17436 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
17437 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
17438 ],
17439 [
17440 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
17441 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
17442 ],
17443 [
17444 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
17445 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
17446 ],
17447 [
17448 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
17449 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
17450 ],
17451 [
17452 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
17453 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
17454 ],
17455 [
17456 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
17457 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
17458 ],
17459 [
17460 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
17461 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
17462 ],
17463 [
17464 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
17465 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
17466 ],
17467 [
17468 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
17469 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
17470 ],
17471 [
17472 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
17473 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
17474 ],
17475 [
17476 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
17477 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
17478 ],
17479 [
17480 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
17481 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
17482 ],
17483 [
17484 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
17485 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
17486 ],
17487 [
17488 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
17489 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
17490 ],
17491 [
17492 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
17493 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
17494 ],
17495 [
17496 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
17497 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
17498 ],
17499 [
17500 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
17501 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
17502 ],
17503 [
17504 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
17505 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
17506 ],
17507 [
17508 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
17509 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
17510 ],
17511 [
17512 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
17513 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
17514 ],
17515 [
17516 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
17517 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
17518 ],
17519 [
17520 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
17521 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
17522 ],
17523 [
17524 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
17525 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
17526 ],
17527 [
17528 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
17529 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
17530 ],
17531 [
17532 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
17533 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
17534 ],
17535 [
17536 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
17537 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
17538 ],
17539 [
17540 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
17541 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
17542 ],
17543 [
17544 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
17545 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
17546 ],
17547 [
17548 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
17549 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
17550 ],
17551 [
17552 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
17553 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
17554 ],
17555 [
17556 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
17557 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
17558 ],
17559 [
17560 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
17561 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
17562 ],
17563 [
17564 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
17565 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
17566 ],
17567 [
17568 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
17569 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
17570 ],
17571 [
17572 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
17573 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
17574 ],
17575 [
17576 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
17577 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
17578 ],
17579 [
17580 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
17581 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
17582 ],
17583 [
17584 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
17585 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
17586 ],
17587 [
17588 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
17589 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
17590 ],
17591 [
17592 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
17593 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
17594 ],
17595 [
17596 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
17597 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
17598 ],
17599 [
17600 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
17601 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
17602 ],
17603 [
17604 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
17605 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
17606 ],
17607 [
17608 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
17609 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
17610 ],
17611 [
17612 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
17613 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
17614 ],
17615 [
17616 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
17617 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
17618 ],
17619 [
17620 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
17621 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
17622 ],
17623 [
17624 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
17625 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
17626 ]
17627 ]
17628 },
17629 naf: {
17630 wnd: 7,
17631 points: [
17632 [
17633 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
17634 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
17635 ],
17636 [
17637 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
17638 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
17639 ],
17640 [
17641 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
17642 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
17643 ],
17644 [
17645 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
17646 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
17647 ],
17648 [
17649 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
17650 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
17651 ],
17652 [
17653 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
17654 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
17655 ],
17656 [
17657 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
17658 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
17659 ],
17660 [
17661 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
17662 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
17663 ],
17664 [
17665 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
17666 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
17667 ],
17668 [
17669 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
17670 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
17671 ],
17672 [
17673 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
17674 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
17675 ],
17676 [
17677 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
17678 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
17679 ],
17680 [
17681 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
17682 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
17683 ],
17684 [
17685 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
17686 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
17687 ],
17688 [
17689 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
17690 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
17691 ],
17692 [
17693 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
17694 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
17695 ],
17696 [
17697 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
17698 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
17699 ],
17700 [
17701 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
17702 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
17703 ],
17704 [
17705 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
17706 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
17707 ],
17708 [
17709 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
17710 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
17711 ],
17712 [
17713 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
17714 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
17715 ],
17716 [
17717 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
17718 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
17719 ],
17720 [
17721 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
17722 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
17723 ],
17724 [
17725 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
17726 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
17727 ],
17728 [
17729 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
17730 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
17731 ],
17732 [
17733 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
17734 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
17735 ],
17736 [
17737 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
17738 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
17739 ],
17740 [
17741 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
17742 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
17743 ],
17744 [
17745 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
17746 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
17747 ],
17748 [
17749 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
17750 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
17751 ],
17752 [
17753 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
17754 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
17755 ],
17756 [
17757 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
17758 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
17759 ],
17760 [
17761 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
17762 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
17763 ],
17764 [
17765 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
17766 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
17767 ],
17768 [
17769 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
17770 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
17771 ],
17772 [
17773 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
17774 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
17775 ],
17776 [
17777 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
17778 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
17779 ],
17780 [
17781 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
17782 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
17783 ],
17784 [
17785 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
17786 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
17787 ],
17788 [
17789 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
17790 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
17791 ],
17792 [
17793 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
17794 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
17795 ],
17796 [
17797 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
17798 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
17799 ],
17800 [
17801 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
17802 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
17803 ],
17804 [
17805 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
17806 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
17807 ],
17808 [
17809 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
17810 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
17811 ],
17812 [
17813 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
17814 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
17815 ],
17816 [
17817 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
17818 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
17819 ],
17820 [
17821 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
17822 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
17823 ],
17824 [
17825 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
17826 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
17827 ],
17828 [
17829 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
17830 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
17831 ],
17832 [
17833 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
17834 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
17835 ],
17836 [
17837 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
17838 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
17839 ],
17840 [
17841 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
17842 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
17843 ],
17844 [
17845 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
17846 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
17847 ],
17848 [
17849 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
17850 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
17851 ],
17852 [
17853 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
17854 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
17855 ],
17856 [
17857 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
17858 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
17859 ],
17860 [
17861 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
17862 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
17863 ],
17864 [
17865 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
17866 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
17867 ],
17868 [
17869 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
17870 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
17871 ],
17872 [
17873 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
17874 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
17875 ],
17876 [
17877 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
17878 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
17879 ],
17880 [
17881 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
17882 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
17883 ],
17884 [
17885 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
17886 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
17887 ],
17888 [
17889 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
17890 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
17891 ],
17892 [
17893 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
17894 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
17895 ],
17896 [
17897 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
17898 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
17899 ],
17900 [
17901 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
17902 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
17903 ],
17904 [
17905 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
17906 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
17907 ],
17908 [
17909 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
17910 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
17911 ],
17912 [
17913 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
17914 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
17915 ],
17916 [
17917 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
17918 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
17919 ],
17920 [
17921 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
17922 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
17923 ],
17924 [
17925 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
17926 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
17927 ],
17928 [
17929 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
17930 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
17931 ],
17932 [
17933 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
17934 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
17935 ],
17936 [
17937 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
17938 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
17939 ],
17940 [
17941 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
17942 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
17943 ],
17944 [
17945 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
17946 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
17947 ],
17948 [
17949 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
17950 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
17951 ],
17952 [
17953 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
17954 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
17955 ],
17956 [
17957 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
17958 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
17959 ],
17960 [
17961 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
17962 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
17963 ],
17964 [
17965 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
17966 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
17967 ],
17968 [
17969 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
17970 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
17971 ],
17972 [
17973 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
17974 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
17975 ],
17976 [
17977 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
17978 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
17979 ],
17980 [
17981 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
17982 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
17983 ],
17984 [
17985 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
17986 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
17987 ],
17988 [
17989 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
17990 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
17991 ],
17992 [
17993 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
17994 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
17995 ],
17996 [
17997 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
17998 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
17999 ],
18000 [
18001 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
18002 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
18003 ],
18004 [
18005 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
18006 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
18007 ],
18008 [
18009 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
18010 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
18011 ],
18012 [
18013 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
18014 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
18015 ],
18016 [
18017 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
18018 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
18019 ],
18020 [
18021 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
18022 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
18023 ],
18024 [
18025 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
18026 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
18027 ],
18028 [
18029 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
18030 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
18031 ],
18032 [
18033 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
18034 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
18035 ],
18036 [
18037 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
18038 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
18039 ],
18040 [
18041 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
18042 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
18043 ],
18044 [
18045 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
18046 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
18047 ],
18048 [
18049 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
18050 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
18051 ],
18052 [
18053 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
18054 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
18055 ],
18056 [
18057 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
18058 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
18059 ],
18060 [
18061 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
18062 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
18063 ],
18064 [
18065 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
18066 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
18067 ],
18068 [
18069 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
18070 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
18071 ],
18072 [
18073 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
18074 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
18075 ],
18076 [
18077 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
18078 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
18079 ],
18080 [
18081 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
18082 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
18083 ],
18084 [
18085 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
18086 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
18087 ],
18088 [
18089 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
18090 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
18091 ],
18092 [
18093 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
18094 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
18095 ],
18096 [
18097 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
18098 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
18099 ],
18100 [
18101 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
18102 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
18103 ],
18104 [
18105 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
18106 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
18107 ],
18108 [
18109 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
18110 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
18111 ],
18112 [
18113 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
18114 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
18115 ],
18116 [
18117 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
18118 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
18119 ],
18120 [
18121 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
18122 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
18123 ],
18124 [
18125 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
18126 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
18127 ],
18128 [
18129 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
18130 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
18131 ],
18132 [
18133 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
18134 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
18135 ],
18136 [
18137 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
18138 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
18139 ]
18140 ]
18141 }
18142};
18143
18144},{}],100:[function(require,module,exports){
18145'use strict';
18146
18147var utils = exports;
18148var BN = require('bn.js');
18149var minAssert = require('minimalistic-assert');
18150var minUtils = require('minimalistic-crypto-utils');
18151
18152utils.assert = minAssert;
18153utils.toArray = minUtils.toArray;
18154utils.zero2 = minUtils.zero2;
18155utils.toHex = minUtils.toHex;
18156utils.encode = minUtils.encode;
18157
18158// Represent num in a w-NAF form
18159function getNAF(num, w) {
18160 var naf = [];
18161 var ws = 1 << (w + 1);
18162 var k = num.clone();
18163 while (k.cmpn(1) >= 0) {
18164 var z;
18165 if (k.isOdd()) {
18166 var mod = k.andln(ws - 1);
18167 if (mod > (ws >> 1) - 1)
18168 z = (ws >> 1) - mod;
18169 else
18170 z = mod;
18171 k.isubn(z);
18172 } else {
18173 z = 0;
18174 }
18175 naf.push(z);
18176
18177 // Optimization, shift by word if possible
18178 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
18179 for (var i = 1; i < shift; i++)
18180 naf.push(0);
18181 k.iushrn(shift);
18182 }
18183
18184 return naf;
18185}
18186utils.getNAF = getNAF;
18187
18188// Represent k1, k2 in a Joint Sparse Form
18189function getJSF(k1, k2) {
18190 var jsf = [
18191 [],
18192 []
18193 ];
18194
18195 k1 = k1.clone();
18196 k2 = k2.clone();
18197 var d1 = 0;
18198 var d2 = 0;
18199 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
18200
18201 // First phase
18202 var m14 = (k1.andln(3) + d1) & 3;
18203 var m24 = (k2.andln(3) + d2) & 3;
18204 if (m14 === 3)
18205 m14 = -1;
18206 if (m24 === 3)
18207 m24 = -1;
18208 var u1;
18209 if ((m14 & 1) === 0) {
18210 u1 = 0;
18211 } else {
18212 var m8 = (k1.andln(7) + d1) & 7;
18213 if ((m8 === 3 || m8 === 5) && m24 === 2)
18214 u1 = -m14;
18215 else
18216 u1 = m14;
18217 }
18218 jsf[0].push(u1);
18219
18220 var u2;
18221 if ((m24 & 1) === 0) {
18222 u2 = 0;
18223 } else {
18224 var m8 = (k2.andln(7) + d2) & 7;
18225 if ((m8 === 3 || m8 === 5) && m14 === 2)
18226 u2 = -m24;
18227 else
18228 u2 = m24;
18229 }
18230 jsf[1].push(u2);
18231
18232 // Second phase
18233 if (2 * d1 === u1 + 1)
18234 d1 = 1 - d1;
18235 if (2 * d2 === u2 + 1)
18236 d2 = 1 - d2;
18237 k1.iushrn(1);
18238 k2.iushrn(1);
18239 }
18240
18241 return jsf;
18242}
18243utils.getJSF = getJSF;
18244
18245function cachedProperty(obj, name, computer) {
18246 var key = '_' + name;
18247 obj.prototype[name] = function cachedProperty() {
18248 return this[key] !== undefined ? this[key] :
18249 this[key] = computer.call(this);
18250 };
18251}
18252utils.cachedProperty = cachedProperty;
18253
18254function parseBytes(bytes) {
18255 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
18256 bytes;
18257}
18258utils.parseBytes = parseBytes;
18259
18260function intFromLE(bytes) {
18261 return new BN(bytes, 'hex', 'le');
18262}
18263utils.intFromLE = intFromLE;
18264
18265
18266},{"bn.js":18,"minimalistic-assert":360,"minimalistic-crypto-utils":361}],101:[function(require,module,exports){
18267module.exports={
18268 "_args": [
18269 [
18270 "elliptic@6.4.1",
18271 "/var/www/sui.li/bip39/htdocs/libs/stellar-util"
18272 ]
18273 ],
18274 "_development": true,
18275 "_from": "elliptic@6.4.1",
18276 "_id": "elliptic@6.4.1",
18277 "_inBundle": false,
18278 "_integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
18279 "_location": "/elliptic",
18280 "_phantomChildren": {},
18281 "_requested": {
18282 "type": "version",
18283 "registry": true,
18284 "raw": "elliptic@6.4.1",
18285 "name": "elliptic",
18286 "escapedName": "elliptic",
18287 "rawSpec": "6.4.1",
18288 "saveSpec": null,
18289 "fetchSpec": "6.4.1"
18290 },
18291 "_requiredBy": [
18292 "/browserify-sign",
18293 "/create-ecdh"
18294 ],
18295 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
18296 "_spec": "6.4.1",
18297 "_where": "/var/www/sui.li/bip39/htdocs/libs/stellar-util",
18298 "author": {
18299 "name": "Fedor Indutny",
18300 "email": "fedor@indutny.com"
18301 },
18302 "bugs": {
18303 "url": "https://github.com/indutny/elliptic/issues"
18304 },
18305 "dependencies": {
18306 "bn.js": "^4.4.0",
18307 "brorand": "^1.0.1",
18308 "hash.js": "^1.0.0",
18309 "hmac-drbg": "^1.0.0",
18310 "inherits": "^2.0.1",
18311 "minimalistic-assert": "^1.0.0",
18312 "minimalistic-crypto-utils": "^1.0.0"
18313 },
18314 "description": "EC cryptography",
18315 "devDependencies": {
18316 "brfs": "^1.4.3",
18317 "coveralls": "^2.11.3",
18318 "grunt": "^0.4.5",
18319 "grunt-browserify": "^5.0.0",
18320 "grunt-cli": "^1.2.0",
18321 "grunt-contrib-connect": "^1.0.0",
18322 "grunt-contrib-copy": "^1.0.0",
18323 "grunt-contrib-uglify": "^1.0.1",
18324 "grunt-mocha-istanbul": "^3.0.1",
18325 "grunt-saucelabs": "^8.6.2",
18326 "istanbul": "^0.4.2",
18327 "jscs": "^2.9.0",
18328 "jshint": "^2.6.0",
18329 "mocha": "^2.1.0"
18330 },
18331 "files": [
18332 "lib"
18333 ],
18334 "homepage": "https://github.com/indutny/elliptic",
18335 "keywords": [
18336 "EC",
18337 "Elliptic",
18338 "curve",
18339 "Cryptography"
18340 ],
18341 "license": "MIT",
18342 "main": "lib/elliptic.js",
18343 "name": "elliptic",
18344 "repository": {
18345 "type": "git",
18346 "url": "git+ssh://git@github.com/indutny/elliptic.git"
18347 },
18348 "scripts": {
18349 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
18350 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
18351 "lint": "npm run jscs && npm run jshint",
18352 "test": "npm run lint && npm run unit",
18353 "unit": "istanbul test _mocha --reporter=spec test/index.js",
18354 "version": "grunt dist && git add dist/"
18355 },
18356 "version": "6.4.1"
18357}
18358
18359},{}],102:[function(require,module,exports){
18360// Copyright Joyent, Inc. and other Node contributors.
18361//
18362// Permission is hereby granted, free of charge, to any person obtaining a
18363// copy of this software and associated documentation files (the
18364// "Software"), to deal in the Software without restriction, including
18365// without limitation the rights to use, copy, modify, merge, publish,
18366// distribute, sublicense, and/or sell copies of the Software, and to permit
18367// persons to whom the Software is furnished to do so, subject to the
18368// following conditions:
18369//
18370// The above copyright notice and this permission notice shall be included
18371// in all copies or substantial portions of the Software.
18372//
18373// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18374// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18375// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
18376// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18377// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
18378// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18379// USE OR OTHER DEALINGS IN THE SOFTWARE.
18380
18381var objectCreate = Object.create || objectCreatePolyfill
18382var objectKeys = Object.keys || objectKeysPolyfill
18383var bind = Function.prototype.bind || functionBindPolyfill
18384
18385function EventEmitter() {
18386 if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {
18387 this._events = objectCreate(null);
18388 this._eventsCount = 0;
18389 }
18390
18391 this._maxListeners = this._maxListeners || undefined;
18392}
18393module.exports = EventEmitter;
18394
18395// Backwards-compat with node 0.10.x
18396EventEmitter.EventEmitter = EventEmitter;
18397
18398EventEmitter.prototype._events = undefined;
18399EventEmitter.prototype._maxListeners = undefined;
18400
18401// By default EventEmitters will print a warning if more than 10 listeners are
18402// added to it. This is a useful default which helps finding memory leaks.
18403var defaultMaxListeners = 10;
18404
18405var hasDefineProperty;
18406try {
18407 var o = {};
18408 if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });
18409 hasDefineProperty = o.x === 0;
18410} catch (err) { hasDefineProperty = false }
18411if (hasDefineProperty) {
18412 Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
18413 enumerable: true,
18414 get: function() {
18415 return defaultMaxListeners;
18416 },
18417 set: function(arg) {
18418 // check whether the input is a positive number (whose value is zero or
18419 // greater and not a NaN).
18420 if (typeof arg !== 'number' || arg < 0 || arg !== arg)
18421 throw new TypeError('"defaultMaxListeners" must be a positive number');
18422 defaultMaxListeners = arg;
18423 }
18424 });
18425} else {
18426 EventEmitter.defaultMaxListeners = defaultMaxListeners;
18427}
18428
18429// Obviously not all Emitters should be limited to 10. This function allows
18430// that to be increased. Set to zero for unlimited.
18431EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
18432 if (typeof n !== 'number' || n < 0 || isNaN(n))
18433 throw new TypeError('"n" argument must be a positive number');
18434 this._maxListeners = n;
18435 return this;
18436};
18437
18438function $getMaxListeners(that) {
18439 if (that._maxListeners === undefined)
18440 return EventEmitter.defaultMaxListeners;
18441 return that._maxListeners;
18442}
18443
18444EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
18445 return $getMaxListeners(this);
18446};
18447
18448// These standalone emit* functions are used to optimize calling of event
18449// handlers for fast cases because emit() itself often has a variable number of
18450// arguments and can be deoptimized because of that. These functions always have
18451// the same number of arguments and thus do not get deoptimized, so the code
18452// inside them can execute faster.
18453function emitNone(handler, isFn, self) {
18454 if (isFn)
18455 handler.call(self);
18456 else {
18457 var len = handler.length;
18458 var listeners = arrayClone(handler, len);
18459 for (var i = 0; i < len; ++i)
18460 listeners[i].call(self);
18461 }
18462}
18463function emitOne(handler, isFn, self, arg1) {
18464 if (isFn)
18465 handler.call(self, arg1);
18466 else {
18467 var len = handler.length;
18468 var listeners = arrayClone(handler, len);
18469 for (var i = 0; i < len; ++i)
18470 listeners[i].call(self, arg1);
18471 }
18472}
18473function emitTwo(handler, isFn, self, arg1, arg2) {
18474 if (isFn)
18475 handler.call(self, arg1, arg2);
18476 else {
18477 var len = handler.length;
18478 var listeners = arrayClone(handler, len);
18479 for (var i = 0; i < len; ++i)
18480 listeners[i].call(self, arg1, arg2);
18481 }
18482}
18483function emitThree(handler, isFn, self, arg1, arg2, arg3) {
18484 if (isFn)
18485 handler.call(self, arg1, arg2, arg3);
18486 else {
18487 var len = handler.length;
18488 var listeners = arrayClone(handler, len);
18489 for (var i = 0; i < len; ++i)
18490 listeners[i].call(self, arg1, arg2, arg3);
18491 }
18492}
18493
18494function emitMany(handler, isFn, self, args) {
18495 if (isFn)
18496 handler.apply(self, args);
18497 else {
18498 var len = handler.length;
18499 var listeners = arrayClone(handler, len);
18500 for (var i = 0; i < len; ++i)
18501 listeners[i].apply(self, args);
18502 }
18503}
18504
18505EventEmitter.prototype.emit = function emit(type) {
18506 var er, handler, len, args, i, events;
18507 var doError = (type === 'error');
18508
18509 events = this._events;
18510 if (events)
18511 doError = (doError && events.error == null);
18512 else if (!doError)
18513 return false;
18514
18515 // If there is no 'error' event listener then throw.
18516 if (doError) {
18517 if (arguments.length > 1)
18518 er = arguments[1];
18519 if (er instanceof Error) {
18520 throw er; // Unhandled 'error' event
18521 } else {
18522 // At least give some kind of context to the user
18523 var err = new Error('Unhandled "error" event. (' + er + ')');
18524 err.context = er;
18525 throw err;
18526 }
18527 return false;
18528 }
18529
18530 handler = events[type];
18531
18532 if (!handler)
18533 return false;
18534
18535 var isFn = typeof handler === 'function';
18536 len = arguments.length;
18537 switch (len) {
18538 // fast cases
18539 case 1:
18540 emitNone(handler, isFn, this);
18541 break;
18542 case 2:
18543 emitOne(handler, isFn, this, arguments[1]);
18544 break;
18545 case 3:
18546 emitTwo(handler, isFn, this, arguments[1], arguments[2]);
18547 break;
18548 case 4:
18549 emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
18550 break;
18551 // slower
18552 default:
18553 args = new Array(len - 1);
18554 for (i = 1; i < len; i++)
18555 args[i - 1] = arguments[i];
18556 emitMany(handler, isFn, this, args);
18557 }
18558
18559 return true;
18560};
18561
18562function _addListener(target, type, listener, prepend) {
18563 var m;
18564 var events;
18565 var existing;
18566
18567 if (typeof listener !== 'function')
18568 throw new TypeError('"listener" argument must be a function');
18569
18570 events = target._events;
18571 if (!events) {
18572 events = target._events = objectCreate(null);
18573 target._eventsCount = 0;
18574 } else {
18575 // To avoid recursion in the case that type === "newListener"! Before
18576 // adding it to the listeners, first emit "newListener".
18577 if (events.newListener) {
18578 target.emit('newListener', type,
18579 listener.listener ? listener.listener : listener);
18580
18581 // Re-assign `events` because a newListener handler could have caused the
18582 // this._events to be assigned to a new object
18583 events = target._events;
18584 }
18585 existing = events[type];
18586 }
18587
18588 if (!existing) {
18589 // Optimize the case of one listener. Don't need the extra array object.
18590 existing = events[type] = listener;
18591 ++target._eventsCount;
18592 } else {
18593 if (typeof existing === 'function') {
18594 // Adding the second element, need to change to array.
18595 existing = events[type] =
18596 prepend ? [listener, existing] : [existing, listener];
18597 } else {
18598 // If we've already got an array, just append.
18599 if (prepend) {
18600 existing.unshift(listener);
18601 } else {
18602 existing.push(listener);
18603 }
18604 }
18605
18606 // Check for listener leak
18607 if (!existing.warned) {
18608 m = $getMaxListeners(target);
18609 if (m && m > 0 && existing.length > m) {
18610 existing.warned = true;
18611 var w = new Error('Possible EventEmitter memory leak detected. ' +
18612 existing.length + ' "' + String(type) + '" listeners ' +
18613 'added. Use emitter.setMaxListeners() to ' +
18614 'increase limit.');
18615 w.name = 'MaxListenersExceededWarning';
18616 w.emitter = target;
18617 w.type = type;
18618 w.count = existing.length;
18619 if (typeof console === 'object' && console.warn) {
18620 console.warn('%s: %s', w.name, w.message);
18621 }
18622 }
18623 }
18624 }
18625
18626 return target;
18627}
18628
18629EventEmitter.prototype.addListener = function addListener(type, listener) {
18630 return _addListener(this, type, listener, false);
18631};
18632
18633EventEmitter.prototype.on = EventEmitter.prototype.addListener;
18634
18635EventEmitter.prototype.prependListener =
18636 function prependListener(type, listener) {
18637 return _addListener(this, type, listener, true);
18638 };
18639
18640function onceWrapper() {
18641 if (!this.fired) {
18642 this.target.removeListener(this.type, this.wrapFn);
18643 this.fired = true;
18644 switch (arguments.length) {
18645 case 0:
18646 return this.listener.call(this.target);
18647 case 1:
18648 return this.listener.call(this.target, arguments[0]);
18649 case 2:
18650 return this.listener.call(this.target, arguments[0], arguments[1]);
18651 case 3:
18652 return this.listener.call(this.target, arguments[0], arguments[1],
18653 arguments[2]);
18654 default:
18655 var args = new Array(arguments.length);
18656 for (var i = 0; i < args.length; ++i)
18657 args[i] = arguments[i];
18658 this.listener.apply(this.target, args);
18659 }
18660 }
18661}
18662
18663function _onceWrap(target, type, listener) {
18664 var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
18665 var wrapped = bind.call(onceWrapper, state);
18666 wrapped.listener = listener;
18667 state.wrapFn = wrapped;
18668 return wrapped;
18669}
18670
18671EventEmitter.prototype.once = function once(type, listener) {
18672 if (typeof listener !== 'function')
18673 throw new TypeError('"listener" argument must be a function');
18674 this.on(type, _onceWrap(this, type, listener));
18675 return this;
18676};
18677
18678EventEmitter.prototype.prependOnceListener =
18679 function prependOnceListener(type, listener) {
18680 if (typeof listener !== 'function')
18681 throw new TypeError('"listener" argument must be a function');
18682 this.prependListener(type, _onceWrap(this, type, listener));
18683 return this;
18684 };
18685
18686// Emits a 'removeListener' event if and only if the listener was removed.
18687EventEmitter.prototype.removeListener =
18688 function removeListener(type, listener) {
18689 var list, events, position, i, originalListener;
18690
18691 if (typeof listener !== 'function')
18692 throw new TypeError('"listener" argument must be a function');
18693
18694 events = this._events;
18695 if (!events)
18696 return this;
18697
18698 list = events[type];
18699 if (!list)
18700 return this;
18701
18702 if (list === listener || list.listener === listener) {
18703 if (--this._eventsCount === 0)
18704 this._events = objectCreate(null);
18705 else {
18706 delete events[type];
18707 if (events.removeListener)
18708 this.emit('removeListener', type, list.listener || listener);
18709 }
18710 } else if (typeof list !== 'function') {
18711 position = -1;
18712
18713 for (i = list.length - 1; i >= 0; i--) {
18714 if (list[i] === listener || list[i].listener === listener) {
18715 originalListener = list[i].listener;
18716 position = i;
18717 break;
18718 }
18719 }
18720
18721 if (position < 0)
18722 return this;
18723
18724 if (position === 0)
18725 list.shift();
18726 else
18727 spliceOne(list, position);
18728
18729 if (list.length === 1)
18730 events[type] = list[0];
18731
18732 if (events.removeListener)
18733 this.emit('removeListener', type, originalListener || listener);
18734 }
18735
18736 return this;
18737 };
18738
18739EventEmitter.prototype.removeAllListeners =
18740 function removeAllListeners(type) {
18741 var listeners, events, i;
18742
18743 events = this._events;
18744 if (!events)
18745 return this;
18746
18747 // not listening for removeListener, no need to emit
18748 if (!events.removeListener) {
18749 if (arguments.length === 0) {
18750 this._events = objectCreate(null);
18751 this._eventsCount = 0;
18752 } else if (events[type]) {
18753 if (--this._eventsCount === 0)
18754 this._events = objectCreate(null);
18755 else
18756 delete events[type];
18757 }
18758 return this;
18759 }
18760
18761 // emit removeListener for all listeners on all events
18762 if (arguments.length === 0) {
18763 var keys = objectKeys(events);
18764 var key;
18765 for (i = 0; i < keys.length; ++i) {
18766 key = keys[i];
18767 if (key === 'removeListener') continue;
18768 this.removeAllListeners(key);
18769 }
18770 this.removeAllListeners('removeListener');
18771 this._events = objectCreate(null);
18772 this._eventsCount = 0;
18773 return this;
18774 }
18775
18776 listeners = events[type];
18777
18778 if (typeof listeners === 'function') {
18779 this.removeListener(type, listeners);
18780 } else if (listeners) {
18781 // LIFO order
18782 for (i = listeners.length - 1; i >= 0; i--) {
18783 this.removeListener(type, listeners[i]);
18784 }
18785 }
18786
18787 return this;
18788 };
18789
18790function _listeners(target, type, unwrap) {
18791 var events = target._events;
18792
18793 if (!events)
18794 return [];
18795
18796 var evlistener = events[type];
18797 if (!evlistener)
18798 return [];
18799
18800 if (typeof evlistener === 'function')
18801 return unwrap ? [evlistener.listener || evlistener] : [evlistener];
18802
18803 return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
18804}
18805
18806EventEmitter.prototype.listeners = function listeners(type) {
18807 return _listeners(this, type, true);
18808};
18809
18810EventEmitter.prototype.rawListeners = function rawListeners(type) {
18811 return _listeners(this, type, false);
18812};
18813
18814EventEmitter.listenerCount = function(emitter, type) {
18815 if (typeof emitter.listenerCount === 'function') {
18816 return emitter.listenerCount(type);
18817 } else {
18818 return listenerCount.call(emitter, type);
18819 }
18820};
18821
18822EventEmitter.prototype.listenerCount = listenerCount;
18823function listenerCount(type) {
18824 var events = this._events;
18825
18826 if (events) {
18827 var evlistener = events[type];
18828
18829 if (typeof evlistener === 'function') {
18830 return 1;
18831 } else if (evlistener) {
18832 return evlistener.length;
18833 }
18834 }
18835
18836 return 0;
18837}
18838
18839EventEmitter.prototype.eventNames = function eventNames() {
18840 return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
18841};
18842
18843// About 1.5x faster than the two-arg version of Array#splice().
18844function spliceOne(list, index) {
18845 for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
18846 list[i] = list[k];
18847 list.pop();
18848}
18849
18850function arrayClone(arr, n) {
18851 var copy = new Array(n);
18852 for (var i = 0; i < n; ++i)
18853 copy[i] = arr[i];
18854 return copy;
18855}
18856
18857function unwrapListeners(arr) {
18858 var ret = new Array(arr.length);
18859 for (var i = 0; i < ret.length; ++i) {
18860 ret[i] = arr[i].listener || arr[i];
18861 }
18862 return ret;
18863}
18864
18865function objectCreatePolyfill(proto) {
18866 var F = function() {};
18867 F.prototype = proto;
18868 return new F;
18869}
18870function objectKeysPolyfill(obj) {
18871 var keys = [];
18872 for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {
18873 keys.push(k);
18874 }
18875 return k;
18876}
18877function functionBindPolyfill(context) {
18878 var fn = this;
18879 return function () {
18880 return fn.apply(context, arguments);
18881 };
18882}
18883
18884},{}],103:[function(require,module,exports){
18885var Buffer = require('safe-buffer').Buffer
18886var MD5 = require('md5.js')
18887
18888/* eslint-disable camelcase */
18889function EVP_BytesToKey (password, salt, keyBits, ivLen) {
18890 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
18891 if (salt) {
18892 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
18893 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
18894 }
18895
18896 var keyLen = keyBits / 8
18897 var key = Buffer.alloc(keyLen)
18898 var iv = Buffer.alloc(ivLen || 0)
18899 var tmp = Buffer.alloc(0)
18900
18901 while (keyLen > 0 || ivLen > 0) {
18902 var hash = new MD5()
18903 hash.update(tmp)
18904 hash.update(password)
18905 if (salt) hash.update(salt)
18906 tmp = hash.digest()
18907
18908 var used = 0
18909
18910 if (keyLen > 0) {
18911 var keyStart = key.length - keyLen
18912 used = Math.min(keyLen, tmp.length)
18913 tmp.copy(key, keyStart, 0, used)
18914 keyLen -= used
18915 }
18916
18917 if (used < tmp.length && ivLen > 0) {
18918 var ivStart = iv.length - ivLen
18919 var length = Math.min(ivLen, tmp.length - used)
18920 tmp.copy(iv, ivStart, used, used + length)
18921 ivLen -= length
18922 }
18923 }
18924
18925 tmp.fill(0)
18926 return { key: key, iv: iv }
18927}
18928
18929module.exports = EVP_BytesToKey
18930
18931},{"md5.js":358,"safe-buffer":398}],104:[function(require,module,exports){
18932'use strict'
18933var Buffer = require('safe-buffer').Buffer
18934var Transform = require('stream').Transform
18935var inherits = require('inherits')
18936
18937function throwIfNotStringOrBuffer (val, prefix) {
18938 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
18939 throw new TypeError(prefix + ' must be a string or a buffer')
18940 }
18941}
18942
18943function HashBase (blockSize) {
18944 Transform.call(this)
18945
18946 this._block = Buffer.allocUnsafe(blockSize)
18947 this._blockSize = blockSize
18948 this._blockOffset = 0
18949 this._length = [0, 0, 0, 0]
18950
18951 this._finalized = false
18952}
18953
18954inherits(HashBase, Transform)
18955
18956HashBase.prototype._transform = function (chunk, encoding, callback) {
18957 var error = null
18958 try {
18959 this.update(chunk, encoding)
18960 } catch (err) {
18961 error = err
18962 }
18963
18964 callback(error)
18965}
18966
18967HashBase.prototype._flush = function (callback) {
18968 var error = null
18969 try {
18970 this.push(this.digest())
18971 } catch (err) {
18972 error = err
18973 }
18974
18975 callback(error)
18976}
18977
18978HashBase.prototype.update = function (data, encoding) {
18979 throwIfNotStringOrBuffer(data, 'Data')
18980 if (this._finalized) throw new Error('Digest already called')
18981 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
18982
18983 // consume data
18984 var block = this._block
18985 var offset = 0
18986 while (this._blockOffset + data.length - offset >= this._blockSize) {
18987 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
18988 this._update()
18989 this._blockOffset = 0
18990 }
18991 while (offset < data.length) block[this._blockOffset++] = data[offset++]
18992
18993 // update length
18994 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
18995 this._length[j] += carry
18996 carry = (this._length[j] / 0x0100000000) | 0
18997 if (carry > 0) this._length[j] -= 0x0100000000 * carry
18998 }
18999
19000 return this
19001}
19002
19003HashBase.prototype._update = function () {
19004 throw new Error('_update is not implemented')
19005}
19006
19007HashBase.prototype.digest = function (encoding) {
19008 if (this._finalized) throw new Error('Digest already called')
19009 this._finalized = true
19010
19011 var digest = this._digest()
19012 if (encoding !== undefined) digest = digest.toString(encoding)
19013
19014 // reset state
19015 this._block.fill(0)
19016 this._blockOffset = 0
19017 for (var i = 0; i < 4; ++i) this._length[i] = 0
19018
19019 return digest
19020}
19021
19022HashBase.prototype._digest = function () {
19023 throw new Error('_digest is not implemented')
19024}
19025
19026module.exports = HashBase
19027
19028},{"inherits":119,"safe-buffer":398,"stream":437}],105:[function(require,module,exports){
19029var hash = exports;
19030
19031hash.utils = require('./hash/utils');
19032hash.common = require('./hash/common');
19033hash.sha = require('./hash/sha');
19034hash.ripemd = require('./hash/ripemd');
19035hash.hmac = require('./hash/hmac');
19036
19037// Proxy hash functions to the main object
19038hash.sha1 = hash.sha.sha1;
19039hash.sha256 = hash.sha.sha256;
19040hash.sha224 = hash.sha.sha224;
19041hash.sha384 = hash.sha.sha384;
19042hash.sha512 = hash.sha.sha512;
19043hash.ripemd160 = hash.ripemd.ripemd160;
19044
19045},{"./hash/common":106,"./hash/hmac":107,"./hash/ripemd":108,"./hash/sha":109,"./hash/utils":116}],106:[function(require,module,exports){
19046'use strict';
19047
19048var utils = require('./utils');
19049var assert = require('minimalistic-assert');
19050
19051function BlockHash() {
19052 this.pending = null;
19053 this.pendingTotal = 0;
19054 this.blockSize = this.constructor.blockSize;
19055 this.outSize = this.constructor.outSize;
19056 this.hmacStrength = this.constructor.hmacStrength;
19057 this.padLength = this.constructor.padLength / 8;
19058 this.endian = 'big';
19059
19060 this._delta8 = this.blockSize / 8;
19061 this._delta32 = this.blockSize / 32;
19062}
19063exports.BlockHash = BlockHash;
19064
19065BlockHash.prototype.update = function update(msg, enc) {
19066 // Convert message to array, pad it, and join into 32bit blocks
19067 msg = utils.toArray(msg, enc);
19068 if (!this.pending)
19069 this.pending = msg;
19070 else
19071 this.pending = this.pending.concat(msg);
19072 this.pendingTotal += msg.length;
19073
19074 // Enough data, try updating
19075 if (this.pending.length >= this._delta8) {
19076 msg = this.pending;
19077
19078 // Process pending data in blocks
19079 var r = msg.length % this._delta8;
19080 this.pending = msg.slice(msg.length - r, msg.length);
19081 if (this.pending.length === 0)
19082 this.pending = null;
19083
19084 msg = utils.join32(msg, 0, msg.length - r, this.endian);
19085 for (var i = 0; i < msg.length; i += this._delta32)
19086 this._update(msg, i, i + this._delta32);
19087 }
19088
19089 return this;
19090};
19091
19092BlockHash.prototype.digest = function digest(enc) {
19093 this.update(this._pad());
19094 assert(this.pending === null);
19095
19096 return this._digest(enc);
19097};
19098
19099BlockHash.prototype._pad = function pad() {
19100 var len = this.pendingTotal;
19101 var bytes = this._delta8;
19102 var k = bytes - ((len + this.padLength) % bytes);
19103 var res = new Array(k + this.padLength);
19104 res[0] = 0x80;
19105 for (var i = 1; i < k; i++)
19106 res[i] = 0;
19107
19108 // Append length
19109 len <<= 3;
19110 if (this.endian === 'big') {
19111 for (var t = 8; t < this.padLength; t++)
19112 res[i++] = 0;
19113
19114 res[i++] = 0;
19115 res[i++] = 0;
19116 res[i++] = 0;
19117 res[i++] = 0;
19118 res[i++] = (len >>> 24) & 0xff;
19119 res[i++] = (len >>> 16) & 0xff;
19120 res[i++] = (len >>> 8) & 0xff;
19121 res[i++] = len & 0xff;
19122 } else {
19123 res[i++] = len & 0xff;
19124 res[i++] = (len >>> 8) & 0xff;
19125 res[i++] = (len >>> 16) & 0xff;
19126 res[i++] = (len >>> 24) & 0xff;
19127 res[i++] = 0;
19128 res[i++] = 0;
19129 res[i++] = 0;
19130 res[i++] = 0;
19131
19132 for (t = 8; t < this.padLength; t++)
19133 res[i++] = 0;
19134 }
19135
19136 return res;
19137};
19138
19139},{"./utils":116,"minimalistic-assert":360}],107:[function(require,module,exports){
19140'use strict';
19141
19142var utils = require('./utils');
19143var assert = require('minimalistic-assert');
19144
19145function Hmac(hash, key, enc) {
19146 if (!(this instanceof Hmac))
19147 return new Hmac(hash, key, enc);
19148 this.Hash = hash;
19149 this.blockSize = hash.blockSize / 8;
19150 this.outSize = hash.outSize / 8;
19151 this.inner = null;
19152 this.outer = null;
19153
19154 this._init(utils.toArray(key, enc));
19155}
19156module.exports = Hmac;
19157
19158Hmac.prototype._init = function init(key) {
19159 // Shorten key, if needed
19160 if (key.length > this.blockSize)
19161 key = new this.Hash().update(key).digest();
19162 assert(key.length <= this.blockSize);
19163
19164 // Add padding to key
19165 for (var i = key.length; i < this.blockSize; i++)
19166 key.push(0);
19167
19168 for (i = 0; i < key.length; i++)
19169 key[i] ^= 0x36;
19170 this.inner = new this.Hash().update(key);
19171
19172 // 0x36 ^ 0x5c = 0x6a
19173 for (i = 0; i < key.length; i++)
19174 key[i] ^= 0x6a;
19175 this.outer = new this.Hash().update(key);
19176};
19177
19178Hmac.prototype.update = function update(msg, enc) {
19179 this.inner.update(msg, enc);
19180 return this;
19181};
19182
19183Hmac.prototype.digest = function digest(enc) {
19184 this.outer.update(this.inner.digest());
19185 return this.outer.digest(enc);
19186};
19187
19188},{"./utils":116,"minimalistic-assert":360}],108:[function(require,module,exports){
19189'use strict';
19190
19191var utils = require('./utils');
19192var common = require('./common');
19193
19194var rotl32 = utils.rotl32;
19195var sum32 = utils.sum32;
19196var sum32_3 = utils.sum32_3;
19197var sum32_4 = utils.sum32_4;
19198var BlockHash = common.BlockHash;
19199
19200function RIPEMD160() {
19201 if (!(this instanceof RIPEMD160))
19202 return new RIPEMD160();
19203
19204 BlockHash.call(this);
19205
19206 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
19207 this.endian = 'little';
19208}
19209utils.inherits(RIPEMD160, BlockHash);
19210exports.ripemd160 = RIPEMD160;
19211
19212RIPEMD160.blockSize = 512;
19213RIPEMD160.outSize = 160;
19214RIPEMD160.hmacStrength = 192;
19215RIPEMD160.padLength = 64;
19216
19217RIPEMD160.prototype._update = function update(msg, start) {
19218 var A = this.h[0];
19219 var B = this.h[1];
19220 var C = this.h[2];
19221 var D = this.h[3];
19222 var E = this.h[4];
19223 var Ah = A;
19224 var Bh = B;
19225 var Ch = C;
19226 var Dh = D;
19227 var Eh = E;
19228 for (var j = 0; j < 80; j++) {
19229 var T = sum32(
19230 rotl32(
19231 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
19232 s[j]),
19233 E);
19234 A = E;
19235 E = D;
19236 D = rotl32(C, 10);
19237 C = B;
19238 B = T;
19239 T = sum32(
19240 rotl32(
19241 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
19242 sh[j]),
19243 Eh);
19244 Ah = Eh;
19245 Eh = Dh;
19246 Dh = rotl32(Ch, 10);
19247 Ch = Bh;
19248 Bh = T;
19249 }
19250 T = sum32_3(this.h[1], C, Dh);
19251 this.h[1] = sum32_3(this.h[2], D, Eh);
19252 this.h[2] = sum32_3(this.h[3], E, Ah);
19253 this.h[3] = sum32_3(this.h[4], A, Bh);
19254 this.h[4] = sum32_3(this.h[0], B, Ch);
19255 this.h[0] = T;
19256};
19257
19258RIPEMD160.prototype._digest = function digest(enc) {
19259 if (enc === 'hex')
19260 return utils.toHex32(this.h, 'little');
19261 else
19262 return utils.split32(this.h, 'little');
19263};
19264
19265function f(j, x, y, z) {
19266 if (j <= 15)
19267 return x ^ y ^ z;
19268 else if (j <= 31)
19269 return (x & y) | ((~x) & z);
19270 else if (j <= 47)
19271 return (x | (~y)) ^ z;
19272 else if (j <= 63)
19273 return (x & z) | (y & (~z));
19274 else
19275 return x ^ (y | (~z));
19276}
19277
19278function K(j) {
19279 if (j <= 15)
19280 return 0x00000000;
19281 else if (j <= 31)
19282 return 0x5a827999;
19283 else if (j <= 47)
19284 return 0x6ed9eba1;
19285 else if (j <= 63)
19286 return 0x8f1bbcdc;
19287 else
19288 return 0xa953fd4e;
19289}
19290
19291function Kh(j) {
19292 if (j <= 15)
19293 return 0x50a28be6;
19294 else if (j <= 31)
19295 return 0x5c4dd124;
19296 else if (j <= 47)
19297 return 0x6d703ef3;
19298 else if (j <= 63)
19299 return 0x7a6d76e9;
19300 else
19301 return 0x00000000;
19302}
19303
19304var r = [
19305 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
19306 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
19307 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
19308 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
19309 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
19310];
19311
19312var rh = [
19313 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
19314 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
19315 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
19316 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
19317 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
19318];
19319
19320var s = [
19321 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
19322 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
19323 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
19324 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
19325 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
19326];
19327
19328var sh = [
19329 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
19330 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
19331 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
19332 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
19333 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
19334];
19335
19336},{"./common":106,"./utils":116}],109:[function(require,module,exports){
19337'use strict';
19338
19339exports.sha1 = require('./sha/1');
19340exports.sha224 = require('./sha/224');
19341exports.sha256 = require('./sha/256');
19342exports.sha384 = require('./sha/384');
19343exports.sha512 = require('./sha/512');
19344
19345},{"./sha/1":110,"./sha/224":111,"./sha/256":112,"./sha/384":113,"./sha/512":114}],110:[function(require,module,exports){
19346'use strict';
19347
19348var utils = require('../utils');
19349var common = require('../common');
19350var shaCommon = require('./common');
19351
19352var rotl32 = utils.rotl32;
19353var sum32 = utils.sum32;
19354var sum32_5 = utils.sum32_5;
19355var ft_1 = shaCommon.ft_1;
19356var BlockHash = common.BlockHash;
19357
19358var sha1_K = [
19359 0x5A827999, 0x6ED9EBA1,
19360 0x8F1BBCDC, 0xCA62C1D6
19361];
19362
19363function SHA1() {
19364 if (!(this instanceof SHA1))
19365 return new SHA1();
19366
19367 BlockHash.call(this);
19368 this.h = [
19369 0x67452301, 0xefcdab89, 0x98badcfe,
19370 0x10325476, 0xc3d2e1f0 ];
19371 this.W = new Array(80);
19372}
19373
19374utils.inherits(SHA1, BlockHash);
19375module.exports = SHA1;
19376
19377SHA1.blockSize = 512;
19378SHA1.outSize = 160;
19379SHA1.hmacStrength = 80;
19380SHA1.padLength = 64;
19381
19382SHA1.prototype._update = function _update(msg, start) {
19383 var W = this.W;
19384
19385 for (var i = 0; i < 16; i++)
19386 W[i] = msg[start + i];
19387
19388 for(; i < W.length; i++)
19389 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
19390
19391 var a = this.h[0];
19392 var b = this.h[1];
19393 var c = this.h[2];
19394 var d = this.h[3];
19395 var e = this.h[4];
19396
19397 for (i = 0; i < W.length; i++) {
19398 var s = ~~(i / 20);
19399 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
19400 e = d;
19401 d = c;
19402 c = rotl32(b, 30);
19403 b = a;
19404 a = t;
19405 }
19406
19407 this.h[0] = sum32(this.h[0], a);
19408 this.h[1] = sum32(this.h[1], b);
19409 this.h[2] = sum32(this.h[2], c);
19410 this.h[3] = sum32(this.h[3], d);
19411 this.h[4] = sum32(this.h[4], e);
19412};
19413
19414SHA1.prototype._digest = function digest(enc) {
19415 if (enc === 'hex')
19416 return utils.toHex32(this.h, 'big');
19417 else
19418 return utils.split32(this.h, 'big');
19419};
19420
19421},{"../common":106,"../utils":116,"./common":115}],111:[function(require,module,exports){
19422'use strict';
19423
19424var utils = require('../utils');
19425var SHA256 = require('./256');
19426
19427function SHA224() {
19428 if (!(this instanceof SHA224))
19429 return new SHA224();
19430
19431 SHA256.call(this);
19432 this.h = [
19433 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
19434 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
19435}
19436utils.inherits(SHA224, SHA256);
19437module.exports = SHA224;
19438
19439SHA224.blockSize = 512;
19440SHA224.outSize = 224;
19441SHA224.hmacStrength = 192;
19442SHA224.padLength = 64;
19443
19444SHA224.prototype._digest = function digest(enc) {
19445 // Just truncate output
19446 if (enc === 'hex')
19447 return utils.toHex32(this.h.slice(0, 7), 'big');
19448 else
19449 return utils.split32(this.h.slice(0, 7), 'big');
19450};
19451
19452
19453},{"../utils":116,"./256":112}],112:[function(require,module,exports){
19454'use strict';
19455
19456var utils = require('../utils');
19457var common = require('../common');
19458var shaCommon = require('./common');
19459var assert = require('minimalistic-assert');
19460
19461var sum32 = utils.sum32;
19462var sum32_4 = utils.sum32_4;
19463var sum32_5 = utils.sum32_5;
19464var ch32 = shaCommon.ch32;
19465var maj32 = shaCommon.maj32;
19466var s0_256 = shaCommon.s0_256;
19467var s1_256 = shaCommon.s1_256;
19468var g0_256 = shaCommon.g0_256;
19469var g1_256 = shaCommon.g1_256;
19470
19471var BlockHash = common.BlockHash;
19472
19473var sha256_K = [
19474 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
19475 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
19476 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
19477 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
19478 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
19479 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
19480 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
19481 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
19482 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
19483 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
19484 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
19485 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
19486 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
19487 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
19488 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
19489 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
19490];
19491
19492function SHA256() {
19493 if (!(this instanceof SHA256))
19494 return new SHA256();
19495
19496 BlockHash.call(this);
19497 this.h = [
19498 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
19499 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
19500 ];
19501 this.k = sha256_K;
19502 this.W = new Array(64);
19503}
19504utils.inherits(SHA256, BlockHash);
19505module.exports = SHA256;
19506
19507SHA256.blockSize = 512;
19508SHA256.outSize = 256;
19509SHA256.hmacStrength = 192;
19510SHA256.padLength = 64;
19511
19512SHA256.prototype._update = function _update(msg, start) {
19513 var W = this.W;
19514
19515 for (var i = 0; i < 16; i++)
19516 W[i] = msg[start + i];
19517 for (; i < W.length; i++)
19518 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
19519
19520 var a = this.h[0];
19521 var b = this.h[1];
19522 var c = this.h[2];
19523 var d = this.h[3];
19524 var e = this.h[4];
19525 var f = this.h[5];
19526 var g = this.h[6];
19527 var h = this.h[7];
19528
19529 assert(this.k.length === W.length);
19530 for (i = 0; i < W.length; i++) {
19531 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
19532 var T2 = sum32(s0_256(a), maj32(a, b, c));
19533 h = g;
19534 g = f;
19535 f = e;
19536 e = sum32(d, T1);
19537 d = c;
19538 c = b;
19539 b = a;
19540 a = sum32(T1, T2);
19541 }
19542
19543 this.h[0] = sum32(this.h[0], a);
19544 this.h[1] = sum32(this.h[1], b);
19545 this.h[2] = sum32(this.h[2], c);
19546 this.h[3] = sum32(this.h[3], d);
19547 this.h[4] = sum32(this.h[4], e);
19548 this.h[5] = sum32(this.h[5], f);
19549 this.h[6] = sum32(this.h[6], g);
19550 this.h[7] = sum32(this.h[7], h);
19551};
19552
19553SHA256.prototype._digest = function digest(enc) {
19554 if (enc === 'hex')
19555 return utils.toHex32(this.h, 'big');
19556 else
19557 return utils.split32(this.h, 'big');
19558};
19559
19560},{"../common":106,"../utils":116,"./common":115,"minimalistic-assert":360}],113:[function(require,module,exports){
19561'use strict';
19562
19563var utils = require('../utils');
19564
19565var SHA512 = require('./512');
19566
19567function SHA384() {
19568 if (!(this instanceof SHA384))
19569 return new SHA384();
19570
19571 SHA512.call(this);
19572 this.h = [
19573 0xcbbb9d5d, 0xc1059ed8,
19574 0x629a292a, 0x367cd507,
19575 0x9159015a, 0x3070dd17,
19576 0x152fecd8, 0xf70e5939,
19577 0x67332667, 0xffc00b31,
19578 0x8eb44a87, 0x68581511,
19579 0xdb0c2e0d, 0x64f98fa7,
19580 0x47b5481d, 0xbefa4fa4 ];
19581}
19582utils.inherits(SHA384, SHA512);
19583module.exports = SHA384;
19584
19585SHA384.blockSize = 1024;
19586SHA384.outSize = 384;
19587SHA384.hmacStrength = 192;
19588SHA384.padLength = 128;
19589
19590SHA384.prototype._digest = function digest(enc) {
19591 if (enc === 'hex')
19592 return utils.toHex32(this.h.slice(0, 12), 'big');
19593 else
19594 return utils.split32(this.h.slice(0, 12), 'big');
19595};
19596
19597},{"../utils":116,"./512":114}],114:[function(require,module,exports){
19598'use strict';
19599
19600var utils = require('../utils');
19601var common = require('../common');
19602var assert = require('minimalistic-assert');
19603
19604var rotr64_hi = utils.rotr64_hi;
19605var rotr64_lo = utils.rotr64_lo;
19606var shr64_hi = utils.shr64_hi;
19607var shr64_lo = utils.shr64_lo;
19608var sum64 = utils.sum64;
19609var sum64_hi = utils.sum64_hi;
19610var sum64_lo = utils.sum64_lo;
19611var sum64_4_hi = utils.sum64_4_hi;
19612var sum64_4_lo = utils.sum64_4_lo;
19613var sum64_5_hi = utils.sum64_5_hi;
19614var sum64_5_lo = utils.sum64_5_lo;
19615
19616var BlockHash = common.BlockHash;
19617
19618var sha512_K = [
19619 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
19620 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
19621 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
19622 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
19623 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
19624 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
19625 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
19626 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
19627 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
19628 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
19629 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
19630 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
19631 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
19632 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
19633 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
19634 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
19635 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
19636 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
19637 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
19638 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
19639 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
19640 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
19641 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
19642 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
19643 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
19644 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
19645 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
19646 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
19647 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
19648 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
19649 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
19650 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
19651 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
19652 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
19653 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
19654 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
19655 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
19656 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
19657 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
19658 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
19659];
19660
19661function SHA512() {
19662 if (!(this instanceof SHA512))
19663 return new SHA512();
19664
19665 BlockHash.call(this);
19666 this.h = [
19667 0x6a09e667, 0xf3bcc908,
19668 0xbb67ae85, 0x84caa73b,
19669 0x3c6ef372, 0xfe94f82b,
19670 0xa54ff53a, 0x5f1d36f1,
19671 0x510e527f, 0xade682d1,
19672 0x9b05688c, 0x2b3e6c1f,
19673 0x1f83d9ab, 0xfb41bd6b,
19674 0x5be0cd19, 0x137e2179 ];
19675 this.k = sha512_K;
19676 this.W = new Array(160);
19677}
19678utils.inherits(SHA512, BlockHash);
19679module.exports = SHA512;
19680
19681SHA512.blockSize = 1024;
19682SHA512.outSize = 512;
19683SHA512.hmacStrength = 192;
19684SHA512.padLength = 128;
19685
19686SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
19687 var W = this.W;
19688
19689 // 32 x 32bit words
19690 for (var i = 0; i < 32; i++)
19691 W[i] = msg[start + i];
19692 for (; i < W.length; i += 2) {
19693 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
19694 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
19695 var c1_hi = W[i - 14]; // i - 7
19696 var c1_lo = W[i - 13];
19697 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
19698 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
19699 var c3_hi = W[i - 32]; // i - 16
19700 var c3_lo = W[i - 31];
19701
19702 W[i] = sum64_4_hi(
19703 c0_hi, c0_lo,
19704 c1_hi, c1_lo,
19705 c2_hi, c2_lo,
19706 c3_hi, c3_lo);
19707 W[i + 1] = sum64_4_lo(
19708 c0_hi, c0_lo,
19709 c1_hi, c1_lo,
19710 c2_hi, c2_lo,
19711 c3_hi, c3_lo);
19712 }
19713};
19714
19715SHA512.prototype._update = function _update(msg, start) {
19716 this._prepareBlock(msg, start);
19717
19718 var W = this.W;
19719
19720 var ah = this.h[0];
19721 var al = this.h[1];
19722 var bh = this.h[2];
19723 var bl = this.h[3];
19724 var ch = this.h[4];
19725 var cl = this.h[5];
19726 var dh = this.h[6];
19727 var dl = this.h[7];
19728 var eh = this.h[8];
19729 var el = this.h[9];
19730 var fh = this.h[10];
19731 var fl = this.h[11];
19732 var gh = this.h[12];
19733 var gl = this.h[13];
19734 var hh = this.h[14];
19735 var hl = this.h[15];
19736
19737 assert(this.k.length === W.length);
19738 for (var i = 0; i < W.length; i += 2) {
19739 var c0_hi = hh;
19740 var c0_lo = hl;
19741 var c1_hi = s1_512_hi(eh, el);
19742 var c1_lo = s1_512_lo(eh, el);
19743 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
19744 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
19745 var c3_hi = this.k[i];
19746 var c3_lo = this.k[i + 1];
19747 var c4_hi = W[i];
19748 var c4_lo = W[i + 1];
19749
19750 var T1_hi = sum64_5_hi(
19751 c0_hi, c0_lo,
19752 c1_hi, c1_lo,
19753 c2_hi, c2_lo,
19754 c3_hi, c3_lo,
19755 c4_hi, c4_lo);
19756 var T1_lo = sum64_5_lo(
19757 c0_hi, c0_lo,
19758 c1_hi, c1_lo,
19759 c2_hi, c2_lo,
19760 c3_hi, c3_lo,
19761 c4_hi, c4_lo);
19762
19763 c0_hi = s0_512_hi(ah, al);
19764 c0_lo = s0_512_lo(ah, al);
19765 c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
19766 c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
19767
19768 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
19769 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
19770
19771 hh = gh;
19772 hl = gl;
19773
19774 gh = fh;
19775 gl = fl;
19776
19777 fh = eh;
19778 fl = el;
19779
19780 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
19781 el = sum64_lo(dl, dl, T1_hi, T1_lo);
19782
19783 dh = ch;
19784 dl = cl;
19785
19786 ch = bh;
19787 cl = bl;
19788
19789 bh = ah;
19790 bl = al;
19791
19792 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
19793 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
19794 }
19795
19796 sum64(this.h, 0, ah, al);
19797 sum64(this.h, 2, bh, bl);
19798 sum64(this.h, 4, ch, cl);
19799 sum64(this.h, 6, dh, dl);
19800 sum64(this.h, 8, eh, el);
19801 sum64(this.h, 10, fh, fl);
19802 sum64(this.h, 12, gh, gl);
19803 sum64(this.h, 14, hh, hl);
19804};
19805
19806SHA512.prototype._digest = function digest(enc) {
19807 if (enc === 'hex')
19808 return utils.toHex32(this.h, 'big');
19809 else
19810 return utils.split32(this.h, 'big');
19811};
19812
19813function ch64_hi(xh, xl, yh, yl, zh) {
19814 var r = (xh & yh) ^ ((~xh) & zh);
19815 if (r < 0)
19816 r += 0x100000000;
19817 return r;
19818}
19819
19820function ch64_lo(xh, xl, yh, yl, zh, zl) {
19821 var r = (xl & yl) ^ ((~xl) & zl);
19822 if (r < 0)
19823 r += 0x100000000;
19824 return r;
19825}
19826
19827function maj64_hi(xh, xl, yh, yl, zh) {
19828 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
19829 if (r < 0)
19830 r += 0x100000000;
19831 return r;
19832}
19833
19834function maj64_lo(xh, xl, yh, yl, zh, zl) {
19835 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
19836 if (r < 0)
19837 r += 0x100000000;
19838 return r;
19839}
19840
19841function s0_512_hi(xh, xl) {
19842 var c0_hi = rotr64_hi(xh, xl, 28);
19843 var c1_hi = rotr64_hi(xl, xh, 2); // 34
19844 var c2_hi = rotr64_hi(xl, xh, 7); // 39
19845
19846 var r = c0_hi ^ c1_hi ^ c2_hi;
19847 if (r < 0)
19848 r += 0x100000000;
19849 return r;
19850}
19851
19852function s0_512_lo(xh, xl) {
19853 var c0_lo = rotr64_lo(xh, xl, 28);
19854 var c1_lo = rotr64_lo(xl, xh, 2); // 34
19855 var c2_lo = rotr64_lo(xl, xh, 7); // 39
19856
19857 var r = c0_lo ^ c1_lo ^ c2_lo;
19858 if (r < 0)
19859 r += 0x100000000;
19860 return r;
19861}
19862
19863function s1_512_hi(xh, xl) {
19864 var c0_hi = rotr64_hi(xh, xl, 14);
19865 var c1_hi = rotr64_hi(xh, xl, 18);
19866 var c2_hi = rotr64_hi(xl, xh, 9); // 41
19867
19868 var r = c0_hi ^ c1_hi ^ c2_hi;
19869 if (r < 0)
19870 r += 0x100000000;
19871 return r;
19872}
19873
19874function s1_512_lo(xh, xl) {
19875 var c0_lo = rotr64_lo(xh, xl, 14);
19876 var c1_lo = rotr64_lo(xh, xl, 18);
19877 var c2_lo = rotr64_lo(xl, xh, 9); // 41
19878
19879 var r = c0_lo ^ c1_lo ^ c2_lo;
19880 if (r < 0)
19881 r += 0x100000000;
19882 return r;
19883}
19884
19885function g0_512_hi(xh, xl) {
19886 var c0_hi = rotr64_hi(xh, xl, 1);
19887 var c1_hi = rotr64_hi(xh, xl, 8);
19888 var c2_hi = shr64_hi(xh, xl, 7);
19889
19890 var r = c0_hi ^ c1_hi ^ c2_hi;
19891 if (r < 0)
19892 r += 0x100000000;
19893 return r;
19894}
19895
19896function g0_512_lo(xh, xl) {
19897 var c0_lo = rotr64_lo(xh, xl, 1);
19898 var c1_lo = rotr64_lo(xh, xl, 8);
19899 var c2_lo = shr64_lo(xh, xl, 7);
19900
19901 var r = c0_lo ^ c1_lo ^ c2_lo;
19902 if (r < 0)
19903 r += 0x100000000;
19904 return r;
19905}
19906
19907function g1_512_hi(xh, xl) {
19908 var c0_hi = rotr64_hi(xh, xl, 19);
19909 var c1_hi = rotr64_hi(xl, xh, 29); // 61
19910 var c2_hi = shr64_hi(xh, xl, 6);
19911
19912 var r = c0_hi ^ c1_hi ^ c2_hi;
19913 if (r < 0)
19914 r += 0x100000000;
19915 return r;
19916}
19917
19918function g1_512_lo(xh, xl) {
19919 var c0_lo = rotr64_lo(xh, xl, 19);
19920 var c1_lo = rotr64_lo(xl, xh, 29); // 61
19921 var c2_lo = shr64_lo(xh, xl, 6);
19922
19923 var r = c0_lo ^ c1_lo ^ c2_lo;
19924 if (r < 0)
19925 r += 0x100000000;
19926 return r;
19927}
19928
19929},{"../common":106,"../utils":116,"minimalistic-assert":360}],115:[function(require,module,exports){
19930'use strict';
19931
19932var utils = require('../utils');
19933var rotr32 = utils.rotr32;
19934
19935function ft_1(s, x, y, z) {
19936 if (s === 0)
19937 return ch32(x, y, z);
19938 if (s === 1 || s === 3)
19939 return p32(x, y, z);
19940 if (s === 2)
19941 return maj32(x, y, z);
19942}
19943exports.ft_1 = ft_1;
19944
19945function ch32(x, y, z) {
19946 return (x & y) ^ ((~x) & z);
19947}
19948exports.ch32 = ch32;
19949
19950function maj32(x, y, z) {
19951 return (x & y) ^ (x & z) ^ (y & z);
19952}
19953exports.maj32 = maj32;
19954
19955function p32(x, y, z) {
19956 return x ^ y ^ z;
19957}
19958exports.p32 = p32;
19959
19960function s0_256(x) {
19961 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
19962}
19963exports.s0_256 = s0_256;
19964
19965function s1_256(x) {
19966 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
19967}
19968exports.s1_256 = s1_256;
19969
19970function g0_256(x) {
19971 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
19972}
19973exports.g0_256 = g0_256;
19974
19975function g1_256(x) {
19976 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
19977}
19978exports.g1_256 = g1_256;
19979
19980},{"../utils":116}],116:[function(require,module,exports){
19981'use strict';
19982
19983var assert = require('minimalistic-assert');
19984var inherits = require('inherits');
19985
19986exports.inherits = inherits;
19987
19988function isSurrogatePair(msg, i) {
19989 if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {
19990 return false;
19991 }
19992 if (i < 0 || i + 1 >= msg.length) {
19993 return false;
19994 }
19995 return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;
19996}
19997
19998function toArray(msg, enc) {
19999 if (Array.isArray(msg))
20000 return msg.slice();
20001 if (!msg)
20002 return [];
20003 var res = [];
20004 if (typeof msg === 'string') {
20005 if (!enc) {
20006 // Inspired by stringToUtf8ByteArray() in closure-library by Google
20007 // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143
20008 // Apache License 2.0
20009 // https://github.com/google/closure-library/blob/master/LICENSE
20010 var p = 0;
20011 for (var i = 0; i < msg.length; i++) {
20012 var c = msg.charCodeAt(i);
20013 if (c < 128) {
20014 res[p++] = c;
20015 } else if (c < 2048) {
20016 res[p++] = (c >> 6) | 192;
20017 res[p++] = (c & 63) | 128;
20018 } else if (isSurrogatePair(msg, i)) {
20019 c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);
20020 res[p++] = (c >> 18) | 240;
20021 res[p++] = ((c >> 12) & 63) | 128;
20022 res[p++] = ((c >> 6) & 63) | 128;
20023 res[p++] = (c & 63) | 128;
20024 } else {
20025 res[p++] = (c >> 12) | 224;
20026 res[p++] = ((c >> 6) & 63) | 128;
20027 res[p++] = (c & 63) | 128;
20028 }
20029 }
20030 } else if (enc === 'hex') {
20031 msg = msg.replace(/[^a-z0-9]+/ig, '');
20032 if (msg.length % 2 !== 0)
20033 msg = '0' + msg;
20034 for (i = 0; i < msg.length; i += 2)
20035 res.push(parseInt(msg[i] + msg[i + 1], 16));
20036 }
20037 } else {
20038 for (i = 0; i < msg.length; i++)
20039 res[i] = msg[i] | 0;
20040 }
20041 return res;
20042}
20043exports.toArray = toArray;
20044
20045function toHex(msg) {
20046 var res = '';
20047 for (var i = 0; i < msg.length; i++)
20048 res += zero2(msg[i].toString(16));
20049 return res;
20050}
20051exports.toHex = toHex;
20052
20053function htonl(w) {
20054 var res = (w >>> 24) |
20055 ((w >>> 8) & 0xff00) |
20056 ((w << 8) & 0xff0000) |
20057 ((w & 0xff) << 24);
20058 return res >>> 0;
20059}
20060exports.htonl = htonl;
20061
20062function toHex32(msg, endian) {
20063 var res = '';
20064 for (var i = 0; i < msg.length; i++) {
20065 var w = msg[i];
20066 if (endian === 'little')
20067 w = htonl(w);
20068 res += zero8(w.toString(16));
20069 }
20070 return res;
20071}
20072exports.toHex32 = toHex32;
20073
20074function zero2(word) {
20075 if (word.length === 1)
20076 return '0' + word;
20077 else
20078 return word;
20079}
20080exports.zero2 = zero2;
20081
20082function zero8(word) {
20083 if (word.length === 7)
20084 return '0' + word;
20085 else if (word.length === 6)
20086 return '00' + word;
20087 else if (word.length === 5)
20088 return '000' + word;
20089 else if (word.length === 4)
20090 return '0000' + word;
20091 else if (word.length === 3)
20092 return '00000' + word;
20093 else if (word.length === 2)
20094 return '000000' + word;
20095 else if (word.length === 1)
20096 return '0000000' + word;
20097 else
20098 return word;
20099}
20100exports.zero8 = zero8;
20101
20102function join32(msg, start, end, endian) {
20103 var len = end - start;
20104 assert(len % 4 === 0);
20105 var res = new Array(len / 4);
20106 for (var i = 0, k = start; i < res.length; i++, k += 4) {
20107 var w;
20108 if (endian === 'big')
20109 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
20110 else
20111 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
20112 res[i] = w >>> 0;
20113 }
20114 return res;
20115}
20116exports.join32 = join32;
20117
20118function split32(msg, endian) {
20119 var res = new Array(msg.length * 4);
20120 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
20121 var m = msg[i];
20122 if (endian === 'big') {
20123 res[k] = m >>> 24;
20124 res[k + 1] = (m >>> 16) & 0xff;
20125 res[k + 2] = (m >>> 8) & 0xff;
20126 res[k + 3] = m & 0xff;
20127 } else {
20128 res[k + 3] = m >>> 24;
20129 res[k + 2] = (m >>> 16) & 0xff;
20130 res[k + 1] = (m >>> 8) & 0xff;
20131 res[k] = m & 0xff;
20132 }
20133 }
20134 return res;
20135}
20136exports.split32 = split32;
20137
20138function rotr32(w, b) {
20139 return (w >>> b) | (w << (32 - b));
20140}
20141exports.rotr32 = rotr32;
20142
20143function rotl32(w, b) {
20144 return (w << b) | (w >>> (32 - b));
20145}
20146exports.rotl32 = rotl32;
20147
20148function sum32(a, b) {
20149 return (a + b) >>> 0;
20150}
20151exports.sum32 = sum32;
20152
20153function sum32_3(a, b, c) {
20154 return (a + b + c) >>> 0;
20155}
20156exports.sum32_3 = sum32_3;
20157
20158function sum32_4(a, b, c, d) {
20159 return (a + b + c + d) >>> 0;
20160}
20161exports.sum32_4 = sum32_4;
20162
20163function sum32_5(a, b, c, d, e) {
20164 return (a + b + c + d + e) >>> 0;
20165}
20166exports.sum32_5 = sum32_5;
20167
20168function sum64(buf, pos, ah, al) {
20169 var bh = buf[pos];
20170 var bl = buf[pos + 1];
20171
20172 var lo = (al + bl) >>> 0;
20173 var hi = (lo < al ? 1 : 0) + ah + bh;
20174 buf[pos] = hi >>> 0;
20175 buf[pos + 1] = lo;
20176}
20177exports.sum64 = sum64;
20178
20179function sum64_hi(ah, al, bh, bl) {
20180 var lo = (al + bl) >>> 0;
20181 var hi = (lo < al ? 1 : 0) + ah + bh;
20182 return hi >>> 0;
20183}
20184exports.sum64_hi = sum64_hi;
20185
20186function sum64_lo(ah, al, bh, bl) {
20187 var lo = al + bl;
20188 return lo >>> 0;
20189}
20190exports.sum64_lo = sum64_lo;
20191
20192function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
20193 var carry = 0;
20194 var lo = al;
20195 lo = (lo + bl) >>> 0;
20196 carry += lo < al ? 1 : 0;
20197 lo = (lo + cl) >>> 0;
20198 carry += lo < cl ? 1 : 0;
20199 lo = (lo + dl) >>> 0;
20200 carry += lo < dl ? 1 : 0;
20201
20202 var hi = ah + bh + ch + dh + carry;
20203 return hi >>> 0;
20204}
20205exports.sum64_4_hi = sum64_4_hi;
20206
20207function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
20208 var lo = al + bl + cl + dl;
20209 return lo >>> 0;
20210}
20211exports.sum64_4_lo = sum64_4_lo;
20212
20213function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
20214 var carry = 0;
20215 var lo = al;
20216 lo = (lo + bl) >>> 0;
20217 carry += lo < al ? 1 : 0;
20218 lo = (lo + cl) >>> 0;
20219 carry += lo < cl ? 1 : 0;
20220 lo = (lo + dl) >>> 0;
20221 carry += lo < dl ? 1 : 0;
20222 lo = (lo + el) >>> 0;
20223 carry += lo < el ? 1 : 0;
20224
20225 var hi = ah + bh + ch + dh + eh + carry;
20226 return hi >>> 0;
20227}
20228exports.sum64_5_hi = sum64_5_hi;
20229
20230function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
20231 var lo = al + bl + cl + dl + el;
20232
20233 return lo >>> 0;
20234}
20235exports.sum64_5_lo = sum64_5_lo;
20236
20237function rotr64_hi(ah, al, num) {
20238 var r = (al << (32 - num)) | (ah >>> num);
20239 return r >>> 0;
20240}
20241exports.rotr64_hi = rotr64_hi;
20242
20243function rotr64_lo(ah, al, num) {
20244 var r = (ah << (32 - num)) | (al >>> num);
20245 return r >>> 0;
20246}
20247exports.rotr64_lo = rotr64_lo;
20248
20249function shr64_hi(ah, al, num) {
20250 return ah >>> num;
20251}
20252exports.shr64_hi = shr64_hi;
20253
20254function shr64_lo(ah, al, num) {
20255 var r = (ah << (32 - num)) | (al >>> num);
20256 return r >>> 0;
20257}
20258exports.shr64_lo = shr64_lo;
20259
20260},{"inherits":119,"minimalistic-assert":360}],117:[function(require,module,exports){
20261'use strict';
20262
20263var hash = require('hash.js');
20264var utils = require('minimalistic-crypto-utils');
20265var assert = require('minimalistic-assert');
20266
20267function HmacDRBG(options) {
20268 if (!(this instanceof HmacDRBG))
20269 return new HmacDRBG(options);
20270 this.hash = options.hash;
20271 this.predResist = !!options.predResist;
20272
20273 this.outLen = this.hash.outSize;
20274 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
20275
20276 this._reseed = null;
20277 this.reseedInterval = null;
20278 this.K = null;
20279 this.V = null;
20280
20281 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
20282 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
20283 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
20284 assert(entropy.length >= (this.minEntropy / 8),
20285 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
20286 this._init(entropy, nonce, pers);
20287}
20288module.exports = HmacDRBG;
20289
20290HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
20291 var seed = entropy.concat(nonce).concat(pers);
20292
20293 this.K = new Array(this.outLen / 8);
20294 this.V = new Array(this.outLen / 8);
20295 for (var i = 0; i < this.V.length; i++) {
20296 this.K[i] = 0x00;
20297 this.V[i] = 0x01;
20298 }
20299
20300 this._update(seed);
20301 this._reseed = 1;
20302 this.reseedInterval = 0x1000000000000; // 2^48
20303};
20304
20305HmacDRBG.prototype._hmac = function hmac() {
20306 return new hash.hmac(this.hash, this.K);
20307};
20308
20309HmacDRBG.prototype._update = function update(seed) {
20310 var kmac = this._hmac()
20311 .update(this.V)
20312 .update([ 0x00 ]);
20313 if (seed)
20314 kmac = kmac.update(seed);
20315 this.K = kmac.digest();
20316 this.V = this._hmac().update(this.V).digest();
20317 if (!seed)
20318 return;
20319
20320 this.K = this._hmac()
20321 .update(this.V)
20322 .update([ 0x01 ])
20323 .update(seed)
20324 .digest();
20325 this.V = this._hmac().update(this.V).digest();
20326};
20327
20328HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
20329 // Optional entropy enc
20330 if (typeof entropyEnc !== 'string') {
20331 addEnc = add;
20332 add = entropyEnc;
20333 entropyEnc = null;
20334 }
20335
20336 entropy = utils.toArray(entropy, entropyEnc);
20337 add = utils.toArray(add, addEnc);
20338
20339 assert(entropy.length >= (this.minEntropy / 8),
20340 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
20341
20342 this._update(entropy.concat(add || []));
20343 this._reseed = 1;
20344};
20345
20346HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
20347 if (this._reseed > this.reseedInterval)
20348 throw new Error('Reseed is required');
20349
20350 // Optional encoding
20351 if (typeof enc !== 'string') {
20352 addEnc = add;
20353 add = enc;
20354 enc = null;
20355 }
20356
20357 // Optional additional data
20358 if (add) {
20359 add = utils.toArray(add, addEnc || 'hex');
20360 this._update(add);
20361 }
20362
20363 var temp = [];
20364 while (temp.length < len) {
20365 this.V = this._hmac().update(this.V).digest();
20366 temp = temp.concat(this.V);
20367 }
20368
20369 var res = temp.slice(0, len);
20370 this._update(add);
20371 this._reseed++;
20372 return utils.encode(res, enc);
20373};
20374
20375},{"hash.js":105,"minimalistic-assert":360,"minimalistic-crypto-utils":361}],118:[function(require,module,exports){
20376exports.read = function (buffer, offset, isLE, mLen, nBytes) {
20377 var e, m
20378 var eLen = (nBytes * 8) - mLen - 1
20379 var eMax = (1 << eLen) - 1
20380 var eBias = eMax >> 1
20381 var nBits = -7
20382 var i = isLE ? (nBytes - 1) : 0
20383 var d = isLE ? -1 : 1
20384 var s = buffer[offset + i]
20385
20386 i += d
20387
20388 e = s & ((1 << (-nBits)) - 1)
20389 s >>= (-nBits)
20390 nBits += eLen
20391 for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
20392
20393 m = e & ((1 << (-nBits)) - 1)
20394 e >>= (-nBits)
20395 nBits += mLen
20396 for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
20397
20398 if (e === 0) {
20399 e = 1 - eBias
20400 } else if (e === eMax) {
20401 return m ? NaN : ((s ? -1 : 1) * Infinity)
20402 } else {
20403 m = m + Math.pow(2, mLen)
20404 e = e - eBias
20405 }
20406 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
20407}
20408
20409exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20410 var e, m, c
20411 var eLen = (nBytes * 8) - mLen - 1
20412 var eMax = (1 << eLen) - 1
20413 var eBias = eMax >> 1
20414 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
20415 var i = isLE ? 0 : (nBytes - 1)
20416 var d = isLE ? 1 : -1
20417 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
20418
20419 value = Math.abs(value)
20420
20421 if (isNaN(value) || value === Infinity) {
20422 m = isNaN(value) ? 1 : 0
20423 e = eMax
20424 } else {
20425 e = Math.floor(Math.log(value) / Math.LN2)
20426 if (value * (c = Math.pow(2, -e)) < 1) {
20427 e--
20428 c *= 2
20429 }
20430 if (e + eBias >= 1) {
20431 value += rt / c
20432 } else {
20433 value += rt * Math.pow(2, 1 - eBias)
20434 }
20435 if (value * c >= 2) {
20436 e++
20437 c /= 2
20438 }
20439
20440 if (e + eBias >= eMax) {
20441 m = 0
20442 e = eMax
20443 } else if (e + eBias >= 1) {
20444 m = ((value * c) - 1) * Math.pow(2, mLen)
20445 e = e + eBias
20446 } else {
20447 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
20448 e = 0
20449 }
20450 }
20451
20452 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
20453
20454 e = (e << mLen) | m
20455 eLen += mLen
20456 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
20457
20458 buffer[offset + i - d] |= s * 128
20459}
20460
20461},{}],119:[function(require,module,exports){
20462if (typeof Object.create === 'function') {
20463 // implementation from standard node.js 'util' module
20464 module.exports = function inherits(ctor, superCtor) {
20465 ctor.super_ = superCtor
20466 ctor.prototype = Object.create(superCtor.prototype, {
20467 constructor: {
20468 value: ctor,
20469 enumerable: false,
20470 writable: true,
20471 configurable: true
20472 }
20473 });
20474 };
20475} else {
20476 // old school shim for old browsers
20477 module.exports = function inherits(ctor, superCtor) {
20478 ctor.super_ = superCtor
20479 var TempCtor = function () {}
20480 TempCtor.prototype = superCtor.prototype
20481 ctor.prototype = new TempCtor()
20482 ctor.prototype.constructor = ctor
20483 }
20484}
20485
20486},{}],120:[function(require,module,exports){
20487/*!
20488 * Determine if an object is a Buffer
20489 *
20490 * @author Feross Aboukhadijeh <https://feross.org>
20491 * @license MIT
20492 */
20493
20494// The _isBuffer check is for Safari 5-7 support, because it's missing
20495// Object.prototype.constructor. Remove this eventually
20496module.exports = function (obj) {
20497 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
20498}
20499
20500function isBuffer (obj) {
20501 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
20502}
20503
20504// For Node v0.10 support. Remove this eventually.
20505function isSlowBuffer (obj) {
20506 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
20507}
20508
20509},{}],121:[function(require,module,exports){
20510var toString = {}.toString;
20511
20512module.exports = Array.isArray || function (arr) {
20513 return toString.call(arr) == '[object Array]';
20514};
20515
20516},{}],122:[function(require,module,exports){
20517(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__dirname){
20518var nacl_factory = {
20519 instantiate: function (on_ready, optionsOpt) {
20520 var options = optionsOpt || {};
20521 var undefined_reference_value = (function (v) { return v; })();
20522 var requested_total_memory = options.requested_total_memory || undefined_reference_value;
20523
20524 if (typeof on_ready !== 'function') {
20525 throw new Error("nacl_factory: Expects on_ready callback as first argument. New in v1.1.0.");
20526 }
20527
20528 return (function (window, document) {
20529 var Module = {
20530 TOTAL_MEMORY: requested_total_memory
20531 };
20532 var nacl_raw = Module;
20533 var Module;
20534 if (typeof Module === 'undefined') {
20535 Module = {};
20536 }
20537 var root = Module;
20538 if (typeof root['sodium'] !== 'object') {
20539 if (typeof global === 'object') {
20540 root = global;
20541 } else if (typeof window === 'object') {
20542 root = window;
20543 }
20544 }
20545 if (typeof root['sodium'] === 'object' && typeof root['sodium']['totalMemory'] === 'number') {
20546 Module['TOTAL_MEMORY'] = root['sodium']['totalMemory'];
20547 }
20548 var _Module = Module;
20549 Module.ready = new Promise(function (resolve, reject) {
20550 var Module = _Module;
20551 Module.onAbort = reject;
20552 Module.onRuntimeInitialized = function () {
20553 try {
20554 /* Test arbitrary wasm function */
20555 Module._crypto_secretbox_keybytes();
20556 resolve();
20557 } catch (err) {
20558 reject(err);
20559 }
20560 };
20561 Module.useBackupModule = function () {
20562 var Module = _Module;
20563 Object.keys(Module).forEach(function(k) {
20564 if (k !== 'getRandomValue') {
20565 delete Module[k];
20566 }
20567 });
20568 var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("unhandledRejection",abort);Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(8);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType==="string")return Pointer_stringify(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)stackRestore(stack);return ret}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var ALLOC_STATIC=2;var ALLOC_NONE=4;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var PAGE_SIZE=16384;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){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 -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY<HEAP32[DYNAMICTOP_PTR>>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module["buffer"]=buffer}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[(function(){return Module.getRandomValue()}),(function(){if(Module.getRandomValue===undefined){try{var window_="object"===typeof window?window:self;var crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto;var randomValuesStandard=(function(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0});randomValuesStandard();Module.getRandomValue=randomValuesStandard}catch(e){try{var crypto=require("crypto");var randomValueNodeJS=(function(){var buf=crypto["randomBytes"](4);return(buf[0]<<24|buf[1]<<16|buf[2]<<8|buf[3])>>>0});randomValueNodeJS();Module.getRandomValue=randomValueNodeJS}catch(e){throw"No secure random number generator found"}}}})];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+36016;__ATINIT__.push();memoryInitializer="data:application/octet-stream;base64,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v2xF/xZF9QEXy7IAqmOqAEH4bwAlbJn/QCVFAABYPv5ZlJD/v0TgAfEnNQApy+3/kX7C/90q/f8ZY5cAYf3fAUpzMf8Gr0j/O7DLAHy3+QHk5GMAgQzP/qjAw//MsBD+mOqrAE0lVf8heIf/jsLjAR/WOgDVu33/6C48/750Kv6XshP/Mz7t/szswQDC6DwArCKd/70QuP5nA1//jekk/ikZC/8Vw6YAdvUtAEPVlf+fDBL/u6TjAaAZBQAMTsMBK8XhADCOKf7Emzz/38cSAZGInAD8dan+keLuAO8XawBttbz/5nAx/kmq7f/nt+P/UNwUAMJrfwF/zWUALjTFAdKrJP9YA1r/OJeNAGC7//8qTsgA/kZGAfR9qADMRIoBfNdGAGZCyP4RNOQAddyP/sv4ewA4Eq7/upek/zPo0AGg5Cv/+R0ZAUS+PwANAAAAAP8AAAAA9QAAAAAAAPsAAAAAAAD9AAAAAPMAAAAABwAAAAAAAwAAAADzAAAAAAUAAAAAAAAAAAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbolY/CsiewRcP0ifLvmPDV36wF08YzObE4AohtU/wFxxdqcD1N2E+6PAt2DRBnDyogU/osOczGTsf9d5KsA3rs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////3/t0/VcGmMSWNac96Le+d4UAAAAAAAAAAAAAAAAAAAAEAZtBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGfmCWqFrme7cvNuPDr1T6V/Ug5RjGgFm6vZgx8ZzeBbmC+KQpFEN3HP+8C1pdu16VvCVjnxEfFZpII/ktVeHKuYqgfYAVuDEr6FMSTDfQxVdF2+cv6x3oCnBtybdPGbwcFpm+SGR77vxp3BD8yhDCRvLOktqoR0StypsFzaiPl2UlE+mG3GMajIJwOwx39Zv/ML4MZHkafVUWPKBmcpKRSFCrcnOCEbLvxtLE0TDThTVHMKZbsKanYuycKBhSxykqHov6JLZhqocItLwqNRbMcZ6JLRJAaZ1oU1DvRwoGoQFsGkGQhsNx5Md0gntbywNLMMHDlKqthOT8qcW/NvLmjugo90b2OleBR4yIQIAseM+v++kOtsUKT3o/m+8nhxxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIybzzZ+YJajunyoSFrme7K/iU/nLzbjzxNh1fOvVPpdGC5q1/Ug5RH2w+K4xoBZtrvUH7q9mDH3khfhMZzeBbIq4o15gvikLNZe8jkUQ3cS87TezP+8C1vNuJgaXbtek4tUjzW8JWORnQBbbxEfFZm08Zr6SCP5IYgW3a1V4cq0ICA6OYqgfYvm9wRQFbgxKMsuROvoUxJOK0/9XDfQxVb4l78nRdvnKxlhY7/rHegDUSxyWnBtyblCZpz3Txm8HSSvGewWmb5OMlTziGR77vtdWMi8adwQ9lnKx3zKEMJHUCK1lvLOktg+SmbqqEdErU+0G93KmwXLVTEYPaiPl2q99m7lJRPpgQMrQtbcYxqD8h+5jIJwOw5A7vvsd/Wb/Cj6g98wvgxiWnCpNHkafVb4ID4FFjygZwbg4KZykpFPwv0kaFCrcnJskmXDghGy7tKsRa/G0sTd+zlZ0TDThT3mOvi1RzCmWosnc8uwpqduau7UcuycKBOzWCFIUscpJkA/FMoei/ogEwQrxLZhqokZf40HCLS8IwvlQGo1FsxxhS79YZ6JLREKllVSQGmdYqIHFXhTUO9LjRuzJwoGoQyNDSuBbBpBlTq0FRCGw3Hpnrjt9Md0gnqEib4bW8sDRjWsnFswwcOcuKQeNKqthOc+Njd0/KnFujuLLW828uaPyy713ugo90YC8XQ29jpXhyq/ChFHjIhOw5ZBoIAseMKB5jI/r/vpDpvYLe62xQpBV5xrL3o/m+K1Ny4/J4ccacYSbqzj4nygfCwCHHuIbRHuvgzdZ92up40W7uf0999bpvF3KqZ/AGppjIosV9YwquDfm+BJg/ERtHHBM1C3EbhH0EI/V32yiTJMdAe6vKMry+yRUKvp48TA0QnMRnHUO2Qj7LvtTFTCp+ZfycKX9Z7PrWOqtvy18XWEdKjBlEbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODrenw7QbiuFlbj+vGfxGraCY3rnDKx/YZiBRZfSbgAX5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVfs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////3/N63p8O0G4rhZW4/rxn8Rq2gmN65wysf2GYgUWX0m4gEyclbyjUIwksdCxVZyD71sERFzEWByOhtgiTt3QnxHX2f/////////////////////////////////////////a/////////////////////////////////////////9v/////////////////////////////////////////U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBAAAAAAAAAAAAAAAAAAAAaG1hY3NoYTUxMjI1NgBjdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNQBTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX19maW5hbABvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAc2hhNTEyAGJsYWtlMmIAeDI1NTE5Ymxha2UyYgBwb2x5MTMwNQAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJABhcmdvbjJpAGN1cnZlMjU1MTkAeHNhbHNhMjBwb2x5MTMwNQBzaXBoYXNoMjQAZWQyNTUxOQB4c2Fsc2EyMABqcwAieyByZXR1cm4gTW9kdWxlLmdldFJhbmRvbVZhbHVlKCk7IH0iAHsgaWYgKE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHRyeSB7IHZhciB3aW5kb3dfID0gJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgPyB3aW5kb3cgOiBzZWxmOyB2YXIgY3J5cHRvXyA9IHR5cGVvZiB3aW5kb3dfLmNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3dfLmNyeXB0byA6IHdpbmRvd18ubXNDcnlwdG87IHZhciByYW5kb21WYWx1ZXNTdGFuZGFyZCA9IGZ1bmN0aW9uKCkgeyB2YXIgYnVmID0gbmV3IFVpbnQzMkFycmF5KDEpOyBjcnlwdG9fLmdldFJhbmRvbVZhbHVlcyhidWYpOyByZXR1cm4gYnVmWzBdID4+PiAwOyB9OyByYW5kb21WYWx1ZXNTdGFuZGFyZCgpOyBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPSByYW5kb21WYWx1ZXNTdGFuZGFyZDsgfSBjYXRjaCAoZSkgeyB0cnkgeyB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7IHZhciByYW5kb21WYWx1ZU5vZGVKUyA9IGZ1bmN0aW9uKCkgeyB2YXIgYnVmID0gY3J5cHRvWydyYW5kb21CeXRlcyddKDQpOyByZXR1cm4gKGJ1ZlswXSA8PCAyNCB8IGJ1ZlsxXSA8PCAxNiB8IGJ1ZlsyXSA8PCA4IHwgYnVmWzNdKSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVOb2RlSlMoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVOb2RlSlM7IH0gY2F0Y2ggKGUpIHsgdGhyb3cgJ05vIHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3VuZCc7IH0gfSB9IH0ATGlic29kaXVtRFJHYnVmX2xlbiA8PSBTSVpFX01BWAByYW5kb21ieXRlcy9yYW5kb21ieXRlcy5jAHJhbmRvbWJ5dGVzAGI2NF9wb3MgPD0gYjY0X2xlbgBzb2RpdW0vY29kZWNzLmMAc29kaXVtX2JpbjJiYXNlNjQAMS4wLjE2AC4vMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoAJDck";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"])}function _abort(){Module["abort"]()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:var maxHeapSize=2*1024*1024*1024-16777216;return maxHeapSize/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output});function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==="boolean"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,"base64")}catch(_){buf=new Buffer(s,"base64")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity,"byteLength":byteLength};Module.asmLibraryArg={"a":abort,"b":assert,"c":enlargeMemory,"d":getTotalMemory,"e":abortOnCannotGrowMemory,"f":___assert_fail,"g":___setErrNo,"h":_abort,"i":_emscripten_asm_const_i,"j":_emscripten_memcpy_big,"k":_sysconf,"l":DYNAMICTOP_PTR,"m":tempDoublePtr,"n":STACKTOP,"o":STACK_MAX};// EMSCRIPTEN_START_ASM
20569var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {
20570"almost asm";var a=global.Int8Array;var b=new a(buffer);var c=global.Int16Array;var d=new c(buffer);var e=global.Int32Array;var f=new e(buffer);var g=global.Uint8Array;var h=new g(buffer);var i=global.Uint16Array;var j=new i(buffer);var k=global.Uint32Array;var l=new k(buffer);var m=global.Float32Array;var n=new m(buffer);var o=global.Float64Array;var p=new o(buffer);var q=global.byteLength;var r=env.l|0;var s=env.m|0;var t=env.n|0;var u=env.o|0;var v=0;var w=0;var x=0;var y=0;var z=global.NaN,A=global.Infinity;var B=0,C=0,D=0,E=0,F=0.0;var G=0;var H=global.Math.floor;var I=global.Math.abs;var J=global.Math.sqrt;var K=global.Math.pow;var L=global.Math.cos;var M=global.Math.sin;var N=global.Math.tan;var O=global.Math.acos;var P=global.Math.asin;var Q=global.Math.atan;var R=global.Math.atan2;var S=global.Math.exp;var T=global.Math.log;var U=global.Math.ceil;var V=global.Math.imul;var W=global.Math.min;var X=global.Math.max;var Y=global.Math.clz32;var Z=env.a;var _=env.b;var $=env.c;var aa=env.d;var ba=env.e;var ca=env.f;var da=env.g;var ea=env.h;var fa=env.i;var ga=env.j;var ha=env.k;var ia=0.0;function ja(newBuffer){if(q(newBuffer)&16777215||q(newBuffer)<=16777215||q(newBuffer)>2147483648)return false;b=new a(newBuffer);d=new c(newBuffer);f=new e(newBuffer);h=new g(newBuffer);j=new i(newBuffer);l=new k(newBuffer);n=new m(newBuffer);p=new o(newBuffer);buffer=newBuffer;return true}
20571// EMSCRIPTEN_START_FUNCS
20572function ka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;e=t;g=t=t+63&-64;t=t+256|0;c=0;do{h=tf(b+(c<<3)|0)|0;d=g+128+(c<<3)|0;f[d>>2]=h;f[d+4>>2]=G;c=c+1|0}while((c|0)!=16);c=g;b=a;d=c+64|0;do{f[c>>2]=f[b>>2];c=c+4|0;b=b+4|0}while((c|0)<(d|0));f[g+88>>2]=1595750129;f[g+88+4>>2]=-1521486534;N=f[a+64>>2]^-1377402159;M=f[a+64+4>>2]^1359893119;A=f[a+72>>2]^725511199;B=f[a+72+4>>2]^-1694144372;p=f[a+80>>2]^-79577749;q=f[a+80+4>>2]^528734635;X=f[a+88>>2]^327033209;W=f[a+88+4>>2]^1541459225;k=f[g+32>>2]|0;m=f[g+32+4>>2]|0;Y=Lg(k|0,m|0,f[g>>2]|0,f[g+4>>2]|0)|0;O=f[g+128>>2]|0;P=f[g+128+4>>2]|0;Y=Lg(Y|0,G|0,O|0,P|0)|0;Q=G;M=xf(Y^N,Q^M,32)|0;N=G;b=Lg(M|0,N|0,-205731576,1779033703)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;Q=Lg(m|0,k|0,Y|0,Q|0)|0;Y=f[g+128+8>>2]|0;Z=f[g+128+8+4>>2]|0;Q=Lg(Q|0,G|0,Y|0,Z|0)|0;ha=G;N=xf(Q^M,ha^N,16)|0;M=G;f[g+96>>2]=N;f[g+96+4>>2]=M;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;f[g+64>>2]=h;f[g+64+4>>2]=b;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;S=f[g+40>>2]|0;U=f[g+40+4>>2]|0;o=Lg(S|0,U|0,f[g+8>>2]|0,f[g+8+4>>2]|0)|0;c=f[g+128+16>>2]|0;d=f[g+128+16+4>>2]|0;o=Lg(o|0,G|0,c|0,d|0)|0;_=G;B=xf(o^A,_^B,32)|0;A=G;l=Lg(B|0,A|0,-2067093701,-1150833019)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;_=Lg(U|0,S|0,o|0,_|0)|0;o=f[g+128+24>>2]|0;r=f[g+128+24+4>>2]|0;_=Lg(_|0,G|0,o|0,r|0)|0;D=G;A=xf(_^B,D^A,16)|0;B=G;f[g+104>>2]=A;f[g+104+4>>2]=B;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;f[g+72>>2]=n;f[g+72+4>>2]=l;S=xf(n^U,l^S,63)|0;U=G;I=f[g+48>>2]|0;K=f[g+48+4>>2]|0;w=Lg(I|0,K|0,f[g+16>>2]|0,f[g+16+4>>2]|0)|0;la=f[g+128+32>>2]|0;ka=f[g+128+32+4>>2]|0;w=Lg(w|0,G|0,la|0,ka|0)|0;j=G;q=xf(w^p,j^q,32)|0;p=G;T=Lg(q|0,p|0,-23791573,1013904242)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;j=Lg(K|0,I|0,w|0,j|0)|0;w=f[g+128+40>>2]|0;v=f[g+128+40+4>>2]|0;j=Lg(j|0,G|0,w|0,v|0)|0;da=G;p=xf(j^q,da^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;x=f[g+56>>2]|0;y=f[g+56+4>>2]|0;z=Lg(x|0,y|0,f[g+24>>2]|0,f[g+24+4>>2]|0)|0;u=f[g+128+48>>2]|0;s=f[g+128+48+4>>2]|0;z=Lg(z|0,G|0,u|0,s|0)|0;ma=G;W=xf(z^X,ma^W,32)|0;X=G;J=Lg(W|0,X|0,1595750129,-1521486534)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;ma=Lg(y|0,x|0,z|0,ma|0)|0;z=f[g+128+56>>2]|0;C=f[g+128+56+4>>2]|0;ma=Lg(ma|0,G|0,z|0,C|0)|0;F=G;X=xf(ma^W,F^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;ha=Lg(S|0,U|0,Q|0,ha|0)|0;Q=f[g+128+64>>2]|0;R=f[g+128+64+4>>2]|0;ha=Lg(ha|0,G|0,Q|0,R|0)|0;pa=G;W=xf(ha^X,pa^W,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(U|0,S|0,ha|0,pa|0)|0;ha=f[g+128+72>>2]|0;ga=f[g+128+72+4>>2]|0;pa=Lg(pa|0,G|0,ha|0,ga|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;f[g+80>>2]=V;f[g+80+4>>2]=T;S=xf(V^U,T^S,63)|0;U=G;D=Lg(I|0,K|0,_|0,D|0)|0;_=f[g+128+80>>2]|0;$=f[g+128+80+4>>2]|0;D=Lg(D|0,G|0,_|0,$|0)|0;ia=G;M=xf(D^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(K|0,I|0,D|0,ia|0)|0;D=f[g+128+88>>2]|0;E=f[g+128+88+4>>2]|0;ia=Lg(ia|0,G|0,D|0,E|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;da=Lg(x|0,y|0,j|0,da|0)|0;j=f[g+128+96>>2]|0;i=f[g+128+96+4>>2]|0;da=Lg(da|0,G|0,j|0,i|0)|0;ea=G;B=xf(da^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(y|0,x|0,da|0,ea|0)|0;da=f[g+128+104>>2]|0;ca=f[g+128+104+4>>2]|0;ea=Lg(ea|0,G|0,da|0,ca|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;F=Lg(ma|0,F|0,k|0,m|0)|0;ma=f[g+128+112>>2]|0;na=f[g+128+112+4>>2]|0;F=Lg(F|0,G|0,ma|0,na|0)|0;aa=G;q=xf(F^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(m|0,k|0,F|0,aa|0)|0;F=f[g+128+120>>2]|0;H=f[g+128+120+4>>2]|0;aa=Lg(aa|0,G|0,F|0,H|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(ma|0,na|0,pa|0,oa|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,_|0,$|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,la|0,ka|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,Q|0,R|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,ha|0,ga|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(F|0,H|0,fa|0,ea|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,da|0,ca|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,u|0,s|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,Y|0,Z|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,j|0,i|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,O|0,P|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,c|0,d|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,D|0,E|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,z|0,C|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,w|0,v|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,o|0,r|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,D|0,E|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,Q|0,R|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,j|0,i|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,O|0,P|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,w|0,v|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,c|0,d|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,F|0,H|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,da|0,ca|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,_|0,$|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,ma|0,na|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,o|0,r|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,u|0,s|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,z|0,C|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,Y|0,Z|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,ha|0,ga|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,la|0,ka|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,z|0,C|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,ha|0,ga|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,o|0,r|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,Y|0,Z|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,da|0,ca|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,j|0,i|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,D|0,E|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,ma|0,na|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,c|0,d|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,u|0,s|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,w|0,v|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,_|0,$|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,la|0,ka|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,O|0,P|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,F|0,H|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,Q|0,R|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,ha|0,ga|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,O|0,P|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,w|0,v|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,z|0,C|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,c|0,d|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,la|0,ka|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,_|0,$|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,F|0,H|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,ma|0,na|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,Y|0,Z|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,D|0,E|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,j|0,i|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,u|0,s|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,Q|0,R|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,o|0,r|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,da|0,ca|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,c|0,d|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,j|0,i|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,u|0,s|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,_|0,$|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,O|0,P|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,D|0,E|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,Q|0,R|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,o|0,r|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,la|0,ka|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,da|0,ca|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,z|0,C|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,w|0,v|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,F|0,H|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,ma|0,na|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,Y|0,Z|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,ha|0,ga|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,j|0,i|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,w|0,v|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,Y|0,Z|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,F|0,H|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,ma|0,na|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,da|0,ca|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,la|0,ka|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,_|0,$|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,O|0,P|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,z|0,C|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,u|0,s|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,o|0,r|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,ha|0,ga|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,c|0,d|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,Q|0,R|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,D|0,E|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,da|0,ca|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,D|0,E|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,z|0,C|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,ma|0,na|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,j|0,i|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,Y|0,Z|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,o|0,r|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,ha|0,ga|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,w|0,v|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,O|0,P|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,F|0,H|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,la|0,ka|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,Q|0,R|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,u|0,s|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,c|0,d|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,_|0,$|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,u|0,s|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,F|0,H|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,ma|0,na|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,ha|0,ga|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,D|0,E|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,o|0,r|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,O|0,P|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,Q|0,R|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,j|0,i|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,c|0,d|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,da|0,ca|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,z|0,C|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,Y|0,Z|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,la|0,ka|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,_|0,$|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,w|0,v|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,_|0,$|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,c|0,d|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,Q|0,R|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,la|0,ka|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,z|0,C|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,u|0,s|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,Y|0,Z|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,w|0,v|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,F|0,H|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,D|0,E|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,ha|0,ga|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,ma|0,na|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,o|0,r|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,j|0,i|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,da|0,ca|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,O|0,P|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;oa=Lg(pa|0,oa|0,O|0,P|0)|0;oa=Lg(oa|0,G|0,k|0,m|0)|0;pa=G;M=xf(oa^N,pa^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;pa=Lg(oa|0,pa|0,Y|0,Z|0)|0;pa=Lg(pa|0,G|0,m|0,k|0)|0;oa=G;N=xf(pa^M,oa^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;qa=Lg(S|0,U|0,c|0,d|0)|0;ja=Lg(qa|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;ia=Lg(ja|0,ia|0,o|0,r|0)|0;ia=Lg(ia|0,G|0,U|0,S|0)|0;ja=G;A=xf(ia^B,ja^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;qa=Lg(I|0,K|0,la|0,ka|0)|0;fa=Lg(qa|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;ea=Lg(fa|0,ea|0,w|0,v|0)|0;ea=Lg(ea|0,G|0,K|0,I|0)|0;fa=G;p=xf(ea^q,fa^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;qa=Lg(x|0,y|0,u|0,s|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;aa=Lg(ba|0,aa|0,z|0,C|0)|0;aa=Lg(aa|0,G|0,y|0,x|0)|0;ba=G;X=xf(aa^W,ba^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;oa=Lg(pa|0,oa|0,Q|0,R|0)|0;oa=Lg(oa|0,G|0,S|0,U|0)|0;pa=G;W=xf(X^oa,W^pa,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;pa=Lg(oa|0,pa|0,ha|0,ga|0)|0;pa=Lg(pa|0,G|0,U|0,S|0)|0;oa=G;X=xf(pa^W,oa^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;S=xf(V^U,T^S,63)|0;U=G;ja=Lg(ia|0,ja|0,_|0,$|0)|0;ja=Lg(ja|0,G|0,I|0,K|0)|0;ia=G;M=xf(ja^N,ia^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;ia=Lg(ja|0,ia|0,D|0,E|0)|0;ia=Lg(ia|0,G|0,K|0,I|0)|0;ja=G;N=xf(ia^M,ja^N,16)|0;M=G;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;I=xf(L^K,J^I,63)|0;K=G;fa=Lg(ea|0,fa|0,j|0,i|0)|0;fa=Lg(fa|0,G|0,x|0,y|0)|0;ea=G;B=xf(fa^A,ea^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;ea=Lg(fa|0,ea|0,da|0,ca|0)|0;ea=Lg(ea|0,G|0,y|0,x|0)|0;fa=G;A=xf(ea^B,fa^A,16)|0;B=G;h=Lg(A|0,B|0,b|0,h|0)|0;b=G;x=xf(h^y,b^x,63)|0;y=G;qa=Lg(k|0,m|0,ma|0,na|0)|0;ba=Lg(qa|0,G|0,aa|0,ba|0)|0;aa=G;q=xf(ba^p,aa^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;aa=Lg(ba|0,aa|0,F|0,H|0)|0;aa=Lg(aa|0,G|0,m|0,k|0)|0;ba=G;p=xf(aa^q,ba^p,16)|0;q=G;n=Lg(p|0,q|0,l|0,n|0)|0;l=G;k=xf(n^m,l^k,63)|0;m=G;na=Lg(pa|0,oa|0,ma|0,na|0)|0;na=Lg(na|0,G|0,k|0,m|0)|0;ma=G;M=xf(na^N,ma^M,32)|0;N=G;b=Lg(M|0,N|0,h|0,b|0)|0;h=G;m=xf(b^k,h^m,24)|0;k=G;$=Lg(na|0,ma|0,_|0,$|0)|0;$=Lg($|0,G|0,m|0,k|0)|0;_=G;N=xf($^M,_^N,16)|0;M=G;h=Lg(N|0,M|0,b|0,h|0)|0;b=G;k=xf(h^m,b^k,63)|0;m=G;f[g+32>>2]=k;f[g+32+4>>2]=m;ka=Lg(S|0,U|0,la|0,ka|0)|0;ja=Lg(ka|0,G|0,ia|0,ja|0)|0;ia=G;B=xf(A^ja,B^ia,32)|0;A=G;l=Lg(B|0,A|0,n|0,l|0)|0;n=G;U=xf(l^S,n^U,24)|0;S=G;R=Lg(ja|0,ia|0,Q|0,R|0)|0;R=Lg(R|0,G|0,U|0,S|0)|0;Q=G;A=xf(R^B,Q^A,16)|0;B=G;n=Lg(A|0,B|0,l|0,n|0)|0;l=G;S=xf(n^U,l^S,63)|0;U=G;ga=Lg(I|0,K|0,ha|0,ga|0)|0;fa=Lg(ga|0,G|0,ea|0,fa|0)|0;ea=G;q=xf(p^fa,q^ea,32)|0;p=G;T=Lg(q|0,p|0,V|0,T|0)|0;V=G;K=xf(T^I,V^K,24)|0;I=G;H=Lg(fa|0,ea|0,F|0,H|0)|0;H=Lg(H|0,G|0,K|0,I|0)|0;F=G;p=xf(H^q,F^p,16)|0;q=G;V=Lg(p|0,q|0,T|0,V|0)|0;T=G;I=xf(V^K,T^I,63)|0;K=G;ca=Lg(x|0,y|0,da|0,ca|0)|0;ba=Lg(ca|0,G|0,aa|0,ba|0)|0;aa=G;W=xf(ba^X,aa^W,32)|0;X=G;J=Lg(W|0,X|0,L|0,J|0)|0;L=G;y=xf(J^x,L^y,24)|0;x=G;s=Lg(ba|0,aa|0,u|0,s|0)|0;s=Lg(s|0,G|0,y|0,x|0)|0;u=G;X=xf(s^W,u^X,16)|0;W=G;L=Lg(X|0,W|0,J|0,L|0)|0;J=G;x=xf(L^y,J^x,63)|0;y=G;Z=Lg($|0,_|0,Y|0,Z|0)|0;Z=Lg(Z|0,G|0,S|0,U|0)|0;Y=G;W=xf(X^Z,W^Y,32)|0;X=G;T=Lg(W|0,X|0,V|0,T|0)|0;V=G;U=xf(T^S,V^U,24)|0;S=G;i=Lg(Z|0,Y|0,j|0,i|0)|0;i=Lg(i|0,G|0,U|0,S|0)|0;j=G;f[g>>2]=i;f[g+4>>2]=j;X=xf(i^W,j^X,16)|0;W=G;f[g+120>>2]=X;f[g+120+4>>2]=W;V=Lg(X|0,W|0,T|0,V|0)|0;T=G;f[g+80>>2]=V;f[g+80+4>>2]=T;S=xf(V^U,T^S,63)|0;f[g+40>>2]=S;f[g+40+4>>2]=G;P=Lg(R|0,Q|0,O|0,P|0)|0;P=Lg(P|0,G|0,I|0,K|0)|0;O=G;M=xf(P^N,O^M,32)|0;N=G;J=Lg(M|0,N|0,L|0,J|0)|0;L=G;K=xf(J^I,L^K,24)|0;I=G;d=Lg(P|0,O|0,c|0,d|0)|0;d=Lg(d|0,G|0,K|0,I|0)|0;c=G;f[g+8>>2]=d;f[g+8+4>>2]=c;N=xf(d^M,c^N,16)|0;M=G;f[g+96>>2]=N;f[g+96+4>>2]=M;L=Lg(N|0,M|0,J|0,L|0)|0;J=G;f[g+88>>2]=L;f[g+88+4>>2]=J;I=xf(L^K,J^I,63)|0;f[g+48>>2]=I;f[g+48+4>>2]=G;E=Lg(H|0,F|0,D|0,E|0)|0;E=Lg(E|0,G|0,x|0,y|0)|0;D=G;B=xf(E^A,D^B,32)|0;A=G;b=Lg(B|0,A|0,h|0,b|0)|0;h=G;y=xf(b^x,h^y,24)|0;x=G;C=Lg(E|0,D|0,z|0,C|0)|0;C=Lg(C|0,G|0,y|0,x|0)|0;z=G;f[g+16>>2]=C;f[g+16+4>>2]=z;A=xf(C^B,z^A,16)|0;z=G;f[g+104>>2]=A;f[g+104+4>>2]=z;h=Lg(A|0,z|0,b|0,h|0)|0;b=G;f[g+64>>2]=h;f[g+64+4>>2]=b;x=xf(h^y,b^x,63)|0;f[g+56>>2]=x;f[g+56+4>>2]=G;v=Lg(k|0,m|0,w|0,v|0)|0;u=Lg(v|0,G|0,s|0,u|0)|0;s=G;q=xf(u^p,s^q,32)|0;p=G;l=Lg(q|0,p|0,n|0,l|0)|0;n=G;m=xf(l^k,n^m,24)|0;k=G;r=Lg(u|0,s|0,o|0,r|0)|0;r=Lg(r|0,G|0,m|0,k|0)|0;o=G;f[g+24>>2]=r;f[g+24+4>>2]=o;p=xf(r^q,o^p,16)|0;o=G;f[g+112>>2]=p;f[g+112+4>>2]=o;n=Lg(p|0,o|0,l|0,n|0)|0;l=G;f[g+72>>2]=n;f[g+72+4>>2]=l;k=xf(n^m,l^k,63)|0;f[g+32>>2]=k;f[g+32+4>>2]=G;b=j^f[a+4>>2]^b;f[a>>2]=i^f[a>>2]^h;f[a+4>>2]=b;b=1;while(1){qa=a+(b<<3)|0;pa=g+(b+8<<3)|0;c=c^f[qa+4>>2]^f[pa+4>>2];f[qa>>2]=d^f[qa>>2]^f[pa>>2];f[qa+4>>2]=c;c=b+1|0;if((c|0)==8)break;b=c;d=f[g+(c<<3)>>2]|0;c=f[g+(c<<3)+4>>2]|0}t=e;return}function la(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0;X=Cf(b[c>>0]|0,b[c+1>>0]|0,b[c+2>>0]|0)|0;lb=we(c+2|0)|0;lb=$f(lb|0,G|0,5)|0;cb=Cf(b[c+5>>0]|0,b[c+6>>0]|0,b[c+7>>0]|0)|0;cb=$f(cb|0,G|0,2)|0;kb=we(c+7|0)|0;kb=$f(kb|0,G|0,7)|0;Ya=we(c+10|0)|0;Ya=$f(Ya|0,G|0,4)|0;L=Cf(b[c+13>>0]|0,b[c+14>>0]|0,b[c+15>>0]|0)|0;L=$f(L|0,G|0,1)|0;aa=we(c+15|0)|0;aa=$f(aa|0,G|0,6)|0;f=Cf(b[c+18>>0]|0,b[c+19>>0]|0,b[c+20>>0]|0)|0;f=$f(f|0,G|0,3)|0;M=Cf(b[c+21>>0]|0,b[c+22>>0]|0,b[c+23>>0]|0)|0;z=we(c+23|0)|0;z=$f(z|0,G|0,5)|0;da=Cf(b[c+26>>0]|0,b[c+27>>0]|0,b[c+28>>0]|0)|0;da=$f(da|0,G|0,2)|0;ha=we(c+28|0)|0;ha=$f(ha|0,G|0,7)|0;ia=G;wb=Cf(b[d>>0]|0,b[d+1>>0]|0,b[d+2>>0]|0)|0;_a=we(d+2|0)|0;_a=$f(_a|0,G|0,5)|0;Ja=Cf(b[d+5>>0]|0,b[d+6>>0]|0,b[d+7>>0]|0)|0;Ja=$f(Ja|0,G|0,2)|0;g=we(d+7|0)|0;g=$f(g|0,G|0,7)|0;h=we(d+10|0)|0;h=$f(h|0,G|0,4)|0;u=Cf(b[d+13>>0]|0,b[d+14>>0]|0,b[d+15>>0]|0)|0;u=$f(u|0,G|0,1)|0;Ca=we(d+15|0)|0;Ca=$f(Ca|0,G|0,6)|0;Z=Cf(b[d+18>>0]|0,b[d+19>>0]|0,b[d+20>>0]|0)|0;Z=$f(Z|0,G|0,3)|0;ra=Cf(b[d+21>>0]|0,b[d+22>>0]|0,b[d+23>>0]|0)|0;I=we(d+23|0)|0;I=$f(I|0,G|0,5)|0;rb=Cf(b[d+26>>0]|0,b[d+27>>0]|0,b[d+28>>0]|0)|0;rb=$f(rb|0,G|0,2)|0;U=we(d+28|0)|0;U=$f(U|0,G|0,7)|0;T=G;ua=Cf(b[e>>0]|0,b[e+1>>0]|0,b[e+2>>0]|0)|0;K=we(e+2|0)|0;K=$f(K|0,G|0,5)|0;wa=Cf(b[e+5>>0]|0,b[e+6>>0]|0,b[e+7>>0]|0)|0;wa=$f(wa|0,G|0,2)|0;oa=we(e+7|0)|0;oa=$f(oa|0,G|0,7)|0;qa=we(e+10|0)|0;qa=$f(qa|0,G|0,4)|0;Da=Cf(b[e+13>>0]|0,b[e+14>>0]|0,b[e+15>>0]|0)|0;Da=$f(Da|0,G|0,1)|0;fb=we(e+15|0)|0;fb=$f(fb|0,G|0,6)|0;l=Cf(b[e+18>>0]|0,b[e+19>>0]|0,b[e+20>>0]|0)|0;l=$f(l|0,G|0,3)|0;Ra=Cf(b[e+21>>0]|0,b[e+22>>0]|0,b[e+23>>0]|0)|0;za=we(e+23|0)|0;za=$f(za|0,G|0,5)|0;V=Cf(b[e+26>>0]|0,b[e+27>>0]|0,b[e+28>>0]|0)|0;V=$f(V|0,G|0,2)|0;ab=we(e+28|0)|0;ab=$f(ab|0,G|0,7)|0;gb=G;ta=Af(wb&2097151|0,0,X&2097151|0,0)|0;ta=Lg(ua&2097151|0,0,ta|0,G|0)|0;ua=G;rc=Af(_a&2097151|0,0,X&2097151|0,0)|0;qc=G;pc=Af(wb&2097151|0,0,lb&2097151|0,0)|0;Ga=G;E=Af(Ja&2097151|0,0,X&2097151|0,0)|0;va=G;D=Af(_a&2097151|0,0,lb&2097151|0,0)|0;kc=G;na=Af(wb&2097151|0,0,cb&2097151|0,0)|0;na=Lg(D|0,kc|0,na|0,G|0)|0;va=Lg(na|0,G|0,E|0,va|0)|0;wa=Lg(va|0,G|0,wa&2097151|0,0)|0;va=G;E=Af(g&2097151|0,0,X&2097151|0,0)|0;na=G;kc=Af(Ja&2097151|0,0,lb&2097151|0,0)|0;D=G;oc=Af(_a&2097151|0,0,cb&2097151|0,0)|0;nc=G;mc=Af(wb&2097151|0,0,kb&2097151|0,0)|0;lc=G;S=Af(h&2097151|0,0,X&2097151|0,0)|0;pa=G;bc=Af(g&2097151|0,0,lb&2097151|0,0)|0;Ea=G;dc=Af(Ja&2097151|0,0,cb&2097151|0,0)|0;p=G;ec=Af(_a&2097151|0,0,kb&2097151|0,0)|0;fc=G;cc=Af(wb&2097151|0,0,Ya&2097151|0,0)|0;cc=Lg(ec|0,fc|0,cc|0,G|0)|0;p=Lg(cc|0,G|0,dc|0,p|0)|0;Ea=Lg(p|0,G|0,bc|0,Ea|0)|0;pa=Lg(Ea|0,G|0,S|0,pa|0)|0;qa=Lg(pa|0,G|0,qa&2097151|0,0)|0;pa=G;S=Af(u&2097151|0,0,X&2097151|0,0)|0;Ea=G;bc=Af(h&2097151|0,0,lb&2097151|0,0)|0;p=G;dc=Af(g&2097151|0,0,cb&2097151|0,0)|0;cc=G;fc=Af(Ja&2097151|0,0,kb&2097151|0,0)|0;ec=G;jc=Af(_a&2097151|0,0,Ya&2097151|0,0)|0;ic=G;hc=Af(wb&2097151|0,0,L&2097151|0,0)|0;gc=G;c=Af(Ca&2097151|0,0,X&2097151|0,0)|0;$a=G;Qb=Af(u&2097151|0,0,lb&2097151|0,0)|0;i=G;Sb=Af(h&2097151|0,0,cb&2097151|0,0)|0;k=G;Ub=Af(g&2097151|0,0,kb&2097151|0,0)|0;Rb=G;Wb=Af(Ja&2097151|0,0,Ya&2097151|0,0)|0;Tb=G;Xb=Af(_a&2097151|0,0,L&2097151|0,0)|0;Yb=G;Vb=Af(wb&2097151|0,0,aa&2097151|0,0)|0;Vb=Lg(Xb|0,Yb|0,Vb|0,G|0)|0;Tb=Lg(Vb|0,G|0,Wb|0,Tb|0)|0;Rb=Lg(Tb|0,G|0,Ub|0,Rb|0)|0;k=Lg(Rb|0,G|0,Sb|0,k|0)|0;i=Lg(k|0,G|0,Qb|0,i|0)|0;$a=Lg(i|0,G|0,c|0,$a|0)|0;fb=Lg($a|0,G|0,fb&2097151|0,0)|0;$a=G;c=Af(Z&2097151|0,0,X&2097151|0,0)|0;i=G;Qb=Af(Ca&2097151|0,0,lb&2097151|0,0)|0;k=G;Sb=Af(u&2097151|0,0,cb&2097151|0,0)|0;Rb=G;Ub=Af(h&2097151|0,0,kb&2097151|0,0)|0;Tb=G;Wb=Af(g&2097151|0,0,Ya&2097151|0,0)|0;Vb=G;Yb=Af(Ja&2097151|0,0,L&2097151|0,0)|0;Xb=G;ac=Af(_a&2097151|0,0,aa&2097151|0,0)|0;$b=G;_b=Af(wb&2097151|0,0,f&2097151|0,0)|0;Zb=G;Bb=Af(ra&2097151|0,0,X&2097151|0,0)|0;j=G;y=Af(Z&2097151|0,0,lb&2097151|0,0)|0;Sa=G;zb=Af(Ca&2097151|0,0,cb&2097151|0,0)|0;Ab=G;Db=Af(u&2097151|0,0,kb&2097151|0,0)|0;x=G;Fb=Af(h&2097151|0,0,Ya&2097151|0,0)|0;Cb=G;Hb=Af(g&2097151|0,0,L&2097151|0,0)|0;Eb=G;Jb=Af(Ja&2097151|0,0,aa&2097151|0,0)|0;Gb=G;Kb=Af(_a&2097151|0,0,f&2097151|0,0)|0;Lb=G;Ib=Af(wb&2097151|0,0,M&2097151|0,0)|0;Ib=Lg(Kb|0,Lb|0,Ib|0,G|0)|0;Gb=Lg(Ib|0,G|0,Jb|0,Gb|0)|0;Eb=Lg(Gb|0,G|0,Hb|0,Eb|0)|0;Cb=Lg(Eb|0,G|0,Fb|0,Cb|0)|0;x=Lg(Cb|0,G|0,Db|0,x|0)|0;Ab=Lg(x|0,G|0,zb|0,Ab|0)|0;j=Lg(Ab|0,G|0,Bb|0,j|0)|0;Sa=Lg(j|0,G|0,y|0,Sa|0)|0;Ra=Lg(Sa|0,G|0,Ra&2097151|0,0)|0;Sa=G;y=Af(I&2097151|0,0,X&2097151|0,0)|0;j=G;Bb=Af(ra&2097151|0,0,lb&2097151|0,0)|0;Ab=G;zb=Af(Z&2097151|0,0,cb&2097151|0,0)|0;x=G;Db=Af(Ca&2097151|0,0,kb&2097151|0,0)|0;Cb=G;Fb=Af(u&2097151|0,0,Ya&2097151|0,0)|0;Eb=G;Hb=Af(h&2097151|0,0,L&2097151|0,0)|0;Gb=G;Jb=Af(g&2097151|0,0,aa&2097151|0,0)|0;Ib=G;Lb=Af(Ja&2097151|0,0,f&2097151|0,0)|0;Kb=G;Pb=Af(_a&2097151|0,0,M&2097151|0,0)|0;Ob=G;Nb=Af(wb&2097151|0,0,z&2097151|0,0)|0;Mb=G;Y=Af(rb&2097151|0,0,X&2097151|0,0)|0;W=G;C=Af(I&2097151|0,0,lb&2097151|0,0)|0;B=G;Oa=Af(ra&2097151|0,0,cb&2097151|0,0)|0;Na=G;ob=Af(Z&2097151|0,0,kb&2097151|0,0)|0;nb=G;N=Af(Ca&2097151|0,0,Ya&2097151|0,0)|0;n=G;eb=Af(u&2097151|0,0,L&2097151|0,0)|0;db=G;Ia=Af(h&2097151|0,0,aa&2097151|0,0)|0;Ha=G;Ua=Af(g&2097151|0,0,f&2097151|0,0)|0;Ta=G;A=Af(Ja&2097151|0,0,M&2097151|0,0)|0;e=G;yb=Af(_a&2097151|0,0,z&2097151|0,0)|0;tb=G;ub=Af(wb&2097151|0,0,da&2097151|0,0)|0;ub=Lg(yb|0,tb|0,ub|0,G|0)|0;e=Lg(ub|0,G|0,A|0,e|0)|0;Ta=Lg(e|0,G|0,Ua|0,Ta|0)|0;Ha=Lg(Ta|0,G|0,Ia|0,Ha|0)|0;db=Lg(Ha|0,G|0,eb|0,db|0)|0;n=Lg(db|0,G|0,N|0,n|0)|0;Na=Lg(n|0,G|0,Oa|0,Na|0)|0;nb=Lg(Na|0,G|0,ob|0,nb|0)|0;B=Lg(nb|0,G|0,C|0,B|0)|0;W=Lg(B|0,G|0,Y|0,W|0)|0;V=Lg(W|0,G|0,V&2097151|0,0)|0;W=G;X=Af(U|0,T|0,X&2097151|0,0)|0;Y=G;B=Af(rb&2097151|0,0,lb&2097151|0,0)|0;C=G;nb=Af(I&2097151|0,0,cb&2097151|0,0)|0;ob=G;Na=Af(ra&2097151|0,0,kb&2097151|0,0)|0;Oa=G;n=Af(Z&2097151|0,0,Ya&2097151|0,0)|0;N=G;db=Af(Ca&2097151|0,0,L&2097151|0,0)|0;eb=G;Ha=Af(u&2097151|0,0,aa&2097151|0,0)|0;Ia=G;Ta=Af(h&2097151|0,0,f&2097151|0,0)|0;Ua=G;e=Af(g&2097151|0,0,M&2097151|0,0)|0;A=G;ub=Af(Ja&2097151|0,0,z&2097151|0,0)|0;tb=G;yb=Af(_a&2097151|0,0,da&2097151|0,0)|0;xb=G;wb=Af(wb&2097151|0,0,ha|0,ia|0)|0;vb=G;lb=Af(U|0,T|0,lb&2097151|0,0)|0;mb=G;_=Af(rb&2097151|0,0,cb&2097151|0,0)|0;bb=G;pb=Af(I&2097151|0,0,kb&2097151|0,0)|0;r=G;ca=Af(ra&2097151|0,0,Ya&2097151|0,0)|0;R=G;Q=Af(Z&2097151|0,0,L&2097151|0,0)|0;qb=G;la=Af(Ca&2097151|0,0,aa&2097151|0,0)|0;t=G;ea=Af(u&2097151|0,0,f&2097151|0,0)|0;ma=G;Wa=Af(h&2097151|0,0,M&2097151|0,0)|0;ja=G;Za=Af(g&2097151|0,0,z&2097151|0,0)|0;Va=G;jb=Af(Ja&2097151|0,0,da&2097151|0,0)|0;Ka=G;_a=Af(_a&2097151|0,0,ha|0,ia|0)|0;_a=Lg(jb|0,Ka|0,_a|0,G|0)|0;Va=Lg(_a|0,G|0,Za|0,Va|0)|0;ja=Lg(Va|0,G|0,Wa|0,ja|0)|0;ma=Lg(ja|0,G|0,ea|0,ma|0)|0;t=Lg(ma|0,G|0,la|0,t|0)|0;R=Lg(t|0,G|0,ca|0,R|0)|0;qb=Lg(R|0,G|0,Q|0,qb|0)|0;r=Lg(qb|0,G|0,pb|0,r|0)|0;bb=Lg(r|0,G|0,_|0,bb|0)|0;mb=Lg(bb|0,G|0,lb|0,mb|0)|0;lb=G;cb=Af(U|0,T|0,cb&2097151|0,0)|0;bb=G;_=Af(rb&2097151|0,0,kb&2097151|0,0)|0;r=G;pb=Af(I&2097151|0,0,Ya&2097151|0,0)|0;qb=G;Q=Af(ra&2097151|0,0,L&2097151|0,0)|0;R=G;ca=Af(Z&2097151|0,0,aa&2097151|0,0)|0;t=G;la=Af(Ca&2097151|0,0,f&2097151|0,0)|0;ma=G;ea=Af(u&2097151|0,0,M&2097151|0,0)|0;ja=G;Wa=Af(h&2097151|0,0,z&2097151|0,0)|0;Va=G;Za=Af(g&2097151|0,0,da&2097151|0,0)|0;_a=G;Ja=Af(Ja&2097151|0,0,ha|0,ia|0)|0;Ka=G;kb=Af(U|0,T|0,kb&2097151|0,0)|0;jb=G;hb=Af(rb&2097151|0,0,Ya&2097151|0,0)|0;Xa=G;v=Af(I&2097151|0,0,L&2097151|0,0)|0;ib=G;Aa=Af(ra&2097151|0,0,aa&2097151|0,0)|0;F=G;o=Af(Z&2097151|0,0,f&2097151|0,0)|0;d=G;m=Af(Ca&2097151|0,0,M&2097151|0,0)|0;Fa=G;ba=Af(u&2097151|0,0,z&2097151|0,0)|0;$=G;sb=Af(h&2097151|0,0,da&2097151|0,0)|0;s=G;g=Af(g&2097151|0,0,ha|0,ia|0)|0;g=Lg(sb|0,s|0,g|0,G|0)|0;$=Lg(g|0,G|0,ba|0,$|0)|0;Fa=Lg($|0,G|0,m|0,Fa|0)|0;F=Lg(Fa|0,G|0,Aa|0,F|0)|0;d=Lg(F|0,G|0,o|0,d|0)|0;ib=Lg(d|0,G|0,v|0,ib|0)|0;Xa=Lg(ib|0,G|0,hb|0,Xa|0)|0;jb=Lg(Xa|0,G|0,kb|0,jb|0)|0;kb=G;Ya=Af(U|0,T|0,Ya&2097151|0,0)|0;Xa=G;hb=Af(rb&2097151|0,0,L&2097151|0,0)|0;ib=G;v=Af(I&2097151|0,0,aa&2097151|0,0)|0;d=G;o=Af(ra&2097151|0,0,f&2097151|0,0)|0;F=G;Aa=Af(Z&2097151|0,0,M&2097151|0,0)|0;Fa=G;m=Af(Ca&2097151|0,0,z&2097151|0,0)|0;$=G;ba=Af(u&2097151|0,0,da&2097151|0,0)|0;g=G;h=Af(h&2097151|0,0,ha|0,ia|0)|0;s=G;L=Af(U|0,T|0,L&2097151|0,0)|0;sb=G;Ma=Af(rb&2097151|0,0,aa&2097151|0,0)|0;J=G;ga=Af(I&2097151|0,0,f&2097151|0,0)|0;La=G;w=Af(ra&2097151|0,0,M&2097151|0,0)|0;O=G;P=Af(Z&2097151|0,0,z&2097151|0,0)|0;fa=G;q=Af(Ca&2097151|0,0,da&2097151|0,0)|0;Ba=G;u=Af(u&2097151|0,0,ha|0,ia|0)|0;u=Lg(q|0,Ba|0,u|0,G|0)|0;O=Lg(u|0,G|0,w|0,O|0)|0;fa=Lg(O|0,G|0,P|0,fa|0)|0;La=Lg(fa|0,G|0,ga|0,La|0)|0;J=Lg(La|0,G|0,Ma|0,J|0)|0;sb=Lg(J|0,G|0,L|0,sb|0)|0;L=G;aa=Af(U|0,T|0,aa&2097151|0,0)|0;J=G;Ma=Af(rb&2097151|0,0,f&2097151|0,0)|0;La=G;ga=Af(I&2097151|0,0,M&2097151|0,0)|0;fa=G;P=Af(ra&2097151|0,0,z&2097151|0,0)|0;O=G;w=Af(Z&2097151|0,0,da&2097151|0,0)|0;u=G;Ca=Af(Ca&2097151|0,0,ha|0,ia|0)|0;Ba=G;f=Af(U|0,T|0,f&2097151|0,0)|0;q=G;xa=Af(rb&2097151|0,0,M&2097151|0,0)|0;H=G;Qa=Af(I&2097151|0,0,z&2097151|0,0)|0;ya=G;sa=Af(ra&2097151|0,0,da&2097151|0,0)|0;Pa=G;Z=Af(Z&2097151|0,0,ha|0,ia|0)|0;Pa=Lg(Z|0,G|0,sa|0,Pa|0)|0;ya=Lg(Pa|0,G|0,Qa|0,ya|0)|0;H=Lg(ya|0,G|0,xa|0,H|0)|0;q=Lg(H|0,G|0,f|0,q|0)|0;f=G;M=Af(U|0,T|0,M&2097151|0,0)|0;H=G;xa=Af(rb&2097151|0,0,z&2097151|0,0)|0;ya=G;Qa=Af(I&2097151|0,0,da&2097151|0,0)|0;Pa=G;ra=Af(ra&2097151|0,0,ha|0,ia|0)|0;sa=G;z=Af(U|0,T|0,z&2097151|0,0)|0;Z=G;sc=Af(rb&2097151|0,0,da&2097151|0,0)|0;ka=G;I=Af(I&2097151|0,0,ha|0,ia|0)|0;I=Lg(sc|0,ka|0,I|0,G|0)|0;Z=Lg(I|0,G|0,z|0,Z|0)|0;z=G;da=Af(U|0,T|0,da&2097151|0,0)|0;I=G;rb=Af(rb&2097151|0,0,ha|0,ia|0)|0;rb=Lg(da|0,I|0,rb|0,G|0)|0;I=G;ia=Af(U|0,T|0,ha|0,ia|0)|0;ha=G;T=Lg(ta|0,ua|0,1048576,0)|0;U=G;da=$f(T|0,U|0,21)|0;ka=G;Ga=Lg(rc|0,qc|0,pc|0,Ga|0)|0;K=Lg(Ga|0,G|0,K&2097151|0,0)|0;ka=Lg(K|0,G|0,da|0,ka|0)|0;da=G;U=Ig(ta|0,ua|0,T&-2097152|0,U&4095|0)|0;T=G;ua=Lg(wa|0,va|0,1048576,0)|0;ta=G;K=$f(ua|0,ta|0,21)|0;Ga=G;lc=Lg(oc|0,nc|0,mc|0,lc|0)|0;D=Lg(lc|0,G|0,kc|0,D|0)|0;na=Lg(D|0,G|0,E|0,na|0)|0;oa=Lg(na|0,G|0,oa&2097151|0,0)|0;Ga=Lg(oa|0,G|0,K|0,Ga|0)|0;K=G;oa=Lg(qa|0,pa|0,1048576,0)|0;na=G;E=Nf(oa|0,na|0,21)|0;D=G;gc=Lg(jc|0,ic|0,hc|0,gc|0)|0;ec=Lg(gc|0,G|0,fc|0,ec|0)|0;cc=Lg(ec|0,G|0,dc|0,cc|0)|0;p=Lg(cc|0,G|0,bc|0,p|0)|0;Ea=Lg(p|0,G|0,S|0,Ea|0)|0;Da=Lg(Ea|0,G|0,Da&2097151|0,0)|0;D=Lg(Da|0,G|0,E|0,D|0)|0;E=G;Da=Lg(fb|0,$a|0,1048576,0)|0;Ea=G;S=Nf(Da|0,Ea|0,21)|0;p=G;Zb=Lg(ac|0,$b|0,_b|0,Zb|0)|0;Xb=Lg(Zb|0,G|0,Yb|0,Xb|0)|0;Vb=Lg(Xb|0,G|0,Wb|0,Vb|0)|0;Tb=Lg(Vb|0,G|0,Ub|0,Tb|0)|0;Rb=Lg(Tb|0,G|0,Sb|0,Rb|0)|0;k=Lg(Rb|0,G|0,Qb|0,k|0)|0;i=Lg(k|0,G|0,c|0,i|0)|0;l=Lg(i|0,G|0,l&2097151|0,0)|0;p=Lg(l|0,G|0,S|0,p|0)|0;S=G;l=Lg(Ra|0,Sa|0,1048576,0)|0;i=G;c=Nf(l|0,i|0,21)|0;k=G;Mb=Lg(Pb|0,Ob|0,Nb|0,Mb|0)|0;Kb=Lg(Mb|0,G|0,Lb|0,Kb|0)|0;Ib=Lg(Kb|0,G|0,Jb|0,Ib|0)|0;Gb=Lg(Ib|0,G|0,Hb|0,Gb|0)|0;Eb=Lg(Gb|0,G|0,Fb|0,Eb|0)|0;Cb=Lg(Eb|0,G|0,Db|0,Cb|0)|0;Ab=Lg(Cb|0,G|0,Bb|0,Ab|0)|0;x=Lg(Ab|0,G|0,zb|0,x|0)|0;j=Lg(x|0,G|0,y|0,j|0)|0;za=Lg(j|0,G|0,za&2097151|0,0)|0;k=Lg(za|0,G|0,c|0,k|0)|0;c=G;za=Lg(V|0,W|0,1048576,0)|0;j=G;y=Nf(za|0,j|0,21)|0;x=G;vb=Lg(yb|0,xb|0,wb|0,vb|0)|0;tb=Lg(vb|0,G|0,ub|0,tb|0)|0;A=Lg(tb|0,G|0,e|0,A|0)|0;Ua=Lg(A|0,G|0,Ta|0,Ua|0)|0;Ia=Lg(Ua|0,G|0,Ha|0,Ia|0)|0;eb=Lg(Ia|0,G|0,db|0,eb|0)|0;Oa=Lg(eb|0,G|0,Na|0,Oa|0)|0;N=Lg(Oa|0,G|0,n|0,N|0)|0;ob=Lg(N|0,G|0,nb|0,ob|0)|0;Y=Lg(ob|0,G|0,X|0,Y|0)|0;C=Lg(Y|0,G|0,B|0,C|0)|0;gb=Lg(C|0,G|0,ab|0,gb|0)|0;x=Lg(gb|0,G|0,y|0,x|0)|0;y=G;gb=Lg(mb|0,lb|0,1048576,0)|0;ab=G;C=Nf(gb|0,ab|0,21)|0;B=G;Ka=Lg(Za|0,_a|0,Ja|0,Ka|0)|0;Va=Lg(Ka|0,G|0,Wa|0,Va|0)|0;ja=Lg(Va|0,G|0,ea|0,ja|0)|0;ma=Lg(ja|0,G|0,la|0,ma|0)|0;R=Lg(ma|0,G|0,Q|0,R|0)|0;t=Lg(R|0,G|0,ca|0,t|0)|0;qb=Lg(t|0,G|0,pb|0,qb|0)|0;r=Lg(qb|0,G|0,_|0,r|0)|0;bb=Lg(r|0,G|0,cb|0,bb|0)|0;B=Lg(bb|0,G|0,C|0,B|0)|0;C=G;bb=Lg(jb|0,kb|0,1048576,0)|0;cb=G;r=Nf(bb|0,cb|0,21)|0;_=G;s=Lg(ba|0,g|0,h|0,s|0)|0;$=Lg(s|0,G|0,m|0,$|0)|0;F=Lg($|0,G|0,o|0,F|0)|0;Fa=Lg(F|0,G|0,Aa|0,Fa|0)|0;d=Lg(Fa|0,G|0,v|0,d|0)|0;ib=Lg(d|0,G|0,hb|0,ib|0)|0;Xa=Lg(ib|0,G|0,Ya|0,Xa|0)|0;_=Lg(Xa|0,G|0,r|0,_|0)|0;r=G;Xa=Lg(sb|0,L|0,1048576,0)|0;Ya=G;ib=Nf(Xa|0,Ya|0,21)|0;hb=G;Ba=Lg(P|0,O|0,Ca|0,Ba|0)|0;u=Lg(Ba|0,G|0,w|0,u|0)|0;fa=Lg(u|0,G|0,ga|0,fa|0)|0;La=Lg(fa|0,G|0,Ma|0,La|0)|0;J=Lg(La|0,G|0,aa|0,J|0)|0;hb=Lg(J|0,G|0,ib|0,hb|0)|0;ib=G;J=Lg(q|0,f|0,1048576,0)|0;aa=G;La=Nf(J|0,aa|0,21)|0;Ma=G;sa=Lg(Qa|0,Pa|0,ra|0,sa|0)|0;ya=Lg(sa|0,G|0,xa|0,ya|0)|0;H=Lg(ya|0,G|0,M|0,H|0)|0;Ma=Lg(H|0,G|0,La|0,Ma|0)|0;La=G;aa=Ig(q|0,f|0,J&-2097152|0,aa|0)|0;J=G;f=Lg(Z|0,z|0,1048576,0)|0;q=G;H=Nf(f|0,q|0,21)|0;H=Lg(rb|0,I|0,H|0,G|0)|0;I=G;q=Ig(Z|0,z|0,f&-2097152|0,q|0)|0;f=G;z=Lg(ia|0,ha|0,1048576,0)|0;Z=G;rb=Nf(z|0,Z|0,21)|0;M=G;Z=Ig(ia|0,ha|0,z&-2097152|0,Z|0)|0;z=G;ha=Lg(ka|0,da|0,1048576,0)|0;ia=G;ya=$f(ha|0,ia|0,21)|0;xa=G;ia=Ig(ka|0,da|0,ha&-2097152|0,ia|0)|0;ha=G;da=Lg(Ga|0,K|0,1048576,0)|0;ka=G;sa=Nf(da|0,ka|0,21)|0;ra=G;ka=Ig(Ga|0,K|0,da&-2097152|0,ka|0)|0;da=G;K=Lg(D|0,E|0,1048576,0)|0;Ga=G;Pa=Nf(K|0,Ga|0,21)|0;Qa=G;Ga=Ig(D|0,E|0,K&-2097152|0,Ga|0)|0;K=G;E=Lg(p|0,S|0,1048576,0)|0;D=G;fa=Nf(E|0,D|0,21)|0;ga=G;u=Lg(k|0,c|0,1048576,0)|0;w=G;Ba=Nf(u|0,w|0,21)|0;Ca=G;O=Lg(x|0,y|0,1048576,0)|0;P=G;d=Nf(O|0,P|0,21)|0;v=G;Fa=Lg(B|0,C|0,1048576,0)|0;Aa=G;F=Nf(Fa|0,Aa|0,21)|0;o=G;$=Lg(_|0,r|0,1048576,0)|0;m=G;s=Nf($|0,m|0,21)|0;h=G;g=Lg(hb|0,ib|0,1048576,0)|0;ba=G;qb=Nf(g|0,ba|0,21)|0;J=Lg(qb|0,G|0,aa|0,J|0)|0;aa=G;ba=Ig(hb|0,ib|0,g&-2097152|0,ba|0)|0;g=G;ib=Lg(Ma|0,La|0,1048576,0)|0;hb=G;qb=Nf(ib|0,hb|0,21)|0;f=Lg(qb|0,G|0,q|0,f|0)|0;q=G;hb=Ig(Ma|0,La|0,ib&-2097152|0,hb|0)|0;ib=G;La=Lg(H|0,I|0,1048576,0)|0;Ma=G;qb=Nf(La|0,Ma|0,21)|0;z=Lg(qb|0,G|0,Z|0,z|0)|0;Z=G;Ma=Ig(H|0,I|0,La&-2097152|0,Ma|0)|0;La=G;I=Af(rb|0,M|0,666643,0)|0;H=G;qb=Af(rb|0,M|0,470296,0)|0;pb=G;t=Af(rb|0,M|0,654183,0)|0;ca=G;R=Af(rb|0,M|0,-997805,-1)|0;Q=G;ma=Af(rb|0,M|0,136657,0)|0;la=G;M=Af(rb|0,M|0,-683901,-1)|0;M=Lg(sb|0,L|0,M|0,G|0)|0;Ya=Ig(M|0,G|0,Xa&-2097152|0,Ya|0)|0;h=Lg(Ya|0,G|0,s|0,h|0)|0;s=G;Ya=Af(z|0,Z|0,666643,0)|0;Xa=G;M=Af(z|0,Z|0,470296,0)|0;L=G;sb=Af(z|0,Z|0,654183,0)|0;rb=G;ja=Af(z|0,Z|0,-997805,-1)|0;ea=G;Va=Af(z|0,Z|0,136657,0)|0;Wa=G;Z=Af(z|0,Z|0,-683901,-1)|0;z=G;Ka=Af(Ma|0,La|0,666643,0)|0;Ja=G;_a=Af(Ma|0,La|0,470296,0)|0;Za=G;Y=Af(Ma|0,La|0,654183,0)|0;X=G;ob=Af(Ma|0,La|0,-997805,-1)|0;nb=G;N=Af(Ma|0,La|0,136657,0)|0;n=G;La=Af(Ma|0,La|0,-683901,-1)|0;Ma=G;Q=Lg(jb|0,kb|0,R|0,Q|0)|0;Wa=Lg(Q|0,G|0,Va|0,Wa|0)|0;Ma=Lg(Wa|0,G|0,La|0,Ma|0)|0;cb=Ig(Ma|0,G|0,bb&-2097152|0,cb|0)|0;o=Lg(cb|0,G|0,F|0,o|0)|0;F=G;cb=Af(f|0,q|0,666643,0)|0;bb=G;Ma=Af(f|0,q|0,470296,0)|0;La=G;Wa=Af(f|0,q|0,654183,0)|0;Va=G;Q=Af(f|0,q|0,-997805,-1)|0;R=G;kb=Af(f|0,q|0,136657,0)|0;jb=G;q=Af(f|0,q|0,-683901,-1)|0;f=G;Oa=Af(hb|0,ib|0,666643,0)|0;Na=G;eb=Af(hb|0,ib|0,470296,0)|0;db=G;Ia=Af(hb|0,ib|0,654183,0)|0;Ha=G;Ua=Af(hb|0,ib|0,-997805,-1)|0;Ta=G;A=Af(hb|0,ib|0,136657,0)|0;e=G;ib=Af(hb|0,ib|0,-683901,-1)|0;hb=G;pb=Lg(sb|0,rb|0,qb|0,pb|0)|0;nb=Lg(pb|0,G|0,ob|0,nb|0)|0;lb=Lg(nb|0,G|0,mb|0,lb|0)|0;jb=Lg(lb|0,G|0,kb|0,jb|0)|0;hb=Lg(jb|0,G|0,ib|0,hb|0)|0;ab=Ig(hb|0,G|0,gb&-2097152|0,ab|0)|0;v=Lg(ab|0,G|0,d|0,v|0)|0;d=G;ab=Af(J|0,aa|0,666643,0)|0;ab=Lg(fb|0,$a|0,ab|0,G|0)|0;Qa=Lg(ab|0,G|0,Pa|0,Qa|0)|0;Ea=Ig(Qa|0,G|0,Da&-2097152|0,Ea|0)|0;Da=G;Qa=Af(J|0,aa|0,470296,0)|0;Pa=G;ab=Af(J|0,aa|0,654183,0)|0;$a=G;bb=Lg(eb|0,db|0,cb|0,bb|0)|0;$a=Lg(bb|0,G|0,ab|0,$a|0)|0;Sa=Lg($a|0,G|0,Ra|0,Sa|0)|0;i=Ig(Sa|0,G|0,l&-2097152|0,i|0)|0;ga=Lg(i|0,G|0,fa|0,ga|0)|0;fa=G;i=Af(J|0,aa|0,-997805,-1)|0;l=G;Sa=Af(J|0,aa|0,136657,0)|0;Ra=G;Xa=Lg(_a|0,Za|0,Ya|0,Xa|0)|0;Va=Lg(Xa|0,G|0,Wa|0,Va|0)|0;Ta=Lg(Va|0,G|0,Ua|0,Ta|0)|0;Ra=Lg(Ta|0,G|0,Sa|0,Ra|0)|0;W=Lg(Ra|0,G|0,V|0,W|0)|0;Ca=Lg(W|0,G|0,Ba|0,Ca|0)|0;j=Ig(Ca|0,G|0,za&-2097152|0,j|0)|0;za=G;aa=Af(J|0,aa|0,-683901,-1)|0;J=G;Ca=Lg(Ea|0,Da|0,1048576,0)|0;Ba=G;W=Nf(Ca|0,Ba|0,21)|0;V=G;Na=Lg(Qa|0,Pa|0,Oa|0,Na|0)|0;S=Lg(Na|0,G|0,p|0,S|0)|0;D=Ig(S|0,G|0,E&-2097152|0,D|0)|0;V=Lg(D|0,G|0,W|0,V|0)|0;W=G;D=Lg(ga|0,fa|0,1048576,0)|0;E=G;S=Nf(D|0,E|0,21)|0;p=G;Ja=Lg(Ma|0,La|0,Ka|0,Ja|0)|0;Ha=Lg(Ja|0,G|0,Ia|0,Ha|0)|0;l=Lg(Ha|0,G|0,i|0,l|0)|0;c=Lg(l|0,G|0,k|0,c|0)|0;w=Ig(c|0,G|0,u&-2097152|0,w|0)|0;p=Lg(w|0,G|0,S|0,p|0)|0;S=G;w=Lg(j|0,za|0,1048576,0)|0;u=G;c=Nf(w|0,u|0,21)|0;k=G;H=Lg(M|0,L|0,I|0,H|0)|0;X=Lg(H|0,G|0,Y|0,X|0)|0;R=Lg(X|0,G|0,Q|0,R|0)|0;e=Lg(R|0,G|0,A|0,e|0)|0;J=Lg(e|0,G|0,aa|0,J|0)|0;y=Lg(J|0,G|0,x|0,y|0)|0;P=Ig(y|0,G|0,O&-2097152|0,P|0)|0;k=Lg(P|0,G|0,c|0,k|0)|0;c=G;P=Lg(v|0,d|0,1048576,0)|0;O=G;y=Nf(P|0,O|0,21)|0;x=G;ca=Lg(ja|0,ea|0,t|0,ca|0)|0;n=Lg(ca|0,G|0,N|0,n|0)|0;f=Lg(n|0,G|0,q|0,f|0)|0;C=Lg(f|0,G|0,B|0,C|0)|0;Aa=Ig(C|0,G|0,Fa&-2097152|0,Aa|0)|0;x=Lg(Aa|0,G|0,y|0,x|0)|0;y=G;O=Ig(v|0,d|0,P&-2097152|0,O|0)|0;P=G;d=Lg(o|0,F|0,1048576,0)|0;v=G;Aa=Nf(d|0,v|0,21)|0;Fa=G;la=Lg(Z|0,z|0,ma|0,la|0)|0;r=Lg(la|0,G|0,_|0,r|0)|0;m=Ig(r|0,G|0,$&-2097152|0,m|0)|0;Fa=Lg(m|0,G|0,Aa|0,Fa|0)|0;Aa=G;v=Ig(o|0,F|0,d&-2097152|0,v|0)|0;d=G;F=Lg(h|0,s|0,1048576,0)|0;o=G;m=Nf(F|0,o|0,21)|0;g=Lg(m|0,G|0,ba|0,g|0)|0;ba=G;o=Ig(h|0,s|0,F&-2097152|0,o|0)|0;F=G;s=Lg(V|0,W|0,1048576,0)|0;h=G;m=Nf(s|0,h|0,21)|0;$=G;r=Lg(p|0,S|0,1048576,0)|0;_=G;la=Nf(r|0,_|0,21)|0;ma=G;z=Lg(k|0,c|0,1048576,0)|0;Z=G;C=Nf(z|0,Z|0,21)|0;P=Lg(C|0,G|0,O|0,P|0)|0;O=G;Z=Ig(k|0,c|0,z&-2097152|0,Z|0)|0;z=G;c=Lg(x|0,y|0,1048576,0)|0;k=G;C=Nf(c|0,k|0,21)|0;d=Lg(C|0,G|0,v|0,d|0)|0;v=G;k=Ig(x|0,y|0,c&-2097152|0,k|0)|0;c=G;y=Lg(Fa|0,Aa|0,1048576,0)|0;x=G;C=Nf(y|0,x|0,21)|0;F=Lg(C|0,G|0,o|0,F|0)|0;o=G;x=Ig(Fa|0,Aa|0,y&-2097152|0,x|0)|0;y=G;Aa=Af(g|0,ba|0,666643,0)|0;Aa=Lg(Ga|0,K|0,Aa|0,G|0)|0;K=G;Ga=Af(g|0,ba|0,470296,0)|0;Fa=G;C=Af(g|0,ba|0,654183,0)|0;B=G;f=Af(g|0,ba|0,-997805,-1)|0;q=G;n=Af(g|0,ba|0,136657,0)|0;N=G;ba=Af(g|0,ba|0,-683901,-1)|0;ba=Lg(j|0,za|0,ba|0,G|0)|0;ma=Lg(ba|0,G|0,la|0,ma|0)|0;u=Ig(ma|0,G|0,w&-2097152|0,u|0)|0;w=G;ma=Af(F|0,o|0,666643,0)|0;la=G;ba=Af(F|0,o|0,470296,0)|0;ba=Lg(Aa|0,K|0,ba|0,G|0)|0;K=G;Aa=Af(F|0,o|0,654183,0)|0;za=G;j=Af(F|0,o|0,-997805,-1)|0;g=G;ca=Af(F|0,o|0,136657,0)|0;t=G;o=Af(F|0,o|0,-683901,-1)|0;F=G;ea=Af(x|0,y|0,666643,0)|0;ea=Lg(ka|0,da|0,ea|0,G|0)|0;da=G;ka=Af(x|0,y|0,470296,0)|0;ja=G;J=Af(x|0,y|0,654183,0)|0;J=Lg(ba|0,K|0,J|0,G|0)|0;K=G;ba=Af(x|0,y|0,-997805,-1)|0;aa=G;e=Af(x|0,y|0,136657,0)|0;A=G;y=Af(x|0,y|0,-683901,-1)|0;x=G;q=Lg(ga|0,fa|0,f|0,q|0)|0;$=Lg(q|0,G|0,m|0,$|0)|0;E=Ig($|0,G|0,D&-2097152|0,E|0)|0;t=Lg(E|0,G|0,ca|0,t|0)|0;x=Lg(t|0,G|0,y|0,x|0)|0;y=G;t=Af(d|0,v|0,666643,0)|0;ca=G;E=Af(d|0,v|0,470296,0)|0;D=G;$=Af(d|0,v|0,654183,0)|0;m=G;q=Af(d|0,v|0,-997805,-1)|0;f=G;fa=Af(d|0,v|0,136657,0)|0;ga=G;v=Af(d|0,v|0,-683901,-1)|0;d=G;R=Af(k|0,c|0,666643,0)|0;Q=G;X=Af(k|0,c|0,470296,0)|0;Y=G;H=Af(k|0,c|0,654183,0)|0;I=G;L=Af(k|0,c|0,-997805,-1)|0;M=G;l=Af(k|0,c|0,136657,0)|0;i=G;c=Af(k|0,c|0,-683901,-1)|0;k=G;Da=Lg(Ga|0,Fa|0,Ea|0,Da|0)|0;Ba=Ig(Da|0,G|0,Ca&-2097152|0,Ba|0)|0;za=Lg(Ba|0,G|0,Aa|0,za|0)|0;aa=Lg(za|0,G|0,ba|0,aa|0)|0;ga=Lg(aa|0,G|0,fa|0,ga|0)|0;k=Lg(ga|0,G|0,c|0,k|0)|0;c=G;ga=Af(P|0,O|0,666643,0)|0;T=Lg(ga|0,G|0,U|0,T|0)|0;U=G;ga=Af(P|0,O|0,470296,0)|0;fa=G;aa=Af(P|0,O|0,654183,0)|0;ba=G;va=Lg(ya|0,xa|0,wa|0,va|0)|0;ta=Ig(va|0,G|0,ua&-2097152|0,ta|0)|0;ba=Lg(ta|0,G|0,aa|0,ba|0)|0;ca=Lg(ba|0,G|0,t|0,ca|0)|0;Y=Lg(ca|0,G|0,X|0,Y|0)|0;X=G;ca=Af(P|0,O|0,-997805,-1)|0;t=G;ba=Af(P|0,O|0,136657,0)|0;aa=G;pa=Lg(sa|0,ra|0,qa|0,pa|0)|0;na=Ig(pa|0,G|0,oa&-2097152|0,na|0)|0;la=Lg(na|0,G|0,ma|0,la|0)|0;ja=Lg(la|0,G|0,ka|0,ja|0)|0;aa=Lg(ja|0,G|0,ba|0,aa|0)|0;m=Lg(aa|0,G|0,$|0,m|0)|0;M=Lg(m|0,G|0,L|0,M|0)|0;L=G;O=Af(P|0,O|0,-683901,-1)|0;P=G;m=Lg(T|0,U|0,1048576,0)|0;$=G;aa=Nf(m|0,$|0,21)|0;ba=G;fa=Lg(ia|0,ha|0,ga|0,fa|0)|0;Q=Lg(fa|0,G|0,R|0,Q|0)|0;ba=Lg(Q|0,G|0,aa|0,ba|0)|0;aa=G;$=Ig(T|0,U|0,m&-2097152|0,$|0)|0;m=G;U=Lg(Y|0,X|0,1048576,0)|0;T=G;Q=Nf(U|0,T|0,21)|0;R=G;t=Lg(ea|0,da|0,ca|0,t|0)|0;D=Lg(t|0,G|0,E|0,D|0)|0;I=Lg(D|0,G|0,H|0,I|0)|0;R=Lg(I|0,G|0,Q|0,R|0)|0;Q=G;I=Lg(M|0,L|0,1048576,0)|0;H=G;D=Nf(I|0,H|0,21)|0;E=G;P=Lg(J|0,K|0,O|0,P|0)|0;f=Lg(P|0,G|0,q|0,f|0)|0;i=Lg(f|0,G|0,l|0,i|0)|0;E=Lg(i|0,G|0,D|0,E|0)|0;D=G;i=Lg(k|0,c|0,1048576,0)|0;l=G;f=Nf(i|0,l|0,21)|0;q=G;B=Lg(V|0,W|0,C|0,B|0)|0;h=Ig(B|0,G|0,s&-2097152|0,h|0)|0;g=Lg(h|0,G|0,j|0,g|0)|0;A=Lg(g|0,G|0,e|0,A|0)|0;d=Lg(A|0,G|0,v|0,d|0)|0;q=Lg(d|0,G|0,f|0,q|0)|0;f=G;l=Ig(k|0,c|0,i&-2097152|0,l|0)|0;i=G;c=Lg(x|0,y|0,1048576,0)|0;k=G;d=Nf(c|0,k|0,21)|0;v=G;N=Lg(o|0,F|0,n|0,N|0)|0;S=Lg(N|0,G|0,p|0,S|0)|0;_=Ig(S|0,G|0,r&-2097152|0,_|0)|0;v=Lg(_|0,G|0,d|0,v|0)|0;d=G;k=Ig(x|0,y|0,c&-2097152|0,k|0)|0;c=G;y=Lg(u|0,w|0,1048576,0)|0;x=G;_=Nf(y|0,x|0,21)|0;_=Lg(Z|0,z|0,_|0,G|0)|0;z=G;Z=Lg(ba|0,aa|0,1048576,0)|0;r=G;S=Nf(Z|0,r|0,21)|0;p=G;N=Lg(R|0,Q|0,1048576,0)|0;n=G;F=Nf(N|0,n|0,21)|0;o=G;A=Lg(E|0,D|0,1048576,0)|0;e=G;g=Nf(A|0,e|0,21)|0;g=Lg(l|0,i|0,g|0,G|0)|0;i=G;l=Lg(q|0,f|0,1048576,0)|0;j=G;h=Nf(l|0,j|0,21)|0;h=Lg(k|0,c|0,h|0,G|0)|0;c=G;j=Ig(q|0,f|0,l&-2097152|0,j|0)|0;l=G;f=Lg(v|0,d|0,1048576,0)|0;q=G;k=Nf(f|0,q|0,21)|0;s=G;q=Ig(v|0,d|0,f&-2097152|0,q|0)|0;f=G;d=Lg(_|0,z|0,1048576,0)|0;v=G;B=Nf(d|0,v|0,21)|0;C=G;v=Ig(_|0,z|0,d&-2097152|0,v|0)|0;d=G;z=Af(B|0,C|0,666643,0)|0;z=Lg($|0,m|0,z|0,G|0)|0;m=G;$=Af(B|0,C|0,470296,0)|0;_=G;W=Af(B|0,C|0,654183,0)|0;V=G;P=Af(B|0,C|0,-997805,-1)|0;O=G;K=Af(B|0,C|0,136657,0)|0;J=G;C=Af(B|0,C|0,-683901,-1)|0;B=G;m=Nf(z|0,m|0,21)|0;t=G;_=Lg(ba|0,aa|0,$|0,_|0)|0;r=Ig(_|0,G|0,Z&-2097152|0,r|0)|0;t=Lg(r|0,G|0,m|0,t|0)|0;m=Nf(t|0,G|0,21)|0;r=G;V=Lg(Y|0,X|0,W|0,V|0)|0;T=Ig(V|0,G|0,U&-2097152|0,T|0)|0;p=Lg(T|0,G|0,S|0,p|0)|0;r=Lg(p|0,G|0,m|0,r|0)|0;m=Nf(r|0,G|0,21)|0;p=G;O=Lg(R|0,Q|0,P|0,O|0)|0;n=Ig(O|0,G|0,N&-2097152|0,n|0)|0;p=Lg(n|0,G|0,m|0,p|0)|0;m=Nf(p|0,G|0,21)|0;n=G;J=Lg(M|0,L|0,K|0,J|0)|0;H=Ig(J|0,G|0,I&-2097152|0,H|0)|0;o=Lg(H|0,G|0,F|0,o|0)|0;n=Lg(o|0,G|0,m|0,n|0)|0;m=Nf(n|0,G|0,21)|0;o=G;B=Lg(E|0,D|0,C|0,B|0)|0;e=Ig(B|0,G|0,A&-2097152|0,e|0)|0;o=Lg(e|0,G|0,m|0,o|0)|0;m=Nf(o|0,G|0,21)|0;m=Lg(g|0,i|0,m|0,G|0)|0;i=Nf(m|0,G|0,21)|0;l=Lg(i|0,G|0,j|0,l|0)|0;j=Nf(l|0,G|0,21)|0;j=Lg(h|0,c|0,j|0,G|0)|0;c=Nf(j|0,G|0,21)|0;f=Lg(c|0,G|0,q|0,f|0)|0;q=Nf(f|0,G|0,21)|0;c=G;w=Lg(k|0,s|0,u|0,w|0)|0;x=Ig(w|0,G|0,y&-2097152|0,x|0)|0;c=Lg(x|0,G|0,q|0,c|0)|0;q=Nf(c|0,G|0,21)|0;d=Lg(q|0,G|0,v|0,d|0)|0;v=Nf(d|0,G|0,21)|0;q=G;x=Af(v|0,q|0,666643,0)|0;z=Lg(x|0,G|0,z&2097151|0,0)|0;x=G;y=Af(v|0,q|0,470296,0)|0;t=Lg(y|0,G|0,t&2097151|0,0)|0;y=G;w=Af(v|0,q|0,654183,0)|0;r=Lg(w|0,G|0,r&2097151|0,0)|0;w=G;u=Af(v|0,q|0,-997805,-1)|0;p=Lg(u|0,G|0,p&2097151|0,0)|0;u=G;s=Af(v|0,q|0,136657,0)|0;n=Lg(s|0,G|0,n&2097151|0,0)|0;s=G;q=Af(v|0,q|0,-683901,-1)|0;o=Lg(q|0,G|0,o&2097151|0,0)|0;q=G;v=Nf(z|0,x|0,21)|0;v=Lg(t|0,y|0,v|0,G|0)|0;y=G;t=Nf(v|0,y|0,21)|0;t=Lg(r|0,w|0,t|0,G|0)|0;w=G;r=Nf(t|0,w|0,21)|0;r=Lg(p|0,u|0,r|0,G|0)|0;u=G;p=Nf(r|0,u|0,21)|0;p=Lg(n|0,s|0,p|0,G|0)|0;s=G;n=Nf(p|0,s|0,21)|0;n=Lg(o|0,q|0,n|0,G|0)|0;q=G;o=Nf(n|0,q|0,21)|0;m=Lg(o|0,G|0,m&2097151|0,0)|0;o=G;k=Nf(m|0,o|0,21)|0;l=Lg(k|0,G|0,l&2097151|0,0)|0;k=G;h=Nf(l|0,k|0,21)|0;j=Lg(h|0,G|0,j&2097151|0,0)|0;h=G;i=Nf(j|0,h|0,21)|0;f=Lg(i|0,G|0,f&2097151|0,0)|0;i=G;g=Nf(f|0,i|0,21)|0;c=Lg(g|0,G|0,c&2097151|0,0)|0;g=G;e=Nf(c|0,g|0,21)|0;d=Lg(e|0,G|0,d&2097151|0,0)|0;e=G;b[a>>0]=z;A=$f(z|0,x|0,8)|0;b[a+1>>0]=A;x=$f(z|0,x|0,16)|0;z=Wf(v&2097151|0,0,5)|0;b[a+2>>0]=z|x&31;x=$f(v|0,y|0,3)|0;b[a+3>>0]=x;y=$f(v|0,y|0,11)|0;b[a+4>>0]=y;v=$f(v&2097151|0,0,19)|0;y=G;x=Wf(t&2097151|0,0,2)|0;b[a+5>>0]=x|v;w=$f(t|0,w|0,6)|0;b[a+6>>0]=w;t=$f(t&2097151|0,0,14)|0;w=G;v=Wf(r&2097151|0,0,7)|0;b[a+7>>0]=v|t;t=$f(r|0,u|0,1)|0;b[a+8>>0]=t;u=$f(r|0,u|0,9)|0;b[a+9>>0]=u;r=$f(r&2097151|0,0,17)|0;u=G;t=Wf(p&2097151|0,0,4)|0;b[a+10>>0]=t|r;r=$f(p|0,s|0,4)|0;b[a+11>>0]=r;s=$f(p|0,s|0,12)|0;b[a+12>>0]=s;p=$f(p&2097151|0,0,20)|0;s=G;r=Wf(n&2097151|0,0,1)|0;b[a+13>>0]=r|p;q=$f(n|0,q|0,7)|0;b[a+14>>0]=q;n=$f(n&2097151|0,0,15)|0;q=G;p=Wf(m&2097151|0,0,6)|0;b[a+15>>0]=p|n;n=$f(m|0,o|0,2)|0;b[a+16>>0]=n;o=$f(m|0,o|0,10)|0;b[a+17>>0]=o;m=$f(m&2097151|0,0,18)|0;o=G;n=Wf(l|0,k|0,3)|0;b[a+18>>0]=n|m;m=$f(l|0,k|0,5)|0;b[a+19>>0]=m;k=$f(l|0,k|0,13)|0;b[a+20>>0]=k;b[a+21>>0]=j;k=$f(j|0,h|0,8)|0;b[a+22>>0]=k;h=$f(j|0,h|0,16)|0;j=Wf(f&2097151|0,0,5)|0;b[a+23>>0]=j|h&31;h=$f(f|0,i|0,3)|0;b[a+24>>0]=h;i=$f(f|0,i|0,11)|0;b[a+25>>0]=i;f=$f(f&2097151|0,0,19)|0;i=G;h=Wf(c&2097151|0,0,2)|0;b[a+26>>0]=h|f;g=$f(c|0,g|0,6)|0;b[a+27>>0]=g;c=$f(c&2097151|0,0,14)|0;g=G;f=Wf(d|0,e|0,7)|0;b[a+28>>0]=f|c;c=$f(d|0,e|0,1)|0;b[a+29>>0]=c;c=$f(d|0,e|0,9)|0;b[a+30>>0]=c;e=Nf(d|0,e|0,17)|0;b[a+31>>0]=e;return}function ma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;ef(c,b);b=d;e=a;g=b+64|0;do{f[b>>2]=f[e>>2];b=b+4|0;e=e+4|0}while((b|0)<(g|0));s=0;b=f[c>>2]|0;e=f[c+4>>2]|0;do{x=f[d+32>>2]|0;k=f[d+32+4>>2]|0;r=xf(x,k,14)|0;o=G;g=xf(x,k,18)|0;o=G^o;P=xf(x,k,41)|0;J=f[d+40>>2]|0;j=f[d+40+4>>2]|0;t=f[d+48>>2]|0;i=f[d+48+4>>2]|0;L=32816+(s<<3)|0;l=f[L>>2]|0;L=f[L+4>>2]|0;p=f[d+56>>2]|0;u=f[d+56+4>>2]|0;o=Lg(b|0,e|0,g^r^P|0,o^G|0)|0;L=Lg(o|0,G|0,l|0,L|0)|0;L=Lg(L|0,G|0,(t^J)&x^t|0,(i^j)&k^i|0)|0;u=Lg(L|0,G|0,p|0,u|0)|0;p=G;L=Lg(u|0,p|0,f[d+24>>2]|0,f[d+24+4>>2]|0)|0;l=G;f[d+24>>2]=L;f[d+24+4>>2]=l;o=f[d>>2]|0;P=f[d+4>>2]|0;r=xf(o,P,28)|0;g=G;B=xf(o,P,34)|0;g=G^g;H=xf(o,P,39)|0;n=f[d+8>>2]|0;O=f[d+8+4>>2]|0;m=f[d+16>>2]|0;N=f[d+16+4>>2]|0;p=Lg(B^r^H|0,g^G|0,u|0,p|0)|0;p=Lg(p|0,G|0,(m|n)&o|m&n|0,(N|O)&P|N&O|0)|0;u=G;f[d+56>>2]=p;f[d+56+4>>2]=u;g=xf(L,l,14)|0;H=G;r=xf(L,l,18)|0;H=G^H;B=xf(L,l,41)|0;H=H^G;e=s|1;q=f[c+(e<<3)>>2]|0;h=f[c+(e<<3)+4>>2]|0;b=f[32816+(e<<3)>>2]|0;C=f[32816+(e<<3)+4>>2]|0;i=Lg(L&(J^x)^J|0,l&(j^k)^j|0,t|0,i|0)|0;H=Lg(i|0,G|0,r^g^B|0,H|0)|0;h=Lg(H|0,G|0,q|0,h|0)|0;C=Lg(h|0,G|0,b|0,C|0)|0;b=G;N=Lg(C|0,b|0,m|0,N|0)|0;m=G;f[d+16>>2]=N;f[d+16+4>>2]=m;h=xf(p,u,28)|0;q=G;H=xf(p,u,34)|0;q=G^q;B=xf(p,u,39)|0;q=q^G;b=Lg(C|0,b|0,p&(n|o)|n&o|0,u&(O|P)|O&P|0)|0;q=Lg(b|0,G|0,H^h^B|0,q|0)|0;B=G;f[d+48>>2]=q;f[d+48+4>>2]=B;h=xf(N,m,14)|0;H=G;b=xf(N,m,18)|0;H=G^H;C=xf(N,m,41)|0;H=H^G;g=s|2;r=f[c+(g<<3)>>2]|0;i=f[c+(g<<3)+4>>2]|0;t=f[32816+(g<<3)>>2]|0;D=f[32816+(g<<3)+4>>2]|0;j=Lg(N&(L^x)^x|0,m&(l^k)^k|0,J|0,j|0)|0;H=Lg(j|0,G|0,b^h^C|0,H|0)|0;i=Lg(H|0,G|0,r|0,i|0)|0;D=Lg(i|0,G|0,t|0,D|0)|0;t=G;O=Lg(D|0,t|0,n|0,O|0)|0;n=G;f[d+8>>2]=O;f[d+8+4>>2]=n;i=xf(q,B,28)|0;r=G;H=xf(q,B,34)|0;r=G^r;C=xf(q,B,39)|0;r=r^G;t=Lg(D|0,t|0,q&(p|o)|p&o|0,B&(u|P)|u&P|0)|0;r=Lg(t|0,G|0,H^i^C|0,r|0)|0;C=G;f[d+40>>2]=r;f[d+40+4>>2]=C;i=xf(O,n,14)|0;H=G;t=xf(O,n,18)|0;H=G^H;D=xf(O,n,41)|0;H=H^G;h=s|3;b=f[c+(h<<3)>>2]|0;j=f[c+(h<<3)+4>>2]|0;J=f[32816+(h<<3)>>2]|0;v=f[32816+(h<<3)+4>>2]|0;k=Lg(O&(N^L)^L|0,n&(m^l)^l|0,x|0,k|0)|0;H=Lg(k|0,G|0,t^i^D|0,H|0)|0;j=Lg(H|0,G|0,b|0,j|0)|0;v=Lg(j|0,G|0,J|0,v|0)|0;J=G;P=Lg(v|0,J|0,o|0,P|0)|0;o=G;f[d>>2]=P;f[d+4>>2]=o;j=xf(r,C,28)|0;b=G;H=xf(r,C,34)|0;b=G^b;D=xf(r,C,39)|0;b=b^G;J=Lg(v|0,J|0,r&(q|p)|q&p|0,C&(B|u)|B&u|0)|0;b=Lg(J|0,G|0,H^j^D|0,b|0)|0;D=G;f[d+32>>2]=b;f[d+32+4>>2]=D;j=xf(P,o,14)|0;H=G;J=xf(P,o,18)|0;H=G^H;v=xf(P,o,41)|0;H=H^G;i=s|4;t=f[c+(i<<3)>>2]|0;k=f[c+(i<<3)+4>>2]|0;x=f[32816+(i<<3)>>2]|0;K=f[32816+(i<<3)+4>>2]|0;l=Lg(P&(O^N)^N|0,o&(n^m)^m|0,L|0,l|0)|0;H=Lg(l|0,G|0,J^j^v|0,H|0)|0;k=Lg(H|0,G|0,t|0,k|0)|0;K=Lg(k|0,G|0,x|0,K|0)|0;x=G;u=Lg(K|0,x|0,p|0,u|0)|0;p=G;f[d+56>>2]=u;f[d+56+4>>2]=p;k=xf(b,D,28)|0;t=G;H=xf(b,D,34)|0;t=G^t;v=xf(b,D,39)|0;t=t^G;x=Lg(K|0,x|0,b&(r|q)|r&q|0,D&(C|B)|C&B|0)|0;t=Lg(x|0,G|0,H^k^v|0,t|0)|0;v=G;f[d+24>>2]=t;f[d+24+4>>2]=v;k=xf(u,p,14)|0;H=G;x=xf(u,p,18)|0;H=G^H;K=xf(u,p,41)|0;H=H^G;j=s|5;J=f[c+(j<<3)>>2]|0;l=f[c+(j<<3)+4>>2]|0;L=f[32816+(j<<3)>>2]|0;E=f[32816+(j<<3)+4>>2]|0;m=Lg(u&(P^O)^O|0,p&(o^n)^n|0,N|0,m|0)|0;H=Lg(m|0,G|0,x^k^K|0,H|0)|0;l=Lg(H|0,G|0,J|0,l|0)|0;E=Lg(l|0,G|0,L|0,E|0)|0;L=G;B=Lg(E|0,L|0,q|0,B|0)|0;q=G;f[d+48>>2]=B;f[d+48+4>>2]=q;l=xf(t,v,28)|0;J=G;H=xf(t,v,34)|0;J=G^J;K=xf(t,v,39)|0;J=J^G;L=Lg(E|0,L|0,t&(b|r)|b&r|0,v&(D|C)|D&C|0)|0;J=Lg(L|0,G|0,H^l^K|0,J|0)|0;K=G;f[d+16>>2]=J;f[d+16+4>>2]=K;l=xf(B,q,14)|0;H=G;L=xf(B,q,18)|0;H=G^H;E=xf(B,q,41)|0;H=H^G;k=s|6;x=f[c+(k<<3)>>2]|0;m=f[c+(k<<3)+4>>2]|0;N=f[32816+(k<<3)>>2]|0;M=f[32816+(k<<3)+4>>2]|0;n=Lg(B&(u^P)^P|0,q&(p^o)^o|0,O|0,n|0)|0;H=Lg(n|0,G|0,L^l^E|0,H|0)|0;m=Lg(H|0,G|0,x|0,m|0)|0;M=Lg(m|0,G|0,N|0,M|0)|0;N=G;C=Lg(M|0,N|0,r|0,C|0)|0;r=G;f[d+40>>2]=C;f[d+40+4>>2]=r;m=xf(J,K,28)|0;x=G;H=xf(J,K,34)|0;x=G^x;E=xf(J,K,39)|0;x=x^G;N=Lg(M|0,N|0,J&(t|b)|t&b|0,K&(v|D)|v&D|0)|0;x=Lg(N|0,G|0,H^m^E|0,x|0)|0;E=G;f[d+8>>2]=x;f[d+8+4>>2]=E;m=xf(C,r,14)|0;H=G;N=xf(C,r,18)|0;H=G^H;M=xf(C,r,41)|0;H=H^G;l=s|7;L=f[c+(l<<3)>>2]|0;n=f[c+(l<<3)+4>>2]|0;O=f[32816+(l<<3)>>2]|0;Q=f[32816+(l<<3)+4>>2]|0;o=Lg(C&(B^u)^u|0,r&(q^p)^p|0,P|0,o|0)|0;H=Lg(o|0,G|0,N^m^M|0,H|0)|0;n=Lg(H|0,G|0,L|0,n|0)|0;Q=Lg(n|0,G|0,O|0,Q|0)|0;O=G;D=Lg(Q|0,O|0,b|0,D|0)|0;b=G;f[d+32>>2]=D;f[d+32+4>>2]=b;n=xf(x,E,28)|0;L=G;H=xf(x,E,34)|0;L=G^L;M=xf(x,E,39)|0;L=L^G;O=Lg(Q|0,O|0,x&(J|t)|J&t|0,E&(K|v)|K&v|0)|0;L=Lg(O|0,G|0,H^n^M|0,L|0)|0;M=G;f[d>>2]=L;f[d+4>>2]=M;n=xf(D,b,14)|0;H=G;O=xf(D,b,18)|0;H=G^H;Q=xf(D,b,41)|0;H=H^G;m=s|8;N=f[c+(m<<3)>>2]|0;o=f[c+(m<<3)+4>>2]|0;P=f[32816+(m<<3)>>2]|0;R=f[32816+(m<<3)+4>>2]|0;p=Lg(D&(C^B)^B|0,b&(r^q)^q|0,u|0,p|0)|0;H=Lg(p|0,G|0,O^n^Q|0,H|0)|0;o=Lg(H|0,G|0,N|0,o|0)|0;R=Lg(o|0,G|0,P|0,R|0)|0;P=G;v=Lg(R|0,P|0,t|0,v|0)|0;t=G;f[d+24>>2]=v;f[d+24+4>>2]=t;o=xf(L,M,28)|0;N=G;H=xf(L,M,34)|0;N=G^N;Q=xf(L,M,39)|0;N=N^G;P=Lg(R|0,P|0,L&(x|J)|x&J|0,M&(E|K)|E&K|0)|0;N=Lg(P|0,G|0,H^o^Q|0,N|0)|0;Q=G;f[d+56>>2]=N;f[d+56+4>>2]=Q;o=xf(v,t,14)|0;H=G;P=xf(v,t,18)|0;H=G^H;R=xf(v,t,41)|0;H=H^G;n=s|9;O=f[c+(n<<3)>>2]|0;p=f[c+(n<<3)+4>>2]|0;u=f[32816+(n<<3)>>2]|0;S=f[32816+(n<<3)+4>>2]|0;q=Lg(v&(D^C)^C|0,t&(b^r)^r|0,B|0,q|0)|0;H=Lg(q|0,G|0,P^o^R|0,H|0)|0;p=Lg(H|0,G|0,O|0,p|0)|0;S=Lg(p|0,G|0,u|0,S|0)|0;u=G;K=Lg(S|0,u|0,J|0,K|0)|0;J=G;f[d+16>>2]=K;f[d+16+4>>2]=J;p=xf(N,Q,28)|0;O=G;H=xf(N,Q,34)|0;O=G^O;R=xf(N,Q,39)|0;O=O^G;u=Lg(S|0,u|0,N&(L|x)|L&x|0,Q&(M|E)|M&E|0)|0;O=Lg(u|0,G|0,H^p^R|0,O|0)|0;R=G;f[d+48>>2]=O;f[d+48+4>>2]=R;p=xf(K,J,14)|0;H=G;u=xf(K,J,18)|0;H=G^H;S=xf(K,J,41)|0;H=H^G;o=s|10;P=f[c+(o<<3)>>2]|0;q=f[c+(o<<3)+4>>2]|0;B=f[32816+(o<<3)>>2]|0;w=f[32816+(o<<3)+4>>2]|0;r=Lg(K&(v^D)^D|0,J&(t^b)^b|0,C|0,r|0)|0;H=Lg(r|0,G|0,u^p^S|0,H|0)|0;q=Lg(H|0,G|0,P|0,q|0)|0;w=Lg(q|0,G|0,B|0,w|0)|0;B=G;E=Lg(w|0,B|0,x|0,E|0)|0;x=G;f[d+8>>2]=E;f[d+8+4>>2]=x;q=xf(O,R,28)|0;P=G;H=xf(O,R,34)|0;P=G^P;S=xf(O,R,39)|0;P=P^G;B=Lg(w|0,B|0,O&(N|L)|N&L|0,R&(Q|M)|Q&M|0)|0;P=Lg(B|0,G|0,H^q^S|0,P|0)|0;S=G;f[d+40>>2]=P;f[d+40+4>>2]=S;q=xf(E,x,14)|0;H=G;B=xf(E,x,18)|0;H=G^H;w=xf(E,x,41)|0;H=H^G;p=s|11;u=f[c+(p<<3)>>2]|0;r=f[c+(p<<3)+4>>2]|0;C=f[32816+(p<<3)>>2]|0;y=f[32816+(p<<3)+4>>2]|0;b=Lg(E&(K^v)^v|0,x&(J^t)^t|0,D|0,b|0)|0;H=Lg(b|0,G|0,B^q^w|0,H|0)|0;r=Lg(H|0,G|0,u|0,r|0)|0;y=Lg(r|0,G|0,C|0,y|0)|0;C=G;M=Lg(y|0,C|0,L|0,M|0)|0;L=G;f[d>>2]=M;f[d+4>>2]=L;r=xf(P,S,28)|0;u=G;H=xf(P,S,34)|0;u=G^u;w=xf(P,S,39)|0;u=u^G;C=Lg(y|0,C|0,P&(O|N)|O&N|0,S&(R|Q)|R&Q|0)|0;u=Lg(C|0,G|0,H^r^w|0,u|0)|0;w=G;f[d+32>>2]=u;f[d+32+4>>2]=w;r=xf(M,L,14)|0;H=G;C=xf(M,L,18)|0;H=G^H;y=xf(M,L,41)|0;H=H^G;q=s|12;B=f[c+(q<<3)>>2]|0;b=f[c+(q<<3)+4>>2]|0;D=f[32816+(q<<3)>>2]|0;z=f[32816+(q<<3)+4>>2]|0;t=Lg(M&(E^K)^K|0,L&(x^J)^J|0,v|0,t|0)|0;H=Lg(t|0,G|0,C^r^y|0,H|0)|0;b=Lg(H|0,G|0,B|0,b|0)|0;z=Lg(b|0,G|0,D|0,z|0)|0;D=G;Q=Lg(z|0,D|0,N|0,Q|0)|0;N=G;f[d+56>>2]=Q;f[d+56+4>>2]=N;b=xf(u,w,28)|0;B=G;H=xf(u,w,34)|0;B=G^B;y=xf(u,w,39)|0;B=B^G;D=Lg(z|0,D|0,u&(P|O)|P&O|0,w&(S|R)|S&R|0)|0;B=Lg(D|0,G|0,H^b^y|0,B|0)|0;y=G;f[d+24>>2]=B;f[d+24+4>>2]=y;b=xf(Q,N,14)|0;H=G;D=xf(Q,N,18)|0;H=G^H;z=xf(Q,N,41)|0;H=H^G;r=s|13;C=f[c+(r<<3)>>2]|0;t=f[c+(r<<3)+4>>2]|0;v=f[32816+(r<<3)>>2]|0;A=f[32816+(r<<3)+4>>2]|0;J=Lg(Q&(M^E)^E|0,N&(L^x)^x|0,K|0,J|0)|0;H=Lg(J|0,G|0,D^b^z|0,H|0)|0;t=Lg(H|0,G|0,C|0,t|0)|0;A=Lg(t|0,G|0,v|0,A|0)|0;v=G;R=Lg(A|0,v|0,O|0,R|0)|0;O=G;f[d+48>>2]=R;f[d+48+4>>2]=O;t=xf(B,y,28)|0;C=G;H=xf(B,y,34)|0;C=G^C;z=xf(B,y,39)|0;C=C^G;v=Lg(A|0,v|0,B&(u|P)|u&P|0,y&(w|S)|w&S|0)|0;C=Lg(v|0,G|0,H^t^z|0,C|0)|0;z=G;f[d+16>>2]=C;f[d+16+4>>2]=z;t=xf(R,O,14)|0;H=G;v=xf(R,O,18)|0;H=G^H;A=xf(R,O,41)|0;H=H^G;b=s|14;D=f[c+(b<<3)>>2]|0;J=f[c+(b<<3)+4>>2]|0;K=f[32816+(b<<3)>>2]|0;I=f[32816+(b<<3)+4>>2]|0;x=Lg(R&(Q^M)^M|0,O&(N^L)^L|0,E|0,x|0)|0;H=Lg(x|0,G|0,v^t^A|0,H|0)|0;J=Lg(H|0,G|0,D|0,J|0)|0;I=Lg(J|0,G|0,K|0,I|0)|0;K=G;S=Lg(I|0,K|0,P|0,S|0)|0;P=G;f[d+40>>2]=S;f[d+40+4>>2]=P;J=xf(C,z,28)|0;D=G;H=xf(C,z,34)|0;D=G^D;A=xf(C,z,39)|0;D=D^G;K=Lg(I|0,K|0,C&(B|u)|B&u|0,z&(y|w)|y&w|0)|0;D=Lg(K|0,G|0,H^J^A|0,D|0)|0;A=G;f[d+8>>2]=D;f[d+8+4>>2]=A;J=xf(S,P,14)|0;H=G;K=xf(S,P,18)|0;H=G^H;I=xf(S,P,41)|0;H=H^G;t=s|15;v=f[c+(t<<3)>>2]|0;x=f[c+(t<<3)+4>>2]|0;E=f[32816+(t<<3)>>2]|0;F=f[32816+(t<<3)+4>>2]|0;L=Lg(S&(R^Q)^Q|0,P&(O^N)^N|0,M|0,L|0)|0;H=Lg(L|0,G|0,K^J^I|0,H|0)|0;x=Lg(H|0,G|0,v|0,x|0)|0;F=Lg(x|0,G|0,E|0,F|0)|0;E=G;w=Lg(F|0,E|0,u|0,w|0)|0;f[d+32>>2]=w;f[d+32+4>>2]=G;w=xf(D,A,28)|0;u=G;x=xf(D,A,34)|0;u=G^u;v=xf(D,A,39)|0;u=u^G;y=Lg(F|0,E|0,D&(C|B)|C&B|0,A&(z|y)|z&y|0)|0;u=Lg(y|0,G|0,x^w^v|0,u|0)|0;f[d>>2]=u;f[d+4>>2]=G;if((s|0)==64)break;P=f[c+(b<<3)>>2]|0;S=f[c+(b<<3)+4>>2]|0;E=xf(P,S,19)|0;D=G;M=xf(P,S,61)|0;y=G;J=$f(P|0,S|0,6)|0;N=f[c+(n<<3)>>2]|0;C=f[c+(n<<3)+4>>2]|0;y=Lg(J^E^M|0,G^D^y|0,N|0,C|0)|0;D=G;M=f[c+(e<<3)>>2]|0;E=f[c+(e<<3)+4>>2]|0;J=xf(M,E,1)|0;L=G;H=xf(M,E,8)|0;I=G;K=$f(M|0,E|0,7)|0;I=G^L^I;L=c+(s<<3)|0;L=Lg(y|0,D|0,f[L>>2]|0,f[L+4>>2]|0)|0;I=Lg(L|0,G|0,K^J^H|0,I|0)|0;H=G;s=s+16|0;J=c+(s<<3)|0;f[J>>2]=I;f[J+4>>2]=H;J=f[c+(t<<3)>>2]|0;K=f[c+(t<<3)+4>>2]|0;L=xf(J,K,19)|0;D=G;y=xf(J,K,61)|0;F=G;w=$f(J|0,K|0,6)|0;F=G^D^F;D=f[c+(e+9<<3)>>2]|0;Q=f[c+(e+9<<3)+4>>2]|0;z=f[c+(e+1<<3)>>2]|0;A=f[c+(e+1<<3)+4>>2]|0;R=xf(z,A,1)|0;B=G;O=xf(z,A,8)|0;u=G;x=$f(z|0,A|0,7)|0;u=G^B^u;E=Lg(D|0,Q|0,M|0,E|0)|0;F=Lg(E|0,G|0,w^L^y|0,F|0)|0;u=Lg(F|0,G|0,x^R^O|0,u|0)|0;O=G;f[c+(e+16<<3)>>2]=u;f[c+(e+16<<3)+4>>2]=O;R=xf(I,H,19)|0;x=G;F=xf(I,H,61)|0;y=G;H=$f(I|0,H|0,6)|0;I=f[c+(p<<3)>>2]|0;L=f[c+(p<<3)+4>>2]|0;y=Lg(H^R^F|0,G^x^y|0,I|0,L|0)|0;x=G;F=f[c+(h<<3)>>2]|0;R=f[c+(h<<3)+4>>2]|0;H=xf(F,R,1)|0;w=G;E=xf(F,R,8)|0;M=G;Q=$f(F|0,R|0,7)|0;M=G^w^M;A=Lg(y|0,x|0,z|0,A|0)|0;M=Lg(A|0,G|0,Q^H^E|0,M|0)|0;E=G;f[c+(g+16<<3)>>2]=M;f[c+(g+16<<3)+4>>2]=E;H=xf(u,O,19)|0;Q=G;A=xf(u,O,61)|0;z=G;O=$f(u|0,O|0,6)|0;z=G^Q^z;Q=f[c+(h+9<<3)>>2]|0;u=f[c+(h+9<<3)+4>>2]|0;x=f[c+(h+1<<3)>>2]|0;y=f[c+(h+1<<3)+4>>2]|0;w=xf(x,y,1)|0;e=G;D=xf(x,y,8)|0;B=G;v=$f(x|0,y|0,7)|0;B=G^e^B;R=Lg(Q|0,u|0,F|0,R|0)|0;z=Lg(R|0,G|0,O^H^A|0,z|0)|0;B=Lg(z|0,G|0,v^w^D|0,B|0)|0;D=G;f[c+(h+16<<3)>>2]=B;f[c+(h+16<<3)+4>>2]=D;w=xf(M,E,19)|0;v=G;z=xf(M,E,61)|0;A=G;E=$f(M|0,E|0,6)|0;M=f[c+(r<<3)>>2]|0;H=f[c+(r<<3)+4>>2]|0;A=Lg(E^w^z|0,G^v^A|0,M|0,H|0)|0;v=G;z=f[c+(j<<3)>>2]|0;w=f[c+(j<<3)+4>>2]|0;E=xf(z,w,1)|0;h=G;O=xf(z,w,8)|0;R=G;F=$f(z|0,w|0,7)|0;R=G^h^R;y=Lg(A|0,v|0,x|0,y|0)|0;R=Lg(y|0,G|0,F^E^O|0,R|0)|0;O=G;f[c+(i+16<<3)>>2]=R;f[c+(i+16<<3)+4>>2]=O;E=xf(B,D,19)|0;i=G;F=xf(B,D,61)|0;y=G;D=$f(B|0,D|0,6)|0;y=G^i^y;i=f[c+(j+9<<3)>>2]|0;B=f[c+(j+9<<3)+4>>2]|0;x=f[c+(j+1<<3)>>2]|0;v=f[c+(j+1<<3)+4>>2]|0;A=xf(x,v,1)|0;h=G;u=xf(x,v,8)|0;Q=G;e=$f(x|0,v|0,7)|0;Q=G^h^Q;w=Lg(i|0,B|0,z|0,w|0)|0;y=Lg(w|0,G|0,D^E^F|0,y|0)|0;Q=Lg(y|0,G|0,e^A^u|0,Q|0)|0;u=G;f[c+(j+16<<3)>>2]=Q;f[c+(j+16<<3)+4>>2]=u;A=xf(R,O,19)|0;e=G;y=xf(R,O,61)|0;F=G;O=$f(R|0,O|0,6)|0;F=Lg(O^A^y|0,G^e^F|0,J|0,K|0)|0;e=G;y=f[c+(l<<3)>>2]|0;A=f[c+(l<<3)+4>>2]|0;O=xf(y,A,1)|0;j=G;R=xf(y,A,8)|0;E=G;D=$f(y|0,A|0,7)|0;E=G^j^E;v=Lg(F|0,e|0,x|0,v|0)|0;E=Lg(v|0,G|0,D^O^R|0,E|0)|0;R=G;f[c+(k+16<<3)>>2]=E;f[c+(k+16<<3)+4>>2]=R;O=xf(Q,u,19)|0;k=G;D=xf(Q,u,61)|0;v=G;u=$f(Q|0,u|0,6)|0;v=G^k^v;k=f[c+(l+9<<3)>>2]|0;Q=f[c+(l+9<<3)+4>>2]|0;x=f[c+(l+1<<3)>>2]|0;e=f[c+(l+1<<3)+4>>2]|0;F=xf(x,e,1)|0;j=G;w=xf(x,e,8)|0;z=G;B=$f(x|0,e|0,7)|0;z=G^j^z;A=Lg(k|0,Q|0,y|0,A|0)|0;v=Lg(A|0,G|0,u^O^D|0,v|0)|0;z=Lg(v|0,G|0,B^F^w|0,z|0)|0;w=G;f[c+(l+16<<3)>>2]=z;f[c+(l+16<<3)+4>>2]=w;F=xf(E,R,19)|0;B=G;v=xf(E,R,61)|0;D=G;R=$f(E|0,R|0,6)|0;D=Lg(R^F^v|0,G^B^D|0,f[c+(m+9<<3)>>2]|0,f[c+(m+9<<3)+4>>2]|0)|0;B=G;v=xf(N,C,1)|0;F=G;R=xf(N,C,8)|0;E=G;O=$f(N|0,C|0,7)|0;E=F^G^E;e=Lg(D|0,B|0,x|0,e|0)|0;E=Lg(e|0,G|0,v^O^R|0,E|0)|0;R=G;f[c+(m+16<<3)>>2]=E;f[c+(m+16<<3)+4>>2]=R;O=xf(z,w,19)|0;v=G;e=xf(z,w,61)|0;x=G;w=$f(z|0,w|0,6)|0;x=G^v^x;v=f[c+(n+9<<3)>>2]|0;z=f[c+(n+9<<3)+4>>2]|0;B=f[c+(n+1<<3)>>2]|0;D=f[c+(n+1<<3)+4>>2]|0;F=xf(B,D,1)|0;u=G;A=xf(B,D,8)|0;y=G;Q=$f(B|0,D|0,7)|0;y=G^u^y;C=Lg(v|0,z|0,N|0,C|0)|0;x=Lg(C|0,G|0,w^O^e|0,x|0)|0;y=Lg(x|0,G|0,Q^F^A|0,y|0)|0;A=G;f[c+(n+16<<3)>>2]=y;f[c+(n+16<<3)+4>>2]=A;F=xf(E,R,19)|0;Q=G;x=xf(E,R,61)|0;e=G;R=$f(E|0,R|0,6)|0;e=Lg(R^F^x|0,G^Q^e|0,f[c+(o+9<<3)>>2]|0,f[c+(o+9<<3)+4>>2]|0)|0;Q=G;x=xf(I,L,1)|0;F=G;R=xf(I,L,8)|0;E=G;O=$f(I|0,L|0,7)|0;E=F^G^E;D=Lg(e|0,Q|0,B|0,D|0)|0;E=Lg(D|0,G|0,x^O^R|0,E|0)|0;R=G;f[c+(o+16<<3)>>2]=E;f[c+(o+16<<3)+4>>2]=R;O=xf(y,A,19)|0;x=G;D=xf(y,A,61)|0;B=G;A=$f(y|0,A|0,6)|0;B=G^x^B;x=f[c+(p+9<<3)>>2]|0;y=f[c+(p+9<<3)+4>>2]|0;Q=f[c+(p+1<<3)>>2]|0;e=f[c+(p+1<<3)+4>>2]|0;F=xf(Q,e,1)|0;w=G;C=xf(Q,e,8)|0;N=G;z=$f(Q|0,e|0,7)|0;N=G^w^N;L=Lg(x|0,y|0,I|0,L|0)|0;B=Lg(L|0,G|0,A^O^D|0,B|0)|0;N=Lg(B|0,G|0,z^F^C|0,N|0)|0;C=G;f[c+(p+16<<3)>>2]=N;f[c+(p+16<<3)+4>>2]=C;F=xf(E,R,19)|0;z=G;B=xf(E,R,61)|0;D=G;R=$f(E|0,R|0,6)|0;D=Lg(R^F^B|0,G^z^D|0,f[c+(q+9<<3)>>2]|0,f[c+(q+9<<3)+4>>2]|0)|0;z=G;B=xf(M,H,1)|0;F=G;R=xf(M,H,8)|0;E=G;O=$f(M|0,H|0,7)|0;E=F^G^E;e=Lg(D|0,z|0,Q|0,e|0)|0;E=Lg(e|0,G|0,B^O^R|0,E|0)|0;R=G;f[c+(q+16<<3)>>2]=E;f[c+(q+16<<3)+4>>2]=R;O=xf(N,C,19)|0;B=G;e=xf(N,C,61)|0;Q=G;C=$f(N|0,C|0,6)|0;Q=G^B^Q;B=f[c+(r+9<<3)>>2]|0;N=f[c+(r+9<<3)+4>>2]|0;z=f[c+(r+1<<3)>>2]|0;D=f[c+(r+1<<3)+4>>2]|0;F=xf(z,D,1)|0;A=G;L=xf(z,D,8)|0;I=G;D=$f(z|0,D|0,7)|0;I=G^A^I;H=Lg(B|0,N|0,M|0,H|0)|0;Q=Lg(H|0,G|0,C^O^e|0,Q|0)|0;I=Lg(Q|0,G|0,D^F^L|0,I|0)|0;L=G;f[c+(r+16<<3)>>2]=I;f[c+(r+16<<3)+4>>2]=L;F=xf(E,R,19)|0;D=G;Q=xf(E,R,61)|0;e=G;R=$f(E|0,R|0,6)|0;e=G^D^e;D=f[c+(b+9<<3)>>2]|0;E=f[c+(b+9<<3)+4>>2]|0;O=xf(J,K,1)|0;C=G;H=xf(J,K,8)|0;M=G;N=$f(J|0,K|0,7)|0;M=C^G^M;S=Lg(D|0,E|0,P|0,S|0)|0;e=Lg(S|0,G|0,R^F^Q|0,e|0)|0;M=Lg(e|0,G|0,O^N^H|0,M|0)|0;f[c+(b+16<<3)>>2]=M;f[c+(b+16<<3)+4>>2]=G;M=xf(I,L,19)|0;H=G;N=xf(I,L,61)|0;O=G;L=$f(I|0,L|0,6)|0;O=G^H^O;H=f[c+(t+9<<3)>>2]|0;I=f[c+(t+9<<3)+4>>2]|0;b=f[c+(t+1<<3)>>2]|0;e=f[c+(t+1<<3)+4>>2]|0;Q=xf(b,e,1)|0;F=G;R=xf(b,e,8)|0;S=G;P=$f(b|0,e|0,7)|0;S=G^F^S;K=Lg(H|0,I|0,J|0,K|0)|0;O=Lg(K|0,G|0,L^M^N|0,O|0)|0;S=Lg(O|0,G|0,P^Q^R|0,S|0)|0;f[c+(t+16<<3)>>2]=S;f[c+(t+16<<3)+4>>2]=G}while(s>>>0<80);b=0;do{R=d+(b<<3)|0;S=a+(b<<3)|0;R=Lg(f[S>>2]|0,f[S+4>>2]|0,f[R>>2]|0,f[R+4>>2]|0)|0;f[S>>2]=R;f[S+4>>2]=G;b=b+1|0}while((b|0)!=8);return}function na(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0;x=t;o=t=t+63&-64;t=t+16|0;do if(a>>>0<245){n=a>>>0<11?16:a+11&-8;l=f[8878]|0;if(l>>>(n>>>3)&3|0){a=35552+((l>>>(n>>>3)&1^1)+(n>>>3)<<1<<2)|0;b=f[a+8>>2]|0;c=f[b+8>>2]|0;if((c|0)==(a|0))f[8878]=l&~(1<<(l>>>(n>>>3)&1^1)+(n>>>3));else{f[c+12>>2]=a;f[a+8>>2]=c}w=(l>>>(n>>>3)&1^1)+(n>>>3)<<3;f[b+4>>2]=w|3;f[b+w+4>>2]=f[b+w+4>>2]|1;w=b+8|0;t=x;return w|0}m=f[8880]|0;if(n>>>0>m>>>0){if(l>>>(n>>>3)|0){a=l>>>(n>>>3)<<(n>>>3)&(2<<(n>>>3)|0-(2<<(n>>>3)));e=((a&0-a)+-1|0)>>>(((a&0-a)+-1|0)>>>12&16);d=e>>>(e>>>5&8)>>>(e>>>(e>>>5&8)>>>2&4);d=(e>>>5&8|((a&0-a)+-1|0)>>>12&16|e>>>(e>>>5&8)>>>2&4|d>>>1&2|d>>>(d>>>1&2)>>>1&1)+(d>>>(d>>>1&2)>>>(d>>>(d>>>1&2)>>>1&1))|0;e=f[35552+(d<<1<<2)+8>>2]|0;a=f[e+8>>2]|0;if((a|0)==(35552+(d<<1<<2)|0)){f[8878]=l&~(1<<d);a=l&~(1<<d)}else{f[a+12>>2]=35552+(d<<1<<2);f[35552+(d<<1<<2)+8>>2]=a;a=l}f[e+4>>2]=n|3;f[e+n+4>>2]=(d<<3)-n|1;f[e+(d<<3)>>2]=(d<<3)-n;if(m|0){c=f[8883]|0;if(!(a&1<<(m>>>3))){f[8878]=a|1<<(m>>>3);a=35552+(m>>>3<<1<<2)|0;b=35552+(m>>>3<<1<<2)+8|0}else{a=f[35552+(m>>>3<<1<<2)+8>>2]|0;b=35552+(m>>>3<<1<<2)+8|0}f[b>>2]=c;f[a+12>>2]=c;f[c+8>>2]=a;f[c+12>>2]=35552+(m>>>3<<1<<2)}f[8880]=(d<<3)-n;f[8883]=e+n;w=e+8|0;t=x;return w|0}h=f[8879]|0;if(h){b=((h&0-h)+-1|0)>>>(((h&0-h)+-1|0)>>>12&16);k=b>>>(b>>>5&8)>>>(b>>>(b>>>5&8)>>>2&4);k=f[35816+((b>>>5&8|((h&0-h)+-1|0)>>>12&16|b>>>(b>>>5&8)>>>2&4|k>>>1&2|k>>>(k>>>1&2)>>>1&1)+(k>>>(k>>>1&2)>>>(k>>>(k>>>1&2)>>>1&1))<<2)>>2]|0;b=k;j=k;k=(f[k+4>>2]&-8)-n|0;while(1){a=f[b+16>>2]|0;if(!a){a=f[b+20>>2]|0;if(!a)break}i=(f[a+4>>2]&-8)-n|0;e=i>>>0<k>>>0;b=a;j=e?a:j;k=e?i:k}i=j+n|0;if(i>>>0>j>>>0){e=f[j+24>>2]|0;a=f[j+12>>2]|0;do if((a|0)==(j|0)){b=j+20|0;a=f[b>>2]|0;if(!a){b=j+16|0;a=f[b>>2]|0;if(!a){b=0;break}}while(1){d=a+20|0;c=f[d>>2]|0;if(!c){d=a+16|0;c=f[d>>2]|0;if(!c)break;else{a=c;b=d}}else{a=c;b=d}}f[b>>2]=0;b=a}else{b=f[j+8>>2]|0;f[b+12>>2]=a;f[a+8>>2]=b;b=a}while(0);do if(e|0){a=f[j+28>>2]|0;if((j|0)==(f[35816+(a<<2)>>2]|0)){f[35816+(a<<2)>>2]=b;if(!b){f[8879]=h&~(1<<a);break}}else{f[((f[e+16>>2]|0)==(j|0)?e+16|0:e+20|0)>>2]=b;if(!b)break}f[b+24>>2]=e;a=f[j+16>>2]|0;if(a|0){f[b+16>>2]=a;f[a+24>>2]=b}a=f[j+20>>2]|0;if(a|0){f[b+20>>2]=a;f[a+24>>2]=b}}while(0);if(k>>>0<16){w=k+n|0;f[j+4>>2]=w|3;w=j+w+4|0;f[w>>2]=f[w>>2]|1}else{f[j+4>>2]=n|3;f[i+4>>2]=k|1;f[i+k>>2]=k;if(m|0){c=f[8883]|0;if(!(1<<(m>>>3)&l)){f[8878]=1<<(m>>>3)|l;a=35552+(m>>>3<<1<<2)|0;b=35552+(m>>>3<<1<<2)+8|0}else{a=f[35552+(m>>>3<<1<<2)+8>>2]|0;b=35552+(m>>>3<<1<<2)+8|0}f[b>>2]=c;f[a+12>>2]=c;f[c+8>>2]=a;f[c+12>>2]=35552+(m>>>3<<1<<2)}f[8880]=k;f[8883]=i}w=j+8|0;t=x;return w|0}}}}else if(a>>>0<=4294967231){n=a+11&-8;d=f[8879]|0;if(d){if((a+11|0)>>>8)if(n>>>0>16777215)j=31;else{j=(a+11|0)>>>8<<((((a+11|0)>>>8)+1048320|0)>>>16&8);j=14-((j+520192|0)>>>16&4|(((a+11|0)>>>8)+1048320|0)>>>16&8|((j<<((j+520192|0)>>>16&4))+245760|0)>>>16&2)+(j<<((j+520192|0)>>>16&4)<<(((j<<((j+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;j=n>>>(j+7|0)&1|j<<1}else j=0;a=f[35816+(j<<2)>>2]|0;a:do if(!a){c=0;a=0;b=0-n|0;s=61}else{h=0;b=0-n|0;i=n<<((j|0)==31?0:25-(j>>>1)|0);c=0;while(1){e=(f[a+4>>2]&-8)-n|0;if(e>>>0<b>>>0)if(!e){e=a;b=0;c=a;s=65;break a}else{h=a;b=e}s=f[a+20>>2]|0;a=f[a+16+(i>>>31<<2)>>2]|0;c=(s|0)==0|(s|0)==(a|0)?c:s;if(!a){a=h;s=61;break}else i=i<<1}}while(0);if((s|0)==61){if((c|0)==0&(a|0)==0){a=2<<j;if(!((a|0-a)&d))break;l=((a|0-a)&d&0-((a|0-a)&d))+-1|0;m=l>>>(l>>>12&16)>>>(l>>>(l>>>12&16)>>>5&8);c=m>>>(m>>>2&4)>>>(m>>>(m>>>2&4)>>>1&2);a=0;c=f[35816+((l>>>(l>>>12&16)>>>5&8|l>>>12&16|m>>>2&4|m>>>(m>>>2&4)>>>1&2|c>>>1&1)+(c>>>(c>>>1&1))<<2)>>2]|0}if(!c){i=a;h=b}else{e=a;s=65}}if((s|0)==65)while(1){m=(f[c+4>>2]&-8)-n|0;a=m>>>0<b>>>0;b=a?m:b;e=a?c:e;a=f[c+16>>2]|0;if(!a)a=f[c+20>>2]|0;if(!a){i=e;h=b;break}else c=a}if(((i|0)!=0?h>>>0<((f[8880]|0)-n|0)>>>0:0)?(k=i+n|0,k>>>0>i>>>0):0){g=f[i+24>>2]|0;a=f[i+12>>2]|0;do if((a|0)==(i|0)){b=i+20|0;a=f[b>>2]|0;if(!a){b=i+16|0;a=f[b>>2]|0;if(!a){a=0;break}}while(1){e=a+20|0;c=f[e>>2]|0;if(!c){e=a+16|0;c=f[e>>2]|0;if(!c)break;else{a=c;b=e}}else{a=c;b=e}}f[b>>2]=0}else{w=f[i+8>>2]|0;f[w+12>>2]=a;f[a+8>>2]=w}while(0);do if(g){b=f[i+28>>2]|0;if((i|0)==(f[35816+(b<<2)>>2]|0)){f[35816+(b<<2)>>2]=a;if(!a){f[8879]=d&~(1<<b);d=d&~(1<<b);break}}else{f[((f[g+16>>2]|0)==(i|0)?g+16|0:g+20|0)>>2]=a;if(!a)break}f[a+24>>2]=g;b=f[i+16>>2]|0;if(b|0){f[a+16>>2]=b;f[b+24>>2]=a}b=f[i+20>>2]|0;if(b){f[a+20>>2]=b;f[b+24>>2]=a}}while(0);b:do if(h>>>0<16){w=h+n|0;f[i+4>>2]=w|3;w=i+w+4|0;f[w>>2]=f[w>>2]|1}else{f[i+4>>2]=n|3;f[k+4>>2]=h|1;f[k+h>>2]=h;c=h>>>3;if(h>>>0<256){a=f[8878]|0;if(!(a&1<<c)){f[8878]=a|1<<c;a=35552+(c<<1<<2)|0;b=35552+(c<<1<<2)+8|0}else{a=f[35552+(c<<1<<2)+8>>2]|0;b=35552+(c<<1<<2)+8|0}f[b>>2]=k;f[a+12>>2]=k;f[k+8>>2]=a;f[k+12>>2]=35552+(c<<1<<2);break}a=h>>>8;if(a)if(h>>>0>16777215)c=31;else{c=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);c=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(c+245760|0)>>>16&2)+(c<<((c+245760|0)>>>16&2)>>>15)|0;c=h>>>(c+7|0)&1|c<<1}else c=0;a=35816+(c<<2)|0;f[k+28>>2]=c;f[k+16+4>>2]=0;f[k+16>>2]=0;b=1<<c;if(!(d&b)){f[8879]=d|b;f[a>>2]=k;f[k+24>>2]=a;f[k+12>>2]=k;f[k+8>>2]=k;break}a=f[a>>2]|0;c:do if((f[a+4>>2]&-8|0)!=(h|0)){d=h<<((c|0)==31?0:25-(c>>>1)|0);while(1){c=a+16+(d>>>31<<2)|0;b=f[c>>2]|0;if(!b)break;if((f[b+4>>2]&-8|0)==(h|0)){a=b;break c}else{d=d<<1;a=b}}f[c>>2]=k;f[k+24>>2]=a;f[k+12>>2]=k;f[k+8>>2]=k;break b}while(0);v=a+8|0;w=f[v>>2]|0;f[w+12>>2]=k;f[v>>2]=k;f[k+8>>2]=w;f[k+12>>2]=a;f[k+24>>2]=0}while(0);w=i+8|0;t=x;return w|0}}}else n=-1;while(0);c=f[8880]|0;if(c>>>0>=n>>>0){a=c-n|0;b=f[8883]|0;if(a>>>0>15){w=b+n|0;f[8883]=w;f[8880]=a;f[w+4>>2]=a|1;f[b+c>>2]=a;f[b+4>>2]=n|3}else{f[8880]=0;f[8883]=0;f[b+4>>2]=c|3;f[b+c+4>>2]=f[b+c+4>>2]|1}w=b+8|0;t=x;return w|0}e=f[8881]|0;if(e>>>0>n>>>0){u=e-n|0;f[8881]=u;w=f[8884]|0;v=w+n|0;f[8884]=v;f[v+4>>2]=u|1;f[w+4>>2]=n|3;w=w+8|0;t=x;return w|0}if(!(f[8996]|0)){f[8998]=4096;f[8997]=4096;f[8999]=-1;f[9e3]=-1;f[9001]=0;f[8989]=0;f[8996]=o&-16^1431655768;a=4096}else a=f[8998]|0;h=n+48|0;i=n+47|0;k=a+i|0;j=0-a|0;if((k&j)>>>0<=n>>>0){w=0;t=x;return w|0}a=f[8988]|0;if(a|0?(o=f[8986]|0,(o+(k&j)|0)>>>0<=o>>>0?1:(o+(k&j)|0)>>>0>a>>>0):0){w=0;t=x;return w|0}d:do if(!(f[8989]&4)){c=f[8884]|0;e:do if(c){b=35960;while(1){a=f[b>>2]|0;if(a>>>0<=c>>>0?(p=b+4|0,(a+(f[p>>2]|0)|0)>>>0>c>>>0):0)break;a=f[b+8>>2]|0;if(!a){s=128;break e}else b=a}if((k-e&j)>>>0<2147483647){a=be(k-e&j|0)|0;if((a|0)==((f[b>>2]|0)+(f[p>>2]|0)|0))if((a|0)==(-1|0))a=k-e&j;else{h=k-e&j;g=a;s=145;break d}else{d=a;c=k-e&j;s=136}}else a=0}else s=128;while(0);do if((s|0)==128){b=be(0)|0;if((b|0)!=(-1|0)?(r=f[8997]|0,r=((r+-1&b|0)==0?0:(r+-1+b&0-r)-b|0)+(k&j)|0,q=f[8986]|0,r>>>0>n>>>0&r>>>0<2147483647):0){p=f[8988]|0;if(p|0?(r+q|0)>>>0<=q>>>0|(r+q|0)>>>0>p>>>0:0){a=0;break}a=be(r|0)|0;if((a|0)==(b|0)){h=r;g=b;s=145;break d}else{d=a;c=r;s=136}}else a=0}while(0);do if((s|0)==136){b=0-c|0;if(!(h>>>0>c>>>0&(c>>>0<2147483647&(d|0)!=(-1|0))))if((d|0)==(-1|0)){a=0;break}else{h=c;g=d;s=145;break d}a=f[8998]|0;a=i-c+a&0-a;if(a>>>0>=2147483647){h=c;g=d;s=145;break d}if((be(a|0)|0)==(-1|0)){be(b|0)|0;a=0;break}else{h=a+c|0;g=d;s=145;break d}}while(0);f[8989]=f[8989]|4;s=143}else{a=0;s=143}while(0);if(((s|0)==143?(k&j)>>>0<2147483647:0)?(g=be(k&j|0)|0,u=be(0)|0,v=(u-g|0)>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|v^1|g>>>0<u>>>0&((g|0)!=(-1|0)&(u|0)!=(-1|0))^1)):0){h=v?u-g|0:a;s=145}if((s|0)==145){a=(f[8986]|0)+h|0;f[8986]=a;if(a>>>0>(f[8987]|0)>>>0)f[8987]=a;j=f[8884]|0;f:do if(j){a=35960;while(1){b=f[a>>2]|0;c=a+4|0;d=f[c>>2]|0;if((g|0)==(b+d|0)){s=154;break}e=f[a+8>>2]|0;if(!e)break;else a=e}if(((s|0)==154?(f[a+12>>2]&8|0)==0:0)?g>>>0>j>>>0&b>>>0<=j>>>0:0){f[c>>2]=d+h;w=(f[8881]|0)+h|0;v=(j+8&7|0)==0?0:0-(j+8)&7;f[8884]=j+v;f[8881]=w-v;f[j+v+4>>2]=w-v|1;f[j+w+4>>2]=40;f[8885]=f[9e3];break}if(g>>>0<(f[8882]|0)>>>0)f[8882]=g;c=g+h|0;a=35960;while(1){if((f[a>>2]|0)==(c|0)){s=162;break}b=f[a+8>>2]|0;if(!b)break;else a=b}if((s|0)==162?(f[a+12>>2]&8|0)==0:0){f[a>>2]=g;l=a+4|0;f[l>>2]=(f[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;a=c+((c+8&7|0)==0?0:0-(c+8)&7)|0;k=l+n|0;i=a-l-n|0;f[l+4>>2]=n|3;g:do if((j|0)==(a|0)){w=(f[8881]|0)+i|0;f[8881]=w;f[8884]=k;f[k+4>>2]=w|1}else{if((f[8883]|0)==(a|0)){w=(f[8880]|0)+i|0;f[8880]=w;f[8883]=k;f[k+4>>2]=w|1;f[k+w>>2]=w;break}h=f[a+4>>2]|0;if((h&3|0)==1){h:do if(h>>>0<256){b=f[a+8>>2]|0;c=f[a+12>>2]|0;if((c|0)==(b|0)){f[8878]=f[8878]&~(1<<(h>>>3));break}else{f[b+12>>2]=c;f[c+8>>2]=b;break}}else{g=f[a+24>>2]|0;b=f[a+12>>2]|0;do if((b|0)==(a|0)){b=f[a+16+4>>2]|0;if(!b){b=f[a+16>>2]|0;if(!b){b=0;break}else c=a+16|0}else c=a+16+4|0;while(1){e=b+20|0;d=f[e>>2]|0;if(!d){e=b+16|0;d=f[e>>2]|0;if(!d)break;else{b=d;c=e}}else{b=d;c=e}}f[c>>2]=0}else{w=f[a+8>>2]|0;f[w+12>>2]=b;f[b+8>>2]=w}while(0);if(!g)break;c=f[a+28>>2]|0;do if((f[35816+(c<<2)>>2]|0)!=(a|0)){f[((f[g+16>>2]|0)==(a|0)?g+16|0:g+20|0)>>2]=b;if(!b)break h}else{f[35816+(c<<2)>>2]=b;if(b|0)break;f[8879]=f[8879]&~(1<<c);break h}while(0);f[b+24>>2]=g;c=f[a+16>>2]|0;if(c|0){f[b+16>>2]=c;f[c+24>>2]=b}c=f[a+16+4>>2]|0;if(!c)break;f[b+20>>2]=c;f[c+24>>2]=b}while(0);a=a+(h&-8)|0;e=(h&-8)+i|0}else e=i;c=a+4|0;f[c>>2]=f[c>>2]&-2;f[k+4>>2]=e|1;f[k+e>>2]=e;c=e>>>3;if(e>>>0<256){a=f[8878]|0;if(!(a&1<<c)){f[8878]=a|1<<c;a=35552+(c<<1<<2)|0;b=35552+(c<<1<<2)+8|0}else{a=f[35552+(c<<1<<2)+8>>2]|0;b=35552+(c<<1<<2)+8|0}f[b>>2]=k;f[a+12>>2]=k;f[k+8>>2]=a;f[k+12>>2]=35552+(c<<1<<2);break}a=e>>>8;do if(!a)d=0;else{if(e>>>0>16777215){d=31;break}d=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);d=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(d+245760|0)>>>16&2)+(d<<((d+245760|0)>>>16&2)>>>15)|0;d=e>>>(d+7|0)&1|d<<1}while(0);a=35816+(d<<2)|0;f[k+28>>2]=d;f[k+16+4>>2]=0;f[k+16>>2]=0;b=f[8879]|0;c=1<<d;if(!(b&c)){f[8879]=b|c;f[a>>2]=k;f[k+24>>2]=a;f[k+12>>2]=k;f[k+8>>2]=k;break}a=f[a>>2]|0;i:do if((f[a+4>>2]&-8|0)!=(e|0)){d=e<<((d|0)==31?0:25-(d>>>1)|0);while(1){c=a+16+(d>>>31<<2)|0;b=f[c>>2]|0;if(!b)break;if((f[b+4>>2]&-8|0)==(e|0)){a=b;break i}else{d=d<<1;a=b}}f[c>>2]=k;f[k+24>>2]=a;f[k+12>>2]=k;f[k+8>>2]=k;break g}while(0);v=a+8|0;w=f[v>>2]|0;f[w+12>>2]=k;f[v>>2]=k;f[k+8>>2]=w;f[k+12>>2]=a;f[k+24>>2]=0}while(0);w=l+8|0;t=x;return w|0}a=35960;while(1){b=f[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(f[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=f[a+8>>2]|0}e=w+-47+((w+-47+8&7|0)==0?0:0-(w+-47+8)&7)|0;e=e>>>0<(j+16|0)>>>0?j:e;a=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;f[8884]=v;f[8881]=a-u;f[v+4>>2]=a-u|1;f[g+a+4>>2]=40;f[8885]=f[9e3];f[e+4>>2]=27;f[e+8>>2]=f[8990];f[e+8+4>>2]=f[8991];f[e+8+8>>2]=f[8992];f[e+8+12>>2]=f[8993];f[8990]=g;f[8991]=h;f[8993]=0;f[8992]=e+8;a=e+24|0;do{v=a;a=a+4|0;f[a>>2]=7}while((v+8|0)>>>0<w>>>0);if((e|0)!=(j|0)){f[e+4>>2]=f[e+4>>2]&-2;f[j+4>>2]=e-j|1;f[e>>2]=e-j;if((e-j|0)>>>0<256){c=35552+((e-j|0)>>>3<<1<<2)|0;a=f[8878]|0;if(!(a&1<<((e-j|0)>>>3))){f[8878]=a|1<<((e-j|0)>>>3);a=c;b=c+8|0}else{a=f[c+8>>2]|0;b=c+8|0}f[b>>2]=j;f[a+12>>2]=j;f[j+8>>2]=a;f[j+12>>2]=c;break}if((e-j|0)>>>8)if((e-j|0)>>>0>16777215)d=31;else{d=(e-j|0)>>>8<<((((e-j|0)>>>8)+1048320|0)>>>16&8);d=14-((d+520192|0)>>>16&4|(((e-j|0)>>>8)+1048320|0)>>>16&8|((d<<((d+520192|0)>>>16&4))+245760|0)>>>16&2)+(d<<((d+520192|0)>>>16&4)<<(((d<<((d+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;d=(e-j|0)>>>(d+7|0)&1|d<<1}else d=0;a=35816+(d<<2)|0;f[j+28>>2]=d;f[j+20>>2]=0;f[j+16>>2]=0;b=f[8879]|0;c=1<<d;if(!(b&c)){f[8879]=b|c;f[a>>2]=j;f[j+24>>2]=a;f[j+12>>2]=j;f[j+8>>2]=j;break}a=f[a>>2]|0;j:do if((f[a+4>>2]&-8|0)!=(e-j|0)){d=e-j<<((d|0)==31?0:25-(d>>>1)|0);while(1){c=a+16+(d>>>31<<2)|0;b=f[c>>2]|0;if(!b)break;if((f[b+4>>2]&-8|0)==(e-j|0)){a=b;break j}else{d=d<<1;a=b}}f[c>>2]=j;f[j+24>>2]=a;f[j+12>>2]=j;f[j+8>>2]=j;break f}while(0);v=a+8|0;w=f[v>>2]|0;f[w+12>>2]=j;f[v>>2]=j;f[j+8>>2]=w;f[j+12>>2]=a;f[j+24>>2]=0}}else{w=f[8882]|0;if((w|0)==0|g>>>0<w>>>0)f[8882]=g;f[8990]=g;f[8991]=h;f[8993]=0;f[8887]=f[8996];f[8886]=-1;f[8891]=35552;f[8890]=35552;f[8893]=35560;f[8892]=35560;f[8895]=35568;f[8894]=35568;f[8897]=35576;f[8896]=35576;f[8899]=35584;f[8898]=35584;f[8901]=35592;f[8900]=35592;f[8903]=35600;f[8902]=35600;f[8905]=35608;f[8904]=35608;f[8907]=35616;f[8906]=35616;f[8909]=35624;f[8908]=35624;f[8911]=35632;f[8910]=35632;f[8913]=35640;f[8912]=35640;f[8915]=35648;f[8914]=35648;f[8917]=35656;f[8916]=35656;f[8919]=35664;f[8918]=35664;f[8921]=35672;f[8920]=35672;f[8923]=35680;f[8922]=35680;f[8925]=35688;f[8924]=35688;f[8927]=35696;f[8926]=35696;f[8929]=35704;f[8928]=35704;f[8931]=35712;f[8930]=35712;f[8933]=35720;f[8932]=35720;f[8935]=35728;f[8934]=35728;f[8937]=35736;f[8936]=35736;f[8939]=35744;f[8938]=35744;f[8941]=35752;f[8940]=35752;f[8943]=35760;f[8942]=35760;f[8945]=35768;f[8944]=35768;f[8947]=35776;f[8946]=35776;f[8949]=35784;f[8948]=35784;f[8951]=35792;f[8950]=35792;f[8953]=35800;f[8952]=35800;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;f[8884]=v;f[8881]=w-u;f[v+4>>2]=w-u|1;f[g+w+4>>2]=40;f[8885]=f[9e3]}while(0);a=f[8881]|0;if(a>>>0>n>>>0){u=a-n|0;f[8881]=u;w=f[8884]|0;v=w+n|0;f[8884]=v;f[v+4>>2]=u|1;f[w+4>>2]=n|3;w=w+8|0;t=x;return w|0}}f[9002]=12;w=0;t=x;return w|0}function oa(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;P=Cf(b[a>>0]|0,b[a+1>>0]|0,b[a+2>>0]|0)|0;S=we(a+2|0)|0;S=$f(S|0,G|0,5)|0;F=Cf(b[a+5>>0]|0,b[a+6>>0]|0,b[a+7>>0]|0)|0;F=$f(F|0,G|0,2)|0;m=we(a+7|0)|0;m=$f(m|0,G|0,7)|0;Q=we(a+10|0)|0;Q=$f(Q|0,G|0,4)|0;W=Cf(b[a+13>>0]|0,b[a+14>>0]|0,b[a+15>>0]|0)|0;W=$f(W|0,G|0,1)|0;v=we(a+15|0)|0;v=$f(v|0,G|0,6)|0;ha=Cf(b[a+18>>0]|0,b[a+19>>0]|0,b[a+20>>0]|0)|0;ha=$f(ha|0,G|0,3)|0;ma=Cf(b[a+21>>0]|0,b[a+22>>0]|0,b[a+23>>0]|0)|0;ea=we(a+23|0)|0;ea=$f(ea|0,G|0,5)|0;la=Cf(b[a+26>>0]|0,b[a+27>>0]|0,b[a+28>>0]|0)|0;la=$f(la|0,G|0,2)|0;$=we(a+28|0)|0;$=$f($|0,G|0,7)|0;qa=we(a+31|0)|0;qa=$f(qa|0,G|0,4)|0;z=Cf(b[a+34>>0]|0,b[a+35>>0]|0,b[a+36>>0]|0)|0;z=$f(z|0,G|0,1)|0;N=we(a+36|0)|0;N=$f(N|0,G|0,6)|0;r=Cf(b[a+39>>0]|0,b[a+40>>0]|0,b[a+41>>0]|0)|0;r=$f(r|0,G|0,3)|0;e=Cf(b[a+42>>0]|0,b[a+43>>0]|0,b[a+44>>0]|0)|0;L=we(a+44|0)|0;L=$f(L|0,G|0,5)|0;ba=Cf(b[a+47>>0]|0,b[a+48>>0]|0,b[a+49>>0]|0)|0;ba=$f(ba|0,G|0,2)|0;ra=we(a+49|0)|0;ra=$f(ra|0,G|0,7)|0;k=we(a+52|0)|0;k=$f(k|0,G|0,4)|0;x=Cf(b[a+55>>0]|0,b[a+56>>0]|0,b[a+57>>0]|0)|0;x=$f(x|0,G|0,1)|0;C=we(a+57|0)|0;C=$f(C|0,G|0,6)|0;R=we(a+60|0)|0;R=$f(R|0,G|0,3)|0;f=G;i=Af(R|0,f|0,666643,0)|0;q=G;ja=Af(R|0,f|0,470296,0)|0;s=G;A=Af(R|0,f|0,654183,0)|0;g=G;w=Af(R|0,f|0,-997805,-1)|0;j=G;c=Af(R|0,f|0,136657,0)|0;r=Lg(c|0,G|0,r&2097151|0,0)|0;c=G;f=Af(R|0,f|0,-683901,-1)|0;e=Lg(f|0,G|0,e&2097151|0,0)|0;f=G;R=Af(C&2097151|0,0,666643,0)|0;M=G;u=Af(C&2097151|0,0,470296,0)|0;Z=G;D=Af(C&2097151|0,0,654183,0)|0;d=G;U=Af(C&2097151|0,0,-997805,-1)|0;T=G;O=Af(C&2097151|0,0,136657,0)|0;p=G;C=Af(C&2097151|0,0,-683901,-1)|0;C=Lg(r|0,c|0,C|0,G|0)|0;c=G;r=Af(x&2097151|0,0,666643,0)|0;V=G;y=Af(x&2097151|0,0,470296,0)|0;aa=G;K=Af(x&2097151|0,0,654183,0)|0;h=G;na=Af(x&2097151|0,0,-997805,-1)|0;ia=G;Y=Af(x&2097151|0,0,136657,0)|0;E=G;x=Af(x&2097151|0,0,-683901,-1)|0;N=Lg(x|0,G|0,N&2097151|0,0)|0;j=Lg(N|0,G|0,w|0,j|0)|0;p=Lg(j|0,G|0,O|0,p|0)|0;O=G;j=Af(k&2097151|0,0,666643,0)|0;w=G;N=Af(k&2097151|0,0,470296,0)|0;x=G;n=Af(k&2097151|0,0,654183,0)|0;X=G;H=Af(k&2097151|0,0,-997805,-1)|0;I=G;pa=Af(k&2097151|0,0,136657,0)|0;oa=G;k=Af(k&2097151|0,0,-683901,-1)|0;l=G;o=Af(ra&2097151|0,0,666643,0)|0;B=G;fa=Af(ra&2097151|0,0,470296,0)|0;ga=G;da=Af(ra&2097151|0,0,654183,0)|0;ca=G;ka=Af(ra&2097151|0,0,-997805,-1)|0;J=G;_=Af(ra&2097151|0,0,136657,0)|0;t=G;ra=Af(ra&2097151|0,0,-683901,-1)|0;qa=Lg(ra|0,G|0,qa&2097151|0,0)|0;oa=Lg(qa|0,G|0,pa|0,oa|0)|0;ia=Lg(oa|0,G|0,na|0,ia|0)|0;s=Lg(ia|0,G|0,ja|0,s|0)|0;d=Lg(s|0,G|0,D|0,d|0)|0;D=G;s=Af(ba&2097151|0,0,666643,0)|0;v=Lg(s|0,G|0,v&2097151|0,0)|0;s=G;ja=Af(ba&2097151|0,0,470296,0)|0;ia=G;na=Af(ba&2097151|0,0,654183,0)|0;ma=Lg(na|0,G|0,ma&2097151|0,0)|0;ga=Lg(ma|0,G|0,fa|0,ga|0)|0;w=Lg(ga|0,G|0,j|0,w|0)|0;j=G;ga=Af(ba&2097151|0,0,-997805,-1)|0;fa=G;ma=Af(ba&2097151|0,0,136657,0)|0;la=Lg(ma|0,G|0,la&2097151|0,0)|0;J=Lg(la|0,G|0,ka|0,J|0)|0;X=Lg(J|0,G|0,n|0,X|0)|0;aa=Lg(X|0,G|0,y|0,aa|0)|0;M=Lg(aa|0,G|0,R|0,M|0)|0;R=G;ba=Af(ba&2097151|0,0,-683901,-1)|0;aa=G;y=Lg(v|0,s|0,1048576,0)|0;X=G;n=$f(y|0,X|0,21)|0;J=G;ha=Lg(ja|0,ia|0,ha&2097151|0,0)|0;B=Lg(ha|0,G|0,o|0,B|0)|0;J=Lg(B|0,G|0,n|0,J|0)|0;n=G;X=Ig(v|0,s|0,y&-2097152|0,X&2047|0)|0;y=G;s=Lg(w|0,j|0,1048576,0)|0;v=G;B=$f(s|0,v|0,21)|0;o=G;ea=Lg(ga|0,fa|0,ea&2097151|0,0)|0;ca=Lg(ea|0,G|0,da|0,ca|0)|0;x=Lg(ca|0,G|0,N|0,x|0)|0;V=Lg(x|0,G|0,r|0,V|0)|0;o=Lg(V|0,G|0,B|0,o|0)|0;B=G;V=Lg(M|0,R|0,1048576,0)|0;r=G;x=Nf(V|0,r|0,21)|0;N=G;$=Lg(ba|0,aa|0,$&2097151|0,0)|0;t=Lg($|0,G|0,_|0,t|0)|0;I=Lg(t|0,G|0,H|0,I|0)|0;h=Lg(I|0,G|0,K|0,h|0)|0;q=Lg(h|0,G|0,i|0,q|0)|0;Z=Lg(q|0,G|0,u|0,Z|0)|0;N=Lg(Z|0,G|0,x|0,N|0)|0;x=G;Z=Lg(d|0,D|0,1048576,0)|0;u=G;q=Nf(Z|0,u|0,21)|0;i=G;z=Lg(k|0,l|0,z&2097151|0,0)|0;E=Lg(z|0,G|0,Y|0,E|0)|0;g=Lg(E|0,G|0,A|0,g|0)|0;T=Lg(g|0,G|0,U|0,T|0)|0;i=Lg(T|0,G|0,q|0,i|0)|0;q=G;u=Ig(d|0,D|0,Z&-2097152|0,u|0)|0;Z=G;D=Lg(p|0,O|0,1048576,0)|0;d=G;T=Nf(D|0,d|0,21)|0;T=Lg(C|0,c|0,T|0,G|0)|0;c=G;d=Ig(p|0,O|0,D&-2097152|0,d|0)|0;D=G;O=Lg(e|0,f|0,1048576,0)|0;p=G;C=Nf(O|0,p|0,21)|0;L=Lg(C|0,G|0,L&2097151|0,0)|0;C=G;p=Ig(e|0,f|0,O&-2097152|0,p|0)|0;O=G;f=Lg(J|0,n|0,1048576,0)|0;e=G;U=$f(f|0,e|0,21)|0;g=G;e=Ig(J|0,n|0,f&-2097152|0,e|0)|0;f=G;n=Lg(o|0,B|0,1048576,0)|0;J=G;A=Nf(n|0,J|0,21)|0;E=G;Y=Lg(N|0,x|0,1048576,0)|0;z=G;l=Nf(Y|0,z|0,21)|0;Z=Lg(l|0,G|0,u|0,Z|0)|0;u=G;z=Ig(N|0,x|0,Y&-2097152|0,z|0)|0;Y=G;x=Lg(i|0,q|0,1048576,0)|0;N=G;l=Nf(x|0,N|0,21)|0;D=Lg(l|0,G|0,d|0,D|0)|0;d=G;N=Ig(i|0,q|0,x&-2097152|0,N|0)|0;x=G;q=Lg(T|0,c|0,1048576,0)|0;i=G;l=Nf(q|0,i|0,21)|0;O=Lg(l|0,G|0,p|0,O|0)|0;p=G;i=Ig(T|0,c|0,q&-2097152|0,i|0)|0;q=G;c=Af(L|0,C|0,666643,0)|0;W=Lg(c|0,G|0,W&2097151|0,0)|0;c=G;T=Af(L|0,C|0,470296,0)|0;T=Lg(X|0,y|0,T|0,G|0)|0;y=G;X=Af(L|0,C|0,654183,0)|0;X=Lg(e|0,f|0,X|0,G|0)|0;f=G;e=Af(L|0,C|0,-997805,-1)|0;l=G;k=Af(L|0,C|0,136657,0)|0;h=G;C=Af(L|0,C|0,-683901,-1)|0;R=Lg(C|0,G|0,M|0,R|0)|0;E=Lg(R|0,G|0,A|0,E|0)|0;r=Ig(E|0,G|0,V&-2097152|0,r|0)|0;V=G;E=Af(O|0,p|0,666643,0)|0;Q=Lg(E|0,G|0,Q&2097151|0,0)|0;E=G;A=Af(O|0,p|0,470296,0)|0;A=Lg(W|0,c|0,A|0,G|0)|0;c=G;W=Af(O|0,p|0,654183,0)|0;W=Lg(T|0,y|0,W|0,G|0)|0;y=G;T=Af(O|0,p|0,-997805,-1)|0;T=Lg(X|0,f|0,T|0,G|0)|0;f=G;X=Af(O|0,p|0,136657,0)|0;R=G;p=Af(O|0,p|0,-683901,-1)|0;O=G;M=Af(i|0,q|0,666643,0)|0;m=Lg(M|0,G|0,m&2097151|0,0)|0;M=G;C=Af(i|0,q|0,470296,0)|0;C=Lg(Q|0,E|0,C|0,G|0)|0;E=G;Q=Af(i|0,q|0,654183,0)|0;Q=Lg(A|0,c|0,Q|0,G|0)|0;c=G;A=Af(i|0,q|0,-997805,-1)|0;A=Lg(W|0,y|0,A|0,G|0)|0;y=G;W=Af(i|0,q|0,136657,0)|0;W=Lg(T|0,f|0,W|0,G|0)|0;f=G;q=Af(i|0,q|0,-683901,-1)|0;i=G;j=Lg(U|0,g|0,w|0,j|0)|0;v=Ig(j|0,G|0,s&-2097152|0,v|0)|0;l=Lg(v|0,G|0,e|0,l|0)|0;R=Lg(l|0,G|0,X|0,R|0)|0;i=Lg(R|0,G|0,q|0,i|0)|0;q=G;R=Af(D|0,d|0,666643,0)|0;F=Lg(R|0,G|0,F&2097151|0,0)|0;R=G;X=Af(D|0,d|0,470296,0)|0;X=Lg(m|0,M|0,X|0,G|0)|0;M=G;m=Af(D|0,d|0,654183,0)|0;m=Lg(C|0,E|0,m|0,G|0)|0;E=G;C=Af(D|0,d|0,-997805,-1)|0;C=Lg(Q|0,c|0,C|0,G|0)|0;c=G;Q=Af(D|0,d|0,136657,0)|0;Q=Lg(A|0,y|0,Q|0,G|0)|0;y=G;d=Af(D|0,d|0,-683901,-1)|0;d=Lg(W|0,f|0,d|0,G|0)|0;f=G;W=Af(N|0,x|0,666643,0)|0;S=Lg(W|0,G|0,S&2097151|0,0)|0;W=G;D=Af(N|0,x|0,470296,0)|0;D=Lg(F|0,R|0,D|0,G|0)|0;R=G;F=Af(N|0,x|0,654183,0)|0;F=Lg(X|0,M|0,F|0,G|0)|0;M=G;X=Af(N|0,x|0,-997805,-1)|0;X=Lg(m|0,E|0,X|0,G|0)|0;E=G;m=Af(N|0,x|0,136657,0)|0;m=Lg(C|0,c|0,m|0,G|0)|0;c=G;x=Af(N|0,x|0,-683901,-1)|0;x=Lg(Q|0,y|0,x|0,G|0)|0;y=G;Q=Af(Z|0,u|0,666643,0)|0;P=Lg(Q|0,G|0,P&2097151|0,0)|0;Q=G;N=Af(Z|0,u|0,470296,0)|0;N=Lg(S|0,W|0,N|0,G|0)|0;W=G;S=Af(Z|0,u|0,654183,0)|0;S=Lg(D|0,R|0,S|0,G|0)|0;R=G;D=Af(Z|0,u|0,-997805,-1)|0;D=Lg(F|0,M|0,D|0,G|0)|0;M=G;F=Af(Z|0,u|0,136657,0)|0;F=Lg(X|0,E|0,F|0,G|0)|0;E=G;u=Af(Z|0,u|0,-683901,-1)|0;u=Lg(m|0,c|0,u|0,G|0)|0;c=G;m=Lg(P|0,Q|0,1048576,0)|0;Z=G;X=Nf(m|0,Z|0,21)|0;X=Lg(N|0,W|0,X|0,G|0)|0;W=G;Z=Ig(P|0,Q|0,m&-2097152|0,Z|0)|0;m=G;Q=Lg(S|0,R|0,1048576,0)|0;P=G;N=Nf(Q|0,P|0,21)|0;N=Lg(D|0,M|0,N|0,G|0)|0;M=G;D=Lg(F|0,E|0,1048576,0)|0;C=G;A=Nf(D|0,C|0,21)|0;A=Lg(u|0,c|0,A|0,G|0)|0;c=G;u=Lg(x|0,y|0,1048576,0)|0;l=G;e=Nf(u|0,l|0,21)|0;e=Lg(d|0,f|0,e|0,G|0)|0;f=G;l=Ig(x|0,y|0,u&-2097152|0,l|0)|0;u=G;y=Lg(i|0,q|0,1048576,0)|0;x=G;d=Nf(y|0,x|0,21)|0;v=G;B=Lg(k|0,h|0,o|0,B|0)|0;J=Ig(B|0,G|0,n&-2097152|0,J|0)|0;O=Lg(J|0,G|0,p|0,O|0)|0;v=Lg(O|0,G|0,d|0,v|0)|0;d=G;x=Ig(i|0,q|0,y&-2097152|0,x|0)|0;y=G;q=Lg(r|0,V|0,1048576,0)|0;i=G;O=Nf(q|0,i|0,21)|0;Y=Lg(O|0,G|0,z|0,Y|0)|0;z=G;i=Ig(r|0,V|0,q&-2097152|0,i|0)|0;q=G;V=Lg(X|0,W|0,1048576,0)|0;r=G;O=Nf(V|0,r|0,21)|0;p=G;J=Lg(N|0,M|0,1048576,0)|0;n=G;B=Nf(J|0,n|0,21)|0;o=G;h=Lg(A|0,c|0,1048576,0)|0;k=G;s=Nf(h|0,k|0,21)|0;s=Lg(l|0,u|0,s|0,G|0)|0;u=G;l=Lg(e|0,f|0,1048576,0)|0;j=G;w=Nf(l|0,j|0,21)|0;w=Lg(x|0,y|0,w|0,G|0)|0;y=G;j=Ig(e|0,f|0,l&-2097152|0,j|0)|0;l=G;f=Lg(v|0,d|0,1048576,0)|0;e=G;x=Nf(f|0,e|0,21)|0;x=Lg(i|0,q|0,x|0,G|0)|0;q=G;e=Ig(v|0,d|0,f&-2097152|0,e|0)|0;f=G;d=Lg(Y|0,z|0,1048576,0)|0;v=G;i=Nf(d|0,v|0,21)|0;g=G;v=Ig(Y|0,z|0,d&-2097152|0,v|0)|0;d=G;z=Af(i|0,g|0,666643,0)|0;z=Lg(Z|0,m|0,z|0,G|0)|0;m=G;Z=Af(i|0,g|0,470296,0)|0;Y=G;U=Af(i|0,g|0,654183,0)|0;T=G;L=Af(i|0,g|0,-997805,-1)|0;K=G;I=Af(i|0,g|0,136657,0)|0;H=G;g=Af(i|0,g|0,-683901,-1)|0;i=G;m=Nf(z|0,m|0,21)|0;t=G;W=Lg(Z|0,Y|0,X|0,W|0)|0;r=Ig(W|0,G|0,V&-2097152|0,r|0)|0;t=Lg(r|0,G|0,m|0,t|0)|0;m=Nf(t|0,G|0,21)|0;r=G;R=Lg(U|0,T|0,S|0,R|0)|0;P=Ig(R|0,G|0,Q&-2097152|0,P|0)|0;p=Lg(P|0,G|0,O|0,p|0)|0;r=Lg(p|0,G|0,m|0,r|0)|0;m=Nf(r|0,G|0,21)|0;p=G;K=Lg(N|0,M|0,L|0,K|0)|0;n=Ig(K|0,G|0,J&-2097152|0,n|0)|0;p=Lg(n|0,G|0,m|0,p|0)|0;m=Nf(p|0,G|0,21)|0;n=G;E=Lg(I|0,H|0,F|0,E|0)|0;C=Ig(E|0,G|0,D&-2097152|0,C|0)|0;o=Lg(C|0,G|0,B|0,o|0)|0;n=Lg(o|0,G|0,m|0,n|0)|0;m=Nf(n|0,G|0,21)|0;o=G;i=Lg(A|0,c|0,g|0,i|0)|0;k=Ig(i|0,G|0,h&-2097152|0,k|0)|0;o=Lg(k|0,G|0,m|0,o|0)|0;m=Nf(o|0,G|0,21)|0;m=Lg(s|0,u|0,m|0,G|0)|0;u=Nf(m|0,G|0,21)|0;l=Lg(u|0,G|0,j|0,l|0)|0;j=Nf(l|0,G|0,21)|0;j=Lg(w|0,y|0,j|0,G|0)|0;y=Nf(j|0,G|0,21)|0;f=Lg(y|0,G|0,e|0,f|0)|0;e=Nf(f|0,G|0,21)|0;e=Lg(x|0,q|0,e|0,G|0)|0;q=Nf(e|0,G|0,21)|0;d=Lg(q|0,G|0,v|0,d|0)|0;v=Nf(d|0,G|0,21)|0;q=G;x=Af(v|0,q|0,666643,0)|0;z=Lg(x|0,G|0,z&2097151|0,0)|0;x=G;y=Af(v|0,q|0,470296,0)|0;t=Lg(y|0,G|0,t&2097151|0,0)|0;y=G;w=Af(v|0,q|0,654183,0)|0;r=Lg(w|0,G|0,r&2097151|0,0)|0;w=G;u=Af(v|0,q|0,-997805,-1)|0;p=Lg(u|0,G|0,p&2097151|0,0)|0;u=G;s=Af(v|0,q|0,136657,0)|0;n=Lg(s|0,G|0,n&2097151|0,0)|0;s=G;q=Af(v|0,q|0,-683901,-1)|0;o=Lg(q|0,G|0,o&2097151|0,0)|0;q=G;v=Nf(z|0,x|0,21)|0;v=Lg(t|0,y|0,v|0,G|0)|0;y=G;t=Nf(v|0,y|0,21)|0;t=Lg(r|0,w|0,t|0,G|0)|0;w=G;r=Nf(t|0,w|0,21)|0;r=Lg(p|0,u|0,r|0,G|0)|0;u=G;p=Nf(r|0,u|0,21)|0;p=Lg(n|0,s|0,p|0,G|0)|0;s=G;n=Nf(p|0,s|0,21)|0;n=Lg(o|0,q|0,n|0,G|0)|0;q=G;o=Nf(n|0,q|0,21)|0;m=Lg(o|0,G|0,m&2097151|0,0)|0;o=G;k=Nf(m|0,o|0,21)|0;l=Lg(k|0,G|0,l&2097151|0,0)|0;k=G;h=Nf(l|0,k|0,21)|0;j=Lg(h|0,G|0,j&2097151|0,0)|0;h=G;i=Nf(j|0,h|0,21)|0;f=Lg(i|0,G|0,f&2097151|0,0)|0;i=G;g=Nf(f|0,i|0,21)|0;e=Lg(g|0,G|0,e&2097151|0,0)|0;g=G;c=Nf(e|0,g|0,21)|0;d=Lg(c|0,G|0,d&2097151|0,0)|0;c=G;b[a>>0]=z;A=$f(z|0,x|0,8)|0;b[a+1>>0]=A;x=$f(z|0,x|0,16)|0;z=Wf(v&2097151|0,0,5)|0;b[a+2>>0]=z|x&31;x=$f(v|0,y|0,3)|0;b[a+3>>0]=x;y=$f(v|0,y|0,11)|0;b[a+4>>0]=y;v=$f(v&2097151|0,0,19)|0;y=G;x=Wf(t&2097151|0,0,2)|0;b[a+5>>0]=x|v;w=$f(t|0,w|0,6)|0;b[a+6>>0]=w;t=$f(t&2097151|0,0,14)|0;w=G;v=Wf(r&2097151|0,0,7)|0;b[a+7>>0]=v|t;t=$f(r|0,u|0,1)|0;b[a+8>>0]=t;u=$f(r|0,u|0,9)|0;b[a+9>>0]=u;r=$f(r&2097151|0,0,17)|0;u=G;t=Wf(p&2097151|0,0,4)|0;b[a+10>>0]=t|r;r=$f(p|0,s|0,4)|0;b[a+11>>0]=r;s=$f(p|0,s|0,12)|0;b[a+12>>0]=s;p=$f(p&2097151|0,0,20)|0;s=G;r=Wf(n&2097151|0,0,1)|0;b[a+13>>0]=r|p;q=$f(n|0,q|0,7)|0;b[a+14>>0]=q;n=$f(n&2097151|0,0,15)|0;q=G;p=Wf(m&2097151|0,0,6)|0;b[a+15>>0]=p|n;n=$f(m|0,o|0,2)|0;b[a+16>>0]=n;o=$f(m|0,o|0,10)|0;b[a+17>>0]=o;m=$f(m&2097151|0,0,18)|0;o=G;n=Wf(l|0,k|0,3)|0;b[a+18>>0]=n|m;m=$f(l|0,k|0,5)|0;b[a+19>>0]=m;k=$f(l|0,k|0,13)|0;b[a+20>>0]=k;b[a+21>>0]=j;k=$f(j|0,h|0,8)|0;b[a+22>>0]=k;h=$f(j|0,h|0,16)|0;j=Wf(f&2097151|0,0,5)|0;b[a+23>>0]=j|h&31;h=$f(f|0,i|0,3)|0;b[a+24>>0]=h;i=$f(f|0,i|0,11)|0;b[a+25>>0]=i;f=$f(f&2097151|0,0,19)|0;i=G;h=Wf(e&2097151|0,0,2)|0;b[a+26>>0]=h|f;g=$f(e|0,g|0,6)|0;b[a+27>>0]=g;e=$f(e&2097151|0,0,14)|0;g=G;f=Wf(d|0,c|0,7)|0;b[a+28>>0]=f|e;e=$f(d|0,c|0,1)|0;b[a+29>>0]=e;e=$f(d|0,c|0,9)|0;b[a+30>>0]=e;c=Nf(d|0,c|0,17)|0;b[a+31>>0]=c;return}function pa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0;s=f[b>>2]|0;l=f[b+4>>2]|0;j=f[b+8>>2]|0;q=f[b+12>>2]|0;za=f[b+16>>2]|0;p=f[b+20>>2]|0;Ab=f[b+24>>2]|0;d=f[b+28>>2]|0;ga=f[b+32>>2]|0;O=f[b+36>>2]|0;J=f[c>>2]|0;Oc=f[c+4>>2]|0;ec=f[c+8>>2]|0;tb=f[c+12>>2]|0;Ja=f[c+16>>2]|0;jc=f[c+20>>2]|0;Fb=f[c+24>>2]|0;Ua=f[c+28>>2]|0;ha=f[c+32>>2]|0;Pc=f[c+36>>2]|0;Mc=Af(J|0,((J|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;Lc=G;wc=Af(Oc|0,((Oc|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;vc=G;vb=Af(ec|0,((ec|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;ub=G;La=Af(tb|0,((tb|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;Ka=G;mc=Af(Ja|0,((Ja|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;lc=G;Ib=Af(jc|0,((jc|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;Hb=G;Xa=Af(Fb|0,((Fb|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;Wa=G;ka=Af(Ua|0,((Ua|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;ja=G;Q=Af(ha|0,((ha|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;P=G;s=Af(Pc|0,((Pc|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;r=G;fc=Af(J|0,((J|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;gc=G;zb=Af(Oc|0,((Oc|0)<0)<<31>>31|0,l<<1|0,((l<<1|0)<0)<<31>>31|0)|0;yb=G;Na=Af(ec|0,((ec|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;Ma=G;oc=Af(tb|0,((tb|0)<0)<<31>>31|0,l<<1|0,((l<<1|0)<0)<<31>>31|0)|0;nc=G;Kb=Af(Ja|0,((Ja|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;Jb=G;Za=Af(jc|0,((jc|0)<0)<<31>>31|0,l<<1|0,((l<<1|0)<0)<<31>>31|0)|0;Ya=G;ma=Af(Fb|0,((Fb|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;la=G;S=Af(Ua|0,((Ua|0)<0)<<31>>31|0,l<<1|0,((l<<1|0)<0)<<31>>31|0)|0;R=G;u=Af(ha|0,((ha|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;t=G;N=((Pc*19|0)<0)<<31>>31;l=Af(Pc*19|0,N|0,l<<1|0,((l<<1|0)<0)<<31>>31|0)|0;b=G;xb=Af(J|0,((J|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;wb=G;Ra=Af(Oc|0,((Oc|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;Qa=G;qc=Af(ec|0,((ec|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;pc=G;Mb=Af(tb|0,((tb|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;Lb=G;$a=Af(Ja|0,((Ja|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;_a=G;oa=Af(jc|0,((jc|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;na=G;U=Af(Fb|0,((Fb|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;T=G;w=Af(Ua|0,((Ua|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;v=G;ia=((ha*19|0)<0)<<31>>31;yc=Af(ha*19|0,ia|0,j|0,((j|0)<0)<<31>>31|0)|0;xc=G;j=Af(Pc*19|0,N|0,j|0,((j|0)<0)<<31>>31|0)|0;k=G;Pa=Af(J|0,((J|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;Oa=G;uc=Af(Oc|0,((Oc|0)<0)<<31>>31|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;tc=G;Ob=Af(ec|0,((ec|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;Nb=G;bb=Af(tb|0,((tb|0)<0)<<31>>31|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;ab=G;qa=Af(Ja|0,((Ja|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;pa=G;W=Af(jc|0,((jc|0)<0)<<31>>31|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;V=G;y=Af(Fb|0,((Fb|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;x=G;Va=((Ua*19|0)<0)<<31>>31;Ac=Af(Ua*19|0,Va|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;zc=G;Ub=Af(ha*19|0,ia|0,q|0,((q|0)<0)<<31>>31|0)|0;Tb=G;q=Af(Pc*19|0,N|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;i=G;sc=Af(J|0,((J|0)<0)<<31>>31|0,za|0,((za|0)<0)<<31>>31|0)|0;rc=G;Sb=Af(Oc|0,((Oc|0)<0)<<31>>31|0,za|0,((za|0)<0)<<31>>31|0)|0;Rb=G;db=Af(ec|0,((ec|0)<0)<<31>>31|0,za|0,((za|0)<0)<<31>>31|0)|0;cb=G;sa=Af(tb|0,((tb|0)<0)<<31>>31|0,za|0,((za|0)<0)<<31>>31|0)|0;ra=G;Y=Af(Ja|0,((Ja|0)<0)<<31>>31|0,za|0,((za|0)<0)<<31>>31|0)|0;X=G;A=Af(jc|0,((jc|0)<0)<<31>>31|0,za|0,((za|0)<0)<<31>>31|0)|0;z=G;Gb=((Fb*19|0)<0)<<31>>31;Cc=Af(Fb*19|0,Gb|0,za|0,((za|0)<0)<<31>>31|0)|0;Bc=G;Wb=Af(Ua*19|0,Va|0,za|0,((za|0)<0)<<31>>31|0)|0;Vb=G;jb=Af(ha*19|0,ia|0,za|0,((za|0)<0)<<31>>31|0)|0;ib=G;za=Af(Pc*19|0,N|0,za|0,((za|0)<0)<<31>>31|0)|0;g=G;Qb=Af(J|0,((J|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;Pb=G;hb=Af(Oc|0,((Oc|0)<0)<<31>>31|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;gb=G;ua=Af(ec|0,((ec|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;ta=G;_=Af(tb|0,((tb|0)<0)<<31>>31|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;Z=G;C=Af(Ja|0,((Ja|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;B=G;kc=((jc*19|0)<0)<<31>>31;Ec=Af(jc*19|0,kc|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;Dc=G;Yb=Af(Fb*19|0,Gb|0,p|0,((p|0)<0)<<31>>31|0)|0;Xb=G;lb=Af(Ua*19|0,Va|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;kb=G;Ba=Af(ha*19|0,ia|0,p|0,((p|0)<0)<<31>>31|0)|0;Aa=G;p=Af(Pc*19|0,N|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;e=G;fb=Af(J|0,((J|0)<0)<<31>>31|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;eb=G;ya=Af(Oc|0,((Oc|0)<0)<<31>>31|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;xa=G;aa=Af(ec|0,((ec|0)<0)<<31>>31|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;$=G;E=Af(tb|0,((tb|0)<0)<<31>>31|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;D=G;Gc=Af(Ja*19|0,((Ja*19|0)<0)<<31>>31|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;Fc=G;_b=Af(jc*19|0,kc|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;Zb=G;nb=Af(Fb*19|0,Gb|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;mb=G;Da=Af(Ua*19|0,Va|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;Ca=G;m=Af(ha*19|0,ia|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;n=G;Ab=Af(Pc*19|0,N|0,Ab|0,((Ab|0)<0)<<31>>31|0)|0;h=G;wa=Af(J|0,((J|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;va=G;ea=Af(Oc|0,((Oc|0)<0)<<31>>31|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;da=G;H=Af(ec|0,((ec|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;F=G;Ic=Af(tb*19|0,((tb*19|0)<0)<<31>>31|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;Hc=G;ac=Af(Ja*19|0,((Ja*19|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;$b=G;pb=Af(jc*19|0,kc|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;ob=G;Fa=Af(Fb*19|0,Gb|0,d|0,((d|0)<0)<<31>>31|0)|0;Ea=G;M=Af(Ua*19|0,Va|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;o=G;Cb=Af(ha*19|0,ia|0,d|0,((d|0)<0)<<31>>31|0)|0;Bb=G;c=Af(Pc*19|0,N|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;d=G;ca=Af(J|0,((J|0)<0)<<31>>31|0,ga|0,((ga|0)<0)<<31>>31|0)|0;ba=G;L=Af(Oc|0,((Oc|0)<0)<<31>>31|0,ga|0,((ga|0)<0)<<31>>31|0)|0;K=G;Kc=Af(ec*19|0,((ec*19|0)<0)<<31>>31|0,ga|0,((ga|0)<0)<<31>>31|0)|0;Jc=G;cc=Af(tb*19|0,((tb*19|0)<0)<<31>>31|0,ga|0,((ga|0)<0)<<31>>31|0)|0;bc=G;rb=Af(Ja*19|0,((Ja*19|0)<0)<<31>>31|0,ga|0,((ga|0)<0)<<31>>31|0)|0;qb=G;Ha=Af(jc*19|0,kc|0,ga|0,((ga|0)<0)<<31>>31|0)|0;Ga=G;ic=Af(Fb*19|0,Gb|0,ga|0,((ga|0)<0)<<31>>31|0)|0;hc=G;Eb=Af(Ua*19|0,Va|0,ga|0,((ga|0)<0)<<31>>31|0)|0;Db=G;Ta=Af(ha*19|0,ia|0,ga|0,((ga|0)<0)<<31>>31|0)|0;Sa=G;ga=Af(Pc*19|0,N|0,ga|0,((ga|0)<0)<<31>>31|0)|0;fa=G;J=Af(J|0,((J|0)<0)<<31>>31|0,O|0,((O|0)<0)<<31>>31|0)|0;I=G;Oc=Af(Oc*19|0,((Oc*19|0)<0)<<31>>31|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;Nc=G;ec=Af(ec*19|0,((ec*19|0)<0)<<31>>31|0,O|0,((O|0)<0)<<31>>31|0)|0;dc=G;tb=Af(tb*19|0,((tb*19|0)<0)<<31>>31|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;sb=G;Ja=Af(Ja*19|0,((Ja*19|0)<0)<<31>>31|0,O|0,((O|0)<0)<<31>>31|0)|0;Ia=G;kc=Af(jc*19|0,kc|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;jc=G;Gb=Af(Fb*19|0,Gb|0,O|0,((O|0)<0)<<31>>31|0)|0;Fb=G;Va=Af(Ua*19|0,Va|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;Ua=G;ia=Af(ha*19|0,ia|0,O|0,((O|0)<0)<<31>>31|0)|0;ha=G;O=Af(Pc*19|0,N|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;N=G;Lc=Lg(Oc|0,Nc|0,Mc|0,Lc|0)|0;Jc=Lg(Lc|0,G|0,Kc|0,Jc|0)|0;Hc=Lg(Jc|0,G|0,Ic|0,Hc|0)|0;Fc=Lg(Hc|0,G|0,Gc|0,Fc|0)|0;Dc=Lg(Fc|0,G|0,Ec|0,Dc|0)|0;Bc=Lg(Dc|0,G|0,Cc|0,Bc|0)|0;zc=Lg(Bc|0,G|0,Ac|0,zc|0)|0;xc=Lg(zc|0,G|0,yc|0,xc|0)|0;b=Lg(xc|0,G|0,l|0,b|0)|0;l=G;gc=Lg(wc|0,vc|0,fc|0,gc|0)|0;fc=G;rc=Lg(uc|0,tc|0,sc|0,rc|0)|0;pc=Lg(rc|0,G|0,qc|0,pc|0)|0;nc=Lg(pc|0,G|0,oc|0,nc|0)|0;lc=Lg(nc|0,G|0,mc|0,lc|0)|0;jc=Lg(lc|0,G|0,kc|0,jc|0)|0;hc=Lg(jc|0,G|0,ic|0,hc|0)|0;o=Lg(hc|0,G|0,M|0,o|0)|0;n=Lg(o|0,G|0,m|0,n|0)|0;e=Lg(n|0,G|0,p|0,e|0)|0;p=G;n=Lg(b|0,l|0,33554432,0)|0;m=G;o=Nf(n|0,m|0,26)|0;M=G;dc=Lg(gc|0,fc|0,ec|0,dc|0)|0;bc=Lg(dc|0,G|0,cc|0,bc|0)|0;$b=Lg(bc|0,G|0,ac|0,$b|0)|0;Zb=Lg($b|0,G|0,_b|0,Zb|0)|0;Xb=Lg(Zb|0,G|0,Yb|0,Xb|0)|0;Vb=Lg(Xb|0,G|0,Wb|0,Vb|0)|0;Tb=Lg(Vb|0,G|0,Ub|0,Tb|0)|0;k=Lg(Tb|0,G|0,j|0,k|0)|0;M=Lg(k|0,G|0,o|0,M|0)|0;o=G;m=Ig(b|0,l|0,n&-67108864|0,m|0)|0;n=G;l=Lg(e|0,p|0,33554432,0)|0;b=G;k=Nf(l|0,b|0,26)|0;j=G;Pb=Lg(Sb|0,Rb|0,Qb|0,Pb|0)|0;Nb=Lg(Pb|0,G|0,Ob|0,Nb|0)|0;Lb=Lg(Nb|0,G|0,Mb|0,Lb|0)|0;Jb=Lg(Lb|0,G|0,Kb|0,Jb|0)|0;Hb=Lg(Jb|0,G|0,Ib|0,Hb|0)|0;Fb=Lg(Hb|0,G|0,Gb|0,Fb|0)|0;Db=Lg(Fb|0,G|0,Eb|0,Db|0)|0;Bb=Lg(Db|0,G|0,Cb|0,Bb|0)|0;h=Lg(Bb|0,G|0,Ab|0,h|0)|0;j=Lg(h|0,G|0,k|0,j|0)|0;k=G;b=Ig(e|0,p|0,l&-67108864|0,b|0)|0;l=G;p=Lg(M|0,o|0,16777216,0)|0;e=Nf(p|0,G|0,25)|0;h=G;wb=Lg(zb|0,yb|0,xb|0,wb|0)|0;ub=Lg(wb|0,G|0,vb|0,ub|0)|0;sb=Lg(ub|0,G|0,tb|0,sb|0)|0;qb=Lg(sb|0,G|0,rb|0,qb|0)|0;ob=Lg(qb|0,G|0,pb|0,ob|0)|0;mb=Lg(ob|0,G|0,nb|0,mb|0)|0;kb=Lg(mb|0,G|0,lb|0,kb|0)|0;ib=Lg(kb|0,G|0,jb|0,ib|0)|0;i=Lg(ib|0,G|0,q|0,i|0)|0;h=Lg(i|0,G|0,e|0,h|0)|0;e=G;p=Ig(M|0,o|0,p&-33554432|0,0)|0;o=G;M=Lg(j|0,k|0,16777216,0)|0;i=Nf(M|0,G|0,25)|0;q=G;eb=Lg(hb|0,gb|0,fb|0,eb|0)|0;cb=Lg(eb|0,G|0,db|0,cb|0)|0;ab=Lg(cb|0,G|0,bb|0,ab|0)|0;_a=Lg(ab|0,G|0,$a|0,_a|0)|0;Ya=Lg(_a|0,G|0,Za|0,Ya|0)|0;Wa=Lg(Ya|0,G|0,Xa|0,Wa|0)|0;Ua=Lg(Wa|0,G|0,Va|0,Ua|0)|0;Sa=Lg(Ua|0,G|0,Ta|0,Sa|0)|0;d=Lg(Sa|0,G|0,c|0,d|0)|0;q=Lg(d|0,G|0,i|0,q|0)|0;i=G;M=Ig(j|0,k|0,M&-33554432|0,0)|0;k=G;j=Lg(h|0,e|0,33554432,0)|0;d=Nf(j|0,G|0,26)|0;c=G;Oa=Lg(Ra|0,Qa|0,Pa|0,Oa|0)|0;Ma=Lg(Oa|0,G|0,Na|0,Ma|0)|0;Ka=Lg(Ma|0,G|0,La|0,Ka|0)|0;Ia=Lg(Ka|0,G|0,Ja|0,Ia|0)|0;Ga=Lg(Ia|0,G|0,Ha|0,Ga|0)|0;Ea=Lg(Ga|0,G|0,Fa|0,Ea|0)|0;Ca=Lg(Ea|0,G|0,Da|0,Ca|0)|0;Aa=Lg(Ca|0,G|0,Ba|0,Aa|0)|0;g=Lg(Aa|0,G|0,za|0,g|0)|0;c=Lg(g|0,G|0,d|0,c|0)|0;d=G;j=Ig(h|0,e|0,j&-67108864|0,0)|0;e=Lg(q|0,i|0,33554432,0)|0;h=Nf(e|0,G|0,26)|0;g=G;va=Lg(ya|0,xa|0,wa|0,va|0)|0;ta=Lg(va|0,G|0,ua|0,ta|0)|0;ra=Lg(ta|0,G|0,sa|0,ra|0)|0;pa=Lg(ra|0,G|0,qa|0,pa|0)|0;na=Lg(pa|0,G|0,oa|0,na|0)|0;la=Lg(na|0,G|0,ma|0,la|0)|0;ja=Lg(la|0,G|0,ka|0,ja|0)|0;ha=Lg(ja|0,G|0,ia|0,ha|0)|0;fa=Lg(ha|0,G|0,ga|0,fa|0)|0;g=Lg(fa|0,G|0,h|0,g|0)|0;h=G;e=Ig(q|0,i|0,e&-67108864|0,0)|0;i=Lg(c|0,d|0,16777216,0)|0;q=Nf(i|0,G|0,25)|0;l=Lg(q|0,G|0,b|0,l|0)|0;b=G;i=Ig(c|0,d|0,i&-33554432|0,0)|0;d=Lg(g|0,h|0,16777216,0)|0;c=Nf(d|0,G|0,25)|0;q=G;ba=Lg(ea|0,da|0,ca|0,ba|0)|0;$=Lg(ba|0,G|0,aa|0,$|0)|0;Z=Lg($|0,G|0,_|0,Z|0)|0;X=Lg(Z|0,G|0,Y|0,X|0)|0;V=Lg(X|0,G|0,W|0,V|0)|0;T=Lg(V|0,G|0,U|0,T|0)|0;R=Lg(T|0,G|0,S|0,R|0)|0;P=Lg(R|0,G|0,Q|0,P|0)|0;N=Lg(P|0,G|0,O|0,N|0)|0;q=Lg(N|0,G|0,c|0,q|0)|0;c=G;d=Ig(g|0,h|0,d&-33554432|0,0)|0;h=Lg(l|0,b|0,33554432,0)|0;g=$f(h|0,G|0,26)|0;g=Lg(M|0,k|0,g|0,G|0)|0;h=Ig(l|0,b|0,h&-67108864|0,0)|0;b=Lg(q|0,c|0,33554432,0)|0;l=Nf(b|0,G|0,26)|0;k=G;I=Lg(L|0,K|0,J|0,I|0)|0;F=Lg(I|0,G|0,H|0,F|0)|0;D=Lg(F|0,G|0,E|0,D|0)|0;B=Lg(D|0,G|0,C|0,B|0)|0;z=Lg(B|0,G|0,A|0,z|0)|0;x=Lg(z|0,G|0,y|0,x|0)|0;v=Lg(x|0,G|0,w|0,v|0)|0;t=Lg(v|0,G|0,u|0,t|0)|0;r=Lg(t|0,G|0,s|0,r|0)|0;k=Lg(r|0,G|0,l|0,k|0)|0;l=G;b=Ig(q|0,c|0,b&-67108864|0,0)|0;c=Lg(k|0,l|0,16777216,0)|0;q=Nf(c|0,G|0,25)|0;q=Af(q|0,G|0,19,0)|0;n=Lg(q|0,G|0,m|0,n|0)|0;m=G;c=Ig(k|0,l|0,c&-33554432|0,0)|0;l=Lg(n|0,m|0,33554432,0)|0;k=$f(l|0,G|0,26)|0;k=Lg(p|0,o|0,k|0,G|0)|0;l=Ig(n|0,m|0,l&-67108864|0,0)|0;f[a>>2]=l;f[a+4>>2]=k;f[a+8>>2]=j;f[a+12>>2]=i;f[a+16>>2]=h;f[a+20>>2]=g;f[a+24>>2]=e;f[a+28>>2]=d;f[a+32>>2]=b;f[a+36>>2]=c;return}function qa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;d=t;e=t=t+63&-64;t=t+2048|0;li(e+1024|0,b);Ae(e+1024|0,a);li(e,e+1024|0);Ae(e,c);a=0;do{b=a<<4;g=f[e+1024+((b|4)<<3)>>2]|0;i=f[e+1024+((b|4)<<3)+4>>2]|0;J=Ge(f[e+1024+(b<<3)>>2]|0,f[e+1024+(b<<3)+4>>2]|0,g,i)|0;N=G;D=xf(f[e+1024+((b|12)<<3)>>2]^J,f[e+1024+((b|12)<<3)+4>>2]^N,32)|0;y=G;u=Ge(f[e+1024+((b|8)<<3)>>2]|0,f[e+1024+((b|8)<<3)+4>>2]|0,D,y)|0;s=G;i=xf(u^g,s^i,24)|0;g=G;N=Ge(J,N,i,g)|0;J=G;y=xf(N^D,J^y,16)|0;D=G;f[e+1024+((b|12)<<3)>>2]=y;f[e+1024+((b|12)<<3)+4>>2]=D;s=Ge(u,s,y,D)|0;u=G;f[e+1024+((b|8)<<3)>>2]=s;f[e+1024+((b|8)<<3)+4>>2]=u;g=xf(s^i,u^g,63)|0;i=G;f[e+1024+((b|4)<<3)>>2]=g;f[e+1024+((b|4)<<3)+4>>2]=i;F=f[e+1024+((b|5)<<3)>>2]|0;I=f[e+1024+((b|5)<<3)+4>>2]|0;A=Ge(f[e+1024+((b|1)<<3)>>2]|0,f[e+1024+((b|1)<<3)+4>>2]|0,F,I)|0;E=G;v=xf(f[e+1024+((b|13)<<3)>>2]^A,f[e+1024+((b|13)<<3)+4>>2]^E,32)|0;p=G;l=Ge(f[e+1024+((b|9)<<3)>>2]|0,f[e+1024+((b|9)<<3)+4>>2]|0,v,p)|0;k=G;I=xf(l^F,k^I,24)|0;F=G;E=Ge(A,E,I,F)|0;A=G;p=xf(E^v,A^p,16)|0;v=G;k=Ge(l,k,p,v)|0;l=G;f[e+1024+((b|9)<<3)>>2]=k;f[e+1024+((b|9)<<3)+4>>2]=l;F=xf(k^I,l^F,63)|0;I=G;x=f[e+1024+((b|6)<<3)>>2]|0;z=f[e+1024+((b|6)<<3)+4>>2]|0;r=Ge(f[e+1024+((b|2)<<3)>>2]|0,f[e+1024+((b|2)<<3)+4>>2]|0,x,z)|0;w=G;m=xf(f[e+1024+((b|14)<<3)>>2]^r,f[e+1024+((b|14)<<3)+4>>2]^w,32)|0;h=G;L=Ge(f[e+1024+((b|10)<<3)>>2]|0,f[e+1024+((b|10)<<3)+4>>2]|0,m,h)|0;K=G;z=xf(L^x,K^z,24)|0;x=G;w=Ge(r,w,z,x)|0;r=G;h=xf(w^m,r^h,16)|0;m=G;K=Ge(L,K,h,m)|0;L=G;x=xf(K^z,L^x,63)|0;z=G;o=f[e+1024+((b|7)<<3)>>2]|0;q=f[e+1024+((b|7)<<3)+4>>2]|0;j=Ge(f[e+1024+((b|3)<<3)>>2]|0,f[e+1024+((b|3)<<3)+4>>2]|0,o,q)|0;n=G;M=xf(f[e+1024+((b|15)<<3)>>2]^j,f[e+1024+((b|15)<<3)+4>>2]^n,32)|0;H=G;C=Ge(f[e+1024+((b|11)<<3)>>2]|0,f[e+1024+((b|11)<<3)+4>>2]|0,M,H)|0;B=G;q=xf(C^o,B^q,24)|0;o=G;n=Ge(j,n,q,o)|0;j=G;H=xf(n^M,j^H,16)|0;M=G;B=Ge(C,B,H,M)|0;C=G;o=xf(B^q,C^o,63)|0;q=G;J=Ge(N,J,F,I)|0;N=G;M=xf(J^H,N^M,32)|0;H=G;L=Ge(K,L,M,H)|0;K=G;I=xf(L^F,K^I,24)|0;F=G;N=Ge(J,N,I,F)|0;J=G;f[e+1024+(b<<3)>>2]=N;f[e+1024+(b<<3)+4>>2]=J;H=xf(N^M,J^H,16)|0;J=G;f[e+1024+((b|15)<<3)>>2]=H;f[e+1024+((b|15)<<3)+4>>2]=J;J=Ge(L,K,H,J)|0;H=G;f[e+1024+((b|10)<<3)>>2]=J;f[e+1024+((b|10)<<3)+4>>2]=H;F=xf(J^I,H^F,63)|0;f[e+1024+((b|5)<<3)>>2]=F;f[e+1024+((b|5)<<3)+4>>2]=G;A=Ge(E,A,x,z)|0;E=G;D=xf(A^y,E^D,32)|0;y=G;C=Ge(B,C,D,y)|0;B=G;z=xf(C^x,B^z,24)|0;x=G;E=Ge(A,E,z,x)|0;A=G;f[e+1024+((b|1)<<3)>>2]=E;f[e+1024+((b|1)<<3)+4>>2]=A;y=xf(E^D,A^y,16)|0;A=G;f[e+1024+((b|12)<<3)>>2]=y;f[e+1024+((b|12)<<3)+4>>2]=A;A=Ge(C,B,y,A)|0;y=G;f[e+1024+((b|11)<<3)>>2]=A;f[e+1024+((b|11)<<3)+4>>2]=y;x=xf(A^z,y^x,63)|0;f[e+1024+((b|6)<<3)>>2]=x;f[e+1024+((b|6)<<3)+4>>2]=G;r=Ge(w,r,o,q)|0;w=G;v=xf(r^p,w^v,32)|0;p=G;u=Ge(s,u,v,p)|0;s=G;q=xf(u^o,s^q,24)|0;o=G;w=Ge(r,w,q,o)|0;r=G;f[e+1024+((b|2)<<3)>>2]=w;f[e+1024+((b|2)<<3)+4>>2]=r;p=xf(w^v,r^p,16)|0;r=G;f[e+1024+((b|13)<<3)>>2]=p;f[e+1024+((b|13)<<3)+4>>2]=r;r=Ge(u,s,p,r)|0;p=G;f[e+1024+((b|8)<<3)>>2]=r;f[e+1024+((b|8)<<3)+4>>2]=p;o=xf(r^q,p^o,63)|0;f[e+1024+((b|7)<<3)>>2]=o;f[e+1024+((b|7)<<3)+4>>2]=G;j=Ge(n,j,g,i)|0;n=G;m=xf(j^h,n^m,32)|0;h=G;l=Ge(k,l,m,h)|0;k=G;i=xf(l^g,k^i,24)|0;g=G;n=Ge(j,n,i,g)|0;j=G;f[e+1024+((b|3)<<3)>>2]=n;f[e+1024+((b|3)<<3)+4>>2]=j;h=xf(n^m,j^h,16)|0;j=G;f[e+1024+((b|14)<<3)>>2]=h;f[e+1024+((b|14)<<3)+4>>2]=j;j=Ge(l,k,h,j)|0;h=G;f[e+1024+((b|9)<<3)>>2]=j;f[e+1024+((b|9)<<3)+4>>2]=h;g=xf(j^i,h^g,63)|0;f[e+1024+((b|4)<<3)>>2]=g;f[e+1024+((b|4)<<3)+4>>2]=G;a=a+1|0}while((a|0)!=8);a=0;do{N=a<<1;K=e+1024+(N+32<<3)|0;M=f[K>>2]|0;K=f[K+4>>2]|0;j=Ge(f[e+1024+(N<<3)>>2]|0,f[e+1024+(N<<3)+4>>2]|0,M,K)|0;b=G;o=e+1024+(N+96<<3)|0;o=xf(f[o>>2]^j,f[o+4>>2]^b,32)|0;v=G;y=e+1024+(N+64<<3)|0;y=Ge(f[y>>2]|0,f[y+4>>2]|0,o,v)|0;z=G;K=xf(y^M,z^K,24)|0;M=G;b=Ge(j,b,K,M)|0;j=G;v=xf(b^o,j^v,16)|0;o=G;k=e+1024+(N+96<<3)|0;f[k>>2]=v;f[k+4>>2]=o;z=Ge(y,z,v,o)|0;y=G;k=e+1024+(N+64<<3)|0;f[k>>2]=z;f[k+4>>2]=y;M=xf(z^K,y^M,63)|0;K=G;k=e+1024+(N+32<<3)|0;f[k>>2]=M;f[k+4>>2]=K;k=e+1024+(N+33<<3)|0;l=f[k>>2]|0;k=f[k+4>>2]|0;r=Ge(f[e+1024+((N|1)<<3)>>2]|0,f[e+1024+((N|1)<<3)+4>>2]|0,l,k)|0;n=G;x=e+1024+(N+97<<3)|0;x=xf(f[x>>2]^r,f[x+4>>2]^n,32)|0;D=G;H=e+1024+(N+65<<3)|0;H=Ge(f[H>>2]|0,f[H+4>>2]|0,x,D)|0;I=G;k=xf(H^l,I^k,24)|0;l=G;n=Ge(r,n,k,l)|0;r=G;D=xf(n^x,r^D,16)|0;x=G;I=Ge(H,I,D,x)|0;H=G;A=e+1024+(N+65<<3)|0;f[A>>2]=I;f[A+4>>2]=H;l=xf(I^k,H^l,63)|0;k=G;A=e+1024+(N+16<<3)|0;s=e+1024+(N+48<<3)|0;u=f[s>>2]|0;s=f[s+4>>2]|0;A=Ge(f[A>>2]|0,f[A+4>>2]|0,u,s)|0;w=G;F=e+1024+(N+112<<3)|0;F=xf(f[F>>2]^A,f[F+4>>2]^w,32)|0;L=G;h=e+1024+(N+80<<3)|0;h=Ge(f[h>>2]|0,f[h+4>>2]|0,F,L)|0;i=G;s=xf(h^u,i^s,24)|0;u=G;w=Ge(A,w,s,u)|0;A=G;L=xf(w^F,A^L,16)|0;F=G;i=Ge(h,i,L,F)|0;h=G;u=xf(i^s,h^u,63)|0;s=G;J=e+1024+(N+17<<3)|0;B=e+1024+(N+49<<3)|0;C=f[B>>2]|0;B=f[B+4>>2]|0;J=Ge(f[J>>2]|0,f[J+4>>2]|0,C,B)|0;E=G;g=e+1024+(N+113<<3)|0;g=xf(f[g>>2]^J,f[g+4>>2]^E,32)|0;m=G;p=e+1024+(N+81<<3)|0;p=Ge(f[p>>2]|0,f[p+4>>2]|0,g,m)|0;q=G;B=xf(p^C,q^B,24)|0;C=G;E=Ge(J,E,B,C)|0;J=G;m=xf(E^g,J^m,16)|0;g=G;q=Ge(p,q,m,g)|0;p=G;C=xf(q^B,p^C,63)|0;B=G;j=Ge(b,j,l,k)|0;b=G;g=xf(j^m,b^g,32)|0;m=G;h=Ge(i,h,g,m)|0;i=G;k=xf(h^l,i^k,24)|0;l=G;b=Ge(j,b,k,l)|0;j=G;f[e+1024+(N<<3)>>2]=b;f[e+1024+(N<<3)+4>>2]=j;m=xf(b^g,j^m,16)|0;j=G;g=e+1024+(N+113<<3)|0;f[g>>2]=m;f[g+4>>2]=j;j=Ge(h,i,m,j)|0;m=G;i=e+1024+(N+80<<3)|0;f[i>>2]=j;f[i+4>>2]=m;l=xf(j^k,m^l,63)|0;m=e+1024+(N+33<<3)|0;f[m>>2]=l;f[m+4>>2]=G;r=Ge(n,r,u,s)|0;n=G;o=xf(r^v,n^o,32)|0;v=G;p=Ge(q,p,o,v)|0;q=G;s=xf(p^u,q^s,24)|0;u=G;n=Ge(r,n,s,u)|0;r=G;f[e+1024+((N|1)<<3)>>2]=n;f[e+1024+((N|1)<<3)+4>>2]=r;v=xf(n^o,r^v,16)|0;r=G;o=e+1024+(N+96<<3)|0;f[o>>2]=v;f[o+4>>2]=r;r=Ge(p,q,v,r)|0;v=G;q=e+1024+(N+81<<3)|0;f[q>>2]=r;f[q+4>>2]=v;u=xf(r^s,v^u,63)|0;v=e+1024+(N+48<<3)|0;f[v>>2]=u;f[v+4>>2]=G;A=Ge(w,A,C,B)|0;w=G;x=xf(A^D,w^x,32)|0;D=G;y=Ge(z,y,x,D)|0;z=G;B=xf(y^C,z^B,24)|0;C=G;w=Ge(A,w,B,C)|0;A=G;v=e+1024+(N+16<<3)|0;f[v>>2]=w;f[v+4>>2]=A;D=xf(w^x,A^D,16)|0;A=G;x=e+1024+(N+97<<3)|0;f[x>>2]=D;f[x+4>>2]=A;A=Ge(y,z,D,A)|0;D=G;z=e+1024+(N+64<<3)|0;f[z>>2]=A;f[z+4>>2]=D;C=xf(A^B,D^C,63)|0;D=e+1024+(N+49<<3)|0;f[D>>2]=C;f[D+4>>2]=G;J=Ge(E,J,M,K)|0;E=G;F=xf(J^L,E^F,32)|0;L=G;H=Ge(I,H,F,L)|0;I=G;K=xf(H^M,I^K,24)|0;M=G;E=Ge(J,E,K,M)|0;J=G;D=e+1024+(N+17<<3)|0;f[D>>2]=E;f[D+4>>2]=J;L=xf(E^F,J^L,16)|0;J=G;F=e+1024+(N+112<<3)|0;f[F>>2]=L;f[F+4>>2]=J;J=Ge(H,I,L,J)|0;L=G;I=e+1024+(N+65<<3)|0;f[I>>2]=J;f[I+4>>2]=L;M=xf(J^K,L^M,63)|0;N=e+1024+(N+32<<3)|0;f[N>>2]=M;f[N+4>>2]=G;a=a+1|0}while((a|0)!=8);li(c,e);Ae(c,e+1024|0);t=d;return}function ra(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;d=t;e=t=t+63&-64;t=t+2048|0;li(e+1024|0,b);Ae(e+1024|0,a);li(e,e+1024|0);a=0;do{b=a<<4;g=f[e+1024+((b|4)<<3)>>2]|0;i=f[e+1024+((b|4)<<3)+4>>2]|0;J=Ge(f[e+1024+(b<<3)>>2]|0,f[e+1024+(b<<3)+4>>2]|0,g,i)|0;N=G;D=xf(f[e+1024+((b|12)<<3)>>2]^J,f[e+1024+((b|12)<<3)+4>>2]^N,32)|0;y=G;u=Ge(f[e+1024+((b|8)<<3)>>2]|0,f[e+1024+((b|8)<<3)+4>>2]|0,D,y)|0;s=G;i=xf(u^g,s^i,24)|0;g=G;N=Ge(J,N,i,g)|0;J=G;y=xf(N^D,J^y,16)|0;D=G;f[e+1024+((b|12)<<3)>>2]=y;f[e+1024+((b|12)<<3)+4>>2]=D;s=Ge(u,s,y,D)|0;u=G;f[e+1024+((b|8)<<3)>>2]=s;f[e+1024+((b|8)<<3)+4>>2]=u;g=xf(s^i,u^g,63)|0;i=G;f[e+1024+((b|4)<<3)>>2]=g;f[e+1024+((b|4)<<3)+4>>2]=i;F=f[e+1024+((b|5)<<3)>>2]|0;I=f[e+1024+((b|5)<<3)+4>>2]|0;A=Ge(f[e+1024+((b|1)<<3)>>2]|0,f[e+1024+((b|1)<<3)+4>>2]|0,F,I)|0;E=G;v=xf(f[e+1024+((b|13)<<3)>>2]^A,f[e+1024+((b|13)<<3)+4>>2]^E,32)|0;p=G;l=Ge(f[e+1024+((b|9)<<3)>>2]|0,f[e+1024+((b|9)<<3)+4>>2]|0,v,p)|0;k=G;I=xf(l^F,k^I,24)|0;F=G;E=Ge(A,E,I,F)|0;A=G;p=xf(E^v,A^p,16)|0;v=G;k=Ge(l,k,p,v)|0;l=G;f[e+1024+((b|9)<<3)>>2]=k;f[e+1024+((b|9)<<3)+4>>2]=l;F=xf(k^I,l^F,63)|0;I=G;x=f[e+1024+((b|6)<<3)>>2]|0;z=f[e+1024+((b|6)<<3)+4>>2]|0;r=Ge(f[e+1024+((b|2)<<3)>>2]|0,f[e+1024+((b|2)<<3)+4>>2]|0,x,z)|0;w=G;m=xf(f[e+1024+((b|14)<<3)>>2]^r,f[e+1024+((b|14)<<3)+4>>2]^w,32)|0;h=G;L=Ge(f[e+1024+((b|10)<<3)>>2]|0,f[e+1024+((b|10)<<3)+4>>2]|0,m,h)|0;K=G;z=xf(L^x,K^z,24)|0;x=G;w=Ge(r,w,z,x)|0;r=G;h=xf(w^m,r^h,16)|0;m=G;K=Ge(L,K,h,m)|0;L=G;x=xf(K^z,L^x,63)|0;z=G;o=f[e+1024+((b|7)<<3)>>2]|0;q=f[e+1024+((b|7)<<3)+4>>2]|0;j=Ge(f[e+1024+((b|3)<<3)>>2]|0,f[e+1024+((b|3)<<3)+4>>2]|0,o,q)|0;n=G;M=xf(f[e+1024+((b|15)<<3)>>2]^j,f[e+1024+((b|15)<<3)+4>>2]^n,32)|0;H=G;C=Ge(f[e+1024+((b|11)<<3)>>2]|0,f[e+1024+((b|11)<<3)+4>>2]|0,M,H)|0;B=G;q=xf(C^o,B^q,24)|0;o=G;n=Ge(j,n,q,o)|0;j=G;H=xf(n^M,j^H,16)|0;M=G;B=Ge(C,B,H,M)|0;C=G;o=xf(B^q,C^o,63)|0;q=G;J=Ge(N,J,F,I)|0;N=G;M=xf(J^H,N^M,32)|0;H=G;L=Ge(K,L,M,H)|0;K=G;I=xf(L^F,K^I,24)|0;F=G;N=Ge(J,N,I,F)|0;J=G;f[e+1024+(b<<3)>>2]=N;f[e+1024+(b<<3)+4>>2]=J;H=xf(N^M,J^H,16)|0;J=G;f[e+1024+((b|15)<<3)>>2]=H;f[e+1024+((b|15)<<3)+4>>2]=J;J=Ge(L,K,H,J)|0;H=G;f[e+1024+((b|10)<<3)>>2]=J;f[e+1024+((b|10)<<3)+4>>2]=H;F=xf(J^I,H^F,63)|0;f[e+1024+((b|5)<<3)>>2]=F;f[e+1024+((b|5)<<3)+4>>2]=G;A=Ge(E,A,x,z)|0;E=G;D=xf(A^y,E^D,32)|0;y=G;C=Ge(B,C,D,y)|0;B=G;z=xf(C^x,B^z,24)|0;x=G;E=Ge(A,E,z,x)|0;A=G;f[e+1024+((b|1)<<3)>>2]=E;f[e+1024+((b|1)<<3)+4>>2]=A;y=xf(E^D,A^y,16)|0;A=G;f[e+1024+((b|12)<<3)>>2]=y;f[e+1024+((b|12)<<3)+4>>2]=A;A=Ge(C,B,y,A)|0;y=G;f[e+1024+((b|11)<<3)>>2]=A;f[e+1024+((b|11)<<3)+4>>2]=y;x=xf(A^z,y^x,63)|0;f[e+1024+((b|6)<<3)>>2]=x;f[e+1024+((b|6)<<3)+4>>2]=G;r=Ge(w,r,o,q)|0;w=G;v=xf(r^p,w^v,32)|0;p=G;u=Ge(s,u,v,p)|0;s=G;q=xf(u^o,s^q,24)|0;o=G;w=Ge(r,w,q,o)|0;r=G;f[e+1024+((b|2)<<3)>>2]=w;f[e+1024+((b|2)<<3)+4>>2]=r;p=xf(w^v,r^p,16)|0;r=G;f[e+1024+((b|13)<<3)>>2]=p;f[e+1024+((b|13)<<3)+4>>2]=r;r=Ge(u,s,p,r)|0;p=G;f[e+1024+((b|8)<<3)>>2]=r;f[e+1024+((b|8)<<3)+4>>2]=p;o=xf(r^q,p^o,63)|0;f[e+1024+((b|7)<<3)>>2]=o;f[e+1024+((b|7)<<3)+4>>2]=G;j=Ge(n,j,g,i)|0;n=G;m=xf(j^h,n^m,32)|0;h=G;l=Ge(k,l,m,h)|0;k=G;i=xf(l^g,k^i,24)|0;g=G;n=Ge(j,n,i,g)|0;j=G;f[e+1024+((b|3)<<3)>>2]=n;f[e+1024+((b|3)<<3)+4>>2]=j;h=xf(n^m,j^h,16)|0;j=G;f[e+1024+((b|14)<<3)>>2]=h;f[e+1024+((b|14)<<3)+4>>2]=j;j=Ge(l,k,h,j)|0;h=G;f[e+1024+((b|9)<<3)>>2]=j;f[e+1024+((b|9)<<3)+4>>2]=h;g=xf(j^i,h^g,63)|0;f[e+1024+((b|4)<<3)>>2]=g;f[e+1024+((b|4)<<3)+4>>2]=G;a=a+1|0}while((a|0)!=8);a=0;do{N=a<<1;K=e+1024+(N+32<<3)|0;M=f[K>>2]|0;K=f[K+4>>2]|0;j=Ge(f[e+1024+(N<<3)>>2]|0,f[e+1024+(N<<3)+4>>2]|0,M,K)|0;b=G;o=e+1024+(N+96<<3)|0;o=xf(f[o>>2]^j,f[o+4>>2]^b,32)|0;v=G;y=e+1024+(N+64<<3)|0;y=Ge(f[y>>2]|0,f[y+4>>2]|0,o,v)|0;z=G;K=xf(y^M,z^K,24)|0;M=G;b=Ge(j,b,K,M)|0;j=G;v=xf(b^o,j^v,16)|0;o=G;k=e+1024+(N+96<<3)|0;f[k>>2]=v;f[k+4>>2]=o;z=Ge(y,z,v,o)|0;y=G;k=e+1024+(N+64<<3)|0;f[k>>2]=z;f[k+4>>2]=y;M=xf(z^K,y^M,63)|0;K=G;k=e+1024+(N+32<<3)|0;f[k>>2]=M;f[k+4>>2]=K;k=e+1024+(N+33<<3)|0;l=f[k>>2]|0;k=f[k+4>>2]|0;r=Ge(f[e+1024+((N|1)<<3)>>2]|0,f[e+1024+((N|1)<<3)+4>>2]|0,l,k)|0;n=G;x=e+1024+(N+97<<3)|0;x=xf(f[x>>2]^r,f[x+4>>2]^n,32)|0;D=G;H=e+1024+(N+65<<3)|0;H=Ge(f[H>>2]|0,f[H+4>>2]|0,x,D)|0;I=G;k=xf(H^l,I^k,24)|0;l=G;n=Ge(r,n,k,l)|0;r=G;D=xf(n^x,r^D,16)|0;x=G;I=Ge(H,I,D,x)|0;H=G;A=e+1024+(N+65<<3)|0;f[A>>2]=I;f[A+4>>2]=H;l=xf(I^k,H^l,63)|0;k=G;A=e+1024+(N+16<<3)|0;s=e+1024+(N+48<<3)|0;u=f[s>>2]|0;s=f[s+4>>2]|0;A=Ge(f[A>>2]|0,f[A+4>>2]|0,u,s)|0;w=G;F=e+1024+(N+112<<3)|0;F=xf(f[F>>2]^A,f[F+4>>2]^w,32)|0;L=G;h=e+1024+(N+80<<3)|0;h=Ge(f[h>>2]|0,f[h+4>>2]|0,F,L)|0;i=G;s=xf(h^u,i^s,24)|0;u=G;w=Ge(A,w,s,u)|0;A=G;L=xf(w^F,A^L,16)|0;F=G;i=Ge(h,i,L,F)|0;h=G;u=xf(i^s,h^u,63)|0;s=G;J=e+1024+(N+17<<3)|0;B=e+1024+(N+49<<3)|0;C=f[B>>2]|0;B=f[B+4>>2]|0;J=Ge(f[J>>2]|0,f[J+4>>2]|0,C,B)|0;E=G;g=e+1024+(N+113<<3)|0;g=xf(f[g>>2]^J,f[g+4>>2]^E,32)|0;m=G;p=e+1024+(N+81<<3)|0;p=Ge(f[p>>2]|0,f[p+4>>2]|0,g,m)|0;q=G;B=xf(p^C,q^B,24)|0;C=G;E=Ge(J,E,B,C)|0;J=G;m=xf(E^g,J^m,16)|0;g=G;q=Ge(p,q,m,g)|0;p=G;C=xf(q^B,p^C,63)|0;B=G;j=Ge(b,j,l,k)|0;b=G;g=xf(j^m,b^g,32)|0;m=G;h=Ge(i,h,g,m)|0;i=G;k=xf(h^l,i^k,24)|0;l=G;b=Ge(j,b,k,l)|0;j=G;f[e+1024+(N<<3)>>2]=b;f[e+1024+(N<<3)+4>>2]=j;m=xf(b^g,j^m,16)|0;j=G;g=e+1024+(N+113<<3)|0;f[g>>2]=m;f[g+4>>2]=j;j=Ge(h,i,m,j)|0;m=G;i=e+1024+(N+80<<3)|0;f[i>>2]=j;f[i+4>>2]=m;l=xf(j^k,m^l,63)|0;m=e+1024+(N+33<<3)|0;f[m>>2]=l;f[m+4>>2]=G;r=Ge(n,r,u,s)|0;n=G;o=xf(r^v,n^o,32)|0;v=G;p=Ge(q,p,o,v)|0;q=G;s=xf(p^u,q^s,24)|0;u=G;n=Ge(r,n,s,u)|0;r=G;f[e+1024+((N|1)<<3)>>2]=n;f[e+1024+((N|1)<<3)+4>>2]=r;v=xf(n^o,r^v,16)|0;r=G;o=e+1024+(N+96<<3)|0;f[o>>2]=v;f[o+4>>2]=r;r=Ge(p,q,v,r)|0;v=G;q=e+1024+(N+81<<3)|0;f[q>>2]=r;f[q+4>>2]=v;u=xf(r^s,v^u,63)|0;v=e+1024+(N+48<<3)|0;f[v>>2]=u;f[v+4>>2]=G;A=Ge(w,A,C,B)|0;w=G;x=xf(A^D,w^x,32)|0;D=G;y=Ge(z,y,x,D)|0;z=G;B=xf(y^C,z^B,24)|0;C=G;w=Ge(A,w,B,C)|0;A=G;v=e+1024+(N+16<<3)|0;f[v>>2]=w;f[v+4>>2]=A;D=xf(w^x,A^D,16)|0;A=G;x=e+1024+(N+97<<3)|0;f[x>>2]=D;f[x+4>>2]=A;A=Ge(y,z,D,A)|0;D=G;z=e+1024+(N+64<<3)|0;f[z>>2]=A;f[z+4>>2]=D;C=xf(A^B,D^C,63)|0;D=e+1024+(N+49<<3)|0;f[D>>2]=C;f[D+4>>2]=G;J=Ge(E,J,M,K)|0;E=G;F=xf(J^L,E^F,32)|0;L=G;H=Ge(I,H,F,L)|0;I=G;K=xf(H^M,I^K,24)|0;M=G;E=Ge(J,E,K,M)|0;J=G;D=e+1024+(N+17<<3)|0;f[D>>2]=E;f[D+4>>2]=J;L=xf(E^F,J^L,16)|0;J=G;F=e+1024+(N+112<<3)|0;f[F>>2]=L;f[F+4>>2]=J;J=Ge(H,I,L,J)|0;L=G;I=e+1024+(N+65<<3)|0;f[I>>2]=J;f[I+4>>2]=L;M=xf(J^K,L^M,63)|0;N=e+1024+(N+32<<3)|0;f[N>>2]=M;f[N+4>>2]=G;a=a+1|0}while((a|0)!=8);li(c,e);Ae(c,e+1024|0);t=d;return}function sa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;Ff(c,b);f[d>>2]=f[a>>2];f[d+4>>2]=f[a+4>>2];f[d+8>>2]=f[a+8>>2];f[d+12>>2]=f[a+12>>2];f[d+16>>2]=f[a+16>>2];f[d+20>>2]=f[a+20>>2];f[d+24>>2]=f[a+24>>2];f[d+28>>2]=f[a+28>>2];s=0;b=f[c>>2]|0;do{v=f[d+16>>2]|0;B=ri(v,6)|0;B=(ri(v,11)|0)^B;B=B^(ri(v,25)|0);F=f[d+20>>2]|0;D=f[d+24>>2]|0;B=b+B+(f[32432+(s<<2)>>2]|0)+((D^F)&v^D)+(f[d+28>>2]|0)|0;g=B+(f[d+12>>2]|0)|0;f[d+12>>2]=g;z=f[d>>2]|0;w=ri(z,2)|0;w=(ri(z,13)|0)^w;w=w^(ri(z,22)|0);u=f[d+4>>2]|0;x=f[d+8>>2]|0;f[d+28>>2]=w+B+((x|u)&z|x&u);A=ri(g,6)|0;A=(ri(g,11)|0)^A;A=A^(ri(g,25)|0);q=s|1;A=(g&(F^v)^F)+D+A+(f[c+(q<<2)>>2]|0)+(f[32432+(q<<2)>>2]|0)|0;f[d+8>>2]=A+x;D=ri(w+B+((x|u)&z|x&u)|0,2)|0;D=(ri(w+B+((x|u)&z|x&u)|0,13)|0)^D;D=A+(w+B+((x|u)&z|x&u)&(u|z)|u&z)+(D^(ri(w+B+((x|u)&z|x&u)|0,22)|0))|0;f[d+24>>2]=D;C=ri(A+x|0,6)|0;C=(ri(A+x|0,11)|0)^C;C=C^(ri(A+x|0,25)|0);r=s|2;C=(A+x&(g^v)^v)+F+C+(f[c+(r<<2)>>2]|0)+(f[32432+(r<<2)>>2]|0)|0;f[d+4>>2]=C+u;F=ri(D,2)|0;F=(ri(D,13)|0)^F;F=C+(D&(w+B+((x|u)&z|x&u)|z)|w+B+((x|u)&z|x&u)&z)+(F^(ri(D,22)|0))|0;f[d+20>>2]=F;E=ri(C+u|0,6)|0;E=(ri(C+u|0,11)|0)^E;E=E^(ri(C+u|0,25)|0);b=s|3;E=(C+u&(A+x^g)^g)+v+E+(f[c+(b<<2)>>2]|0)+(f[32432+(b<<2)>>2]|0)|0;f[d>>2]=E+z;v=ri(F,2)|0;v=(ri(F,13)|0)^v;v=E+(F&(D|w+B+((x|u)&z|x&u))|D&w+B+((x|u)&z|x&u))+(v^(ri(F,22)|0))|0;f[d+16>>2]=v;y=ri(E+z|0,6)|0;y=(ri(E+z|0,11)|0)^y;y=y^(ri(E+z|0,25)|0);e=s|4;y=(E+z&(C+u^A+x)^A+x)+g+y+(f[c+(e<<2)>>2]|0)+(f[32432+(e<<2)>>2]|0)|0;B=y+(w+B+((x|u)&z|x&u))|0;f[d+28>>2]=B;w=ri(v,2)|0;w=(ri(v,13)|0)^w;w=y+(v&(F|D)|F&D)+(w^(ri(v,22)|0))|0;f[d+12>>2]=w;y=ri(B,6)|0;y=(ri(B,11)|0)^y;y=y^(ri(B,25)|0);g=s|5;y=(B&(E+z^C+u)^C+u)+(A+x)+y+(f[c+(g<<2)>>2]|0)+(f[32432+(g<<2)>>2]|0)|0;f[d+24>>2]=y+D;x=ri(w,2)|0;x=(ri(w,13)|0)^x;x=y+(w&(v|F)|v&F)+(x^(ri(w,22)|0))|0;f[d+8>>2]=x;A=ri(y+D|0,6)|0;A=(ri(y+D|0,11)|0)^A;A=A^(ri(y+D|0,25)|0);h=s|6;A=(y+D&(B^E+z)^E+z)+(C+u)+A+(f[c+(h<<2)>>2]|0)+(f[32432+(h<<2)>>2]|0)|0;f[d+20>>2]=A+F;u=ri(x,2)|0;u=(ri(x,13)|0)^u;u=A+(x&(w|v)|w&v)+(u^(ri(x,22)|0))|0;f[d+4>>2]=u;C=ri(A+F|0,6)|0;C=(ri(A+F|0,11)|0)^C;C=C^(ri(A+F|0,25)|0);i=s|7;C=(A+F&(y+D^B)^B)+(E+z)+C+(f[c+(i<<2)>>2]|0)+(f[32432+(i<<2)>>2]|0)|0;f[d+16>>2]=C+v;z=ri(u,2)|0;z=(ri(u,13)|0)^z;z=C+(u&(x|w)|x&w)+(z^(ri(u,22)|0))|0;f[d>>2]=z;E=ri(C+v|0,6)|0;E=(ri(C+v|0,11)|0)^E;E=E^(ri(C+v|0,25)|0);j=s|8;E=(C+v&(A+F^y+D)^y+D)+B+E+(f[c+(j<<2)>>2]|0)+(f[32432+(j<<2)>>2]|0)|0;f[d+12>>2]=E+w;B=ri(z,2)|0;B=(ri(z,13)|0)^B;B=E+(z&(u|x)|u&x)+(B^(ri(z,22)|0))|0;f[d+28>>2]=B;G=ri(E+w|0,6)|0;G=(ri(E+w|0,11)|0)^G;G=G^(ri(E+w|0,25)|0);k=s|9;G=(E+w&(C+v^A+F)^A+F)+(y+D)+G+(f[c+(k<<2)>>2]|0)+(f[32432+(k<<2)>>2]|0)|0;f[d+8>>2]=G+x;D=ri(B,2)|0;D=(ri(B,13)|0)^D;D=G+(B&(z|u)|z&u)+(D^(ri(B,22)|0))|0;f[d+24>>2]=D;y=ri(G+x|0,6)|0;y=(ri(G+x|0,11)|0)^y;y=y^(ri(G+x|0,25)|0);l=s|10;y=(G+x&(E+w^C+v)^C+v)+(A+F)+y+(f[c+(l<<2)>>2]|0)+(f[32432+(l<<2)>>2]|0)|0;f[d+4>>2]=y+u;F=ri(D,2)|0;F=(ri(D,13)|0)^F;F=y+(D&(B|z)|B&z)+(F^(ri(D,22)|0))|0;f[d+20>>2]=F;A=ri(y+u|0,6)|0;A=(ri(y+u|0,11)|0)^A;A=A^(ri(y+u|0,25)|0);m=s|11;A=(y+u&(G+x^E+w)^E+w)+(C+v)+A+(f[c+(m<<2)>>2]|0)+(f[32432+(m<<2)>>2]|0)|0;f[d>>2]=A+z;v=ri(F,2)|0;v=(ri(F,13)|0)^v;v=A+(F&(D|B)|D&B)+(v^(ri(F,22)|0))|0;f[d+16>>2]=v;C=ri(A+z|0,6)|0;C=(ri(A+z|0,11)|0)^C;C=C^(ri(A+z|0,25)|0);n=s|12;C=(A+z&(y+u^G+x)^G+x)+(E+w)+C+(f[c+(n<<2)>>2]|0)+(f[32432+(n<<2)>>2]|0)|0;f[d+28>>2]=C+B;w=ri(v,2)|0;w=(ri(v,13)|0)^w;w=C+(v&(F|D)|F&D)+(w^(ri(v,22)|0))|0;f[d+12>>2]=w;E=ri(C+B|0,6)|0;E=(ri(C+B|0,11)|0)^E;E=E^(ri(C+B|0,25)|0);o=s|13;E=(C+B&(A+z^y+u)^y+u)+(G+x)+E+(f[c+(o<<2)>>2]|0)+(f[32432+(o<<2)>>2]|0)|0;f[d+24>>2]=E+D;x=ri(w,2)|0;x=(ri(w,13)|0)^x;x=E+(w&(v|F)|v&F)+(x^(ri(w,22)|0))|0;f[d+8>>2]=x;G=ri(E+D|0,6)|0;G=(ri(E+D|0,11)|0)^G;G=G^(ri(E+D|0,25)|0);p=s|14;G=(E+D&(C+B^A+z)^A+z)+(y+u)+G+(f[c+(p<<2)>>2]|0)+(f[32432+(p<<2)>>2]|0)|0;f[d+20>>2]=G+F;u=ri(x,2)|0;u=(ri(x,13)|0)^u;u=G+(x&(w|v)|w&v)+(u^(ri(x,22)|0))|0;f[d+4>>2]=u;y=ri(G+F|0,6)|0;y=(ri(G+F|0,11)|0)^y;y=y^(ri(G+F|0,25)|0);t=s|15;y=(G+F&(E+D^C+B)^C+B)+(A+z)+y+(f[c+(t<<2)>>2]|0)+(f[32432+(t<<2)>>2]|0)|0;f[d+16>>2]=y+v;v=ri(u,2)|0;v=(ri(u,13)|0)^v;u=y+(u&(x|w)|x&w)+(v^(ri(u,22)|0))|0;f[d>>2]=u;if((s|0)==48)break;G=f[c+(p<<2)>>2]|0;E=ri(G,17)|0;E=G>>>10^E^(ri(G,19)|0);D=f[c+(k<<2)>>2]|0;y=f[c+(q<<2)>>2]|0;x=ri(y,7)|0;x=y>>>3^x^(ri(y,18)|0);x=E+D+(f[c+(s<<2)>>2]|0)+x|0;s=s+16|0;f[c+(s<<2)>>2]=x;E=f[c+(t<<2)>>2]|0;C=ri(E,17)|0;C=E>>>10^C^(ri(E,19)|0);B=f[c+(q+9<<2)>>2]|0;A=f[c+(q+1<<2)>>2]|0;z=ri(A,7)|0;z=B+y+C+(A>>>3^z^(ri(A,18)|0))|0;f[c+(q+16<<2)>>2]=z;C=ri(x,17)|0;x=x>>>10^C^(ri(x,19)|0);C=f[c+(m<<2)>>2]|0;y=f[c+(b<<2)>>2]|0;B=ri(y,7)|0;B=x+C+A+(y>>>3^B^(ri(y,18)|0))|0;f[c+(r+16<<2)>>2]=B;A=ri(z,17)|0;z=z>>>10^A^(ri(z,19)|0);A=f[c+(b+9<<2)>>2]|0;x=f[c+(b+1<<2)>>2]|0;F=ri(x,7)|0;F=A+y+z+(x>>>3^F^(ri(x,18)|0))|0;f[c+(b+16<<2)>>2]=F;b=ri(B,17)|0;b=B>>>10^b^(ri(B,19)|0);B=f[c+(o<<2)>>2]|0;z=f[c+(g<<2)>>2]|0;y=ri(z,7)|0;y=b+B+x+(z>>>3^y^(ri(z,18)|0))|0;f[c+(e+16<<2)>>2]=y;b=ri(F,17)|0;b=F>>>10^b^(ri(F,19)|0);F=f[c+(g+9<<2)>>2]|0;x=f[c+(g+1<<2)>>2]|0;A=ri(x,7)|0;A=F+z+b+(x>>>3^A^(ri(x,18)|0))|0;f[c+(g+16<<2)>>2]=A;b=ri(y,17)|0;y=(y>>>10^b^(ri(y,19)|0))+E|0;b=f[c+(i<<2)>>2]|0;z=ri(b,7)|0;z=y+x+(b>>>3^z^(ri(b,18)|0))|0;f[c+(h+16<<2)>>2]=z;x=ri(A,17)|0;A=A>>>10^x^(ri(A,19)|0);x=f[c+(i+9<<2)>>2]|0;y=f[c+(i+1<<2)>>2]|0;F=ri(y,7)|0;F=x+b+A+(y>>>3^F^(ri(y,18)|0))|0;f[c+(i+16<<2)>>2]=F;A=ri(z,17)|0;z=z>>>10^A^(ri(z,19)|0);z=z+(f[c+(j+9<<2)>>2]|0)|0;A=ri(D,7)|0;A=z+y+(A^D>>>3^(ri(D,18)|0))|0;f[c+(j+16<<2)>>2]=A;y=ri(F,17)|0;F=F>>>10^y^(ri(F,19)|0);y=f[c+(k+9<<2)>>2]|0;z=f[c+(k+1<<2)>>2]|0;b=ri(z,7)|0;b=y+D+F+(z>>>3^b^(ri(z,18)|0))|0;f[c+(k+16<<2)>>2]=b;F=ri(A,17)|0;A=A>>>10^F^(ri(A,19)|0);A=A+(f[c+(l+9<<2)>>2]|0)|0;F=ri(C,7)|0;F=A+z+(F^C>>>3^(ri(C,18)|0))|0;f[c+(l+16<<2)>>2]=F;z=ri(b,17)|0;b=b>>>10^z^(ri(b,19)|0);z=f[c+(m+9<<2)>>2]|0;A=f[c+(m+1<<2)>>2]|0;D=ri(A,7)|0;D=z+C+b+(A>>>3^D^(ri(A,18)|0))|0;f[c+(m+16<<2)>>2]=D;b=ri(F,17)|0;F=F>>>10^b^(ri(F,19)|0);F=F+(f[c+(n+9<<2)>>2]|0)|0;b=ri(B,7)|0;b=F+A+(b^B>>>3^(ri(B,18)|0))|0;f[c+(n+16<<2)>>2]=b;A=ri(D,17)|0;D=D>>>10^A^(ri(D,19)|0);A=f[c+(o+9<<2)>>2]|0;F=f[c+(o+1<<2)>>2]|0;C=ri(F,7)|0;F=A+B+D+(F>>>3^C^(ri(F,18)|0))|0;f[c+(o+16<<2)>>2]=F;C=ri(b,17)|0;b=b>>>10^C^(ri(b,19)|0);C=f[c+(p+9<<2)>>2]|0;D=ri(E,7)|0;D=C+G+b+(D^E>>>3^(ri(E,18)|0))|0;f[c+(p+16<<2)>>2]=D;D=ri(F,17)|0;F=F>>>10^D^(ri(F,19)|0);D=f[c+(t+9<<2)>>2]|0;b=f[c+(t+1<<2)>>2]|0;G=ri(b,7)|0;G=D+E+F+(b>>>3^G^(ri(b,18)|0))|0;f[c+(t+16<<2)>>2]=G}while(s>>>0<64);b=0;do{G=a+(b<<2)|0;f[G>>2]=(f[G>>2]|0)+(f[d+(b<<2)>>2]|0);b=b+1|0}while((b|0)!=8);return}function ta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;k=f[b>>2]|0;r=f[b+4>>2]|0;o=f[b+8>>2]|0;w=f[b+12>>2]|0;d=f[b+16>>2]|0;x=f[b+20>>2]|0;s=f[b+24>>2]|0;i=f[b+28>>2]|0;h=f[b+32>>2]|0;b=f[b+36>>2]|0;cb=Af(k|0,((k|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;bb=G;l=((k<<1|0)<0)<<31>>31;Ua=Af(k<<1|0,l|0,r|0,((r|0)<0)<<31>>31|0)|0;Ta=G;Oa=Af(o|0,((o|0)<0)<<31>>31|0,k<<1|0,l|0)|0;Na=G;Ea=Af(w|0,((w|0)<0)<<31>>31|0,k<<1|0,l|0)|0;Da=G;sa=Af(d|0,((d|0)<0)<<31>>31|0,k<<1|0,l|0)|0;ra=G;ia=Af(x|0,((x|0)<0)<<31>>31|0,k<<1|0,l|0)|0;ha=G;_=Af(s|0,((s|0)<0)<<31>>31|0,k<<1|0,l|0)|0;Z=G;Q=Af(i|0,((i|0)<0)<<31>>31|0,k<<1|0,l|0)|0;P=G;F=Af(h|0,((h|0)<0)<<31>>31|0,k<<1|0,l|0)|0;E=G;l=Af(b|0,((b|0)<0)<<31>>31|0,k<<1|0,l|0)|0;k=G;c=((r<<1|0)<0)<<31>>31;Ma=Af(r<<1|0,c|0,r|0,((r|0)<0)<<31>>31|0)|0;La=G;Ca=Af(r<<1|0,c|0,o|0,((o|0)<0)<<31>>31|0)|0;Ba=G;e=((w<<1|0)<0)<<31>>31;wa=Af(w<<1|0,e|0,r<<1|0,c|0)|0;va=G;ma=Af(d|0,((d|0)<0)<<31>>31|0,r<<1|0,c|0)|0;la=G;aa=Af(x<<1|0,((x<<1|0)<0)<<31>>31|0,r<<1|0,c|0)|0;$=G;S=Af(s|0,((s|0)<0)<<31>>31|0,r<<1|0,c|0)|0;R=G;I=Af(i<<1|0,((i<<1|0)<0)<<31>>31|0,r<<1|0,c|0)|0;H=G;m=Af(h|0,((h|0)<0)<<31>>31|0,r<<1|0,c|0)|0;n=G;q=((b*38|0)<0)<<31>>31;c=Af(b*38|0,q|0,r<<1|0,c|0)|0;r=G;ua=Af(o|0,((o|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;ta=G;ka=Af(o<<1|0,((o<<1|0)<0)<<31>>31|0,w|0,((w|0)<0)<<31>>31|0)|0;ja=G;ca=Af(d|0,((d|0)<0)<<31>>31|0,o<<1|0,((o<<1|0)<0)<<31>>31|0)|0;ba=G;W=Af(x|0,((x|0)<0)<<31>>31|0,o<<1|0,((o<<1|0)<0)<<31>>31|0)|0;V=G;O=Af(s|0,((s|0)<0)<<31>>31|0,o<<1|0,((o<<1|0)<0)<<31>>31|0)|0;N=G;z=Af(i|0,((i|0)<0)<<31>>31|0,o<<1|0,((o<<1|0)<0)<<31>>31|0)|0;y=G;Y=((h*19|0)<0)<<31>>31;Ya=Af(h*19|0,Y|0,o<<1|0,((o<<1|0)<0)<<31>>31|0)|0;Xa=G;o=Af(b*38|0,q|0,o|0,((o|0)<0)<<31>>31|0)|0;t=G;ea=Af(w<<1|0,e|0,w|0,((w|0)<0)<<31>>31|0)|0;da=G;U=Af(w<<1|0,e|0,d|0,((d|0)<0)<<31>>31|0)|0;T=G;K=Af(x<<1|0,((x<<1|0)<0)<<31>>31|0,w<<1|0,e|0)|0;J=G;D=Af(s|0,((s|0)<0)<<31>>31|0,w<<1|0,e|0)|0;C=G;qa=((i*38|0)<0)<<31>>31;_a=Af(i*38|0,qa|0,w<<1|0,e|0)|0;Za=G;Qa=Af(h*19|0,Y|0,w<<1|0,e|0)|0;Pa=G;e=Af(b*38|0,q|0,w<<1|0,e|0)|0;w=G;M=Af(d|0,((d|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;L=G;B=Af(d<<1|0,((d<<1|0)<0)<<31>>31|0,x|0,((x|0)<0)<<31>>31|0)|0;A=G;ab=Af(s*19|0,((s*19|0)<0)<<31>>31|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;$a=G;Sa=Af(i*38|0,qa|0,d|0,((d|0)<0)<<31>>31|0)|0;Ra=G;Ga=Af(h*19|0,Y|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;Fa=G;d=Af(b*38|0,q|0,d|0,((d|0)<0)<<31>>31|0)|0;u=G;eb=Af(x*38|0,((x*38|0)<0)<<31>>31|0,x|0,((x|0)<0)<<31>>31|0)|0;db=G;Wa=Af(s*19|0,((s*19|0)<0)<<31>>31|0,x<<1|0,((x<<1|0)<0)<<31>>31|0)|0;Va=G;Ia=Af(i*38|0,qa|0,x<<1|0,((x<<1|0)<0)<<31>>31|0)|0;Ha=G;ya=Af(h*19|0,Y|0,x<<1|0,((x<<1|0)<0)<<31>>31|0)|0;xa=G;x=Af(b*38|0,q|0,x<<1|0,((x<<1|0)<0)<<31>>31|0)|0;p=G;Ka=Af(s*19|0,((s*19|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;Ja=G;Aa=Af(i*38|0,qa|0,s|0,((s|0)<0)<<31>>31|0)|0;za=G;oa=Af(h*19|0,Y|0,s<<1|0,((s<<1|0)<0)<<31>>31|0)|0;na=G;s=Af(b*38|0,q|0,s|0,((s|0)<0)<<31>>31|0)|0;j=G;qa=Af(i*38|0,qa|0,i|0,((i|0)<0)<<31>>31|0)|0;pa=G;ga=Af(h*19|0,Y|0,i<<1|0,((i<<1|0)<0)<<31>>31|0)|0;fa=G;i=Af(b*38|0,q|0,i<<1|0,((i<<1|0)<0)<<31>>31|0)|0;v=G;Y=Af(h*19|0,Y|0,h|0,((h|0)<0)<<31>>31|0)|0;X=G;h=Af(b*38|0,q|0,h|0,((h|0)<0)<<31>>31|0)|0;g=G;b=Af(b*38|0,q|0,b|0,((b|0)<0)<<31>>31|0)|0;q=G;bb=Lg(eb|0,db|0,cb|0,bb|0)|0;$a=Lg(bb|0,G|0,ab|0,$a|0)|0;Za=Lg($a|0,G|0,_a|0,Za|0)|0;Xa=Lg(Za|0,G|0,Ya|0,Xa|0)|0;r=Lg(Xa|0,G|0,c|0,r|0)|0;c=G;Ta=Lg(Wa|0,Va|0,Ua|0,Ta|0)|0;Ra=Lg(Ta|0,G|0,Sa|0,Ra|0)|0;Pa=Lg(Ra|0,G|0,Qa|0,Pa|0)|0;t=Lg(Pa|0,G|0,o|0,t|0)|0;o=G;La=Lg(Oa|0,Na|0,Ma|0,La|0)|0;Ja=Lg(La|0,G|0,Ka|0,Ja|0)|0;Ha=Lg(Ja|0,G|0,Ia|0,Ha|0)|0;Fa=Lg(Ha|0,G|0,Ga|0,Fa|0)|0;w=Lg(Fa|0,G|0,e|0,w|0)|0;e=G;Ba=Lg(Ea|0,Da|0,Ca|0,Ba|0)|0;za=Lg(Ba|0,G|0,Aa|0,za|0)|0;xa=Lg(za|0,G|0,ya|0,xa|0)|0;u=Lg(xa|0,G|0,d|0,u|0)|0;d=G;ta=Lg(wa|0,va|0,ua|0,ta|0)|0;ra=Lg(ta|0,G|0,sa|0,ra|0)|0;pa=Lg(ra|0,G|0,qa|0,pa|0)|0;na=Lg(pa|0,G|0,oa|0,na|0)|0;p=Lg(na|0,G|0,x|0,p|0)|0;x=G;ja=Lg(ma|0,la|0,ka|0,ja|0)|0;ha=Lg(ja|0,G|0,ia|0,ha|0)|0;fa=Lg(ha|0,G|0,ga|0,fa|0)|0;j=Lg(fa|0,G|0,s|0,j|0)|0;s=G;ba=Lg(ea|0,da|0,ca|0,ba|0)|0;$=Lg(ba|0,G|0,aa|0,$|0)|0;Z=Lg($|0,G|0,_|0,Z|0)|0;X=Lg(Z|0,G|0,Y|0,X|0)|0;v=Lg(X|0,G|0,i|0,v|0)|0;i=G;T=Lg(W|0,V|0,U|0,T|0)|0;R=Lg(T|0,G|0,S|0,R|0)|0;P=Lg(R|0,G|0,Q|0,P|0)|0;g=Lg(P|0,G|0,h|0,g|0)|0;h=G;L=Lg(O|0,N|0,M|0,L|0)|0;J=Lg(L|0,G|0,K|0,J|0)|0;H=Lg(J|0,G|0,I|0,H|0)|0;E=Lg(H|0,G|0,F|0,E|0)|0;q=Lg(E|0,G|0,b|0,q|0)|0;b=G;A=Lg(D|0,C|0,B|0,A|0)|0;y=Lg(A|0,G|0,z|0,y|0)|0;n=Lg(y|0,G|0,m|0,n|0)|0;k=Lg(n|0,G|0,l|0,k|0)|0;l=G;c=Wf(r|0,c|0,1)|0;r=G;o=Wf(t|0,o|0,1)|0;t=G;e=Wf(w|0,e|0,1)|0;w=G;d=Wf(u|0,d|0,1)|0;u=G;x=Wf(p|0,x|0,1)|0;p=G;s=Wf(j|0,s|0,1)|0;j=G;i=Wf(v|0,i|0,1)|0;v=G;h=Wf(g|0,h|0,1)|0;g=G;b=Wf(q|0,b|0,1)|0;q=G;l=Wf(k|0,l|0,1)|0;k=G;n=Lg(c|0,r|0,33554432,0)|0;m=G;y=Nf(n|0,m|0,26)|0;t=Lg(y|0,G|0,o|0,t|0)|0;o=G;m=Ig(c|0,r|0,n&-67108864|0,m|0)|0;n=G;r=Lg(x|0,p|0,33554432,0)|0;c=G;y=Nf(r|0,c|0,26)|0;j=Lg(y|0,G|0,s|0,j|0)|0;s=G;c=Ig(x|0,p|0,r&-67108864|0,c|0)|0;r=G;p=Lg(t|0,o|0,16777216,0)|0;x=Nf(p|0,G|0,25)|0;w=Lg(x|0,G|0,e|0,w|0)|0;e=G;p=Ig(t|0,o|0,p&-33554432|0,0)|0;o=G;t=Lg(j|0,s|0,16777216,0)|0;x=Nf(t|0,G|0,25)|0;v=Lg(x|0,G|0,i|0,v|0)|0;i=G;t=Ig(j|0,s|0,t&-33554432|0,0)|0;s=G;j=Lg(w|0,e|0,33554432,0)|0;x=Nf(j|0,G|0,26)|0;u=Lg(x|0,G|0,d|0,u|0)|0;d=G;j=Ig(w|0,e|0,j&-67108864|0,0)|0;e=Lg(v|0,i|0,33554432,0)|0;w=Nf(e|0,G|0,26)|0;g=Lg(w|0,G|0,h|0,g|0)|0;h=G;e=Ig(v|0,i|0,e&-67108864|0,0)|0;i=Lg(u|0,d|0,16777216,0)|0;v=Nf(i|0,G|0,25)|0;r=Lg(v|0,G|0,c|0,r|0)|0;c=G;i=Ig(u|0,d|0,i&-33554432|0,0)|0;d=Lg(g|0,h|0,16777216,0)|0;u=Nf(d|0,G|0,25)|0;q=Lg(u|0,G|0,b|0,q|0)|0;b=G;d=Ig(g|0,h|0,d&-33554432|0,0)|0;h=Lg(r|0,c|0,33554432,0)|0;g=$f(h|0,G|0,26)|0;g=Lg(t|0,s|0,g|0,G|0)|0;h=Ig(r|0,c|0,h&-67108864|0,0)|0;c=Lg(q|0,b|0,33554432,0)|0;r=Nf(c|0,G|0,26)|0;k=Lg(r|0,G|0,l|0,k|0)|0;l=G;c=Ig(q|0,b|0,c&-67108864|0,0)|0;b=Lg(k|0,l|0,16777216,0)|0;q=Nf(b|0,G|0,25)|0;q=Af(q|0,G|0,19,0)|0;n=Lg(q|0,G|0,m|0,n|0)|0;m=G;b=Ig(k|0,l|0,b&-33554432|0,0)|0;l=Lg(n|0,m|0,33554432,0)|0;k=$f(l|0,G|0,26)|0;k=Lg(p|0,o|0,k|0,G|0)|0;l=Ig(n|0,m|0,l&-67108864|0,0)|0;f[a>>2]=l;f[a+4>>2]=k;f[a+8>>2]=j;f[a+12>>2]=i;f[a+16>>2]=h;f[a+20>>2]=g;f[a+24>>2]=e;f[a+28>>2]=d;f[a+32>>2]=c;f[a+36>>2]=b;return}function ua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;r=f[b>>2]|0;c=f[b+4>>2]|0;j=f[b+8>>2]|0;i=f[b+12>>2]|0;Z=f[b+16>>2]|0;p=f[b+20>>2]|0;wa=f[b+24>>2]|0;d=f[b+28>>2]|0;Q=f[b+32>>2]|0;D=f[b+36>>2]|0;cb=Af(r|0,((r|0)<0)<<31>>31|0,r|0,((r|0)<0)<<31>>31|0)|0;bb=G;s=((r<<1|0)<0)<<31>>31;Ka=Af(r<<1|0,s|0,c|0,((c|0)<0)<<31>>31|0)|0;Ja=G;Wa=Af(j|0,((j|0)<0)<<31>>31|0,r<<1|0,s|0)|0;Va=G;Ua=Af(i|0,((i|0)<0)<<31>>31|0,r<<1|0,s|0)|0;Ta=G;Oa=Af(Z|0,((Z|0)<0)<<31>>31|0,r<<1|0,s|0)|0;Na=G;Aa=Af(p|0,((p|0)<0)<<31>>31|0,r<<1|0,s|0)|0;za=G;ha=Af(wa|0,((wa|0)<0)<<31>>31|0,r<<1|0,s|0)|0;ga=G;S=Af(d|0,((d|0)<0)<<31>>31|0,r<<1|0,s|0)|0;R=G;F=Af(Q|0,((Q|0)<0)<<31>>31|0,r<<1|0,s|0)|0;E=G;s=Af(D|0,((D|0)<0)<<31>>31|0,r<<1|0,s|0)|0;r=G;l=((c<<1|0)<0)<<31>>31;ua=Af(c<<1|0,l|0,c|0,((c|0)<0)<<31>>31|0)|0;va=G;ca=Af(c<<1|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;da=G;q=((i<<1|0)<0)<<31>>31;Sa=Af(i<<1|0,q|0,c<<1|0,l|0)|0;Ra=G;Ea=Af(Z|0,((Z|0)<0)<<31>>31|0,c<<1|0,l|0)|0;Da=G;ja=Af(p<<1|0,((p<<1|0)<0)<<31>>31|0,c<<1|0,l|0)|0;ia=G;U=Af(wa|0,((wa|0)<0)<<31>>31|0,c<<1|0,l|0)|0;T=G;I=Af(d<<1|0,((d<<1|0)<0)<<31>>31|0,c<<1|0,l|0)|0;H=G;u=Af(Q|0,((Q|0)<0)<<31>>31|0,c<<1|0,l|0)|0;t=G;C=((D*38|0)<0)<<31>>31;l=Af(D*38|0,C|0,c<<1|0,l|0)|0;c=G;Qa=Af(j|0,((j|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;Pa=G;Ca=Af(j<<1|0,((j<<1|0)<0)<<31>>31|0,i|0,((i|0)<0)<<31>>31|0)|0;Ba=G;la=Af(Z|0,((Z|0)<0)<<31>>31|0,j<<1|0,((j<<1|0)<0)<<31>>31|0)|0;ka=G;Y=Af(p|0,((p|0)<0)<<31>>31|0,j<<1|0,((j<<1|0)<0)<<31>>31|0)|0;X=G;O=Af(wa|0,((wa|0)<0)<<31>>31|0,j<<1|0,((j<<1|0)<0)<<31>>31|0)|0;N=G;w=Af(d|0,((d|0)<0)<<31>>31|0,j<<1|0,((j<<1|0)<0)<<31>>31|0)|0;v=G;fa=((Q*19|0)<0)<<31>>31;Ya=Af(Q*19|0,fa|0,j<<1|0,((j<<1|0)<0)<<31>>31|0)|0;Xa=G;j=Af(D*38|0,C|0,j|0,((j|0)<0)<<31>>31|0)|0;k=G;na=Af(i<<1|0,q|0,i|0,((i|0)<0)<<31>>31|0)|0;ma=G;W=Af(i<<1|0,q|0,Z|0,((Z|0)<0)<<31>>31|0)|0;V=G;K=Af(p<<1|0,((p<<1|0)<0)<<31>>31|0,i<<1|0,q|0)|0;J=G;A=Af(wa|0,((wa|0)<0)<<31>>31|0,i<<1|0,q|0)|0;z=G;B=((d*38|0)<0)<<31>>31;_a=Af(d*38|0,B|0,i<<1|0,q|0)|0;Za=G;Ga=Af(Q*19|0,fa|0,i<<1|0,q|0)|0;Fa=G;q=Af(D*38|0,C|0,i<<1|0,q|0)|0;i=G;M=Af(Z|0,((Z|0)<0)<<31>>31|0,Z|0,((Z|0)<0)<<31>>31|0)|0;L=G;y=Af(Z<<1|0,((Z<<1|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;x=G;ab=Af(wa*19|0,((wa*19|0)<0)<<31>>31|0,Z<<1|0,((Z<<1|0)<0)<<31>>31|0)|0;$a=G;Ia=Af(d*38|0,B|0,Z|0,((Z|0)<0)<<31>>31|0)|0;Ha=G;pa=Af(Q*19|0,fa|0,Z<<1|0,((Z<<1|0)<0)<<31>>31|0)|0;oa=G;Z=Af(D*38|0,C|0,Z|0,((Z|0)<0)<<31>>31|0)|0;g=G;eb=Af(p*38|0,((p*38|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;db=G;Ma=Af(wa*19|0,((wa*19|0)<0)<<31>>31|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;La=G;ra=Af(d*38|0,B|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;qa=G;$=Af(Q*19|0,fa|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;_=G;p=Af(D*38|0,C|0,p<<1|0,((p<<1|0)<0)<<31>>31|0)|0;e=G;ta=Af(wa*19|0,((wa*19|0)<0)<<31>>31|0,wa|0,((wa|0)<0)<<31>>31|0)|0;sa=G;ba=Af(d*38|0,B|0,wa|0,((wa|0)<0)<<31>>31|0)|0;aa=G;m=Af(Q*19|0,fa|0,wa<<1|0,((wa<<1|0)<0)<<31>>31|0)|0;n=G;wa=Af(D*38|0,C|0,wa|0,((wa|0)<0)<<31>>31|0)|0;h=G;B=Af(d*38|0,B|0,d|0,((d|0)<0)<<31>>31|0)|0;o=G;ya=Af(Q*19|0,fa|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;xa=G;b=Af(D*38|0,C|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;d=G;fa=Af(Q*19|0,fa|0,Q|0,((Q|0)<0)<<31>>31|0)|0;ea=G;Q=Af(D*38|0,C|0,Q|0,((Q|0)<0)<<31>>31|0)|0;P=G;D=Af(D*38|0,C|0,D|0,((D|0)<0)<<31>>31|0)|0;C=G;bb=Lg(eb|0,db|0,cb|0,bb|0)|0;$a=Lg(bb|0,G|0,ab|0,$a|0)|0;Za=Lg($a|0,G|0,_a|0,Za|0)|0;Xa=Lg(Za|0,G|0,Ya|0,Xa|0)|0;c=Lg(Xa|0,G|0,l|0,c|0)|0;l=G;va=Lg(Wa|0,Va|0,ua|0,va|0)|0;ua=G;da=Lg(Ua|0,Ta|0,ca|0,da|0)|0;ca=G;Pa=Lg(Sa|0,Ra|0,Qa|0,Pa|0)|0;Na=Lg(Pa|0,G|0,Oa|0,Na|0)|0;o=Lg(Na|0,G|0,B|0,o|0)|0;n=Lg(o|0,G|0,m|0,n|0)|0;e=Lg(n|0,G|0,p|0,e|0)|0;p=G;n=Lg(c|0,l|0,33554432,0)|0;m=G;o=Nf(n|0,m|0,26)|0;B=G;Ja=Lg(Ma|0,La|0,Ka|0,Ja|0)|0;Ha=Lg(Ja|0,G|0,Ia|0,Ha|0)|0;Fa=Lg(Ha|0,G|0,Ga|0,Fa|0)|0;k=Lg(Fa|0,G|0,j|0,k|0)|0;B=Lg(k|0,G|0,o|0,B|0)|0;o=G;m=Ig(c|0,l|0,n&-67108864|0,m|0)|0;n=G;l=Lg(e|0,p|0,33554432,0)|0;c=G;k=Nf(l|0,c|0,26)|0;j=G;Ba=Lg(Ea|0,Da|0,Ca|0,Ba|0)|0;za=Lg(Ba|0,G|0,Aa|0,za|0)|0;xa=Lg(za|0,G|0,ya|0,xa|0)|0;h=Lg(xa|0,G|0,wa|0,h|0)|0;j=Lg(h|0,G|0,k|0,j|0)|0;k=G;c=Ig(e|0,p|0,l&-67108864|0,c|0)|0;l=G;p=Lg(B|0,o|0,16777216,0)|0;e=Nf(p|0,G|0,25)|0;h=G;sa=Lg(va|0,ua|0,ta|0,sa|0)|0;qa=Lg(sa|0,G|0,ra|0,qa|0)|0;oa=Lg(qa|0,G|0,pa|0,oa|0)|0;i=Lg(oa|0,G|0,q|0,i|0)|0;h=Lg(i|0,G|0,e|0,h|0)|0;e=G;p=Ig(B|0,o|0,p&-33554432|0,0)|0;o=G;B=Lg(j|0,k|0,16777216,0)|0;i=Nf(B|0,G|0,25)|0;q=G;ka=Lg(na|0,ma|0,la|0,ka|0)|0;ia=Lg(ka|0,G|0,ja|0,ia|0)|0;ga=Lg(ia|0,G|0,ha|0,ga|0)|0;ea=Lg(ga|0,G|0,fa|0,ea|0)|0;d=Lg(ea|0,G|0,b|0,d|0)|0;q=Lg(d|0,G|0,i|0,q|0)|0;i=G;B=Ig(j|0,k|0,B&-33554432|0,0)|0;k=G;j=Lg(h|0,e|0,33554432,0)|0;d=Nf(j|0,G|0,26)|0;b=G;aa=Lg(da|0,ca|0,ba|0,aa|0)|0;_=Lg(aa|0,G|0,$|0,_|0)|0;g=Lg(_|0,G|0,Z|0,g|0)|0;b=Lg(g|0,G|0,d|0,b|0)|0;d=G;j=Ig(h|0,e|0,j&-67108864|0,0)|0;e=Lg(q|0,i|0,33554432,0)|0;h=Nf(e|0,G|0,26)|0;g=G;V=Lg(Y|0,X|0,W|0,V|0)|0;T=Lg(V|0,G|0,U|0,T|0)|0;R=Lg(T|0,G|0,S|0,R|0)|0;P=Lg(R|0,G|0,Q|0,P|0)|0;g=Lg(P|0,G|0,h|0,g|0)|0;h=G;e=Ig(q|0,i|0,e&-67108864|0,0)|0;i=Lg(b|0,d|0,16777216,0)|0;q=Nf(i|0,G|0,25)|0;l=Lg(q|0,G|0,c|0,l|0)|0;c=G;i=Ig(b|0,d|0,i&-33554432|0,0)|0;d=Lg(g|0,h|0,16777216,0)|0;b=Nf(d|0,G|0,25)|0;q=G;L=Lg(O|0,N|0,M|0,L|0)|0;J=Lg(L|0,G|0,K|0,J|0)|0;H=Lg(J|0,G|0,I|0,H|0)|0;E=Lg(H|0,G|0,F|0,E|0)|0;C=Lg(E|0,G|0,D|0,C|0)|0;q=Lg(C|0,G|0,b|0,q|0)|0;b=G;d=Ig(g|0,h|0,d&-33554432|0,0)|0;h=Lg(l|0,c|0,33554432,0)|0;g=$f(h|0,G|0,26)|0;g=Lg(B|0,k|0,g|0,G|0)|0;h=Ig(l|0,c|0,h&-67108864|0,0)|0;c=Lg(q|0,b|0,33554432,0)|0;l=Nf(c|0,G|0,26)|0;k=G;x=Lg(A|0,z|0,y|0,x|0)|0;v=Lg(x|0,G|0,w|0,v|0)|0;t=Lg(v|0,G|0,u|0,t|0)|0;r=Lg(t|0,G|0,s|0,r|0)|0;k=Lg(r|0,G|0,l|0,k|0)|0;l=G;c=Ig(q|0,b|0,c&-67108864|0,0)|0;b=Lg(k|0,l|0,16777216,0)|0;q=Nf(b|0,G|0,25)|0;q=Af(q|0,G|0,19,0)|0;n=Lg(q|0,G|0,m|0,n|0)|0;m=G;b=Ig(k|0,l|0,b&-33554432|0,0)|0;l=Lg(n|0,m|0,33554432,0)|0;k=$f(l|0,G|0,26)|0;k=Lg(p|0,o|0,k|0,G|0)|0;l=Ig(n|0,m|0,l&-67108864|0,0)|0;f[a>>2]=l;f[a+4>>2]=k;f[a+8>>2]=j;f[a+12>>2]=i;f[a+16>>2]=h;f[a+20>>2]=g;f[a+24>>2]=e;f[a+28>>2]=d;f[a+32>>2]=c;f[a+36>>2]=b;return}function va(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=tf(e)|0;o=G;f=tf(e+8|0)|0;g=G;d=Wf(c|0,d|0,56)|0;e=G;if((b+c+(0-(c&7))|0)==(b|0)){q=f^2037671283;j=g^1952801890;n=m^1886610805;k=o^1936682341;i=f^1852075907;r=g^1685025377;g=m^1852142177;f=o^1819895653}else{s=b;q=f^2037671283;j=g^1952801890;n=m^1886610805;l=o^1936682341;k=f^1852075907;i=g^1685025377;g=m^1852142177;f=o^1819895653;while(1){p=tf(s)|0;t=G;v=p^q;j=t^j;l=Lg(n|0,l|0,k|0,i|0)|0;r=G;n=yf(k,i,13)|0;k=G^r;r=yf(l,r,32)|0;q=G;m=Lg(v|0,j|0,g|0,f|0)|0;o=G;j=yf(v,j,16)|0;i=G^o;q=Lg(j^m|0,i|0,r|0,q|0)|0;r=G;i=yf(j^m,i,21)|0;j=r^G;o=Lg(m|0,o|0,n^l|0,k|0)|0;m=G;k=yf(n^l,k,17)|0;f=G^m;m=yf(o,m,32)|0;g=G;r=Lg(k^o|0,f|0,q|0,r|0)|0;l=G;f=yf(k^o,f,13)|0;o=G^l;l=yf(r,l,32)|0;k=G;g=Lg(m|0,g|0,q^i|0,j|0)|0;m=G;j=yf(q^i,j,16)|0;i=G^m;k=Lg(j^g|0,i|0,l|0,k|0)|0;l=G;i=yf(j^g,i,21)|0;j=l^G;m=Lg(f^r|0,o|0,g|0,m|0)|0;g=G;o=yf(f^r,o,17)|0;r=G^g;g=yf(m,g,32)|0;f=G;s=s+8|0;if((s|0)==(b+c+(0-(c&7))|0)){b=b+c+(0-(c&7))|0;q=k^i;n=k^p;k=l^t;i=o^m;break}else{q=k^i;n=k^p;l=l^t;k=o^m;i=r}}}switch(c&7){case 7:{d=Wf(h[b+6>>0]|0|0,0,48)|0|d;e=G|e;u=6;break}case 6:{u=6;break}case 5:{u=7;break}case 4:{u=8;break}case 3:{u=9;break}case 2:{u=10;break}case 1:{u=11;break}default:{}}if((u|0)==6){v=Wf(h[b+5>>0]|0|0,0,40)|0;e=G|e;d=v|d;u=7}if((u|0)==7){e=h[b+4>>0]|0|e;u=8}if((u|0)==8){v=Wf(h[b+3>>0]|0|0,0,24)|0;d=v|d;e=G|e;u=9}if((u|0)==9){v=Wf(h[b+2>>0]|0|0,0,16)|0;d=v|d;e=G|e;u=10}if((u|0)==10){v=Wf(h[b+1>>0]|0|0,0,8)|0;d=v|d;e=G|e;u=11}if((u|0)==11)d=d|(h[b>>0]|0);t=d^q;c=e^j;b=Lg(n|0,k|0,i|0,r|0)|0;v=G;u=yf(i,r,13)|0;o=G^v;v=yf(b,v,32)|0;q=G;s=Lg(t|0,c|0,g|0,f|0)|0;p=G;r=yf(t,c,16)|0;c=G^p;q=Lg(r^s|0,c|0,v|0,q|0)|0;v=G;c=yf(r^s,c,21)|0;r=v^G;p=Lg(s|0,p|0,u^b|0,o|0)|0;s=G;o=yf(u^b,o,17)|0;b=G^s;s=yf(p,s,32)|0;u=G;v=Lg(o^p|0,b|0,q|0,v|0)|0;t=G;b=yf(o^p,b,13)|0;p=G^t;t=yf(v,t,32)|0;o=G;u=Lg(s|0,u|0,q^c|0,r|0)|0;s=G;r=yf(q^c,r,16)|0;c=G^s;o=Lg(r^u|0,c|0,t|0,o|0)|0;t=G;c=yf(r^u,c,21)|0;r=t^G;s=Lg(b^v|0,p|0,u|0,s|0)|0;u=G;p=yf(b^v,p,17)|0;v=G^u;u=yf(s,u,32)|0;b=G;t=Lg(o^d|0,t^e|0,p^s|0,v|0)|0;q=G;v=yf(p^s,v,13)|0;s=G^q;q=yf(t,q,32)|0;p=G;b=Lg(u^238|0,b|0,o^c|0,r|0)|0;u=G;r=yf(o^c,r,16)|0;c=G^u;p=Lg(r^b|0,c|0,q|0,p|0)|0;q=G;c=yf(r^b,c,21)|0;r=q^G;u=Lg(b|0,u|0,v^t|0,s|0)|0;b=G;s=yf(v^t,s,17)|0;t=G^b;b=yf(u,b,32)|0;v=G;q=Lg(s^u|0,t|0,p|0,q|0)|0;o=G;t=yf(s^u,t,13)|0;u=G^o;o=yf(q,o,32)|0;s=G;v=Lg(b|0,v|0,p^c|0,r|0)|0;b=G;r=yf(p^c,r,16)|0;c=G^b;s=Lg(r^v|0,c|0,o|0,s|0)|0;o=G;c=yf(r^v,c,21)|0;r=o^G;b=Lg(t^q|0,u|0,v|0,b|0)|0;v=G;u=yf(t^q,u,17)|0;q=G^v;v=yf(b,v,32)|0;t=G;o=Lg(u^b|0,q|0,s|0,o|0)|0;p=G;q=yf(u^b,q,13)|0;b=G^p;p=yf(o,p,32)|0;u=G;t=Lg(v|0,t|0,s^c|0,r|0)|0;v=G;r=yf(s^c,r,16)|0;c=G^v;u=Lg(r^t|0,c|0,p|0,u|0)|0;p=G;c=yf(r^t,c,21)|0;r=p^G;v=Lg(q^o|0,b|0,t|0,v|0)|0;t=G;b=yf(q^o,b,17)|0;o=G^t;t=yf(v,t,32)|0;q=G;p=Lg(b^v|0,o|0,u|0,p|0)|0;s=G;o=yf(b^v,o,13)|0;v=G^s;s=yf(p,s,32)|0;b=G;q=Lg(t|0,q|0,u^c|0,r|0)|0;t=G;r=yf(u^c,r,16)|0;c=G^t;b=Lg(r^q|0,c|0,s|0,b|0)|0;s=G;c=yf(r^q,c,21)|0;r=s^G;t=Lg(o^p|0,v|0,q|0,t|0)|0;q=G;v=yf(o^p,v,17)|0;p=G^q;q=yf(t,q,32)|0;o=G;We(a,v^t^b^q^(b^c),p^s^o^r);s=Lg(v^t^221|0,p|0,b|0,s|0)|0;u=G;p=yf(v^t^221,p,13)|0;t=G^u;u=yf(s,u,32)|0;v=G;o=Lg(q|0,o|0,b^c|0,r|0)|0;q=G;r=yf(b^c,r,16)|0;c=G^q;v=Lg(r^o|0,c|0,u|0,v|0)|0;u=G;c=yf(r^o,c,21)|0;r=u^G;q=Lg(p^s|0,t|0,o|0,q|0)|0;o=G;t=yf(p^s,t,17)|0;s=G^o;o=yf(q,o,32)|0;p=G;u=Lg(t^q|0,s|0,v|0,u|0)|0;b=G;s=yf(t^q,s,13)|0;q=G^b;b=yf(u,b,32)|0;t=G;p=Lg(o|0,p|0,v^c|0,r|0)|0;o=G;r=yf(v^c,r,16)|0;c=G^o;t=Lg(r^p|0,c|0,b|0,t|0)|0;b=G;c=yf(r^p,c,21)|0;r=b^G;o=Lg(s^u|0,q|0,p|0,o|0)|0;p=G;q=yf(s^u,q,17)|0;u=G^p;p=yf(o,p,32)|0;s=G;b=Lg(q^o|0,u|0,t|0,b|0)|0;v=G;u=yf(q^o,u,13)|0;o=G^v;v=yf(b,v,32)|0;q=G;s=Lg(p|0,s|0,t^c|0,r|0)|0;p=G;r=yf(t^c,r,16)|0;c=G^p;q=Lg(r^s|0,c|0,v|0,q|0)|0;v=G;c=yf(r^s,c,21)|0;r=v^G;p=Lg(u^b|0,o|0,s|0,p|0)|0;s=G;o=yf(u^b,o,17)|0;b=G^s;s=yf(p,s,32)|0;u=G;v=Lg(o^p|0,b|0,q|0,v|0)|0;t=G;b=yf(o^p,b,13)|0;t=G^t;u=Lg(s|0,u|0,q^c|0,r|0)|0;s=G;r=yf(q^c,r,16)|0;r=yf(r^u,G^s,21)|0;c=G;s=Lg(b^v|0,t|0,u|0,s|0)|0;u=G;t=yf(b^v,t,17)|0;v=G;b=yf(s,u,32)|0;We(a+8|0,r^s^t^b,c^u^v^G);return 0}function wa(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;if(!a)return;b=f[8882]|0;c=f[a+-4>>2]|0;j=a+-8+(c&-8)|0;do if(!(c&1)){d=f[a+-8>>2]|0;if(!(c&3))return;h=a+-8+(0-d)|0;g=d+(c&-8)|0;if(h>>>0<b>>>0)return;if((f[8883]|0)==(h|0)){b=f[j+4>>2]|0;if((b&3|0)!=3){i=h;b=g;break}f[8880]=g;f[j+4>>2]=b&-2;f[h+4>>2]=g|1;f[h+g>>2]=g;return}if(d>>>0<256){b=f[h+8>>2]|0;a=f[h+12>>2]|0;if((a|0)==(b|0)){f[8878]=f[8878]&~(1<<(d>>>3));i=h;b=g;break}else{f[b+12>>2]=a;f[a+8>>2]=b;i=h;b=g;break}}e=f[h+24>>2]|0;b=f[h+12>>2]|0;do if((b|0)==(h|0)){b=f[h+16+4>>2]|0;if(!b){b=f[h+16>>2]|0;if(!b){b=0;break}else a=h+16|0}else a=h+16+4|0;while(1){d=b+20|0;c=f[d>>2]|0;if(!c){d=b+16|0;c=f[d>>2]|0;if(!c)break;else{b=c;a=d}}else{b=c;a=d}}f[a>>2]=0}else{i=f[h+8>>2]|0;f[i+12>>2]=b;f[b+8>>2]=i}while(0);if(e){a=f[h+28>>2]|0;if((f[35816+(a<<2)>>2]|0)==(h|0)){f[35816+(a<<2)>>2]=b;if(!b){f[8879]=f[8879]&~(1<<a);i=h;b=g;break}}else{f[((f[e+16>>2]|0)==(h|0)?e+16|0:e+20|0)>>2]=b;if(!b){i=h;b=g;break}}f[b+24>>2]=e;a=f[h+16>>2]|0;if(a|0){f[b+16>>2]=a;f[a+24>>2]=b}a=f[h+16+4>>2]|0;if(a){f[b+20>>2]=a;f[a+24>>2]=b;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=a+-8|0;b=c&-8;h=a+-8|0}while(0);if(h>>>0>=j>>>0)return;c=f[j+4>>2]|0;if(!(c&1))return;if(!(c&2)){if((f[8884]|0)==(j|0)){j=(f[8881]|0)+b|0;f[8881]=j;f[8884]=i;f[i+4>>2]=j|1;if((i|0)!=(f[8883]|0))return;f[8883]=0;f[8880]=0;return}if((f[8883]|0)==(j|0)){j=(f[8880]|0)+b|0;f[8880]=j;f[8883]=h;f[i+4>>2]=j|1;f[h+j>>2]=j;return}e=(c&-8)+b|0;do if(c>>>0<256){a=f[j+8>>2]|0;b=f[j+12>>2]|0;if((b|0)==(a|0)){f[8878]=f[8878]&~(1<<(c>>>3));break}else{f[a+12>>2]=b;f[b+8>>2]=a;break}}else{g=f[j+24>>2]|0;b=f[j+12>>2]|0;do if((b|0)==(j|0)){b=f[j+16+4>>2]|0;if(!b){b=f[j+16>>2]|0;if(!b){a=0;break}else a=j+16|0}else a=j+16+4|0;while(1){d=b+20|0;c=f[d>>2]|0;if(!c){d=b+16|0;c=f[d>>2]|0;if(!c)break;else{b=c;a=d}}else{b=c;a=d}}f[a>>2]=0;a=b}else{a=f[j+8>>2]|0;f[a+12>>2]=b;f[b+8>>2]=a;a=b}while(0);if(g|0){b=f[j+28>>2]|0;if((f[35816+(b<<2)>>2]|0)==(j|0)){f[35816+(b<<2)>>2]=a;if(!a){f[8879]=f[8879]&~(1<<b);break}}else{f[((f[g+16>>2]|0)==(j|0)?g+16|0:g+20|0)>>2]=a;if(!a)break}f[a+24>>2]=g;b=f[j+16>>2]|0;if(b|0){f[a+16>>2]=b;f[b+24>>2]=a}b=f[j+16+4>>2]|0;if(b|0){f[a+20>>2]=b;f[b+24>>2]=a}}}while(0);f[i+4>>2]=e|1;f[h+e>>2]=e;if((i|0)==(f[8883]|0)){f[8880]=e;return}}else{f[j+4>>2]=c&-2;f[i+4>>2]=b|1;f[h+b>>2]=b;e=b}c=e>>>3;if(e>>>0<256){b=f[8878]|0;if(!(b&1<<c)){f[8878]=b|1<<c;b=35552+(c<<1<<2)|0;a=35552+(c<<1<<2)+8|0}else{b=f[35552+(c<<1<<2)+8>>2]|0;a=35552+(c<<1<<2)+8|0}f[a>>2]=i;f[b+12>>2]=i;f[i+8>>2]=b;f[i+12>>2]=35552+(c<<1<<2);return}b=e>>>8;if(b)if(e>>>0>16777215)d=31;else{d=b<<((b+1048320|0)>>>16&8)<<(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4);d=14-(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4|(b+1048320|0)>>>16&8|(d+245760|0)>>>16&2)+(d<<((d+245760|0)>>>16&2)>>>15)|0;d=e>>>(d+7|0)&1|d<<1}else d=0;b=35816+(d<<2)|0;f[i+28>>2]=d;f[i+20>>2]=0;f[i+16>>2]=0;a=f[8879]|0;c=1<<d;a:do if(!(a&c)){f[8879]=a|c;f[b>>2]=i;f[i+24>>2]=b;f[i+12>>2]=i;f[i+8>>2]=i}else{b=f[b>>2]|0;b:do if((f[b+4>>2]&-8|0)!=(e|0)){d=e<<((d|0)==31?0:25-(d>>>1)|0);while(1){c=b+16+(d>>>31<<2)|0;a=f[c>>2]|0;if(!a)break;if((f[a+4>>2]&-8|0)==(e|0)){b=a;break b}else{d=d<<1;b=a}}f[c>>2]=i;f[i+24>>2]=b;f[i+12>>2]=i;f[i+8>>2]=i;break a}while(0);h=b+8|0;j=f[h>>2]|0;f[j+12>>2]=i;f[h>>2]=i;f[i+8>>2]=j;f[i+12>>2]=b;f[i+24>>2]=0}while(0);j=(f[8886]|0)+-1|0;f[8886]=j;if(j|0)return;b=35968;while(1){b=f[b>>2]|0;if(!b)break;else b=b+8|0}f[8886]=-1;return}function xa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;c=f[a+4>>2]|0;do if(!(c&1)){i=f[a>>2]|0;if(!(c&3))return;if((f[8883]|0)==(a+(0-i)|0)){c=f[a+b+4>>2]|0;if((c&3|0)!=3){j=a+(0-i)|0;c=i+b|0;break}f[8880]=i+b;f[a+b+4>>2]=c&-2;f[a+(0-i)+4>>2]=i+b|1;f[a+b>>2]=i+b;return}if(i>>>0<256){c=f[a+(0-i)+8>>2]|0;d=f[a+(0-i)+12>>2]|0;if((d|0)==(c|0)){f[8878]=f[8878]&~(1<<(i>>>3));j=a+(0-i)|0;c=i+b|0;break}else{f[c+12>>2]=d;f[d+8>>2]=c;j=a+(0-i)|0;c=i+b|0;break}}h=f[a+(0-i)+24>>2]|0;c=f[a+(0-i)+12>>2]|0;do if((c|0)==(a+(0-i)|0)){d=a+(0-i)+16|0;c=f[d+4>>2]|0;if(!c){c=f[d>>2]|0;if(!c){c=0;break}}else d=d+4|0;while(1){g=c+20|0;e=f[g>>2]|0;if(!e){g=c+16|0;e=f[g>>2]|0;if(!e)break;else{c=e;d=g}}else{c=e;d=g}}f[d>>2]=0}else{j=f[a+(0-i)+8>>2]|0;f[j+12>>2]=c;f[c+8>>2]=j}while(0);if(h){d=f[a+(0-i)+28>>2]|0;if((f[35816+(d<<2)>>2]|0)==(a+(0-i)|0)){f[35816+(d<<2)>>2]=c;if(!c){f[8879]=f[8879]&~(1<<d);j=a+(0-i)|0;c=i+b|0;break}}else{f[((f[h+16>>2]|0)==(a+(0-i)|0)?h+16|0:h+20|0)>>2]=c;if(!c){j=a+(0-i)|0;c=i+b|0;break}}f[c+24>>2]=h;d=f[a+(0-i)+16>>2]|0;if(d|0){f[c+16>>2]=d;f[d+24>>2]=c}d=f[a+(0-i)+16+4>>2]|0;if(d){f[c+20>>2]=d;f[d+24>>2]=c;j=a+(0-i)|0;c=i+b|0}else{j=a+(0-i)|0;c=i+b|0}}else{j=a+(0-i)|0;c=i+b|0}}else{j=a;c=b}while(0);e=f[a+b+4>>2]|0;if(!(e&2)){if((f[8884]|0)==(a+b|0)){b=(f[8881]|0)+c|0;f[8881]=b;f[8884]=j;f[j+4>>2]=b|1;if((j|0)!=(f[8883]|0))return;f[8883]=0;f[8880]=0;return}if((f[8883]|0)==(a+b|0)){b=(f[8880]|0)+c|0;f[8880]=b;f[8883]=j;f[j+4>>2]=b|1;f[j+b>>2]=b;return}h=(e&-8)+c|0;do if(e>>>0<256){d=f[a+b+8>>2]|0;c=f[a+b+12>>2]|0;if((c|0)==(d|0)){f[8878]=f[8878]&~(1<<(e>>>3));break}else{f[d+12>>2]=c;f[c+8>>2]=d;break}}else{i=f[a+b+24>>2]|0;c=f[a+b+12>>2]|0;do if((c|0)==(a+b|0)){c=f[a+b+16+4>>2]|0;if(!c){c=f[a+b+16>>2]|0;if(!c){d=0;break}else d=a+b+16|0}else d=a+b+16+4|0;while(1){g=c+20|0;e=f[g>>2]|0;if(!e){g=c+16|0;e=f[g>>2]|0;if(!e)break;else{c=e;d=g}}else{c=e;d=g}}f[d>>2]=0;d=c}else{d=f[a+b+8>>2]|0;f[d+12>>2]=c;f[c+8>>2]=d;d=c}while(0);if(i|0){c=f[a+b+28>>2]|0;if((f[35816+(c<<2)>>2]|0)==(a+b|0)){f[35816+(c<<2)>>2]=d;if(!d){f[8879]=f[8879]&~(1<<c);break}}else{f[((f[i+16>>2]|0)==(a+b|0)?i+16|0:i+20|0)>>2]=d;if(!d)break}f[d+24>>2]=i;c=f[a+b+16>>2]|0;if(c|0){f[d+16>>2]=c;f[c+24>>2]=d}c=f[a+b+16+4>>2]|0;if(c|0){f[d+20>>2]=c;f[c+24>>2]=d}}}while(0);f[j+4>>2]=h|1;f[j+h>>2]=h;if((j|0)==(f[8883]|0)){f[8880]=h;return}}else{f[a+b+4>>2]=e&-2;f[j+4>>2]=c|1;f[j+c>>2]=c;h=c}e=h>>>3;if(h>>>0<256){c=f[8878]|0;if(!(c&1<<e)){f[8878]=c|1<<e;c=35552+(e<<1<<2)|0;d=35552+(e<<1<<2)+8|0}else{c=f[35552+(e<<1<<2)+8>>2]|0;d=35552+(e<<1<<2)+8|0}f[d>>2]=j;f[c+12>>2]=j;f[j+8>>2]=c;f[j+12>>2]=35552+(e<<1<<2);return}c=h>>>8;if(c)if(h>>>0>16777215)g=31;else{g=c<<((c+1048320|0)>>>16&8)<<(((c<<((c+1048320|0)>>>16&8))+520192|0)>>>16&4);g=14-(((c<<((c+1048320|0)>>>16&8))+520192|0)>>>16&4|(c+1048320|0)>>>16&8|(g+245760|0)>>>16&2)+(g<<((g+245760|0)>>>16&2)>>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;c=35816+(g<<2)|0;f[j+28>>2]=g;f[j+20>>2]=0;f[j+16>>2]=0;d=f[8879]|0;e=1<<g;if(!(d&e)){f[8879]=d|e;f[c>>2]=j;f[j+24>>2]=c;f[j+12>>2]=j;f[j+8>>2]=j;return}c=f[c>>2]|0;a:do if((f[c+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=c+16+(g>>>31<<2)|0;d=f[e>>2]|0;if(!d)break;if((f[d+4>>2]&-8|0)==(h|0)){c=d;break a}else{g=g<<1;c=d}}f[e>>2]=j;f[j+24>>2]=c;f[j+12>>2]=j;f[j+8>>2]=j;return}while(0);a=c+8|0;b=f[a>>2]|0;f[b+12>>2]=j;f[a>>2]=j;f[j+8>>2]=b;f[j+12>>2]=c;f[j+24>>2]=0;return}function ya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=tf(e)|0;o=G;f=tf(e+8|0)|0;g=G;d=Wf(c|0,d|0,56)|0;e=G;if((b+c+(0-(c&7))|0)==(b|0)){q=f^2037671283;j=g^1952801890;n=m^1886610805;k=o^1936682341;i=f^1852075885;r=g^1685025377;g=m^1852142177;f=o^1819895653}else{s=b;q=f^2037671283;j=g^1952801890;n=m^1886610805;l=o^1936682341;k=f^1852075885;i=g^1685025377;g=m^1852142177;f=o^1819895653;while(1){p=tf(s)|0;t=G;v=p^q;j=t^j;l=Lg(n|0,l|0,k|0,i|0)|0;r=G;n=yf(k,i,13)|0;k=G^r;r=yf(l,r,32)|0;q=G;m=Lg(v|0,j|0,g|0,f|0)|0;o=G;j=yf(v,j,16)|0;i=G^o;q=Lg(j^m|0,i|0,r|0,q|0)|0;r=G;i=yf(j^m,i,21)|0;j=r^G;o=Lg(m|0,o|0,n^l|0,k|0)|0;m=G;k=yf(n^l,k,17)|0;f=G^m;m=yf(o,m,32)|0;g=G;r=Lg(k^o|0,f|0,q|0,r|0)|0;l=G;f=yf(k^o,f,13)|0;o=G^l;l=yf(r,l,32)|0;k=G;g=Lg(m|0,g|0,q^i|0,j|0)|0;m=G;j=yf(q^i,j,16)|0;i=G^m;k=Lg(j^g|0,i|0,l|0,k|0)|0;l=G;i=yf(j^g,i,21)|0;j=l^G;m=Lg(f^r|0,o|0,g|0,m|0)|0;g=G;o=yf(f^r,o,17)|0;r=G^g;g=yf(m,g,32)|0;f=G;s=s+8|0;if((s|0)==(b+c+(0-(c&7))|0)){b=b+c+(0-(c&7))|0;q=k^i;n=k^p;k=l^t;i=o^m;break}else{q=k^i;n=k^p;l=l^t;k=o^m;i=r}}}switch(c&7){case 7:{d=Wf(h[b+6>>0]|0|0,0,48)|0|d;e=G|e;u=6;break}case 6:{u=6;break}case 5:{u=7;break}case 4:{u=8;break}case 3:{u=9;break}case 2:{u=10;break}case 1:{u=11;break}default:{}}if((u|0)==6){v=Wf(h[b+5>>0]|0|0,0,40)|0;e=G|e;d=v|d;u=7}if((u|0)==7){e=h[b+4>>0]|0|e;u=8}if((u|0)==8){v=Wf(h[b+3>>0]|0|0,0,24)|0;d=v|d;e=G|e;u=9}if((u|0)==9){v=Wf(h[b+2>>0]|0|0,0,16)|0;d=v|d;e=G|e;u=10}if((u|0)==10){v=Wf(h[b+1>>0]|0|0,0,8)|0;d=v|d;e=G|e;u=11}if((u|0)==11)d=d|(h[b>>0]|0);s=d^q;c=e^j;o=Lg(n|0,k|0,i|0,r|0)|0;p=G;q=yf(i,r,13)|0;b=G^p;p=yf(o,p,32)|0;u=G;t=Lg(s|0,c|0,g|0,f|0)|0;v=G;r=yf(s,c,16)|0;c=G^v;u=Lg(r^t|0,c|0,p|0,u|0)|0;p=G;c=yf(r^t,c,21)|0;r=p^G;v=Lg(t|0,v|0,q^o|0,b|0)|0;t=G;b=yf(q^o,b,17)|0;o=G^t;t=yf(v,t,32)|0;q=G;p=Lg(b^v|0,o|0,u|0,p|0)|0;s=G;o=yf(b^v,o,13)|0;v=G^s;s=yf(p,s,32)|0;b=G;q=Lg(t|0,q|0,u^c|0,r|0)|0;t=G;r=yf(u^c,r,16)|0;c=G^t;b=Lg(r^q|0,c|0,s|0,b|0)|0;s=G;c=yf(r^q,c,21)|0;r=s^G;t=Lg(o^p|0,v|0,q|0,t|0)|0;q=G;v=yf(o^p,v,17)|0;p=G^q;q=yf(t,q,32)|0;o=G;s=Lg(b^d|0,s^e|0,v^t|0,p|0)|0;u=G;p=yf(v^t,p,13)|0;t=G^u;u=yf(s,u,32)|0;v=G;o=Lg(q^255|0,o|0,b^c|0,r|0)|0;q=G;r=yf(b^c,r,16)|0;c=G^q;v=Lg(r^o|0,c|0,u|0,v|0)|0;u=G;c=yf(r^o,c,21)|0;r=u^G;q=Lg(o|0,q|0,p^s|0,t|0)|0;o=G;t=yf(p^s,t,17)|0;s=G^o;o=yf(q,o,32)|0;p=G;u=Lg(t^q|0,s|0,v|0,u|0)|0;b=G;s=yf(t^q,s,13)|0;q=G^b;b=yf(u,b,32)|0;t=G;p=Lg(o|0,p|0,v^c|0,r|0)|0;o=G;r=yf(v^c,r,16)|0;c=G^o;t=Lg(r^p|0,c|0,b|0,t|0)|0;b=G;c=yf(r^p,c,21)|0;r=b^G;o=Lg(s^u|0,q|0,p|0,o|0)|0;p=G;q=yf(s^u,q,17)|0;u=G^p;p=yf(o,p,32)|0;s=G;b=Lg(q^o|0,u|0,t|0,b|0)|0;v=G;u=yf(q^o,u,13)|0;o=G^v;v=yf(b,v,32)|0;q=G;s=Lg(p|0,s|0,t^c|0,r|0)|0;p=G;r=yf(t^c,r,16)|0;c=G^p;q=Lg(r^s|0,c|0,v|0,q|0)|0;v=G;c=yf(r^s,c,21)|0;r=v^G;p=Lg(u^b|0,o|0,s|0,p|0)|0;s=G;o=yf(u^b,o,17)|0;b=G^s;s=yf(p,s,32)|0;u=G;v=Lg(o^p|0,b|0,q|0,v|0)|0;t=G;b=yf(o^p,b,13)|0;t=G^t;u=Lg(s|0,u|0,q^c|0,r|0)|0;s=G;r=yf(q^c,r,16)|0;r=yf(r^u,G^s,21)|0;c=G;s=Lg(b^v|0,t|0,u|0,s|0)|0;u=G;t=yf(b^v,t,17)|0;v=G;b=yf(s,u,32)|0;We(a,r^s^t^b,c^u^v^G);return 0}function za(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;T=t;S=t=t+63&-64;t=t+64|0;if(!((e|0)==0&(g|0)==0)){if(g>>>0>0|(g|0)==0&e>>>0>4294967295)Fj();D=f[a>>2]|0;E=f[a+4>>2]|0;F=f[a+8>>2]|0;H=f[a+12>>2]|0;I=f[a+16>>2]|0;J=f[a+20>>2]|0;K=f[a+24>>2]|0;L=f[a+28>>2]|0;M=f[a+32>>2]|0;N=f[a+36>>2]|0;O=f[a+40>>2]|0;P=f[a+44>>2]|0;Q=f[a+56>>2]|0;R=f[a+60>>2]|0;h=0;A=f[a+52>>2]|0;y=f[a+48>>2]|0;B=g;C=e;while(1){z=B>>>0<0|(B|0)==0&C>>>0<64;if(z){g=S;e=g+64|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(e|0));g=0;do{b[S+g>>0]=b[c+g>>0]|0;g=g+1|0}while(B>>>0>0|(B|0)==0&C>>>0>g>>>0);h=d;c=S;d=S}g=D;e=E;i=F;j=H;k=I;l=J;m=K;n=L;o=M;p=N;q=O;r=R;s=Q;u=A;v=y;w=P;x=20;do{la=g+k|0;aa=oi(la^v,16)|0;$=aa+o|0;ma=oi($^k,12)|0;aa=oi(ma+la^aa,8)|0;Y=oi(aa+$^ma,7)|0;ha=e+l|0;W=oi(ha^u,16)|0;V=W+p|0;ia=oi(V^l,12)|0;W=oi(ia+ha^W,8)|0;na=oi(W+V^ia,7)|0;ca=i+m|0;X=oi(ca^s,16)|0;ba=X+q|0;da=oi(ba^m,12)|0;X=oi(da+ca^X,8)|0;ja=oi(X+ba^da,7)|0;Z=j+n|0;fa=oi(Z^r,16)|0;U=fa+w|0;_=oi(U^n,12)|0;fa=oi(_+Z^fa,8)|0;ea=oi(fa+U^_,7)|0;ka=oi(fa^na+(ma+la),16)|0;ga=oi(ka+(X+ba)^na,12)|0;g=ga+(na+(ma+la))|0;r=oi(g^ka,8)|0;q=r+(ka+(X+ba))|0;l=oi(q^ga,7)|0;ga=oi(ja+(ia+ha)^aa,16)|0;ba=oi(ga+(fa+U)^ja,12)|0;e=ba+(ja+(ia+ha))|0;v=oi(e^ga,8)|0;w=v+(ga+(fa+U))|0;m=oi(w^ba,7)|0;ba=oi(ea+(da+ca)^W,16)|0;U=oi(ba+(aa+$)^ea,12)|0;i=U+(ea+(da+ca))|0;u=oi(i^ba,8)|0;o=u+(ba+(aa+$))|0;n=oi(o^U,7)|0;X=oi(_+Z+Y^X,16)|0;U=oi(X+(W+V)^Y,12)|0;j=U+(_+Z+Y)|0;s=oi(j^X,8)|0;p=s+(X+(W+V))|0;k=oi(p^U,7)|0;x=x+-2|0}while((x|0)!=0);_=(yh(c)|0)^g+D;$=(yh(c+4|0)|0)^e+E;aa=(yh(c+8|0)|0)^i+F;ba=(yh(c+12|0)|0)^j+H;ca=(yh(c+16|0)|0)^k+I;da=(yh(c+20|0)|0)^l+J;ea=(yh(c+24|0)|0)^m+K;fa=(yh(c+28|0)|0)^n+L;ga=(yh(c+32|0)|0)^o+M;ha=(yh(c+36|0)|0)^p+N;ia=(yh(c+40|0)|0)^q+O;ja=(yh(c+44|0)|0)^w+P;ka=(yh(c+48|0)|0)^v+y;la=(yh(c+52|0)|0)^u+A;ma=(yh(c+56|0)|0)^s+Q;na=(yh(c+60|0)|0)^r+R;e=y+1|0;g=A+((e|0)==0&1)|0;Qg(d,_);Qg(d+4|0,$);Qg(d+8|0,aa);Qg(d+12|0,ba);Qg(d+16|0,ca);Qg(d+20|0,da);Qg(d+24|0,ea);Qg(d+28|0,fa);Qg(d+32|0,ga);Qg(d+36|0,ha);Qg(d+40|0,ia);Qg(d+44|0,ja);Qg(d+48|0,ka);Qg(d+52|0,la);Qg(d+56|0,ma);Qg(d+60|0,na);if(B>>>0<0|(B|0)==0&C>>>0<65)break;na=Lg(C|0,B|0,-64,-1)|0;c=c+64|0;d=d+64|0;A=g;y=e;B=G;C=na}if(z?C|0:0){c=0;do{b[h+c>>0]=b[d+c>>0]|0;c=c+1|0}while((c|0)!=(C|0))}f[a+48>>2]=e;f[a+52>>2]=g}t=T;return}function Aa(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;s=(b[a+80>>0]|0)==0?16777216:0;t=f[a+4>>2]|0;o=f[a+8>>2]|0;p=f[a+12>>2]|0;q=f[a+16>>2]|0;k=f[a+20>>2]|0;j=f[a+24>>2]|0;i=f[a+28>>2]|0;h=f[a+32>>2]|0;g=f[a+36>>2]|0;if(e>>>0>0|(e|0)==0&d>>>0>15){r=f[a>>2]|0;m=d;while(1){y=((yh(c)|0)&67108863)+k|0;z=((yh(c+3|0)|0)>>>2&67108863)+j|0;x=((yh(c+6|0)|0)>>>4&67108863)+i|0;w=((yh(c+9|0)|0)>>>6)+h|0;k=((yh(c+12|0)|0)>>>8|s)+g|0;g=Af(y|0,0,r|0,0)|0;d=G;i=Af(z|0,0,q*5|0,0)|0;d=Lg(i|0,G|0,g|0,d|0)|0;g=G;i=Af(x|0,0,p*5|0,0)|0;i=Lg(d|0,g|0,i|0,G|0)|0;g=G;d=Af(w|0,0,o*5|0,0)|0;d=Lg(i|0,g|0,d|0,G|0)|0;g=G;i=Af(k|0,0,t*5|0,0)|0;i=Lg(d|0,g|0,i|0,G|0)|0;g=G;d=Af(y|0,0,t|0,0)|0;l=G;v=Af(z|0,0,r|0,0)|0;l=Lg(v|0,G|0,d|0,l|0)|0;d=G;v=Af(x|0,0,q*5|0,0)|0;v=Lg(l|0,d|0,v|0,G|0)|0;d=G;l=Af(w|0,0,p*5|0,0)|0;l=Lg(v|0,d|0,l|0,G|0)|0;d=G;v=Af(k|0,0,o*5|0,0)|0;v=Lg(l|0,d|0,v|0,G|0)|0;d=G;l=Af(y|0,0,o|0,0)|0;n=G;u=Af(z|0,0,t|0,0)|0;n=Lg(u|0,G|0,l|0,n|0)|0;l=G;u=Af(x|0,0,r|0,0)|0;u=Lg(n|0,l|0,u|0,G|0)|0;l=G;n=Af(w|0,0,q*5|0,0)|0;n=Lg(u|0,l|0,n|0,G|0)|0;l=G;u=Af(k|0,0,p*5|0,0)|0;u=Lg(n|0,l|0,u|0,G|0)|0;l=G;n=Af(y|0,0,p|0,0)|0;h=G;j=Af(z|0,0,o|0,0)|0;h=Lg(j|0,G|0,n|0,h|0)|0;n=G;j=Af(x|0,0,t|0,0)|0;j=Lg(h|0,n|0,j|0,G|0)|0;n=G;h=Af(w|0,0,r|0,0)|0;h=Lg(j|0,n|0,h|0,G|0)|0;n=G;j=Af(k|0,0,q*5|0,0)|0;j=Lg(h|0,n|0,j|0,G|0)|0;n=G;h=Af(y|0,0,q|0,0)|0;y=G;z=Af(z|0,0,p|0,0)|0;y=Lg(z|0,G|0,h|0,y|0)|0;h=G;x=Af(x|0,0,o|0,0)|0;x=Lg(y|0,h|0,x|0,G|0)|0;h=G;w=Af(w|0,0,t|0,0)|0;w=Lg(x|0,h|0,w|0,G|0)|0;h=G;k=Af(k|0,0,r|0,0)|0;k=Lg(w|0,h|0,k|0,G|0)|0;h=G;g=$f(i|0,g|0,26)|0;g=Lg(v|0,d|0,g|0,0)|0;d=$f(g|0,G|0,26)|0;d=Lg(u|0,l|0,d|0,0)|0;l=$f(d|0,G|0,26)|0;l=Lg(j|0,n|0,l|0,0)|0;n=$f(l|0,G|0,26)|0;n=Lg(k|0,h|0,n|0,0)|0;h=$f(n|0,G|0,26)|0;m=Lg(m|0,e|0,-16,-1)|0;e=G;if(!(e>>>0>0|(e|0)==0&m>>>0>15)){k=(h*5|0)+(i&67108863)&67108863;j=(((h*5|0)+(i&67108863)|0)>>>26)+(g&67108863)|0;i=d&67108863;h=l&67108863;g=n&67108863;break}else{k=(h*5|0)+(i&67108863)&67108863;j=(((h*5|0)+(i&67108863)|0)>>>26)+(g&67108863)|0;i=d&67108863;h=l&67108863;g=n&67108863;c=c+16|0}}}f[a+20>>2]=k;f[a+24>>2]=j;f[a+28>>2]=i;f[a+32>>2]=h;f[a+36>>2]=g;return}function Ba(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;k=we(c)|0;j=G;w=Cf(b[c+4>>0]|0,b[c+5>>0]|0,b[c+6>>0]|0)|0;w=Wf(w|0,G|0,6)|0;x=G;i=Cf(b[c+7>>0]|0,b[c+8>>0]|0,b[c+9>>0]|0)|0;i=Wf(i|0,G|0,5)|0;h=G;u=Cf(b[c+10>>0]|0,b[c+11>>0]|0,b[c+12>>0]|0)|0;u=Wf(u|0,G|0,3)|0;v=G;g=Cf(b[c+13>>0]|0,b[c+14>>0]|0,b[c+15>>0]|0)|0;g=Wf(g|0,G|0,2)|0;e=G;s=we(c+16|0)|0;t=G;l=Cf(b[c+20>>0]|0,b[c+21>>0]|0,b[c+22>>0]|0)|0;l=Wf(l|0,G|0,7)|0;d=G;m=Cf(b[c+23>>0]|0,b[c+24>>0]|0,b[c+25>>0]|0)|0;m=Wf(m|0,G|0,5)|0;r=G;n=Cf(b[c+26>>0]|0,b[c+27>>0]|0,b[c+28>>0]|0)|0;n=Wf(n|0,G|0,4)|0;o=G;p=Cf(b[c+29>>0]|0,b[c+30>>0]|0,b[c+31>>0]|0)|0;p=Wf(p|0,G|0,2)|0;q=Lg(p&33554428|0,0,16777216,0)|0;y=$f(q|0,G|0,25)|0;y=Ig(0,0,y|0,G|0)|0;j=Lg(y&19|0,0,k|0,j|0)|0;k=G;q=Ig(p&33554428|0,0,q&33554432|0,0)|0;p=G;y=Lg(w|0,x|0,16777216,0)|0;c=Nf(y|0,G|0,25)|0;h=Lg(c|0,G|0,i|0,h|0)|0;i=G;y=Ig(w|0,x|0,y&-33554432|0,0)|0;x=G;w=Lg(u|0,v|0,16777216,0)|0;c=Nf(w|0,G|0,25)|0;e=Lg(c|0,G|0,g|0,e|0)|0;g=G;w=Ig(u|0,v|0,w&-33554432|0,0)|0;v=G;u=Lg(s|0,t|0,16777216,0)|0;c=Nf(u|0,G|0,25)|0;c=Lg(l|0,d|0,c|0,G|0)|0;d=G;u=Ig(s|0,t|0,u&-33554432|0,0)|0;t=G;s=Lg(m|0,r|0,16777216,0)|0;l=Nf(s|0,G|0,25)|0;o=Lg(l|0,G|0,n|0,o|0)|0;n=G;s=Ig(m|0,r|0,s&-33554432|0,0)|0;r=G;m=Lg(j|0,k|0,33554432,0)|0;l=$f(m|0,G|0,26)|0;l=Lg(y|0,x|0,l|0,G|0)|0;m=Ig(j|0,k|0,m&-67108864|0,0)|0;k=Lg(h|0,i|0,33554432,0)|0;j=$f(k|0,G|0,26)|0;j=Lg(w|0,v|0,j|0,G|0)|0;k=Ig(h|0,i|0,k&-67108864|0,0)|0;i=Lg(e|0,g|0,33554432,0)|0;h=$f(i|0,G|0,26)|0;h=Lg(u|0,t|0,h|0,G|0)|0;i=Ig(e|0,g|0,i&-67108864|0,0)|0;g=Lg(c|0,d|0,33554432,0)|0;e=$f(g|0,G|0,26)|0;e=Lg(s|0,r|0,e|0,G|0)|0;g=Ig(c|0,d|0,g&-67108864|0,0)|0;d=Lg(o|0,n|0,33554432,0)|0;c=$f(d|0,G|0,26)|0;c=Lg(q|0,p|0,c|0,G|0)|0;d=Ig(o|0,n|0,d&-67108864|0,0)|0;f[a>>2]=m;f[a+4>>2]=l;f[a+8>>2]=k;f[a+12>>2]=j;f[a+16>>2]=i;f[a+20>>2]=h;f[a+24>>2]=g;f[a+28>>2]=e;f[a+32>>2]=d;f[a+36>>2]=c;return}function Ca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;j=f[b>>2]|0;v=f[b+4>>2]|0;h=f[b+8>>2]|0;t=f[b+12>>2]|0;e=f[b+16>>2]|0;r=f[b+20>>2]|0;c=f[b+24>>2]|0;l=f[b+28>>2]|0;m=f[b+32>>2]|0;x=f[b+36>>2]|0;j=Af(j|0,((j|0)<0)<<31>>31|0,121666,0)|0;i=G;v=Af(v|0,((v|0)<0)<<31>>31|0,121666,0)|0;w=G;h=Af(h|0,((h|0)<0)<<31>>31|0,121666,0)|0;g=G;t=Af(t|0,((t|0)<0)<<31>>31|0,121666,0)|0;u=G;e=Af(e|0,((e|0)<0)<<31>>31|0,121666,0)|0;d=G;r=Af(r|0,((r|0)<0)<<31>>31|0,121666,0)|0;s=G;c=Af(c|0,((c|0)<0)<<31>>31|0,121666,0)|0;b=G;l=Af(l|0,((l|0)<0)<<31>>31|0,121666,0)|0;q=G;m=Af(m|0,((m|0)<0)<<31>>31|0,121666,0)|0;n=G;x=Af(x|0,((x|0)<0)<<31>>31|0,121666,0)|0;o=G;p=Lg(x|0,o|0,16777216,0)|0;k=Nf(p|0,G|0,25)|0;k=Af(k|0,G|0,19,0)|0;i=Lg(k|0,G|0,j|0,i|0)|0;j=G;p=Ig(x|0,o|0,p&-33554432|0,0)|0;o=G;x=Lg(v|0,w|0,16777216,0)|0;k=Nf(x|0,G|0,25)|0;g=Lg(k|0,G|0,h|0,g|0)|0;h=G;x=Ig(v|0,w|0,x&-33554432|0,0)|0;w=G;v=Lg(t|0,u|0,16777216,0)|0;k=Nf(v|0,G|0,25)|0;d=Lg(k|0,G|0,e|0,d|0)|0;e=G;v=Ig(t|0,u|0,v&-33554432|0,0)|0;u=G;t=Lg(r|0,s|0,16777216,0)|0;k=Nf(t|0,G|0,25)|0;b=Lg(k|0,G|0,c|0,b|0)|0;c=G;t=Ig(r|0,s|0,t&-33554432|0,0)|0;s=G;r=Lg(l|0,q|0,16777216,0)|0;k=Nf(r|0,G|0,25)|0;n=Lg(k|0,G|0,m|0,n|0)|0;m=G;r=Ig(l|0,q|0,r&-33554432|0,0)|0;q=G;l=Lg(i|0,j|0,33554432,0)|0;k=$f(l|0,G|0,26)|0;k=Lg(x|0,w|0,k|0,G|0)|0;l=Ig(i|0,j|0,l&-67108864|0,0)|0;j=Lg(g|0,h|0,33554432,0)|0;i=$f(j|0,G|0,26)|0;i=Lg(v|0,u|0,i|0,G|0)|0;j=Ig(g|0,h|0,j&-67108864|0,0)|0;h=Lg(d|0,e|0,33554432,0)|0;g=$f(h|0,G|0,26)|0;g=Lg(t|0,s|0,g|0,G|0)|0;h=Ig(d|0,e|0,h&-67108864|0,0)|0;e=Lg(b|0,c|0,33554432,0)|0;d=$f(e|0,G|0,26)|0;d=Lg(r|0,q|0,d|0,G|0)|0;e=Ig(b|0,c|0,e&-67108864|0,0)|0;c=Lg(n|0,m|0,33554432,0)|0;b=$f(c|0,G|0,26)|0;b=Lg(p|0,o|0,b|0,G|0)|0;c=Ig(n|0,m|0,c&-67108864|0,0)|0;f[a>>2]=l;f[a+4>>2]=k;f[a+8>>2]=j;f[a+12>>2]=i;f[a+16>>2]=h;f[a+20>>2]=g;f[a+24>>2]=e;f[a+28>>2]=d;f[a+32>>2]=c;f[a+36>>2]=b;return}function Da(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!b)if(!d){if(e|0){f[e>>2]=(a>>>0)%(c>>>0);f[e+4>>2]=0}d=0;e=(a>>>0)/(c>>>0)>>>0;return (G=d,e)|0}else{if(!e){d=0;e=0;return (G=d,e)|0}f[e>>2]=a|0;f[e+4>>2]=b&0;d=0;e=0;return (G=d,e)|0}do if(c){if(d|0){h=(Y(d|0)|0)-(Y(b|0)|0)|0;if(h>>>0<=31){n=h+1|0;i=a>>>((h+1|0)>>>0)&h-31>>31|b<<31-h;m=b>>>((h+1|0)>>>0)&h-31>>31;g=0;h=a<<31-h;break}if(!e){d=0;e=0;return (G=d,e)|0}f[e>>2]=a|0;f[e+4>>2]=b|b&0;d=0;e=0;return (G=d,e)|0}if(c-1&c|0){h=(Y(c|0)|0)+33-(Y(b|0)|0)|0;n=h;i=32-h-1>>31&b>>>((h-32|0)>>>0)|(b<<32-h|a>>>(h>>>0))&h-32>>31;m=h-32>>31&b>>>(h>>>0);g=a<<64-h&32-h>>31;h=(b<<64-h|a>>>((h-32|0)>>>0))&32-h>>31|a<<32-h&h-33>>31;break}if(e|0){f[e>>2]=c-1&a;f[e+4>>2]=0}if((c|0)==1){d=b|b&0;e=a|0|0;return (G=d,e)|0}else{e=hi(c|0)|0;d=b>>>(e>>>0)|0;e=b<<32-e|a>>>(e>>>0)|0;return (G=d,e)|0}}else{if(!d){if(e|0){f[e>>2]=(b>>>0)%(c>>>0);f[e+4>>2]=0}d=0;e=(b>>>0)/(c>>>0)>>>0;return (G=d,e)|0}if(!a){if(e|0){f[e>>2]=0;f[e+4>>2]=(b>>>0)%(d>>>0)}c=0;e=(b>>>0)/(d>>>0)>>>0;return (G=c,e)|0}if(!(d-1&d)){if(e|0){f[e>>2]=a|0;f[e+4>>2]=d-1&b|b&0}c=0;e=b>>>((hi(d|0)|0)>>>0);return (G=c,e)|0}h=(Y(d|0)|0)-(Y(b|0)|0)|0;if(h>>>0<=30){n=h+1|0;i=b<<31-h|a>>>((h+1|0)>>>0);m=b>>>((h+1|0)>>>0);g=0;h=a<<31-h;break}if(!e){d=0;e=0;return (G=d,e)|0}f[e>>2]=a|0;f[e+4>>2]=b|b&0;d=0;e=0;return (G=d,e)|0}while(0);if(!n){j=h;b=m;a=0;h=0}else{k=Lg(c|0|0,d|d&0|0,-1,-1)|0;l=G;j=h;b=m;a=n;h=0;do{p=j;j=g>>>31|j<<1;g=h|g<<1;p=i<<1|p>>>31|0;o=i>>>31|b<<1|0;Ig(k|0,l|0,p|0,o|0)|0;n=G;m=n>>31|((n|0)<0?-1:0)<<1;h=m&1;i=Ig(p|0,o|0,m&(c|0)|0,(((n|0)<0?-1:0)>>31|((n|0)<0?-1:0)<<1)&(d|d&0)|0)|0;b=G;a=a-1|0}while((a|0)!=0);a=0}if(e|0){f[e>>2]=i;f[e+4>>2]=b}o=(g|0)>>>31|j<<1|(0<<1|g>>>31)&0|a;p=(g<<1|0>>>31)&-2|h;return (G=o,p)|0}function Ea(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;u=t;v=t=t+63&-64;t=t+64|0;ig(v,a);b=0;d=f[v+28>>2]|0;e=f[v>>2]|0;g=f[v+48>>2]|0;h=f[v+16>>2]|0;i=f[v+32>>2]|0;j=f[v+20>>2]|0;c=f[v+4>>2]|0;k=f[v+36>>2]|0;l=f[v+52>>2]|0;m=f[v+40>>2]|0;n=f[v+24>>2]|0;o=f[v+56>>2]|0;p=f[v+8>>2]|0;q=f[v+60>>2]|0;r=f[v+44>>2]|0;s=f[v+12>>2]|0;do{F=g+e|0;F=(F<<7|F>>>25)^h;C=F+e|0;C=(C<<9|C>>>23)^i;z=(C+F<<13|(C+F|0)>>>19)^g;I=(z+C<<18|(z+C|0)>>>14)^e;B=c+j|0;B=(B<<7|B>>>25)^k;y=B+j|0;y=(y<<9|y>>>23)^l;L=(y+B<<13|(y+B|0)>>>19)^c;E=(L+y<<18|(L+y|0)>>>14)^j;x=n+m|0;x=(x<<7|x>>>25)^o;K=x+m|0;K=(K<<9|K>>>23)^p;G=(K+x<<13|(K+x|0)>>>19)^n;A=(G+K<<18|(G+K|0)>>>14)^m;J=r+q|0;J=(J<<7|J>>>25)^s;H=J+q|0;H=(H<<9|H>>>23)^d;D=(H+J<<13|(H+J|0)>>>19)^r;w=(D+H<<18|(D+H|0)>>>14)^q;c=(J+I<<7|(J+I|0)>>>25)^L;L=c+I|0;p=(L<<9|L>>>23)^K;K=p+c|0;s=(K<<13|K>>>19)^J;J=s+p|0;e=(J<<18|J>>>14)^I;n=G^(E+F<<7|(E+F|0)>>>25);G=n+E|0;d=H^(G<<9|G>>>23);G=d+n|0;h=(G<<13|G>>>19)^F;F=h+d|0;j=(F<<18|F>>>14)^E;r=D^(A+B<<7|(A+B|0)>>>25);D=r+A|0;i=(D<<9|D>>>23)^C;C=i+r|0;k=(C<<13|C>>>19)^B;B=k+i|0;m=(B<<18|B>>>14)^A;g=(w+x<<7|(w+x|0)>>>25)^z;z=g+w|0;l=(z<<9|z>>>23)^y;y=l+g|0;o=(y<<13|y>>>19)^x;x=o+l|0;q=(x<<18|x>>>14)^w;b=b+2|0}while(b>>>0<8);f[v>>2]=e;f[v+48>>2]=g;f[v+16>>2]=h;f[v+32>>2]=i;f[v+20>>2]=j;f[v+4>>2]=c;f[v+36>>2]=k;f[v+52>>2]=l;f[v+40>>2]=m;f[v+24>>2]=n;f[v+56>>2]=o;f[v+8>>2]=p;f[v+60>>2]=q;f[v+44>>2]=r;f[v+12>>2]=s;f[v+28>>2]=d;f[a>>2]=(f[a>>2]|0)+e;b=1;while(1){L=a+(b<<2)|0;f[L>>2]=(f[L>>2]|0)+c;b=b+1|0;if((b|0)==16)break;c=f[v+(b<<2)>>2]|0}t=u;return}function Fa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;if(!d){G=857760878;H=2036477234;I=1634760805;y=1797285236}else{I=yh(d)|0;G=yh(d+4|0)|0;H=yh(d+8|0)|0;y=yh(d+12|0)|0}z=yh(c)|0;A=yh(c+4|0)|0;B=yh(c+8|0)|0;C=yh(c+12|0)|0;D=yh(c+16|0)|0;E=yh(c+20|0)|0;F=yh(c+24|0)|0;u=yh(c+28|0)|0;v=yh(b)|0;w=yh(b+4|0)|0;x=yh(b+8|0)|0;t=yh(b+12|0)|0;d=z;c=A;b=B;f=C;g=v;h=w;i=x;j=t;k=D;l=u;m=F;n=E;o=0;p=G;q=H;r=y;s=I;do{S=(oi(s+n|0,7)|0)^f;P=(oi(S+s|0,9)|0)^i;M=(oi(P+S|0,13)|0)^n;V=(oi(M+P|0,18)|0)^s;O=(oi(d+p|0,7)|0)^j;L=(oi(O+p|0,9)|0)^m;Y=(oi(L+O|0,13)|0)^d;R=(oi(Y+L|0,18)|0)^p;K=(oi(g+q|0,7)|0)^l;X=(oi(K+q|0,9)|0)^c;U=(oi(X+K|0,13)|0)^g;N=(oi(U+X|0,18)|0)^q;W=(oi(k+r|0,7)|0)^b;T=(oi(W+r|0,9)|0)^h;Q=(oi(T+W|0,13)|0)^k;J=(oi(Q+T|0,18)|0)^r;d=(oi(W+V|0,7)|0)^Y;c=(oi(d+V|0,9)|0)^X;b=(oi(c+d|0,13)|0)^W;s=(oi(b+c|0,18)|0)^V;g=(oi(R+S|0,7)|0)^U;h=(oi(g+R|0,9)|0)^T;f=(oi(h+g|0,13)|0)^S;p=(oi(f+h|0,18)|0)^R;k=(oi(N+O|0,7)|0)^Q;i=(oi(k+N|0,9)|0)^P;j=(oi(i+k|0,13)|0)^O;q=(oi(j+i|0,18)|0)^N;n=(oi(J+K|0,7)|0)^M;m=(oi(n+J|0,9)|0)^L;l=(oi(m+n|0,13)|0)^K;r=(oi(l+m|0,18)|0)^J;o=o+2|0}while((o|0)<(e|0));Qg(a,s+I|0);Qg(a+4|0,d+z|0);Qg(a+8|0,c+A|0);Qg(a+12|0,b+B|0);Qg(a+16|0,f+C|0);Qg(a+20|0,p+G|0);Qg(a+24|0,g+v|0);Qg(a+28|0,h+w|0);Qg(a+32|0,i+x|0);Qg(a+36|0,j+t|0);Qg(a+40|0,q+H|0);Qg(a+44|0,k+D|0);Qg(a+48|0,n+E|0);Qg(a+52|0,m+F|0);Qg(a+56|0,l+u|0);Qg(a+60|0,r+y|0);return}function Ga(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=t;j=t=t+63&-64;t=t+16|0;switch(e|0){case 2:{if(c>>>0<13)e=-31;else{e=a;g=34347;h=e+13|0;do{b[e>>0]=b[g>>0]|0;e=e+1|0;g=g+1|0}while((e|0)<(h|0));a=a+12|0;g=c+-12|0;h=6}break}case 1:{if(c>>>0<12)e=-31;else{e=a;g=34360;h=e+12|0;do{b[e>>0]=b[g>>0]|0;e=e+1|0;g=g+1|0}while((e|0)<(h|0));a=a+11|0;g=c+-11|0;h=6}break}default:e=-31}do if((h|0)==6){e=xb(d)|0;if(!e){td(j,19);e=Sc(j)|0;h=a+e|0;i=g-e|0;if(g>>>0<=e>>>0){e=-31;break}qb(a|0,j|0,e+1|0)|0;if(i>>>0>=4){b[h>>0]=36;b[h+1>>0]=109;b[h+2>>0]=61;b[h+3>>0]=0;td(j,f[d+44>>2]|0);g=Sc(j)|0;a=h+3+g|0;if((i+-3|0)>>>0<=g>>>0){e=-31;break}qb(h+3|0,j|0,g+1|0)|0;if((i+-3-g|0)>>>0>=4){b[a>>0]=44;b[a+1>>0]=116;b[a+2>>0]=61;b[a+3>>0]=0;td(j,f[d+40>>2]|0);e=Sc(j)|0;h=a+3+e|0;c=i+-3-g+-3-e|0;if((i+-3-g+-3|0)>>>0<=e>>>0){e=-31;break}qb(a+3|0,j|0,e+1|0)|0;if(c>>>0>=4){b[h>>0]=44;b[h+1>>0]=112;b[h+2>>0]=61;b[h+3>>0]=0;td(j,f[d+48>>2]|0);g=Sc(j)|0;if((c+-3|0)>>>0<=g>>>0){e=-31;break}qb(h+3|0,j|0,g+1|0)|0;e=h+3+g+1|0;if(((c+-3-g|0)>>>0>=2?(b[h+3+g>>0]=36,b[h+3+g+1>>0]=0,(Ta(e,c+-3-g+-1|0,f[d+16>>2]|0,f[d+20>>2]|0,3)|0)!=0):0)?(k=Sc(e)|0,l=c+-3-g+-1-k|0,l>>>0>=2):0){b[e+k>>0]=36;b[e+k+1>>0]=0;l=(Ta(e+k+1|0,l+-1|0,f[d>>2]|0,f[d+4>>2]|0,3)|0)==0;t=m;return (l?-31:0)|0}else e=-31}else e=-31}else e=-31}else e=-31}}while(0);t=m;return e|0}function Ha(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;if(!d){d=1797285236;e=2036477234;f=857760878;g=1634760805}else{g=yh(d)|0;f=yh(d+4|0)|0;e=yh(d+8|0)|0;d=yh(d+12|0)|0}r=yh(c)|0;q=yh(c+4|0)|0;p=yh(c+8|0)|0;o=yh(c+12|0)|0;n=yh(c+16|0)|0;m=yh(c+20|0)|0;l=yh(c+24|0)|0;k=yh(c+28|0)|0;j=yh(b)|0;i=yh(b+4|0)|0;h=yh(b+8|0)|0;s=0;b=yh(b+12|0)|0;c=g;do{L=r+c|0;A=oi(j^L,16)|0;z=A+n|0;M=oi(z^r,12)|0;A=oi(M+L^A,8)|0;w=oi(A+z^M,7)|0;H=q+f|0;u=oi(i^H,16)|0;t=u+m|0;I=oi(t^q,12)|0;u=oi(I+H^u,8)|0;N=oi(u+t^I,7)|0;C=p+e|0;v=oi(h^C,16)|0;B=v+l|0;D=oi(B^p,12)|0;v=oi(D+C^v,8)|0;J=oi(v+B^D,7)|0;x=o+d|0;F=oi(b^x,16)|0;g=F+k|0;y=oi(g^o,12)|0;F=oi(y+x^F,8)|0;E=oi(F+g^y,7)|0;K=oi(F^N+(M+L),16)|0;G=oi(K+(v+B)^N,12)|0;c=G+(N+(M+L))|0;b=oi(c^K,8)|0;l=b+(K+(v+B))|0;q=oi(l^G,7)|0;G=oi(J+(I+H)^A,16)|0;B=oi(G+(F+g)^J,12)|0;f=B+(J+(I+H))|0;j=oi(f^G,8)|0;k=j+(G+(F+g))|0;p=oi(k^B,7)|0;B=oi(E+(D+C)^u,16)|0;g=oi(B+(A+z)^E,12)|0;e=g+(E+(D+C))|0;i=oi(e^B,8)|0;n=i+(B+(A+z))|0;o=oi(n^g,7)|0;v=oi(y+x+w^v,16)|0;g=oi(v+(u+t)^w,12)|0;d=g+(y+x+w)|0;h=oi(d^v,8)|0;m=h+(v+(u+t))|0;r=oi(m^g,7)|0;s=s+1|0}while((s|0)!=10);Qg(a,c);Qg(a+4|0,f);Qg(a+8|0,e);Qg(a+12|0,d);Qg(a+16|0,j);Qg(a+20|0,i);Qg(a+24|0,h);Qg(a+28|0,b);return 0}function Ia(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=t;i=t=t+63&-64;t=t+2272|0;Lb(i+1536|0,c);Lb(i+1280|0,e);If(i,d);Jf(i+2112|0,d);wf(i+1792|0,i+2112|0);Xc(i+2112|0,i+1792|0,i);wf(i+1952|0,i+2112|0);If(i+160|0,i+1952|0);Xc(i+2112|0,i+1792|0,i+160|0);wf(i+1952|0,i+2112|0);If(i+320|0,i+1952|0);Xc(i+2112|0,i+1792|0,i+320|0);wf(i+1952|0,i+2112|0);If(i+480|0,i+1952|0);Xc(i+2112|0,i+1792|0,i+480|0);wf(i+1952|0,i+2112|0);If(i+640|0,i+1952|0);Xc(i+2112|0,i+1792|0,i+640|0);wf(i+1952|0,i+2112|0);If(i+800|0,i+1952|0);Xc(i+2112|0,i+1792|0,i+800|0);wf(i+1952|0,i+2112|0);If(i+960|0,i+1952|0);Xc(i+2112|0,i+1792|0,i+960|0);wf(i+1952|0,i+2112|0);If(i+1120|0,i+1952|0);di(a);c=255;while(1){if(b[i+1536+c>>0]|0){f=c;g=5;break}if(b[i+1280+c>>0]|0){f=c;g=5;break}if(!c)break;else c=c+-1|0}if((g|0)==5?(f|0)>-1:0)while(1){ud(i+2112|0,a);c=b[i+1536+f>>0]|0;if(c<<24>>24<=0){if(c<<24>>24<0){wf(i+1952|0,i+2112|0);Wc(i+2112|0,i+1952|0,i+((((c<<24>>24)/-2|0)<<24>>24)*160|0)|0)}}else{wf(i+1952|0,i+2112|0);Xc(i+2112|0,i+1952|0,i+(((c&255)>>>1&255)*160|0)|0)}c=b[i+1280+f>>0]|0;if(c<<24>>24<=0){if(c<<24>>24<0){wf(i+1952|0,i+2112|0);_c(i+2112|0,i+1952|0,160+((((c<<24>>24)/-2|0)<<24>>24)*120|0)|0)}}else{wf(i+1952|0,i+2112|0);$c(i+2112|0,i+1952|0,160+(((c&255)>>>1&255)*120|0)|0)}jg(a,i+2112|0);if((f|0)>0)f=f+-1|0;else break}t=h;return}function Ja(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=t;l=t=t+63&-64;t=t+704|0;a:do if(!((d|0)==0&(e|0)==0)){q=f[a+72>>2]|0;o=f[a+72+4>>2]|0;k=$f(q|0,o|0,3)|0;n=Wf(d|0,e|0,3)|0;p=G;i=$f(d|0,e|0,61)|0;j=G;o=Lg(q|0,o|0,n|0,p|0)|0;q=G;f[a+72>>2]=o;f[a+72+4>>2]=q;g=f[a+64>>2]|0;h=f[a+64+4>>2]|0;if(q>>>0<p>>>0|(q|0)==(p|0)&o>>>0<n>>>0){g=Lg(g|0,h|0,1,0)|0;h=G;f[a+64>>2]=g;f[a+64+4>>2]=h}j=Lg(g|0,h|0,i|0,j|0)|0;f[a+64>>2]=j;f[a+64+4>>2]=G;j=Ig(128,0,k&127|0,0)|0;g=G;if(g>>>0>e>>>0|(g|0)==(e|0)&j>>>0>d>>>0){g=0;h=0;while(1){p=b[c+g>>0]|0;q=Lg(g|0,h|0,k&127|0,0)|0;b[a+80+q>>0]=p;g=Lg(g|0,h|0,1,0)|0;h=G;if(!(h>>>0<e>>>0|(h|0)==(e|0)&g>>>0<d>>>0))break a}}if(!((j|0)==0&(g|0)==0)){h=0;i=0;do{p=b[c+h>>0]|0;q=Lg(h|0,i|0,k&127|0,0)|0;b[a+80+q>>0]=p;h=Lg(h|0,i|0,1,0)|0;i=G}while(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<j>>>0)}ma(a,a+80|0,l,l+640|0);g=Ig(d|0,e|0,j|0,g|0)|0;h=G;if(h>>>0>0|(h|0)==0&g>>>0>127){i=c+j|0;do{ma(a,i,l,l+640|0);i=i+128|0;g=Lg(g|0,h|0,-128,-1)|0;h=G}while(h>>>0>0|(h|0)==0&g>>>0>127);j=i}else j=c+j|0;g=g&127;if(!((g|0)==0&0==0)){h=0;i=0;do{b[a+80+h>>0]=b[j+h>>0]|0;h=Lg(h|0,i|0,1,0)|0;i=G}while(i>>>0<0|(i|0)==0&h>>>0<g>>>0)}ye(l,704)}while(0);t=m;return 0}function Ka(a,c,d,e,g,h,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=t;r=t=t+63&-64;t=t+16|0;f[r>>2]=0;Sh(j);if(e){l=0;n=0;m=0;k=0;a:while(1){while(1){p=b[d+k>>0]|0;if(!(j&4))o=Pc(p)|0;else o=Lc(p)|0;if((o|0)!=255)break;if(!g){o=18;break a}if(!(sh(g,p)|0)){o=19;break a}k=k+1|0;if(k>>>0>=e>>>0){o=17;break a}}n=o+(n<<6)|0;o=l+6|0;if(o>>>0>7){l=l+-2|0;if(m>>>0>=c>>>0){o=13;break}b[a+m>>0]=n>>>l;m=m+1|0}else l=o;k=k+1|0;if(k>>>0>=e>>>0){o=16;break}}if((o|0)==13){f[r>>2]=k;f[9002]=34;k=-1}else if((o|0)==16){f[r>>2]=k;k=0}else if((o|0)==17){f[r>>2]=k;k=0}else if((o|0)==18){f[r>>2]=k;k=0}else if((o|0)==19){f[r>>2]=k;k=0}if(l>>>0>4){k=-1;m=0}else o=21}else{k=0;m=0;n=0;l=0;o=21}do if((o|0)==21)if(!((1<<l)+-1&n)){if(!(k|j&2))k=vc(d,e,r,g,l>>>1)|0;if(!k)if((g|0)!=0?(q=f[r>>2]|0,q>>>0<e>>>0):0){k=q;while(1){if(!(sh(g,b[d+k>>0]|0)|0)){o=31;break}k=k+1|0;if(k>>>0>=e>>>0){o=30;break}}if((o|0)==30){f[r>>2]=k;k=0;break}else if((o|0)==31){f[r>>2]=k;k=0;break}}else k=0;else m=0}else{k=-1;m=0}while(0);l=f[r>>2]|0;if(!i){if((l|0)!=(e|0)){f[9002]=22;k=-1}}else f[i>>2]=d+l;if(h|0)f[h>>2]=m;t=s;return k|0}function La(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;if(!d){d=1797285236;e=2036477234;f=857760878;o=1634760805}else{o=yh(d)|0;f=yh(d+4|0)|0;e=yh(d+8|0)|0;d=yh(d+12|0)|0}n=yh(c)|0;m=yh(c+4|0)|0;l=yh(c+8|0)|0;k=yh(c+12|0)|0;t=yh(c+16|0)|0;s=yh(c+20|0)|0;r=yh(c+24|0)|0;q=yh(c+28|0)|0;j=yh(b)|0;i=yh(b+4|0)|0;h=yh(b+8|0)|0;g=yh(b+12|0)|0;p=20;b=f;c=o;do{B=(oi(s+c|0,7)|0)^k;y=(oi(B+c|0,9)|0)^h;v=(oi(y+B|0,13)|0)^s;E=(oi(v+y|0,18)|0)^c;x=(oi(b+n|0,7)|0)^g;u=(oi(x+b|0,9)|0)^r;H=(oi(u+x|0,13)|0)^n;A=(oi(H+u|0,18)|0)^b;f=(oi(e+j|0,7)|0)^q;G=(oi(f+e|0,9)|0)^m;D=(oi(G+f|0,13)|0)^j;w=(oi(D+G|0,18)|0)^e;F=(oi(d+t|0,7)|0)^l;C=(oi(F+d|0,9)|0)^i;z=(oi(C+F|0,13)|0)^t;o=(oi(z+C|0,18)|0)^d;n=(oi(F+E|0,7)|0)^H;m=(oi(n+E|0,9)|0)^G;l=(oi(m+n|0,13)|0)^F;c=(oi(l+m|0,18)|0)^E;j=(oi(A+B|0,7)|0)^D;i=(oi(j+A|0,9)|0)^C;k=(oi(i+j|0,13)|0)^B;b=(oi(k+i|0,18)|0)^A;t=(oi(w+x|0,7)|0)^z;h=(oi(t+w|0,9)|0)^y;g=(oi(h+t|0,13)|0)^x;e=(oi(g+h|0,18)|0)^w;s=(oi(o+f|0,7)|0)^v;r=(oi(s+o|0,9)|0)^u;q=(oi(r+s|0,13)|0)^f;d=(oi(q+r|0,18)|0)^o;p=p+-2|0}while((p|0)!=0);Qg(a,c);Qg(a+4|0,b);Qg(a+8|0,e);Qg(a+12|0,d);Qg(a+16|0,j);Qg(a+20|0,i);Qg(a+24|0,h);Qg(a+28|0,g);return 0}function Ma(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=t;j=t=t+63&-64;t=t+16|0;h=f[a+20>>2]|0;i=f[a+4>>2]|0;f[a+20>>2]=0;f[a+4>>2]=0;switch(d|0){case 2:{if(!(qd(c,34312,9)|0)){c=c+9|0;g=4}else c=-32;break}case 1:{if(!(qd(c,34322,8)|0)){c=c+8|0;g=4}else c=-32;break}default:c=-26}do if((g|0)==4)if((qd(c,34331,3)|0)==0?(e=Kc(c+3|0,j+4|0)|0,(e|0)!=0):0)if((f[j+4>>2]|0)==19)if(!(qd(e,34335,3)|0)){c=Kc(e+3|0,j+4|0)|0;if(!c){c=-32;break}f[a+44>>2]=f[j+4>>2];if(!(qd(c,34339,3)|0)){c=Kc(c+3|0,j+4|0)|0;if(!c){c=-32;break}f[a+40>>2]=f[j+4>>2];if(!(qd(c,34343,3)|0)){c=Kc(c+3|0,j+4|0)|0;if(!c){c=-32;break}g=f[j+4>>2]|0;f[a+48>>2]=g;f[a+52>>2]=g;g=(b[c>>0]|0)==36;c=g?c+1|0:c;if(g){f[j+4>>2]=h;g=f[a+16>>2]|0;if(Ka(g,h,c,Sc(c)|0,0,j+4|0,j,3)|0){c=-32;break}f[a+20>>2]=f[j+4>>2];c=f[j>>2]|0;h=(b[c>>0]|0)==36;c=h?c+1|0:c;if(h){f[j+4>>2]=i;h=f[a>>2]|0;if(Ka(h,i,c,Sc(c)|0,0,j+4|0,j,3)|0){c=-32;break}f[a+4>>2]=f[j+4>>2];d=f[j>>2]|0;c=xb(a)|0;if(!c)c=(b[d>>0]|0)==0?0:-32}else c=-32}else c=-32}else c=-32}else c=-32}else c=-32;else c=-26;else c=-32;while(0);t=k;return c|0}function Na(a,c,d,e,g,h,i,j,k,l){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0;q=t;p=t=t+63&-64;t=t+352|0;if(d|0){f[d>>2]=0;f[d+4>>2]=0}if(e|0)b[e>>0]=-1;do if(!(i>>>0<0|(i|0)==0&h>>>0<17)){n=Lg(h|0,i|0,-17,-1)|0;o=G;if(o>>>0>0|(o|0)==0&n>>>0>4294967278)Fj();Wg(p+16|0,64,0,a+32|0,a)|0;Lh(p+80|0,p+16|0)|0;ye(p+16|0,64);Kg(p+80|0,j,k,l)|0;j=Ig(0,0,k|0,l|0)|0;Kg(p+80|0,35456,j&15,0)|0;j=p+16|0;m=j+64|0;do{f[j>>2]=0;j=j+4|0}while((j|0)<(m|0));b[p+16>>0]=b[g>>0]|0;Sf(p+16|0,p+16|0,64,0,a+32|0,1,a)|0;j=b[p+16>>0]|0;b[p+16>>0]=b[g>>0]|0;Kg(p+80|0,p+16|0,64,0)|0;Kg(p+80|0,g+1|0,n,o)|0;m=Lg(h|0,i|0,15,0)|0;Kg(p+80|0,35456,m&15,0)|0;We(p+336|0,k,l);Kg(p+80|0,p+336|0,8,0)|0;l=Lg(h|0,i|0,47,0)|0;We(p+336|0,l,G);Kg(p+80|0,p+336|0,8,0)|0;Kh(p+80|0,p)|0;ye(p+80|0,256);if(hd(p,g+1+n|0,16)|0){ye(p,16);j=-1;break}Sf(c,g+1|0,n,o,a+32|0,2,a)|0;Of(a+36|0,p);of(a+32|0);if(!((j&2)==0?!(ge(a+32|0,4)|0):0))Gb(a);if(d|0){f[d>>2]=n;f[d+4>>2]=o}if(e|0){b[e>>0]=j;j=0}else j=0}else j=-1;while(0);t=q;return j|0}function Oa(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,i=0;e=t;f=t=t+63&-64;t=t+4032|0;If(f,d);Jf(f+3584|0,d);wf(f+2464|0,f+3584|0);If(f+160|0,f+2464|0);Xc(f+3424|0,d,f+160|0);wf(f+2304|0,f+3424|0);If(f+320|0,f+2304|0);Jf(f+3264|0,f+2464|0);wf(f+2144|0,f+3264|0);If(f+480|0,f+2144|0);Xc(f+3104|0,d,f+480|0);wf(f+1984|0,f+3104|0);If(f+640|0,f+1984|0);Jf(f+2944|0,f+2304|0);wf(f+1824|0,f+2944|0);If(f+800|0,f+1824|0);Xc(f+2784|0,d,f+800|0);wf(f+1664|0,f+2784|0);If(f+960|0,f+1664|0);Jf(f+2624|0,f+2144|0);wf(f+1504|0,f+2624|0);If(f+1120|0,f+1504|0);d=0;do{i=b[c+d>>0]|0;g=d<<1;b[f+1280+g>>0]=i&15;b[f+1280+(g|1)>>0]=(i&255)>>>4;d=d+1|0}while((d|0)!=32);d=0;c=0;do{i=f+1280+c|0;g=d+(h[i>>0]|0)|0;d=(g<<24)+134217728>>28;b[i>>0]=g-(d<<4);c=c+1|0}while((c|0)!=63);d=d+(h[f+1280+63>>0]|0)&255;b[f+1280+63>>0]=d;Gh(a);cc(f+1344|0,f,d);Xc(f+3864|0,a,f+1344|0);d=63;do{jg(f+3744|0,f+3864|0);ud(f+3864|0,f+3744|0);jg(f+3744|0,f+3864|0);ud(f+3864|0,f+3744|0);jg(f+3744|0,f+3864|0);ud(f+3864|0,f+3744|0);jg(f+3744|0,f+3864|0);ud(f+3864|0,f+3744|0);wf(a,f+3864|0);d=d+-1|0;cc(f+1344|0,f,b[f+1280+d>>0]|0);Xc(f+3864|0,a,f+1344|0)}while((d|0)!=0);wf(a,f+3864|0);t=e;return}function Pa(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=t;l=t=t+63&-64;t=t+288|0;a:do if(!((d|0)==0&(e|0)==0)){i=f[a+32>>2]|0;g=f[a+32+4>>2]|0;j=$f(i|0,g|0,3)|0;k=Wf(d|0,e|0,3)|0;k=Lg(i|0,g|0,k|0,G|0)|0;f[a+32>>2]=k;f[a+32+4>>2]=G;k=Ig(64,0,j&63|0,0)|0;g=G;if(g>>>0>e>>>0|(g|0)==(e|0)&k>>>0>d>>>0){g=0;h=0;while(1){k=b[c+g>>0]|0;l=Lg(g|0,h|0,j&63|0,0)|0;b[a+40+l>>0]=k;g=Lg(g|0,h|0,1,0)|0;h=G;if(!(h>>>0<e>>>0|(h|0)==(e|0)&g>>>0<d>>>0))break a}}if(!((k|0)==0&(g|0)==0)){h=0;i=0;do{o=b[c+h>>0]|0;n=Lg(h|0,i|0,j&63|0,0)|0;b[a+40+n>>0]=o;h=Lg(h|0,i|0,1,0)|0;i=G}while(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<k>>>0)}sa(a,a+40|0,l,l+256|0);g=Ig(d|0,e|0,k|0,g|0)|0;h=G;if(h>>>0>0|(h|0)==0&g>>>0>63){i=c+k|0;do{sa(a,i,l,l+256|0);i=i+64|0;g=Lg(g|0,h|0,-64,-1)|0;h=G}while(h>>>0>0|(h|0)==0&g>>>0>63);j=i}else j=c+k|0;g=g&63;if(!((g|0)==0&0==0)){h=0;i=0;do{b[a+40+h>>0]=b[j+h>>0]|0;h=Lg(h|0,i|0,1,0)|0;i=G}while(i>>>0<0|(i|0)==0&h>>>0<g>>>0)}ye(l,288)}while(0);t=m;return 0}function Qa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+400|0;if(!((a|0)==0|(b|0)==0)){Td(e,0,0,64)|0;Qg(e+384|0,f[b+48>>2]|0);Ug(e,e+384|0,4,0)|0;Qg(e+384|0,f[b+4>>2]|0);Ug(e,e+384|0,4,0)|0;Qg(e+384|0,f[b+44>>2]|0);Ug(e,e+384|0,4,0)|0;Qg(e+384|0,f[b+40>>2]|0);Ug(e,e+384|0,4,0)|0;Qg(e+384|0,19);Ug(e,e+384|0,4,0)|0;Qg(e+384|0,c);Ug(e,e+384|0,4,0)|0;Qg(e+384|0,f[b+12>>2]|0);Ug(e,e+384|0,4,0)|0;c=f[b+8>>2]|0;if(c|0?(Ug(e,c,f[b+12>>2]|0,0)|0,f[b+56>>2]&1|0):0){ye(f[b+8>>2]|0,f[b+12>>2]|0);f[b+12>>2]=0}Qg(e+384|0,f[b+20>>2]|0);Ug(e,e+384|0,4,0)|0;c=f[b+16>>2]|0;if(c|0)Ug(e,c,f[b+20>>2]|0,0)|0;Qg(e+384|0,f[b+28>>2]|0);Ug(e,e+384|0,4,0)|0;c=f[b+24>>2]|0;if(c|0?(Ug(e,c,f[b+28>>2]|0,0)|0,f[b+56>>2]&2|0):0){ye(f[b+24>>2]|0,f[b+28>>2]|0);f[b+28>>2]=0}Qg(e+384|0,f[b+36>>2]|0);Ug(e,e+384|0,4,0)|0;c=f[b+32>>2]|0;if(c|0)Ug(e,c,f[b+36>>2]|0,0)|0;Bf(e,a,64)|0}t=d;return}function Ra(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=f[a+56>>2]|0;g=f[a+56+4>>2]|0;if(!((h|0)==0&(g|0)==0)){j=Ig(16,0,h|0,g|0)|0;l=G;k=l>>>0>e>>>0|(l|0)==(e|0)&j>>>0>d>>>0?d:j;l=l>>>0>e>>>0|(l|0)==(e|0)&j>>>0>d>>>0?e:l;if(!((k|0)==0&(l|0)==0)){j=0;i=0;do{n=b[c+j>>0]|0;h=Lg(h|0,g|0,j|0,i|0)|0;b[a+64+h>>0]=n;j=Lg(j|0,i|0,1,0)|0;i=G;h=f[a+56>>2]|0;g=f[a+56+4>>2]|0}while(i>>>0<l>>>0|(i|0)==(l|0)&j>>>0<k>>>0)}n=Lg(h|0,g|0,k|0,l|0)|0;j=G;f[a+56>>2]=n;f[a+56+4>>2]=j;if(!(j>>>0<0|(j|0)==0&n>>>0<16)){d=Ig(d|0,e|0,k|0,l|0)|0;e=G;Aa(a,a+64|0,16,0);f[a+56>>2]=0;f[a+56+4>>2]=0;c=c+k|0;m=7}}else m=7;if((m|0)==7){g=d&-16;if(e>>>0>0|(e|0)==0&d>>>0>15){h=Ig(d|0,e|0,g|0,e|0)|0;n=G;Aa(a,c,g,e);i=c+g|0;g=n}else{i=c;h=d;g=e}if(!((h|0)==0&(g|0)==0)){d=0;c=0;do{m=b[i+d>>0]|0;n=Lg(f[a+56>>2]|0,f[a+56+4>>2]|0,d|0,c|0)|0;b[a+64+n>>0]=m;d=Lg(d|0,c|0,1,0)|0;c=G}while(c>>>0<g>>>0|(c|0)==(g|0)&d>>>0<h>>>0);n=Lg(f[a+56>>2]|0,f[a+56+4>>2]|0,h|0,g|0)|0;f[a+56>>2]=n;f[a+56+4>>2]=G}}return}function Sa(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0;j=t;k=t=t+63&-64;t=t+528|0;f[k+512>>2]=0;Qg(k+512|0,c);if(c>>>0<65){if((Td(k,0,0,c)|0)>=0){Ug(k,k+512|0,4,0)|0;Ug(k,d,e,0)|0;Bf(k,a,c)|0}}else a:do if((Td(k,0,0,64)|0)>=0?(Ug(k,k+512|0,4,0)|0,Ug(k,d,e,0)|0,(Bf(k,k+448|0,64)|0)>=0):0){g=a;h=k+448|0;i=g+32|0;do{b[g>>0]=b[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));g=k+384|0;h=k+448|0;i=g+64|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));if((c+-32|0)>>>0>64){e=c+-32|0;d=a+32|0;do{if((Se(k+448|0,64,k+384|0,64,0,0,0)|0)<0)break a;g=d;h=k+448|0;i=g+32|0;do{b[g>>0]=b[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));e=e+-32|0;d=d+32|0;g=k+384|0;h=k+448|0;i=g+64|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0))}while(e>>>0>64)}else{e=c+-32|0;d=a+32|0}if((Se(k+448|0,e,k+384|0,64,0,0,0)|0)>=0)qb(d|0,k+448|0,e|0)|0}while(0);ye(k,384);t=j;return}function Ta(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;Sh(f);i=(V((e>>>0)/3|0,-3)|0)+e|0;g=((e>>>0)/3|0)<<2;do if(i)if(!(f&2)){g=g+4|0;break}else{g=(g|2)+(i>>>1)|0;break}while(0);if(g>>>0>=c>>>0)Fj();if(!(f&4))if(e|0){k=0;l=0;i=0;f=0;do{j=k;k=k+1|0;l=l<<8|(h[d+j>>0]|0);f=f+8|0;if(f>>>0>5)while(1){f=f+-6|0;m=(af(l>>>f&63)|0)&255;j=i+1|0;b[a+i>>0]=m;if(f>>>0>5)i=j;else{i=j;break}}}while((k|0)!=(e|0));if(f){m=(af(l<<6-f&63)|0)&255;b[a+i>>0]=m;i=i+1|0}}else i=0;else if(e|0){k=0;f=0;l=0;i=0;do{m=l;l=l+1|0;k=k<<8|(h[d+m>>0]|0);f=f+8|0;if(f>>>0>5)while(1){f=f+-6|0;m=(Ze(k>>>f&63)|0)&255;j=i+1|0;b[a+i>>0]=m;if(f>>>0>5)i=j;else{i=j;break}}}while((l|0)!=(e|0));if(f){m=(Ze(k<<6-f&63)|0)&255;b[a+i>>0]=m;i=i+1|0}}else i=0;if(g>>>0<i>>>0)ca(35289,35308,230,35324);if(g>>>0>i>>>0)ec(a+i|0,61,g-i|0)|0;else g=i;m=g+1|0;ec(a+g|0,0,(m>>>0<c>>>0?c:m)-g|0)|0;return a|0}function Ua(a,c,d,e,g,i,j,k){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;n=t;o=t=t+63&-64;t=t+112|0;if(!((d|0)==0&(e|0)==0)){m=o;l=m+32|0;do{b[m>>0]=b[k>>0]|0;m=m+1|0;k=k+1|0}while((m|0)<(l|0));k=h[g+4>>0]|h[g+4+1>>0]<<8|h[g+4+2>>0]<<16|h[g+4+3>>0]<<24;f[o+96>>2]=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;f[o+96+4>>2]=k;k=8;while(1){b[o+96+k>>0]=i;i=$f(i|0,j|0,8)|0;k=k+1|0;if((k|0)==16)break;else j=G}if(e>>>0>0|(e|0)==0&d>>>0>63){k=a;i=d;while(1){vh(o+32|0,o+96|0,o,0)|0;a=0;do{b[k+a>>0]=b[o+32+a>>0]^b[c+a>>0];a=a+1|0}while((a|0)!=64);a=1;j=8;while(1){d=o+96+j|0;a=a+(h[d>>0]|0)|0;b[d>>0]=a;j=j+1|0;if((j|0)==16)break;else a=a>>>8}j=Lg(i|0,e|0,-64,-1)|0;e=G;a=k+64|0;c=c+64|0;if(e>>>0>0|(e|0)==0&j>>>0>63){k=a;i=j}else break}}else j=d;if(!((j|0)==0&(e|0)==0)?(vh(o+32|0,o+96|0,o,0)|0,j|0):0){e=0;do{b[a+e>>0]=b[o+32+e>>0]^b[c+e>>0];e=e+1|0}while((e|0)!=(j|0))}ye(o+32|0,64);ye(o,32)}t=n;return 0}function Va(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;a:do if(a|0){do if((f[a+36>>2]|0)==2){d=f[c>>2]|0;if((d|0)==0?(h[c+8>>0]|0)<=1:0){e=6;break}m=0;l=f[a+4>>2]|0}else e=6;while(0);if((e|0)==6){l=f[a+4>>2]|0;tb(a,c,l);m=1;d=f[c>>2]|0}g=b[c+8>>0]|0;d=(d|0)==0&g<<24>>24==0?2:0;e=f[a+24>>2]|0;j=V(e,f[c+4>>2]|0)|0;k=f[a+20>>2]|0;g=j+d+(V(k,g&255)|0)|0;if(d>>>0<k>>>0){k=g;g=(((g>>>0)%(e>>>0)|0|0)==0?e+-1|0:-1)+g|0;while(1){j=((k>>>0)%(e>>>0)|0|0)==1?k+-1|0:g;if(m)e=l+(d<<3)|0;else e=(f[(f[a>>2]|0)+4>>2]|0)+(j<<10)|0;i=e;o=f[i>>2]|0;i=pf(f[i+4>>2]|0,0,f[a+28>>2]|0,0)|0;n=f[c>>2]|0;g=b[c+8>>0]|0;e=f[c+4>>2]|0;i=(n|0)==0&g<<24>>24==0?e:i;f[c+12>>2]=d;g=Sb(a,n,g,d,o,((i|0)==(e|0)?(((n|0)==0&g<<24>>24==0?0:G)|0)==0:0)&1)|0;e=f[(f[a>>2]|0)+4>>2]|0;g=e+((V(f[a+24>>2]|0,i)|0)<<10)+(g<<10)|0;i=e+(k<<10)|0;if(!n)ra(e+(j<<10)|0,g,i);else qa(e+(j<<10)|0,g,i);d=d+1|0;if(d>>>0>=(f[a+20>>2]|0)>>>0)break a;k=k+1|0;g=j+1|0;e=f[a+24>>2]|0}}}while(0);return}function Wa(a,c,d,e,g,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=t;q=t=t+63&-64;t=t+112|0;if(!((d|0)==0&(e|0)==0)){k=q;j=k+32|0;do{b[k>>0]=b[i>>0]|0;k=k+1|0;i=i+1|0}while((k|0)<(j|0));k=h[g+4>>0]|h[g+4+1>>0]<<8|h[g+4+2>>0]<<16|h[g+4+3>>0]<<24;f[q+96>>2]=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;f[q+96+4>>2]=k;f[q+96+8>>2]=0;f[q+96+8+4>>2]=0;if(e>>>0>0|(e|0)==0&d>>>0>63){k=c;g=d;do{th(q+32|0,q+96|0,q,0)|0;i=0;do{b[a+i>>0]=b[q+32+i>>0]^b[k+i>>0];i=i+1|0}while((i|0)!=64);i=1;j=8;while(1){d=q+96+j|0;i=i+(h[d>>0]|0)|0;b[d>>0]=i;j=j+1|0;if((j|0)==16)break;else i=i>>>8}g=Lg(g|0,e|0,-64,-1)|0;e=G;a=a+64|0;k=k+64|0}while(e>>>0>0|(e|0)==0&g>>>0>63);if(!((g|0)==0&(e|0)==0)){m=a;n=g;o=k;l=10}}else{m=a;n=d;o=c;l=10}if((l|0)==10?(th(q+32|0,q+96|0,q,0)|0,n|0):0){i=0;do{b[m+i>>0]=b[q+32+i>>0]^b[o+i>>0];i=i+1|0}while((i|0)!=(n|0))}ye(q+32|0,64);ye(q,32)}t=p;return 0}function Xa(a,c,d,e,g,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=t;q=t=t+63&-64;t=t+112|0;if(!((d|0)==0&(e|0)==0)){k=q;j=k+32|0;do{b[k>>0]=b[i>>0]|0;k=k+1|0;i=i+1|0}while((k|0)<(j|0));k=h[g+4>>0]|h[g+4+1>>0]<<8|h[g+4+2>>0]<<16|h[g+4+3>>0]<<24;f[q+96>>2]=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;f[q+96+4>>2]=k;f[q+96+8>>2]=0;f[q+96+8+4>>2]=0;if(e>>>0>0|(e|0)==0&d>>>0>63){k=c;g=d;do{uh(q+32|0,q+96|0,q,0)|0;i=0;do{b[a+i>>0]=b[q+32+i>>0]^b[k+i>>0];i=i+1|0}while((i|0)!=64);i=1;j=8;while(1){d=q+96+j|0;i=i+(h[d>>0]|0)|0;b[d>>0]=i;j=j+1|0;if((j|0)==16)break;else i=i>>>8}g=Lg(g|0,e|0,-64,-1)|0;e=G;a=a+64|0;k=k+64|0}while(e>>>0>0|(e|0)==0&g>>>0>63);if(!((g|0)==0&(e|0)==0)){m=a;n=g;o=k;l=10}}else{m=a;n=d;o=c;l=10}if((l|0)==10?(uh(q+32|0,q+96|0,q,0)|0,n|0):0){i=0;do{b[m+i>>0]=b[q+32+i>>0]^b[o+i>>0];i=i+1|0}while((i|0)!=(n|0))}ye(q+32|0,64);ye(q,32)}t=p;return 0}function Ya(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=t;f=t=t+63&-64;t=t+336|0;if(!(Jc(d)|0)){e=0;do{b[a+e>>0]=b[c+e>>0]|0;e=e+1|0}while((e|0)!=32);b[a>>0]=b[a>>0]&-8;b[a+31>>0]=b[a+31>>0]&63|64;Ba(f+288|0,d);Bg(f+240|0);ph(f+192|0);Rc(f+144|0,f+288|0);Bg(f+96|0);e=0;c=254;while(1){d=e;e=(h[a+(c>>>3)>>0]|0)>>>(c&7)&1;d=e^d;ib(f+240|0,f+144|0,d);ib(f+192|0,f+96|0,d);Vb(f+48|0,f+144|0,f+96|0);Vb(f,f+240|0,f+192|0);Wb(f+240|0,f+240|0,f+192|0);Wb(f+192|0,f+144|0,f+96|0);pa(f+96|0,f+48|0,f+240|0);pa(f+192|0,f+192|0,f);ua(f+48|0,f);ua(f,f+240|0);Wb(f+144|0,f+96|0,f+192|0);Vb(f+192|0,f+96|0,f+192|0);pa(f+240|0,f,f+48|0);Vb(f,f,f+48|0);ua(f+192|0,f+192|0);Ca(f+96|0,f);ua(f+144|0,f+144|0);Wb(f+48|0,f+48|0,f+96|0);pa(f+96|0,f+288|0,f+192|0);pa(f+192|0,f,f+48|0);if(!c)break;else c=c+-1|0}ib(f+240|0,f+144|0,e);ib(f+192|0,f+96|0,e);Za(f+192|0,f+192|0);pa(f+240|0,f+240|0,f+192|0);rb(a,f+240|0);e=0}else e=-1;t=g;return e|0}function Za(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+192|0;ua(d+144|0,b);ua(d+96|0,d+144|0);ua(d+96|0,d+96|0);pa(d+96|0,b,d+96|0);pa(d+144|0,d+144|0,d+96|0);ua(d+48|0,d+144|0);pa(d+96|0,d+96|0,d+48|0);ua(d+48|0,d+96|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=5);pa(d+96|0,d+48|0,d+96|0);ua(d+48|0,d+96|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=10);pa(d+48|0,d+48|0,d+96|0);ua(d,d+48|0);b=1;do{ua(d,d);b=b+1|0}while((b|0)!=20);pa(d+48|0,d,d+48|0);ua(d+48|0,d+48|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=10);pa(d+96|0,d+48|0,d+96|0);ua(d+48|0,d+96|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=50);pa(d+48|0,d+48|0,d+96|0);ua(d,d+48|0);b=1;do{ua(d,d);b=b+1|0}while((b|0)!=100);pa(d+48|0,d,d+48|0);ua(d+48|0,d+48|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=50);pa(d+96|0,d+48|0,d+96|0);ua(d+96|0,d+96|0);b=1;do{ua(d+96|0,d+96|0);b=b+1|0}while((b|0)!=5);pa(a,d+96|0,d+144|0);t=c;return}function _a(a,c,d,e,g,h,i,j,k,l){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0;n=t;o=t=t+63&-64;t=t+336|0;if(d|0){f[d>>2]=0;f[d+4>>2]=0}if(h>>>0>0|(h|0)==0&g>>>0>4294967278)Fj();Wg(o,64,0,a+32|0,a)|0;Lh(o+64|0,o)|0;ye(o,64);Kg(o+64|0,i,j,k)|0;i=Ig(0,0,j|0,k|0)|0;Kg(o+64|0,35456,i&15,0)|0;i=o;m=i+64|0;do{f[i>>2]=0;i=i+4|0}while((i|0)<(m|0));b[o>>0]=l;Sf(o,o,64,0,a+32|0,1,a)|0;Kg(o+64|0,o,64,0)|0;b[c>>0]=b[o>>0]|0;Sf(c+1|0,e,g,h,a+32|0,2,a)|0;Kg(o+64|0,c+1|0,g,h)|0;Kg(o+64|0,35456,g&15,0)|0;We(o+320|0,j,k);Kg(o+64|0,o+320|0,8,0)|0;k=Lg(g|0,h|0,64,0)|0;We(o+320|0,k,G);Kg(o+64|0,o+320|0,8,0)|0;Kh(o+64|0,c+1+g|0)|0;ye(o+64|0,256);Of(a+36|0,c+1+g|0);of(a+32|0);if(!((l&2)==0?!(ge(a+32|0,4)|0):0))Gb(a);if(d|0){o=Lg(g|0,h|0,17,0)|0;f[d>>2]=o;f[d+4>>2]=G}t=n;return 0}function $a(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+192|0;ua(d+144|0,b);pa(d+96|0,d+144|0,b);ua(d+144|0,d+96|0);ua(d+48|0,d+144|0);ua(d+48|0,d+48|0);pa(d+48|0,d+48|0,d+144|0);pa(d+96|0,d+48|0,b);ua(d+48|0,d+96|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=5);pa(d+96|0,d+48|0,d+96|0);ua(d+48|0,d+96|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=10);pa(d+48|0,d+48|0,d+96|0);ua(d,d+48|0);b=1;do{ua(d,d);b=b+1|0}while((b|0)!=20);pa(d+48|0,d,d+48|0);ua(d+48|0,d+48|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=10);pa(d+96|0,d+48|0,d+96|0);ua(d+48|0,d+96|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=50);pa(d+48|0,d+48|0,d+96|0);ua(d,d+48|0);b=1;do{ua(d,d);b=b+1|0}while((b|0)!=100);pa(d+48|0,d,d+48|0);ua(d+48|0,d+48|0);b=1;do{ua(d+48|0,d+48|0);b=b+1|0}while((b|0)!=50);pa(d+96|0,d+48|0,d+96|0);ua(d+96|0,d+96|0);b=1;do{ua(d+96|0,d+96|0);b=b+1|0}while((b|0)!=4);pa(a,d+96|0,d+144|0);t=c;return}function ab(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=f[a+56>>2]|0;d=f[a+56+4>>2]|0;if(!((e|0)==0&(d|0)==0)){b[a+64+e>>0]=1;d=Lg(e|0,d|0,1,0)|0;g=G;if(g>>>0<0|(g|0)==0&d>>>0<16)ec(a+64+d|0,0,14-e+1|0)|0;b[a+80>>0]=1;Aa(a,a+64|0,16,0)}e=f[a+24>>2]|0;g=(f[a+28>>2]|0)+(e>>>26)|0;i=(g>>>26)+(f[a+32>>2]|0)|0;j=(i>>>26)+(f[a+36>>2]|0)|0;n=((j>>>26)*5|0)+(f[a+20>>2]|0)|0;l=(((n&67108863)+5|0)>>>26)+((n>>>26)+(e&67108863))|0;k=(j|-67108864)+(((((l>>>26)+(g&67108863)|0)>>>26)+(i&67108863)|0)>>>26)|0;m=(k>>>31)+-1&67108863;i=k>>31&(i&67108863)|m&(((l>>>26)+(g&67108863)|0)>>>26)+(i&67108863);h=Lg(k>>31&(n&67108863)|m&(n&67108863)+5|(k>>31&(n>>>26)+(e&67108863)|m&l)<<26|0,0,f[a+40>>2]|0,0)|0;d=G;e=Lg((k>>31&(n>>>26)+(e&67108863)|m&l)>>>6|(k>>31&(g&67108863)|m&(l>>>26)+(g&67108863))<<20|0,0,f[a+44>>2]|0,0)|0;d=Lg(e|0,G|0,d|0,0)|0;e=G;g=Lg((k>>31&(g&67108863)|m&(l>>>26)+(g&67108863))>>>12|i<<14|0,0,f[a+48>>2]|0,0)|0;e=Lg(g|0,G|0,e|0,0)|0;g=G;i=Lg(((k>>>31)+-1&k|k>>31&j)<<8|i>>>18|0,0,f[a+52>>2]|0,0)|0;g=Lg(i|0,G|0,g|0,0)|0;Qg(c,h);Qg(c+4|0,d);Qg(c+8|0,e);Qg(c+12|0,g);ye(a,88);return}function bb(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;j=t;k=t=t+63&-64;t=t+352|0;Ha(k,g,h,0)|0;if(a>>>0>c>>>0?0<e>>>0|0==(e|0)&(a-c|0)>>>0<d>>>0:0)i=5;else if(c>>>0>a>>>0?0<e>>>0|0==(e|0)&(c-a|0)>>>0<d>>>0:0)i=5;if((i|0)==5){se(a|0,c|0,d|0)|0;c=a}f[k+32>>2]=0;f[k+32+4>>2]=0;f[k+32+8>>2]=0;f[k+32+12>>2]=0;f[k+32+16>>2]=0;f[k+32+20>>2]=0;f[k+32+24>>2]=0;f[k+32+28>>2]=0;h=e>>>0>0|(e|0)==0&d>>>0>32?32:d;i=e>>>0>0|(e|0)==0&d>>>0>32?0:e;if(!((h|0)==0&(i|0)==0)){l=~e>>>0>4294967295|(~e|0)==-1&~d>>>0>4294967263?~d:-33;qb(k+32+32|0,c|0,-2-l+1|0)|0}l=Lg(h|0,i|0,32,0)|0;wg(k+32|0,k+32|0,l,G,g+16|0,k)|0;Lh(k+96|0,k+32|0)|0;if(!((h|0)==0&(i|0)==0)){l=~e>>>0>4294967295|(~e|0)==-1&~d>>>0>4294967263?~d:-33;qb(a|0,k+32+32|0,-2-l+1|0)|0}ye(k+32|0,64);if(e>>>0>0|(e|0)==0&d>>>0>32){l=Ig(d|0,e|0,h|0,i|0)|0;Gf(a+h|0,c+h|0,l,G,g+16|0,1,0,k)|0}ye(k,32);Kg(k+96|0,a,d,e)|0;Kh(k+96|0,b)|0;ye(k+96|0,256);t=j;return 0}function cb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;e=t;f=t=t+63&-64;t=t+1760|0;If(f,c);Jf(f+1600|0,c);wf(f+1280|0,f+1600|0);Xc(f+1600|0,f+1280|0,f);wf(f+1440|0,f+1600|0);If(f+160|0,f+1440|0);Xc(f+1600|0,f+1280|0,f+160|0);wf(f+1440|0,f+1600|0);If(f+320|0,f+1440|0);Xc(f+1600|0,f+1280|0,f+320|0);wf(f+1440|0,f+1600|0);If(f+480|0,f+1440|0);Xc(f+1600|0,f+1280|0,f+480|0);wf(f+1440|0,f+1600|0);If(f+640|0,f+1440|0);Xc(f+1600|0,f+1280|0,f+640|0);wf(f+1440|0,f+1600|0);If(f+800|0,f+1440|0);Xc(f+1600|0,f+1280|0,f+800|0);wf(f+1440|0,f+1600|0);If(f+960|0,f+1440|0);Xc(f+1600|0,f+1280|0,f+960|0);wf(f+1440|0,f+1600|0);If(f+1120|0,f+1440|0);Gh(a);c=252;while(1){Jf(f+1600|0,a);d=b[31840+c>>0]|0;if(d<<24>>24<=0){if(d<<24>>24<0){wf(f+1440|0,f+1600|0);Wc(f+1600|0,f+1440|0,f+((((d<<24>>24)/-2|0)<<24>>24)*160|0)|0)}}else{wf(f+1440|0,f+1600|0);Xc(f+1600|0,f+1440|0,f+(((d&255)>>>1&255)*160|0)|0)}wf(a,f+1600|0);if(!c)break;else c=c+-1|0}t=e;return}function db(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;j=t;k=t=t+63&-64;t=t+352|0;La(k,g,h,0)|0;if(a>>>0>c>>>0?0<e>>>0|0==(e|0)&(a-c|0)>>>0<d>>>0:0)i=5;else if(c>>>0>a>>>0?0<e>>>0|0==(e|0)&(c-a|0)>>>0<d>>>0:0)i=5;if((i|0)==5){se(a|0,c|0,d|0)|0;c=a}f[k+32>>2]=0;f[k+32+4>>2]=0;f[k+32+8>>2]=0;f[k+32+12>>2]=0;f[k+32+16>>2]=0;f[k+32+20>>2]=0;f[k+32+24>>2]=0;f[k+32+28>>2]=0;h=e>>>0>0|(e|0)==0&d>>>0>32?32:d;i=e>>>0>0|(e|0)==0&d>>>0>32?0:e;if(!((h|0)==0&(i|0)==0)){l=~e>>>0>4294967295|(~e|0)==-1&~d>>>0>4294967263?~d:-33;qb(k+32+32|0,c|0,-2-l+1|0)|0}l=Lg(h|0,i|0,32,0)|0;sg(k+32|0,k+32|0,l,G,g+16|0,k)|0;Lh(k+96|0,k+32|0)|0;if(!((h|0)==0&(i|0)==0)){l=~e>>>0>4294967295|(~e|0)==-1&~d>>>0>4294967263?~d:-33;qb(a|0,k+32+32|0,-2-l+1|0)|0}ye(k+32|0,64);if(e>>>0>0|(e|0)==0&d>>>0>32){l=Ig(d|0,e|0,h|0,i|0)|0;Ef(a+h|0,c+h|0,l,G,g+16|0,1,0,k)|0}ye(k,32);Kg(k+96|0,a,d,e)|0;Kh(k+96|0,b)|0;ye(k+96|0,256);t=j;return 0}function eb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=t;e=t=t+63&-64;t=t+144|0;ua(e+96|0,b);ua(e+48|0,e+96|0);ua(e+48|0,e+48|0);pa(e+48|0,b,e+48|0);pa(e+96|0,e+96|0,e+48|0);ua(e+96|0,e+96|0);pa(e+96|0,e+48|0,e+96|0);ua(e+48|0,e+96|0);c=1;do{ua(e+48|0,e+48|0);c=c+1|0}while((c|0)!=5);pa(e+96|0,e+48|0,e+96|0);ua(e+48|0,e+96|0);c=1;do{ua(e+48|0,e+48|0);c=c+1|0}while((c|0)!=10);pa(e+48|0,e+48|0,e+96|0);ua(e,e+48|0);c=1;do{ua(e,e);c=c+1|0}while((c|0)!=20);pa(e+48|0,e,e+48|0);ua(e+48|0,e+48|0);c=1;do{ua(e+48|0,e+48|0);c=c+1|0}while((c|0)!=10);pa(e+96|0,e+48|0,e+96|0);ua(e+48|0,e+96|0);c=1;do{ua(e+48|0,e+48|0);c=c+1|0}while((c|0)!=50);pa(e+48|0,e+48|0,e+96|0);ua(e,e+48|0);c=1;do{ua(e,e);c=c+1|0}while((c|0)!=100);pa(e+48|0,e,e+48|0);ua(e+48|0,e+48|0);c=1;do{ua(e+48|0,e+48|0);c=c+1|0}while((c|0)!=50);pa(e+96|0,e+48|0,e+96|0);ua(e+96|0,e+96|0);ua(e+96|0,e+96|0);pa(a,e+96|0,b);t=d;return}function fb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0;g=t;i=t=t+63&-64;t=t+960|0;e=a;d=e+32|0;do{b[e>>0]=b[c>>0]|0;e=e+1|0;c=c+1|0}while((e|0)<(d|0));e=h[a+31>>0]|0;b[a+31>>0]=e&127;Ba(i+384|0,a);ta(i+384|0,i+384|0);f[i+384>>2]=(f[i+384>>2]|0)+1;Za(i+384|0,i+384|0);pa(i+336|0,32352,i+384|0);Dc(i+336|0,i+336|0);ua(i+288|0,i+336|0);pa(i+240|0,i+336|0,i+288|0);Wb(i+480|0,i+240|0,i+336|0);pa(i+288|0,i+288|0,32352);Wb(i+480|0,i+288|0,i+480|0);$a(i+480|0,i+480|0);rb(a,i+480|0);d=b[a+1>>0]&1;Dc(i+432|0,i+336|0);Fb(i+336|0,i+432|0,d);ph(i+288|0);Fb(i+288|0,32352,d);Vb(i+336|0,i+336|0,i+288|0);Bg(i+192|0);Wb(i+144|0,i+336|0,i+192|0);Vb(i+48|0,i+336|0,i+192|0);Za(i+96|0,i+144|0);pa(i,i+48|0,i+96|0);rb(a,i);b[a+31>>0]=e&128|(h[a+31>>0]|0);if(!(Hb(i+800|0,a)|0)){Jf(i+640|0,i+800|0);jg(i+520|0,i+640|0);ud(i+640|0,i+520|0);jg(i+520|0,i+640|0);ud(i+640|0,i+520|0);wf(i+800|0,i+640|0);Pd(a,i+800|0);t=g;return}else ea()}function gb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=t;h=t=t+63&-64;t=t+64|0;if(c<<24>>24?(c&255)<=64:0){if(!(fi(f[a+80>>2]|0,f[a+80+4>>2]|0)|0)){d=f[a+352>>2]|0;do if(d>>>0>128){Gd(a,128,0);ka(a,a+96|0);d=(f[a+352>>2]|0)+-128|0;f[a+352>>2]=d;if(d>>>0<129){qb(a+96|0,a+224|0,d|0)|0;e=a+96|0;g=f[a+352>>2]|0;break}else ca(34057,34089,304,34134)}else{e=a+96|0;g=d}while(0);Gd(a,g,0);Pg(a);d=f[a+352>>2]|0;ec(a+96+d|0,0,256-d|0)|0;ka(a,e);We(h,f[a>>2]|0,f[a+4>>2]|0);We(h+8|0,f[a+8>>2]|0,f[a+8+4>>2]|0);We(h+16|0,f[a+16>>2]|0,f[a+16+4>>2]|0);We(h+24|0,f[a+24>>2]|0,f[a+24+4>>2]|0);We(h+32|0,f[a+32>>2]|0,f[a+32+4>>2]|0);We(h+40|0,f[a+40>>2]|0,f[a+40+4>>2]|0);We(h+48|0,f[a+48>>2]|0,f[a+48+4>>2]|0);We(h+56|0,f[a+56>>2]|0,f[a+56+4>>2]|0);qb(b|0,h|0,c&255|0)|0;ye(a,64);ye(e,256);d=0}else d=-1;t=i;return d|0}Fj();return 0}function hb(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0;o=Af(j|0,0,i|0,0)|0;n=G;do if(n>>>0>0|(n|0)==0&o>>>0>1073741823){f[9002]=27;a=-1}else{if(h>>>0>0|(h|0)==0&g>>>0>4294967295){f[9002]=27;a=-1;break}o=Lg(g|0,h|0,-1,-1)|0;if(h>>>0<0|(h|0)==0&g>>>0<2|((o&g|0)!=0|(G&h|0)!=0)){f[9002]=22;a=-1;break}if((i|0)==0|(j|0)==0){f[9002]=22;a=-1;break}if(!(i>>>0>16777215?1:(33554431/(j>>>0)|0)>>>0<i>>>0)?!(0<h>>>0|(0==(h|0)?(33554431/(i>>>0)|0)>>>0<g>>>0:0)):0){n=V(i<<7,j)|0;o=V(i<<7,g)|0;if((n+o|0)>>>0<o>>>0){f[9002]=12;a=-1;break}m=n+o+(i<<8|64)|0;if(m>>>0<(i<<8|64)>>>0){f[9002]=12;a=-1;break}if((f[a+8>>2]|0)>>>0<m>>>0?(Mh(a),(Wd(a,m)|0)==0):0){a=-1;break}m=f[a+4>>2]|0;yc(b,c,d,e,m,n);a=0;do{ob(m+(V(i<<7,a)|0)|0,i,g,h,m+n|0,m+n+o|0);a=a+1|0}while((a|0)!=(j|0));yc(b,c,m,n,k,l);a=0;break}f[9002]=12;a=-1}while(0);return a|0}function ib(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=f[a>>2]|0;v=f[a+4>>2]|0;t=f[a+8>>2]|0;r=f[a+12>>2]|0;p=f[a+16>>2]|0;n=f[a+20>>2]|0;l=f[a+24>>2]|0;j=f[a+28>>2]|0;h=f[a+32>>2]|0;e=f[a+36>>2]|0;w=f[b>>2]|0;u=f[b+4>>2]|0;s=f[b+8>>2]|0;q=f[b+12>>2]|0;o=f[b+16>>2]|0;m=f[b+20>>2]|0;k=f[b+24>>2]|0;i=f[b+28>>2]|0;g=f[b+32>>2]|0;d=f[b+36>>2]|0;f[a>>2]=(w^x)&0-c^x;f[a+4>>2]=(u^v)&0-c^v;f[a+8>>2]=(s^t)&0-c^t;f[a+12>>2]=(q^r)&0-c^r;f[a+16>>2]=(o^p)&0-c^p;f[a+20>>2]=(m^n)&0-c^n;f[a+24>>2]=(k^l)&0-c^l;f[a+28>>2]=(i^j)&0-c^j;f[a+32>>2]=(g^h)&0-c^h;f[a+36>>2]=(d^e)&0-c^e;f[b>>2]=(w^x)&0-c^w;f[b+4>>2]=(u^v)&0-c^u;f[b+8>>2]=(s^t)&0-c^s;f[b+12>>2]=(q^r)&0-c^q;f[b+16>>2]=(o^p)&0-c^o;f[b+20>>2]=(m^n)&0-c^m;f[b+24>>2]=(k^l)&0-c^k;f[b+28>>2]=(i^j)&0-c^i;f[b+32>>2]=(g^h)&0-c^g;f[b+36>>2]=(d^e)&0-c^d;return}function jb(a,c,d,e,g,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(e){l=0;m=0;k=0;p=0;b:while(1){while(1){n=h[d+k>>0]|0;o=(((n&223)+201&255)+65526^((n&223)+201&255)+65520)>>>8;if((o|((n^48)+65526|0)>>>8)&255|0)break;if(!((g|0)!=0&l<<24>>24==0)){n=0;break b}if(!(sh(g,n)|0)){q=17;break a}k=k+1|0;if(k>>>0<e>>>0)l=0;else{q=17;break a}}n=o&(n&223)+201|((n^48)+65526|0)>>>8&(n^48);if(m>>>0>=c>>>0){q=9;break}if(!(l<<24>>24))n=n<<4&255;else{b[a+m>>0]=n|p&255;m=m+1|0;n=p}l=~l;k=k+1|0;if(k>>>0<e>>>0)p=n;else{n=0;break}}if((q|0)==9){f[9002]=34;n=-1}if(!(l<<24>>24))if(!n){q=17;break}else{l=k;k=-1;m=0;break}else{f[9002]=22;l=k+-1|0;k=-1;m=0;break}}else{m=0;k=0;q=17}while(0);if((q|0)==17){l=k;k=0}if(!j){if((l|0)!=(e|0)){f[9002]=22;k=-1}}else f[j>>2]=d+l;if(i|0)f[i>>2]=m;return k|0}function kb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=t;o=t=t+63&-64;t=t+112|0;if(!((c|0)==0&(d|0)==0)){j=o;i=j+32|0;do{b[j>>0]=b[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));j=h[e+4>>0]|h[e+4+1>>0]<<8|h[e+4+2>>0]<<16|h[e+4+3>>0]<<24;f[o+96>>2]=h[e>>0]|h[e+1>>0]<<8|h[e+2>>0]<<16|h[e+3>>0]<<24;f[o+96+4>>2]=j;f[o+96+8>>2]=0;f[o+96+8+4>>2]=0;if(d>>>0>0|(d|0)==0&c>>>0>63){do{th(a,o+96|0,o,0)|0;g=1;i=8;while(1){j=o+96+i|0;g=g+(h[j>>0]|0)|0;b[j>>0]=g;i=i+1|0;if((i|0)==16)break;else g=g>>>8}c=Lg(c|0,d|0,-64,-1)|0;d=G;a=a+64|0}while(d>>>0>0|(d|0)==0&c>>>0>63);if(!((c|0)==0&(d|0)==0)){l=a;m=c;k=8}}else{l=a;m=c;k=8}if((k|0)==8?(th(o+32|0,o+96|0,o,0)|0,m|0):0){g=0;do{b[l+g>>0]=b[o+32+g>>0]|0;g=g+1|0}while((g|0)!=(m|0))}ye(o+32|0,64);ye(o,32)}t=n;return 0}function lb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=t;o=t=t+63&-64;t=t+112|0;if(!((c|0)==0&(d|0)==0)){j=o;i=j+32|0;do{b[j>>0]=b[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));j=h[e+4>>0]|h[e+4+1>>0]<<8|h[e+4+2>>0]<<16|h[e+4+3>>0]<<24;f[o+96>>2]=h[e>>0]|h[e+1>>0]<<8|h[e+2>>0]<<16|h[e+3>>0]<<24;f[o+96+4>>2]=j;f[o+96+8>>2]=0;f[o+96+8+4>>2]=0;if(d>>>0>0|(d|0)==0&c>>>0>63){do{uh(a,o+96|0,o,0)|0;g=1;i=8;while(1){j=o+96+i|0;g=g+(h[j>>0]|0)|0;b[j>>0]=g;i=i+1|0;if((i|0)==16)break;else g=g>>>8}c=Lg(c|0,d|0,-64,-1)|0;d=G;a=a+64|0}while(d>>>0>0|(d|0)==0&c>>>0>63);if(!((c|0)==0&(d|0)==0)){l=a;m=c;k=8}}else{l=a;m=c;k=8}if((k|0)==8?(uh(o+32|0,o+96|0,o,0)|0,m|0):0){g=0;do{b[l+g>>0]=b[o+32+g>>0]|0;g=g+1|0}while((g|0)!=(m|0))}ye(o+32|0,64);ye(o,32)}t=n;return 0}function mb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=t;o=t=t+63&-64;t=t+112|0;if(!((c|0)==0&(d|0)==0)){j=o;i=j+32|0;do{b[j>>0]=b[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));j=h[e+4>>0]|h[e+4+1>>0]<<8|h[e+4+2>>0]<<16|h[e+4+3>>0]<<24;f[o+96>>2]=h[e>>0]|h[e+1>>0]<<8|h[e+2>>0]<<16|h[e+3>>0]<<24;f[o+96+4>>2]=j;f[o+96+8>>2]=0;f[o+96+8+4>>2]=0;if(d>>>0>0|(d|0)==0&c>>>0>63){do{vh(a,o+96|0,o,0)|0;g=1;i=8;while(1){j=o+96+i|0;g=g+(h[j>>0]|0)|0;b[j>>0]=g;i=i+1|0;if((i|0)==16)break;else g=g>>>8}c=Lg(c|0,d|0,-64,-1)|0;d=G;a=a+64|0}while(d>>>0>0|(d|0)==0&c>>>0>63);if(!((c|0)==0&(d|0)==0)){l=a;m=c;k=8}}else{l=a;m=c;k=8}if((k|0)==8?(vh(o+32|0,o+96|0,o,0)|0,m|0):0){g=0;do{b[l+g>>0]=b[o+32+g>>0]|0;g=g+1|0}while((g|0)!=(m|0))}ye(o+32|0,64);ye(o,32)}t=n;return 0}function nb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=t;i=t=t+63&-64;t=t+96|0;Ha(i,f,g,0)|0;hh(i+32|0,32,0,f+16|0,i)|0;if(!(vg(c,b,d,e,i+32|0)|0))if(!a)c=0;else{if(b>>>0>=a>>>0?0<e>>>0|0==(e|0)&(b-a|0)>>>0<d>>>0:0)h=8;else if(a>>>0>=b>>>0?0<e>>>0|0==(e|0)&(a-b|0)>>>0<d>>>0:0)h=8;if((h|0)==8){se(a|0,b|0,d|0)|0;b=a}c=e>>>0>0|(e|0)==0&d>>>0>32?32:d;g=e>>>0>0|(e|0)==0&d>>>0>32?0:e;if((c|0)==0&(g|0)==0)wg(i+32|0,i+32|0,32,0,f+16|0,i)|0;else{h=~e>>>0>4294967295|(~e|0)==-1&~d>>>0>4294967263?~d:-33;qb(i+32+32|0,b|0,-2-h+1|0)|0;k=Lg(c|0,g|0,32,0)|0;wg(i+32|0,i+32|0,k,G,f+16|0,i)|0;qb(a|0,i+32+32|0,-2-h+1|0)|0}if(e>>>0>0|(e|0)==0&d>>>0>32){k=Ig(d|0,e|0,c|0,g|0)|0;Gf(a+c|0,b+c|0,k,G,f+16|0,1,0,i)|0}ye(i,32);c=0}else{ye(i,32);c=-1}t=j;return c|0}function ob(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(b<<5|0){h=0;do{k=yh(a+(h<<2)|0)|0;f[g+(h<<2)>>2]=k;h=h+1|0}while((h|0)!=(b<<5|0))}if(!((c|0)==0&(d|0)==0)){h=0;i=0;do{rf(e+((V(b<<5,h)|0)<<2)|0,g,b<<7);sd(g,g+(b<<5<<2)|0,g+(b<<6<<2)|0,b);rf(e+((V(h|1,b<<5)|0)<<2)|0,g+(b<<5<<2)|0,b<<7);sd(g+(b<<5<<2)|0,g,g+(b<<6<<2)|0,b);h=Lg(h|0,i|0,2,0)|0;i=G}while(i>>>0<d>>>0|(i|0)==(d|0)&h>>>0<c>>>0);h=Lg(c|0,d|0,-1,-1)|0;i=G;j=0;k=0;do{l=oh(g,b)|0;$e(g,e+((V(b<<5,l&h)|0)<<2)|0,b<<7);sd(g,g+(b<<5<<2)|0,g+(b<<6<<2)|0,b);l=oh(g+(b<<5<<2)|0,b)|0;$e(g+(b<<5<<2)|0,e+((V(b<<5,l&h)|0)<<2)|0,b<<7);sd(g+(b<<5<<2)|0,g,g+(b<<6<<2)|0,b);j=Lg(j|0,k|0,2,0)|0;k=G}while(k>>>0<d>>>0|(k|0)==(d|0)&j>>>0<c>>>0)}if(b<<5|0){h=0;do{Qg(a+(h<<2)|0,f[g+(h<<2)>>2]|0);h=h+1|0}while((h|0)!=(b<<5|0))}return}function pb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=t;i=t=t+63&-64;t=t+96|0;La(i,f,g,0)|0;ch(i+32|0,32,0,f+16|0,i)|0;if(!(vg(c,b,d,e,i+32|0)|0))if(!a)c=0;else{if(b>>>0>=a>>>0?0<e>>>0|0==(e|0)&(b-a|0)>>>0<d>>>0:0)h=8;else if(a>>>0>=b>>>0?0<e>>>0|0==(e|0)&(a-b|0)>>>0<d>>>0:0)h=8;if((h|0)==8){se(a|0,b|0,d|0)|0;b=a}c=e>>>0>0|(e|0)==0&d>>>0>32?32:d;g=e>>>0>0|(e|0)==0&d>>>0>32?0:e;if((c|0)==0&(g|0)==0)sg(i+32|0,i+32|0,32,0,f+16|0,i)|0;else{h=~e>>>0>4294967295|(~e|0)==-1&~d>>>0>4294967263?~d:-33;qb(i+32+32|0,b|0,-2-h+1|0)|0;k=Lg(c|0,g|0,32,0)|0;sg(i+32|0,i+32|0,k,G,f+16|0,i)|0;qb(a|0,i+32+32|0,-2-h+1|0)|0}if(e>>>0>0|(e|0)==0&d>>>0>32){k=Ig(d|0,e|0,c|0,g|0)|0;Ef(a+c|0,b+c|0,k,G,f+16|0,1,0,i)|0}ye(i,32);c=0}else{ye(i,32);c=-1}t=j;return c|0}function qb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;if((d|0)>=8192)return ga(a|0,c|0,d|0)|0;h=a|0;g=a+d|0;if((a&3)==(c&3)){while(a&3){if(!d)return h|0;b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0;d=d-1|0}d=g&-4|0;e=d-64|0;while((a|0)<=(e|0)){f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2];f[a+12>>2]=f[c+12>>2];f[a+16>>2]=f[c+16>>2];f[a+20>>2]=f[c+20>>2];f[a+24>>2]=f[c+24>>2];f[a+28>>2]=f[c+28>>2];f[a+32>>2]=f[c+32>>2];f[a+36>>2]=f[c+36>>2];f[a+40>>2]=f[c+40>>2];f[a+44>>2]=f[c+44>>2];f[a+48>>2]=f[c+48>>2];f[a+52>>2]=f[c+52>>2];f[a+56>>2]=f[c+56>>2];f[a+60>>2]=f[c+60>>2];a=a+64|0;c=c+64|0}while((a|0)<(d|0)){f[a>>2]=f[c>>2];a=a+4|0;c=c+4|0}}else{d=g-4|0;while((a|0)<(d|0)){b[a>>0]=b[c>>0]|0;b[a+1>>0]=b[c+1>>0]|0;b[a+2>>0]=b[c+2>>0]|0;b[a+3>>0]=b[c+3>>0]|0;a=a+4|0;c=c+4|0}}while((a|0)<(g|0)){b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0}return h|0}function rb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0;d=t;g=t=t+63&-64;t=t+48|0;vb(g,c);c=f[g>>2]|0;b[a>>0]=c;b[a+1>>0]=c>>>8;b[a+2>>0]=c>>>16;e=f[g+4>>2]|0;b[a+3>>0]=e<<2|c>>>24;b[a+4>>0]=e>>>6;b[a+5>>0]=e>>>14;c=f[g+8>>2]|0;b[a+6>>0]=c<<3|e>>>22;b[a+7>>0]=c>>>5;b[a+8>>0]=c>>>13;e=f[g+12>>2]|0;b[a+9>>0]=e<<5|c>>>21;b[a+10>>0]=e>>>3;b[a+11>>0]=e>>>11;c=f[g+16>>2]|0;b[a+12>>0]=c<<6|e>>>19;b[a+13>>0]=c>>>2;b[a+14>>0]=c>>>10;b[a+15>>0]=c>>>18;c=f[g+20>>2]|0;b[a+16>>0]=c;b[a+17>>0]=c>>>8;b[a+18>>0]=c>>>16;e=f[g+24>>2]|0;b[a+19>>0]=e<<1|c>>>24;b[a+20>>0]=e>>>7;b[a+21>>0]=e>>>15;c=f[g+28>>2]|0;b[a+22>>0]=c<<3|e>>>23;b[a+23>>0]=c>>>5;b[a+24>>0]=c>>>13;e=f[g+32>>2]|0;b[a+25>>0]=e<<4|c>>>21;b[a+26>>0]=e>>>4;b[a+27>>0]=e>>>12;c=f[g+36>>2]|0;b[a+28>>0]=c<<6|e>>>20;b[a+29>>0]=c>>>2;b[a+30>>0]=c>>>10;b[a+31>>0]=c>>>18;t=d;return}function sb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=t;k=t=t+63&-64;t=t+64|0;e=k+8|0;g=e+52|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));e=Sc(a)|0;f[k+36>>2]=e;f[k+20>>2]=e;f[k+4>>2]=e;g=na(e)|0;f[k+32>>2]=g;h=na(e)|0;f[k+16>>2]=h;i=na(e)|0;f[k>>2]=i;do if((g|0)==0|((h|0)==0|(i|0)==0)){wa(g);wa(h);wa(i);e=-22}else{j=na(e)|0;if(!j){wa(g);wa(h);wa(i);e=-22;break}e=Ma(k,a,d)|0;if(e|0){wa(f[k+32>>2]|0);wa(f[k+16>>2]|0);wa(f[k>>2]|0);wa(j);break}d=Db(f[k+40>>2]|0,f[k+44>>2]|0,f[k+52>>2]|0,b,c,f[k+16>>2]|0,f[k+20>>2]|0,j,f[k+4>>2]|0,0,0,d)|0;wa(f[k+32>>2]|0);wa(f[k+16>>2]|0);if((d|0)==0?(hd(j,f[k>>2]|0,f[k+4>>2]|0)|0)==0:0)e=0;else e=-35;wa(j);wa(f[k>>2]|0)}while(0);t=l;return e|0}function tb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0;e=t;g=t=t+63&-64;t=t+4096|0;ui(g+3072|0);ui(g+2048|0);if((a|0)!=0&(b|0)!=0?(f[g+2048>>2]=f[b>>2],f[g+2048+4>>2]=0,f[g+2048+8>>2]=f[b+4>>2],f[g+2048+8+4>>2]=0,f[g+2048+16>>2]=h[b+8>>0],f[g+2048+16+4>>2]=0,f[g+2048+24>>2]=f[a+16>>2],f[g+2048+24+4>>2]=0,f[g+2048+32>>2]=f[a+8>>2],f[g+2048+32+4>>2]=0,f[g+2048+40>>2]=f[a+36>>2],f[g+2048+40+4>>2]=0,f[a+20>>2]|0):0){b=0;do{d=b&127;if(!d){i=Lg(f[g+2048+48>>2]|0,f[g+2048+48+4>>2]|0,1,0)|0;f[g+2048+48>>2]=i;f[g+2048+48+4>>2]=G;ui(g);ui(g+1024|0);qa(g+3072|0,g+2048|0,g);qa(g+3072|0,g,g+1024|0)}j=f[g+1024+(d<<3)+4>>2]|0;i=c+(b<<3)|0;f[i>>2]=f[g+1024+(d<<3)>>2];f[i+4>>2]=j;b=b+1|0}while(b>>>0<(f[a+20>>2]|0)>>>0)}t=e;return}function ub(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,i=0;e=t;f=t=t+63&-64;t=t+464|0;d=0;do{i=b[c+d>>0]|0;g=d<<1;b[f+g>>0]=i&15;b[f+(g|1)>>0]=(i&255)>>>4;d=d+1|0}while((d|0)!=32);d=0;c=0;do{i=f+c|0;g=d+(h[i>>0]|0)|0;d=(g<<24)+134217728>>28;b[i>>0]=g-(d<<4);c=c+1|0}while((c|0)!=63);b[f+63>>0]=d+(h[f+63>>0]|0);Gh(a);d=1;do{Fh(f+64|0,d>>>1,b[f+d>>0]|0);$c(f+304|0,a,f+64|0);wf(a,f+304|0);d=d+2|0}while(d>>>0<64);Jf(f+304|0,a);jg(f+184|0,f+304|0);ud(f+304|0,f+184|0);jg(f+184|0,f+304|0);ud(f+304|0,f+184|0);jg(f+184|0,f+304|0);ud(f+304|0,f+184|0);wf(a,f+304|0);d=0;do{Fh(f+64|0,d>>>1,b[f+d>>0]|0);$c(f+304|0,a,f+64|0);wf(a,f+304|0);d=d+2|0}while(d>>>0<64);t=e;return}function vb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=f[b>>2]|0;n=f[b+4>>2]|0;j=f[b+8>>2]|0;i=f[b+12>>2]|0;h=f[b+16>>2]|0;m=f[b+20>>2]|0;e=f[b+24>>2]|0;d=f[b+28>>2]|0;c=f[b+32>>2]|0;b=f[b+36>>2]|0;k=(((((((((((((((b*19|0)+16777216|0)>>>25)+l>>26)+n>>25)+j>>26)+i>>25)+h>>26)+m>>25)+e>>26)+d>>25)+c>>26)+b>>25)*19|0)+l>>26)+n|0;g=((((k>>25)+j>>26)+i>>25)+h>>26)+m|0;f[a>>2]=((((((((((((((b*19|0)+16777216|0)>>>25)+l>>26)+n>>25)+j>>26)+i>>25)+h>>26)+m>>25)+e>>26)+d>>25)+c>>26)+b>>25)*19|0)+l&67108863;f[a+4>>2]=k&33554431;f[a+8>>2]=(k>>25)+j&67108863;f[a+12>>2]=((k>>25)+j>>26)+i&33554431;f[a+16>>2]=(((k>>25)+j>>26)+i>>25)+h&67108863;f[a+20>>2]=g&33554431;f[a+24>>2]=(g>>25)+e&67108863;f[a+28>>2]=((g>>25)+e>>26)+d&33554431;f[a+32>>2]=(((g>>25)+e>>26)+d>>25)+c&67108863;f[a+36>>2]=((((g>>25)+e>>26)+d>>25)+c>>26)+b&33554431;return}function wb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0;l=t;t=t+352|0;Wg(l+16|0,64,0,j,k)|0;Lh(l+80|0,l+16|0)|0;ye(l+16|0,64);Kg(l+80|0,g,h,i)|0;b=Ig(0,0,h|0,i|0)|0;Kg(l+80|0,35424,b&15,0)|0;Kg(l+80|0,c,d,e)|0;b=Ig(0,0,d|0,e|0)|0;Kg(l+80|0,35424,b&15,0)|0;We(l+336|0,h,i);Kg(l+80|0,l+336|0,8,0)|0;We(l+336|0,d,e);Kg(l+80|0,l+336|0,8,0)|0;Kh(l+80|0,l)|0;ye(l+80|0,256);b=ki(l,f)|0;ye(l,16);do if(a)if(!b){Sf(a,c,d,e,j,1,k)|0;b=0;break}else{ec(a|0,0,d|0)|0;b=-1;break}while(0);t=l;return b|0}function xb(a){a=a|0;var b=0,c=0;do if(a)if(f[a>>2]|0)if((f[a+4>>2]|0)>>>0>=16){if((f[a+8>>2]|0)==0?f[a+12>>2]|0:0){b=-18;break}b=f[a+20>>2]|0;if(!(f[a+16>>2]|0))return ((b|0)==0?-6:-19)|0;if(b>>>0>=8){if((f[a+24>>2]|0)==0?f[a+28>>2]|0:0){b=-20;break}if((f[a+32>>2]|0)==0?f[a+36>>2]|0:0){b=-21;break}b=f[a+44>>2]|0;if(b>>>0>=8)if(b>>>0<=2097152){c=f[a+48>>2]|0;if(b>>>0>=c<<3>>>0)if(f[a+40>>2]|0)if(c)if(c>>>0>16777215)b=-17;else{a=f[a+52>>2]|0;return ((a|0)==0?-28:a>>>0>16777215?-29:0)|0}else b=-16;else b=-12;else b=-14}else b=-15;else b=-14}else b=-6}else b=-2;else b=-1;else b=-25;while(0);return b|0}function yb(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0;i=t;j=t=t+63&-64;t=t+192|0;if((c+-1&255)>63)Fj();if((d|0)!=0&e<<24>>24!=0?(e&255)<=64:0){b[j+128>>0]=c;b[j+128+1>>0]=e;b[j+128+2>>0]=1;b[j+128+3>>0]=1;Dh(j+128+4|0);We(j+128+8|0,0,0);f[j+128+16>>2]=0;f[j+128+16+4>>2]=0;f[j+128+16+8>>2]=0;f[j+128+16+12>>2]=0;if(!g){f[j+128+32>>2]=0;f[j+128+32+4>>2]=0;f[j+128+32+8>>2]=0;f[j+128+32+12>>2]=0}else Kf(j+128|0,g);if(!h){f[j+128+48>>2]=0;f[j+128+48+4>>2]=0;f[j+128+48+8>>2]=0;f[j+128+48+12>>2]=0}else Hf(j+128|0,h);ie(a,j+128|0);ec(j+(e&255)|0,0,128-(e&255)|0)|0;qb(j|0,d|0,e&255|0)|0;Nb(a,j,128,0);ye(j,128);t=i;return}Fj()}function zb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0;h=b>>>0>0|(b|0)==0&a>>>0>32768?a:32768;b=b>>>0>0|(b|0)==0&a>>>0>32768?b:0;f[g>>2]=8;a:do if(b>>>0<0|(b|0)==0&h>>>0<c>>>5>>>0){f[e>>2]=1;a=Nh(h|0,b|0,f[g>>2]<<2|0,0)|0;f[d>>2]=1;a=$f(a|0,G|0,1)|0;b=G;c=1;do{g=Wf(1,0,c|0)|0;e=G;c=c+1|0;if(e>>>0>b>>>0|(e|0)==(b|0)&g>>>0>a>>>0)break a;f[d>>2]=c}while(c>>>0<63)}else{f[d>>2]=1;a=1;while(1){i=Wf(1,0,a|0)|0;j=G;if(j>>>0>0|(j|0)==0&i>>>0>c>>>11>>>0)break;a=a+1|0;f[d>>2]=a;if(a>>>0>=63){a=63;break}}d=$f(h|0,b|0,2)|0;d=$f(d|0,G|0,a|0)|0;i=G;j=i>>>0<0|(i|0)==0&d>>>0<1073741823?d:1073741823;f[e>>2]=(j>>>0)/((f[g>>2]|0)>>>0)|0}while(0);return}function Ab(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=t;t=t+192|0;if(d>>>0>128){Ne(a)|0;Ja(a,c,d,0)|0;df(a,i)|0;d=64;c=i}Ne(a)|0;e=i+64|0;g=e+128|0;do{f[e>>2]=909522486;e=e+4|0}while((e|0)<(g|0));h=(d|0)==0;if(!h?(b[i+64>>0]=b[c>>0]^54,(d|0)!=1):0){e=1;do{g=i+64+e|0;b[g>>0]=b[g>>0]^b[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Ja(a,i+64|0,128,0)|0;Ne(a+208|0)|0;e=i+64|0;g=e+128|0;do{f[e>>2]=1549556828;e=e+4|0}while((e|0)<(g|0));if(!h?(b[i+64>>0]=b[c>>0]^92,(d|0)!=1):0){e=1;do{h=i+64+e|0;b[h>>0]=b[h>>0]^b[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Ja(a+208|0,i+64|0,128,0)|0;ye(i+64|0,128);ye(i,64);t=i;return 0}function Bb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=t;t=t+96|0;if(d>>>0>64){de(a)|0;Pa(a,c,d,0)|0;gf(a,i)|0;d=32;c=i}de(a)|0;e=i+32|0;g=e+64|0;do{f[e>>2]=909522486;e=e+4|0}while((e|0)<(g|0));h=(d|0)==0;if(!h?(b[i+32>>0]=b[c>>0]^54,(d|0)!=1):0){e=1;do{g=i+32+e|0;b[g>>0]=b[g>>0]^b[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Pa(a,i+32|0,64,0)|0;de(a+104|0)|0;e=i+32|0;g=e+64|0;do{f[e>>2]=1549556828;e=e+4|0}while((e|0)<(g|0));if(!h?(b[i+32>>0]=b[c>>0]^92,(d|0)!=1):0){e=1;do{h=i+32+e|0;b[h>>0]=b[h>>0]^b[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Pa(a+104|0,i+32|0,64,0)|0;ye(i+32|0,64);ye(i,32);t=i;return 0}function Cb(a){a=a|0;var b=0,c=0,d=0,e=0;if(a>>>0>=4294967168){f[9002]=12;e=0;return e|0}e=a>>>0<11?16:a+11&-8;d=na(e+76|0)|0;if(!d){e=0;return e|0}do if(d&63){c=((d+63&-64)+-8-(d+-8)|0)>>>0>15?(d+63&-64)+-8|0:(d+63&-64)+56|0;a=c-(d+-8)|0;b=f[d+-4>>2]|0;if(!(b&3)){f[c>>2]=(f[d+-8>>2]|0)+a;f[c+4>>2]=(b&-8)-a;a=c;break}else{f[c+4>>2]=(b&-8)-a|f[c+4>>2]&1|2;f[c+((b&-8)-a)+4>>2]=f[c+((b&-8)-a)+4>>2]|1;f[d+-4>>2]=a|f[d+-4>>2]&1|2;f[c+4>>2]=f[c+4>>2]|1;xa(d+-8|0,a);a=c;break}}else{a=d+-8|0;c=d+-8|0}while(0);a=a+4|0;b=f[a>>2]|0;if(b&3|0?(b&-8)>>>0>(e+16|0)>>>0:0){d=c+e|0;f[a>>2]=e|b&1|2;f[d+4>>2]=(b&-8)-e|3;a=c+(b&-8)+4|0;f[a>>2]=f[a>>2]|1;xa(d,(b&-8)-e|0)}e=c+8|0;return e|0}function Db(a,b,c,d,e,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0;p=t;o=t=t+63&-64;t=t+64|0;n=na(j)|0;do if(!n)a=-22;else{f[o>>2]=n;f[o+4>>2]=j;f[o+8>>2]=d;f[o+12>>2]=e;f[o+16>>2]=g;f[o+20>>2]=h;f[o+24>>2]=0;f[o+24+4>>2]=0;f[o+24+8>>2]=0;f[o+24+12>>2]=0;f[o+40>>2]=a;f[o+44>>2]=b;f[o+48>>2]=c;f[o+52>>2]=c;f[o+56>>2]=0;a=Qb(o,m)|0;if(a|0){ye(n,j);wa(n);break}if(i|0)qb(i|0,n|0,j|0)|0;if((k|0)!=0&(l|0)!=0?Ga(k,l,o,m)|0:0){ye(n,j);ye(k,l);wa(n);a=-31;break}ye(n,j);wa(n);a=0}while(0);t=p;return a|0}function Eb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=t;c=t=t+63&-64;t=t+288|0;Ba(a+40|0,b);Bg(a+80|0);ua(c+240|0,a+40|0);pa(c+192|0,c+240|0,16);Vb(c+240|0,c+240|0,a+80|0);Wb(c+192|0,c+192|0,a+80|0);ua(c+144|0,c+192|0);pa(c+144|0,c+144|0,c+192|0);ua(a,c+144|0);pa(a,a,c+192|0);pa(a,a,c+240|0);eb(a,a);pa(a,a,c+144|0);pa(a,a,c+240|0);ua(c+96|0,a);pa(c+96|0,c+96|0,c+192|0);Vb(c+48|0,c+96|0,c+240|0);if(!(Mf(c+48|0)|0)){Wb(c,c+96|0,c+240|0);if(!(Mf(c)|0))a=-1;else{pa(a,a,64);d=4}}else d=4;if((d|0)==4){d=Xf(a)|0;if((d|0)==((h[b+31>>0]|0)>>>7|0))Dc(a,a);pa(a+120|0,a,a+40|0);a=0}t=e;return a|0}function Fb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=f[a>>2]|0;u=f[a+4>>2]|0;s=f[a+8>>2]|0;q=f[a+12>>2]|0;o=f[a+16>>2]|0;m=f[a+20>>2]|0;k=f[a+24>>2]|0;i=f[a+28>>2]|0;g=f[a+32>>2]|0;d=f[a+36>>2]|0;v=(f[b+4>>2]^u)&0-c;t=(f[b+8>>2]^s)&0-c;r=(f[b+12>>2]^q)&0-c;p=(f[b+16>>2]^o)&0-c;n=(f[b+20>>2]^m)&0-c;l=(f[b+24>>2]^k)&0-c;j=(f[b+28>>2]^i)&0-c;h=(f[b+32>>2]^g)&0-c;e=(f[b+36>>2]^d)&0-c;f[a>>2]=(f[b>>2]^w)&0-c^w;f[a+4>>2]=v^u;f[a+8>>2]=t^s;f[a+12>>2]=r^q;f[a+16>>2]=p^o;f[a+20>>2]=n^m;f[a+24>>2]=l^k;f[a+28>>2]=j^i;f[a+32>>2]=h^g;f[a+36>>2]=e^d;return}function Gb(a){a=a|0;var c=0,d=0,e=0,g=0,i=0;d=t;e=t=t+63&-64;t=t+48|0;c=e;g=a;i=c+32|0;do{b[c>>0]=b[g>>0]|0;c=c+1|0;g=g+1|0}while((c|0)<(i|0));c=h[a+36+4>>0]|h[a+36+4+1>>0]<<8|h[a+36+4+2>>0]<<16|h[a+36+4+3>>0]<<24;f[e+32>>2]=h[a+36>>0]|h[a+36+1>>0]<<8|h[a+36+2>>0]<<16|h[a+36+3>>0]<<24;f[e+32+4>>2]=c;pg(e,e,40,0,a+32|0,a)|0;c=a;g=e;i=c+32|0;do{b[c>>0]=b[g>>0]|0;c=c+1|0;g=g+1|0}while((c|0)<(i|0));g=f[e+32>>2]|0;i=f[e+32+4>>2]|0;b[a+36>>0]=g;b[a+36+1>>0]=g>>8;b[a+36+2>>0]=g>>16;b[a+36+3>>0]=g>>24;b[a+36+4>>0]=i;b[a+36+4+1>>0]=i>>8;b[a+36+4+2>>0]=i>>16;b[a+36+4+3>>0]=i>>24;yg(a);t=d;return}function Hb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;e=t;g=t=t+63&-64;t=t+384|0;Ba(a+40|0,b);Bg(a+80|0);ua(g+336|0,a+40|0);pa(g+288|0,g+336|0,16);Vb(g+336|0,g+336|0,a+80|0);Wb(g+288|0,g+288|0,a+80|0);ua(g+240|0,g+288|0);pa(g+240|0,g+240|0,g+288|0);ua(a,g+240|0);pa(a,a,g+288|0);pa(a,a,g+336|0);eb(a,a);pa(a,a,g+240|0);pa(a,a,g+336|0);ua(g+192|0,a);pa(g+192|0,g+192|0,g+288|0);Vb(g+144|0,g+192|0,g+336|0);Wb(g+96|0,g+192|0,g+336|0);c=Mf(g+144|0)|0;d=Mf(g+96|0)|0;pa(g,a,64);Fb(a,g,1-c|0);Dc(g+48|0,a);f=Xf(a)|0;Fb(a,g+48|0,(h[b+31>>0]|0)>>>7^f);pa(a+120|0,a,a+40|0);t=e;return (d|c)+-1|0}function Ib(a,b,c,d,e,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;k=t;t=t+336|0;Wg(k,64,0,l,m)|0;Lh(k+64|0,k)|0;ye(k,64);Kg(k+64|0,h,i,j)|0;h=Ig(0,0,i|0,j|0)|0;Kg(k+64|0,35424,h&15,0)|0;Sf(a,d,e,g,l,1,m)|0;Kg(k+64|0,a,e,g)|0;h=Ig(0,0,e|0,g|0)|0;Kg(k+64|0,35424,h&15,0)|0;We(k+320|0,i,j);Kg(k+64|0,k+320|0,8,0)|0;We(k+320|0,e,g);Kg(k+64|0,k+320|0,8,0)|0;Kh(k+64|0,b)|0;ye(k+64|0,256);if(c|0){f[c>>2]=16;f[c+4>>2]=0}t=k;return 0}function Jb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0;l=t;t=t+352|0;hh(l+16|0,64,0,j,k)|0;Lh(l+80|0,l+16|0)|0;ye(l+16|0,64);Kg(l+80|0,g,h,i)|0;We(l+336|0,h,i);Kg(l+80|0,l+336|0,8,0)|0;Kg(l+80|0,c,d,e)|0;We(l+336|0,d,e);Kg(l+80|0,l+336|0,8,0)|0;Kh(l+80|0,l)|0;ye(l+80|0,256);b=ki(l,f)|0;ye(l,16);do if(a)if(!b){Gf(a,c,d,e,j,1,0,k)|0;b=0;break}else{ec(a|0,0,d|0)|0;b=-1;break}while(0);t=l;return b|0}function Kb(a){a=a|0;var c=0,d=0,e=0,g=0;a:do if(1){c=35349;d=65;do{if((b[c>>0]|0)==(a&255)<<24>>24){g=6;break a}c=c+1|0;d=d+-1|0;e=(d|0)!=0}while(e&(c&3|0)!=0);if(e)g=6;else c=0}else{c=35349;d=65;g=6}while(0);b:do if((g|0)==6)if((b[c>>0]|0)!=(a&255)<<24>>24){e=V(a&255,16843009)|0;c:do if(d>>>0>3){do{g=f[c>>2]^e;if((g&-2139062144^-2139062144)&g+-16843009|0)break c;c=c+4|0;d=d+-4|0}while(d>>>0>3);if(!d){c=0;break b}}while(0);while(1){if((b[c>>0]|0)==(a&255)<<24>>24)break b;d=d+-1|0;if(!d){c=0;break}else c=c+1|0}}while(0);return c|0}function Lb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,i=0;d=0;do{b[a+d>>0]=(h[c+(d>>>3)>>0]|0)>>>(d&7)&1;d=d+1|0}while((d|0)!=256);g=0;do{i=a+g|0;a:do if(b[i>>0]|0){f=1;do{d=f+g|0;if(d>>>0>=256)break a;c=b[a+d>>0]|0;b:do if(c<<24>>24){c=c<<24>>24<<f;e=b[i>>0]|0;if((c+e|0)<16){b[i>>0]=c+e;b[a+d>>0]=0;break}if((e-c|0)<-15)break a;b[i>>0]=e-c;while(1){c=a+d|0;if(!(b[c>>0]|0))break;b[c>>0]=0;d=d+1|0;if(d>>>0>=256)break b}b[c>>0]=1}while(0);f=f+1|0}while(f>>>0<7)}while(0);g=g+1|0}while((g|0)!=256);return}function Mb(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0;i=t;j=t=t+63&-64;t=t+560|0;Gg(j+192|0,h);He(j+128|0,g,32,0)|0;Ja(j+192|0,j+128+32|0,32,0)|0;Ja(j+192|0,c,d,e)|0;df(j+192|0,j+64|0)|0;se(a+32|0,g+32|0,32)|0;oa(j+64|0);ub(j+400|0,j+64|0);Pd(a,j+400|0);Gg(j+192|0,h);Ja(j+192|0,a,64,0)|0;Ja(j+192|0,c,d,e)|0;df(j+192|0,j)|0;oa(j);rh(j+128|0);la(a+32|0,j,j+128|0,j+64|0);ye(j+128|0,64);ye(j+64|0,64);if(b|0){f[b>>2]=64;f[b+4>>2]=0}t=i;return}function Nb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0;a:do if(!((d|0)==0&(e|0)==0)){g=f[a+352>>2]|0;j=e;while(1){i=256-g|0;e=a+96+g|0;if(!(j>>>0>0|(j|0)==0&d>>>0>i>>>0))break;qb(e|0,c|0,i|0)|0;f[a+352>>2]=(f[a+352>>2]|0)+i;Gd(a,128,0);ka(a,a+96|0);e=a+96|0;g=a+224|0;h=e+128|0;do{b[e>>0]=b[g>>0]|0;e=e+1|0;g=g+1|0}while((e|0)<(h|0));g=(f[a+352>>2]|0)+-128|0;f[a+352>>2]=g;e=Ig(d|0,j|0,i|0,0)|0;j=G;if((e|0)==0&(j|0)==0)break a;else{c=c+i|0;d=e}}qb(e|0,c|0,d|0)|0;f[a+352>>2]=(f[a+352>>2]|0)+d}while(0);return}function Ob(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0;j=t;i=t=t+63&-64;t=t+64|0;h=Sc(a)|0;if(!(c>>>0>0|(c|0)==0&b>>>0>4294967295|h>>>0>127)){c=i;g=c+60|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(g|0));g=Zf(h)|0;if(!g)c=-1;else{f[i+16>>2]=g;f[i+8>>2]=g;f[i>>2]=g;f[i+20>>2]=h;f[i+12>>2]=h;f[i+4>>2]=h;f[i+24>>2]=0;f[i+24+4>>2]=0;f[i+24+8>>2]=0;f[i+24+12>>2]=0;if(!(Ma(i,a,e)|0))if((f[i+40>>2]|0)==(b|0))c=(f[i+44>>2]|0)!=(d>>>10|0)&1;else c=1;else{f[9002]=22;c=-1}wa(g)}}else{f[9002]=22;c=-1}t=j;return c|0}function Pb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=t;g=t=t+63&-64;t=t+592|0;if(((((ce(a+32|0)|0)!=0?(Zb(a)|0)==0:0)?(hf(e)|0)!=0:0)?(Zb(e)|0)==0:0)?(Eb(g+424|0,e)|0)==0:0){Gg(g+96|0,f);Ja(g+96|0,a,32,0)|0;Ja(g+96|0,e,32,0)|0;Ja(g+96|0,b,c,d)|0;df(g+96|0,g+32|0)|0;oa(g+32|0);Ia(g+304|0,g+32|0,g+424|0,a+32|0);Pd(g,g+304|0);f=ji(g,a)|0;a=((g|0)==(a|0)?-1:f)|(hd(a,g,32)|0)}else a=-1;t=h;return a|0}function Qb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;e=t;d=t=t+63&-64;t=t+48|0;c=xb(a)|0;if(!c)if((b+-1|0)>>>0<=1){g=f[a+44>>2]|0;c=f[a+48>>2]|0;g=((g>>>0<c<<3>>>0?c<<3:g)>>>0)/(c<<2>>>0)|0;h=V(g,c<<2)|0;f[d>>2]=0;f[d+8>>2]=f[a+40>>2];f[d+12>>2]=-1;f[d+16>>2]=h;f[d+20>>2]=g;f[d+24>>2]=g<<2;f[d+28>>2]=c;f[d+32>>2]=f[a+52>>2];f[d+36>>2]=b;c=Ic(d,a)|0;if(!c){if(f[d+8>>2]|0){c=0;do{nc(d,c);c=c+1|0}while(c>>>0<(f[d+8>>2]|0)>>>0)}mc(a,d);c=0}}else c=-26;t=e;return c|0}function Rb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=t;n=t=t+63&-64;t=t+48|0;m=$d(e,n+40|0,n+36|0,n+32|0)|0;if(m){j=Wf(1,0,f[n+40>>2]|0)|0;k=G;h=si(m)|0;if(!h)h=Sc(m)|0;else h=h-m|0;i=h+(m-e)|0;if((!((i+45|0)>>>0>102|(i+45|0)>>>0<h>>>0)?(hb(a,c,d,m,h,j,k,f[n+36>>2]|0,f[n+32>>2]|0,n,32)|0)==0:0)?(qb(g|0,e|0,i|0)|0,b[g+i>>0]=36,l=zd(g+i+1|0,g+102-(g+i+1)|0,n)|0,ye(n,32),(l|0)!=0&l>>>0<(g+102|0)>>>0):0)b[l>>0]=0;else g=0}else g=0;t=o;return g|0}function Sb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0;do if(!b){if(!(c<<24>>24)){h=d+-1|0;break}h=V(f[a+20>>2]|0,c&255)|0;if(!g){h=h+(((d|0)==0)<<31>>31)|0;break}else{h=d+-1+h|0;break}}else{h=(f[a+24>>2]|0)-(f[a+20>>2]|0)|0;if(!g){h=h+(((d|0)==0)<<31>>31)|0;break}else{h=d+-1+h|0;break}}while(0);Af(e|0,0,e|0,0)|0;Af(G|0,0,h|0,0)|0;g=Ig(h+-1|0,0,G|0,0)|0;if((b|0)==0|c<<24>>24==3){h=0;d=0}else{h=V(f[a+20>>2]|0,(c&255)+1|0)|0;d=0}c=Lg(g|0,G|0,h|0,d|0)|0;a=pf(c|0,G|0,f[a+24>>2]|0,0)|0;return a|0}function Tb(a,c){a=a|0;c=c|0;var d=0,e=0;a:do if(!(c&255))a=a+(Sc(a)|0)|0;else{if(a&3)do{e=b[a>>0]|0;if(e<<24>>24==0?1:e<<24>>24==(c&255)<<24>>24)break a;a=a+1|0}while((a&3|0)!=0);e=V(c&255,16843009)|0;d=f[a>>2]|0;b:do if(!((d&-2139062144^-2139062144)&d+-16843009))do{d=d^e;if((d&-2139062144^-2139062144)&d+-16843009|0)break b;a=a+4|0;d=f[a>>2]|0}while(!((d&-2139062144^-2139062144)&d+-16843009|0));while(0);while(1){e=b[a>>0]|0;if(e<<24>>24==0?1:e<<24>>24==(c&255)<<24>>24)break;else a=a+1|0}}while(0);return a|0}function Ub(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;m=t;k=t=t+63&-64;t=t+128|0;j=a;l=j+102|0;do{b[j>>0]=0;j=j+1|0}while((j|0)<(l|0));do if(!(e>>>0>0|(e|0)==0&d>>>0>4294967295)){zb(g,h,i,k+104|0,k+100|0,k+96|0);uf(k+64|0,32);if(!(Mc(f[k+104>>2]|0,f[k+96>>2]|0,f[k+100>>2]|0,k+64|0,k)|0)){f[9002]=22;a=-1;break}zi(k+108|0);l=(Rb(k+108|0,c,d,k,a)|0)==0;Ai(k+108|0);if(l){f[9002]=22;a=-1}else a=0}else{f[9002]=27;a=-1}while(0);t=m;return a|0}function Vb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=(f[b+4>>2]|0)-(f[c+4>>2]|0)|0;l=(f[b+8>>2]|0)-(f[c+8>>2]|0)|0;k=(f[b+12>>2]|0)-(f[c+12>>2]|0)|0;j=(f[b+16>>2]|0)-(f[c+16>>2]|0)|0;i=(f[b+20>>2]|0)-(f[c+20>>2]|0)|0;h=(f[b+24>>2]|0)-(f[c+24>>2]|0)|0;g=(f[b+28>>2]|0)-(f[c+28>>2]|0)|0;e=(f[b+32>>2]|0)-(f[c+32>>2]|0)|0;d=(f[b+36>>2]|0)-(f[c+36>>2]|0)|0;f[a>>2]=(f[b>>2]|0)-(f[c>>2]|0);f[a+4>>2]=m;f[a+8>>2]=l;f[a+12>>2]=k;f[a+16>>2]=j;f[a+20>>2]=i;f[a+24>>2]=h;f[a+28>>2]=g;f[a+32>>2]=e;f[a+36>>2]=d;return}function Wb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=(f[c+4>>2]|0)+(f[b+4>>2]|0)|0;l=(f[c+8>>2]|0)+(f[b+8>>2]|0)|0;k=(f[c+12>>2]|0)+(f[b+12>>2]|0)|0;j=(f[c+16>>2]|0)+(f[b+16>>2]|0)|0;i=(f[c+20>>2]|0)+(f[b+20>>2]|0)|0;h=(f[c+24>>2]|0)+(f[b+24>>2]|0)|0;g=(f[c+28>>2]|0)+(f[b+28>>2]|0)|0;e=(f[c+32>>2]|0)+(f[b+32>>2]|0)|0;d=(f[c+36>>2]|0)+(f[b+36>>2]|0)|0;f[a>>2]=(f[c>>2]|0)+(f[b>>2]|0);f[a+4>>2]=m;f[a+8>>2]=l;f[a+12>>2]=k;f[a+16>>2]=j;f[a+20>>2]=i;f[a+24>>2]=h;f[a+28>>2]=g;f[a+32>>2]=e;f[a+36>>2]=d;return}function Xb(a,b,c,d,e,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;k=t;t=t+336|0;hh(k,64,0,l,m)|0;Lh(k+64|0,k)|0;ye(k,64);Kg(k+64|0,h,i,j)|0;We(k+320|0,i,j);Kg(k+64|0,k+320|0,8,0)|0;Gf(a,d,e,g,l,1,0,m)|0;Kg(k+64|0,a,e,g)|0;We(k+320|0,e,g);Kg(k+64|0,k+320|0,8,0)|0;Kh(k+64|0,b)|0;ye(k+64|0,256);if(c|0){f[c>>2]=16;f[c+4>>2]=0}t=k;return 0}function Yb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;uf(c,24);Ha(a,c,d,0)|0;yg(a);e=h[c+16>>0]|h[c+16+1>>0]<<8|h[c+16+2>>0]<<16|h[c+16+3>>0]<<24;d=h[c+16+4>>0]|h[c+16+4+1>>0]<<8|h[c+16+4+2>>0]<<16|h[c+16+4+3>>0]<<24;b[a+36>>0]=e;b[a+36+1>>0]=e>>8;b[a+36+2>>0]=e>>16;b[a+36+3>>0]=e>>24;b[a+36+4>>0]=d;b[a+36+4+1>>0]=d>>8;b[a+36+4+2>>0]=d>>16;b[a+36+4+3>>0]=d>>24;b[a+44>>0]=0;b[a+44+1>>0]=0;b[a+44+2>>0]=0;b[a+44+3>>0]=0;b[a+44+4>>0]=0;b[a+44+4+1>>0]=0;b[a+44+4+2>>0]=0;b[a+44+4+3>>0]=0;return 0}function Zb(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,i=0;f=t;g=t=t+63&-64;t=t+16|0;b[g>>0]=0;b[g+1>>0]=0;b[g+2>>0]=0;b[g+3>>0]=0;b[g+4>>0]=0;b[g+5>>0]=0;b[g+6>>0]=0;d=0;do{e=b[a+d>>0]|0;c=0;do{i=g+c|0;b[i>>0]=b[i>>0]|b[32096+(c<<5)+d>>0]^e;c=c+1|0}while((c|0)!=7);d=d+1|0}while((d|0)!=31);d=b[a+31>>0]&127;c=0;do{i=g+c|0;b[i>>0]=b[i>>0]|d^b[32096+(c<<5)+31>>0];c=c+1|0}while((c|0)!=7);c=0;d=0;do{c=(h[g+d>>0]|0)+-1|c;d=d+1|0}while((d|0)!=7);t=f;return c>>>8&1|0}function _b(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;Ha(a,c,d,0)|0;yg(a);e=h[c+16>>0]|h[c+16+1>>0]<<8|h[c+16+2>>0]<<16|h[c+16+3>>0]<<24;d=h[c+16+4>>0]|h[c+16+4+1>>0]<<8|h[c+16+4+2>>0]<<16|h[c+16+4+3>>0]<<24;b[a+36>>0]=e;b[a+36+1>>0]=e>>8;b[a+36+2>>0]=e>>16;b[a+36+3>>0]=e>>24;b[a+36+4>>0]=d;b[a+36+4+1>>0]=d>>8;b[a+36+4+2>>0]=d>>16;b[a+36+4+3>>0]=d>>24;b[a+44>>0]=0;b[a+44+1>>0]=0;b[a+44+2>>0]=0;b[a+44+3>>0]=0;b[a+44+4>>0]=0;b[a+44+4+1>>0]=0;b[a+44+4+2>>0]=0;b[a+44+4+3>>0]=0;return 0}function $b(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=t;h=t=t+63&-64;t=t+480|0;g=(a|0)==0?c:a;c=(c|0)==0?g:c;if(!g)Fj();if(!(Oh(h+448|0,e,f)|0)){jh(h,0,0,64)|0;Yg(h,h+448|0,32,0)|0;ye(h+448|0,32);Yg(h,f,32,0)|0;Yg(h,d,32,0)|0;Bh(h,h+384|0,64)|0;ye(h,384);a=0;do{b[c+a>>0]=b[h+384+a>>0]|0;b[g+a>>0]=b[h+384+(a+32)>>0]|0;a=a+1|0}while((a|0)!=32);ye(h+384|0,64);a=0}else a=-1;t=i;return a|0}function ac(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=t;h=t=t+63&-64;t=t+480|0;g=(a|0)==0?c:a;c=(c|0)==0?g:c;if(!g)Fj();if(!(Oh(h+448|0,e,f)|0)){jh(h,0,0,64)|0;Yg(h,h+448|0,32,0)|0;ye(h+448|0,32);Yg(h,d,32,0)|0;Yg(h,f,32,0)|0;Bh(h,h+384|0,64)|0;ye(h,384);a=0;do{b[g+a>>0]=b[h+384+a>>0]|0;b[c+a>>0]=b[h+384+(a+32)>>0]|0;a=a+1|0}while((a|0)!=32);ye(h+384|0,64);a=0}else a=-1;t=i;return a|0}function bc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0;g=t;h=t=t+63&-64;t=t+64|0;if((c+-1&255)>63)Fj();b[h>>0]=c;b[h+1>>0]=0;b[h+2>>0]=1;b[h+3>>0]=1;Dh(h+4|0);We(h+8|0,0,0);f[h+16>>2]=0;f[h+16+4>>2]=0;f[h+16+8>>2]=0;f[h+16+12>>2]=0;if(!d){f[h+32>>2]=0;f[h+32+4>>2]=0;f[h+32+8>>2]=0;f[h+32+12>>2]=0}else Kf(h,d);if(!e){f[h+48>>2]=0;f[h+48+4>>2]=0;f[h+48+8>>2]=0;f[h+48+12>>2]=0}else Hf(h,e);ie(a,h);t=g;return}function cc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=t;f=t=t+63&-64;t=t+160|0;e=Li(c)|0;c=(c<<24>>24)-((0-(e&255)&c<<24>>24)<<1)&255;zh(a);nf(a,b,gi(c,1)|0);nf(a,b+160|0,gi(c,2)|0);nf(a,b+320|0,gi(c,3)|0);nf(a,b+480|0,gi(c,4)|0);nf(a,b+640|0,gi(c,5)|0);nf(a,b+800|0,gi(c,6)|0);nf(a,b+960|0,gi(c,7)|0);nf(a,b+1120|0,gi(c,8)|0);Rc(f,a+40|0);Rc(f+40|0,a);Rc(f+80|0,a+80|0);Dc(f+120|0,a+120|0);nf(a,f,e);t=d;return}
20573function dc(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;ec(a|0,0,b|0)|0;do if(!(c>>>0>0|(c|0)==0&b>>>0>4294967295)){if(c>>>0<0|(c|0)==0&b>>>0<16){f[9002]=22;a=-1;break}if((j|g)>>>0>0|(j|g|0)==0&(i|e)>>>0>4294967295|k>>>0>2147483648){f[9002]=27;a=-1;break}if(j>>>0<0|(j|0)==0&i>>>0<3|k>>>0<8192){f[9002]=22;a=-1;break}if((l|0)==1){a=((fg(i,k>>>10,d,e,h,a,b)|0)!=0)<<31>>31;break}else{f[9002]=22;a=-1;break}}else{f[9002]=27;a=-1}while(0);return a|0}function ec(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=a+d|0;c=c&255;if((d|0)>=67){while(a&3){b[a>>0]=c;a=a+1|0}g=c|c<<8|c<<16|c<<24;while((a|0)<=((e&-4)-64|0)){f[a>>2]=g;f[a+4>>2]=g;f[a+8>>2]=g;f[a+12>>2]=g;f[a+16>>2]=g;f[a+20>>2]=g;f[a+24>>2]=g;f[a+28>>2]=g;f[a+32>>2]=g;f[a+36>>2]=g;f[a+40>>2]=g;f[a+44>>2]=g;f[a+48>>2]=g;f[a+52>>2]=g;f[a+56>>2]=g;f[a+60>>2]=g;a=a+64|0}while((a|0)<(e&-4|0)){f[a>>2]=g;a=a+4|0}}while((a|0)<(e|0)){b[a>>0]=c;a=a+1|0}return e-d|0}function fc(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;ec(a|0,0,b|0)|0;do if(!(c>>>0>0|(c|0)==0&b>>>0>4294967295)){if(c>>>0<0|(c|0)==0&b>>>0<16){f[9002]=22;a=-1;break}if((j|g)>>>0>0|(j|g|0)==0&(i|e)>>>0>4294967295|k>>>0>2147483648){f[9002]=27;a=-1;break}if((i|0)==0&(j|0)==0|k>>>0<8192){f[9002]=22;a=-1;break}if((l|0)==2){a=((cg(i,k>>>10,d,e,h,a,b)|0)!=0)<<31>>31;break}else{f[9002]=22;a=-1;break}}else{f[9002]=27;a=-1}while(0);return a|0}function gc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;h=t;i=t=t+63&-64;t=t+192|0;if((c+-1&255)>63)Fj();if((e+-1&255)>63|(d|0)==0)Fj();else{b[i+128>>0]=c;b[i+128+1>>0]=e;b[i+128+2>>0]=1;b[i+128+3>>0]=1;Dh(i+128+4|0);We(i+128+8|0,0,0);c=i+128+16|0;g=c+48|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(g|0));ie(a,i+128|0);ec(i+(e&255)|0,0,128-(e&255)|0)|0;qb(i|0,d|0,e&255|0)|0;Nb(a,i,128,0);ye(i,128);t=h;return}}function hc(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0;l=t;k=t=t+63&-64;t=t+16|0;if(e){if(!(e+-1&e))i=e+-1&d;else i=(d>>>0)%(e>>>0)|0;j=e+-1-i|0;if(j>>>0>=~d>>>0)Fj();if((j+d|0)>>>0<g>>>0){if(a|0)f[a>>2]=j+d+1;b[k>>0]=0;i=0;do{g=((i^j)+-1|0)>>>24;a=c+(j+d)+(0-i)|0;b[a>>0]=g&128|b[k>>0]&b[a>>0]&255;b[k>>0]=g|(h[k>>0]|0);i=i+1|0}while((i|0)!=(e|0));i=0}else i=-1}else i=-1;t=l;return i|0}function ic(a,c){a=a|0;c=c|0;var d=0;d=(yh(c)|0)&67108863;f[a>>2]=d;d=(yh(c+3|0)|0)>>>2&67108611;f[a+4>>2]=d;d=(yh(c+6|0)|0)>>>4&67092735;f[a+8>>2]=d;d=(yh(c+9|0)|0)>>>6&66076671;f[a+12>>2]=d;d=(yh(c+12|0)|0)>>>8&1048575;f[a+16>>2]=d;f[a+20>>2]=0;f[a+20+4>>2]=0;f[a+20+8>>2]=0;f[a+20+12>>2]=0;f[a+20+16>>2]=0;d=yh(c+16|0)|0;f[a+40>>2]=d;d=yh(c+20|0)|0;f[a+44>>2]=d;d=yh(c+24|0)|0;f[a+48>>2]=d;c=yh(c+28|0)|0;f[a+52>>2]=c;f[a+56>>2]=0;f[a+56+4>>2]=0;b[a+80>>0]=0;return}function jc(a,b,c,d,e,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0;m=t;l=t=t+63&-64;t=t+16|0;ec(a|0,0,b|0)|0;do if(!((g|c)>>>0>0|(g|c|0)==0&(e|b)>>>0>4294967295))if(c>>>0<0|(c|0)==0&b>>>0<16){f[9002]=22;a=-1;break}else{zb(i,j,k,l+8|0,l+4|0,l);k=Wf(1,0,f[l+8>>2]|0)|0;a=Hd(d,e,h,32,k,G,f[l>>2]|0,f[l+4>>2]|0,a,b)|0;break}else{f[9002]=27;a=-1}while(0);t=m;return a|0}function kc(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;j=t;k=t=t+63&-64;t=t+384|0;if((b|0)==0&((e|0)!=0|(f|0)!=0))Fj();if(!a)Fj();if((d+-1&255)>63)Fj();if(!((c|0)!=0|g<<24>>24==0))Fj();if((g&255)>64)Fj();if(!(g<<24>>24))bc(k,d,h,i);else yb(k,d,c,g,h,i);Nb(k,b,e,f);gb(k,a,d)|0;t=j;return}function lc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0;do if(!(e>>>0<0|(e|0)==0&d>>>0<64)?(h=Lg(d|0,e|0,-64,-1)|0,i=G,!(i>>>0>0|(i|0)==0&h>>>0>4294967231)):0){if(tg(c,c+64|0,h,i,g)|0){if(!a){j=10;break}ec(a|0,0,h|0)|0;j=10;break}if(b|0){f[b>>2]=h;f[b+4>>2]=i}if(!a)a=0;else{se(a|0,c+64|0,h|0)|0;a=0}}else j=10;while(0);if((j|0)==10)if(!b)a=-1;else{f[b>>2]=0;f[b+4>>2]=0;a=-1}return a|0}function mc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;d=t;e=t=t+63&-64;t=t+2048|0;if((a|0)!=0&(b|0)!=0){li(e+1024|0,(f[(f[b>>2]|0)+4>>2]|0)+(f[b+24>>2]<<10)+-1024|0);if((f[b+28>>2]|0)>>>0>1){c=1;do{g=f[b+24>>2]|0;g=g+-1+(V(g,c)|0)|0;Ae(e+1024|0,(f[(f[b>>2]|0)+4>>2]|0)+(g<<10)|0);c=c+1|0}while(c>>>0<(f[b+28>>2]|0)>>>0)}sf(e,e+1024|0);Sa(f[a>>2]|0,f[a+4>>2]|0,e,1024);ye(e+1024|0,1024);ye(e,1024);og(b,f[a+56>>2]|0)}t=d;return}function nc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0;g=t;h=t=t+63&-64;t=t+32|0;if(a|0?(d=f[a+28>>2]|0,d|0):0){f[h>>2]=c;e=0;c=d;do{b[h+8>>0]=e;if(!c)c=0;else{d=0;do{f[h+4>>2]=d;f[h+12>>2]=0;f[h+16>>2]=f[h>>2];f[h+16+4>>2]=f[h+4>>2];f[h+16+8>>2]=f[h+8>>2];f[h+16+12>>2]=f[h+12>>2];Va(a,h+16|0);d=d+1|0;c=f[a+28>>2]|0}while(d>>>0<c>>>0)}e=e+1|0}while((e|0)!=4)}t=g;return}function oc(a,b,c,d,e,g,i,j,k,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;l=t;t=t+48|0;f[l+32>>2]=0;Ha(l,m,n,0)|0;n=h[m+16+4>>0]|h[m+16+4+1>>0]<<8|h[m+16+4+2>>0]<<16|h[m+16+4+3>>0]<<24;f[l+32+4>>2]=h[m+16>>0]|h[m+16+1>>0]<<8|h[m+16+2>>0]<<16|h[m+16+3>>0]<<24;f[l+32+4+4>>2]=n;Ib(a,b,c,d,e,g,i,j,k,0,l+32|0,l)|0;ye(l,32);t=l;return 0}function pc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var i=0,j=0,k=0;j=t;i=t=t+63&-64;t=t+32|0;k=h[e+4>>0]|h[e+4+1>>0]<<8|h[e+4+2>>0]<<16|h[e+4+3>>0]<<24;f[i+16>>2]=h[e>>0]|h[e+1>>0]<<8|h[e+2>>0]<<16|h[e+3>>0]<<24;f[i+16+4>>2]=k;f[i+16+8>>2]=0;f[i+16+8+4>>2]=0;We(i,c,d);f[i+8>>2]=0;f[i+8+4>>2]=0;if((b+-16|0)>>>0>48){f[9002]=22;a=-1}else a=he(a,b,0,0,0,g,32,i,i+16|0)|0;t=j;return a|0}function qc(a,b,c,d,e,g,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;b=t;t=t+48|0;f[b+32>>2]=0;Ha(b,l,m,0)|0;m=h[l+16+4>>0]|h[l+16+4+1>>0]<<8|h[l+16+4+2>>0]<<16|h[l+16+4+3>>0]<<24;f[b+32+4>>2]=h[l+16>>0]|h[l+16+1>>0]<<8|h[l+16+2>>0]<<16|h[l+16+3>>0]<<24;f[b+32+4+4>>2]=m;l=wb(a,0,c,d,e,g,i,j,k,b+32|0,b)|0;ye(b,32);t=b;return l|0}function rc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=t;f=t=t+63&-64;t=t+128|0;e=Li(c)|0;c=(c<<24>>24)-((0-(e&255)&c<<24>>24)<<1)&255;Wh(a);ag(a,b,gi(c,1)|0);ag(a,b+120|0,gi(c,2)|0);ag(a,b+240|0,gi(c,3)|0);ag(a,b+360|0,gi(c,4)|0);ag(a,b+480|0,gi(c,5)|0);ag(a,b+600|0,gi(c,6)|0);ag(a,b+720|0,gi(c,7)|0);ag(a,b+840|0,gi(c,8)|0);Rc(f,a+40|0);Rc(f+40|0,a);Dc(f+80|0,a+80|0);ag(a,f,e);t=d;return}function sc(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0;if(g>>>0>0|(g|0)==0&e>>>0>15){m=Lg(e|0,g|0,-16,-1)|0;n=G;g=qc(a,0,d,m,n,d+e+-16|0,h,i,j,k,l)|0;if(!b)c=g;else{c=g;a=(g|0)==0?m:0;g=(g|0)==0?n:0;o=4}}else if(!b)c=-1;else{c=-1;a=0;g=0;o=4}if((o|0)==4){f[b>>2]=a;f[b+4>>2]=g}return c|0}function tc(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0;if(g>>>0>0|(g|0)==0&e>>>0>15){m=Lg(e|0,g|0,-16,-1)|0;n=G;g=wb(a,0,d,m,n,d+e+-16|0,h,i,j,k,l)|0;if(!b)c=g;else{c=g;a=(g|0)==0?m:0;g=(g|0)==0?n:0;o=4}}else if(!b)c=-1;else{c=-1;a=0;g=0;o=4}if((o|0)==4){f[b>>2]=a;f[b+4>>2]=g}return c|0}function uc(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;m=t;k=t=t+63&-64;t=t+16|0;j=a;l=j+128|0;do{b[j>>0]=0;j=j+1|0}while((j|0)<(l|0));do if(!((h|e)>>>0>0|(h|e|0)==0&(g|d)>>>0>4294967295|i>>>0>2147483648))if(h>>>0<0|(h|0)==0&g>>>0<3|i>>>0<8192){f[9002]=22;a=-1;break}else{uf(k,16);a=((rg(g,i>>>10,c,d,k,a)|0)!=0)<<31>>31;break}else{f[9002]=27;a=-1}while(0);t=m;return a|0}function vc(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0;a:do if(g){i=f[d>>2]|0;while(1){if(i>>>0>=c>>>0){h=4;break}h=b[a+i>>0]|0;if(h<<24>>24!=61){if(!e){h=9;break}if(!(sh(e,h<<24>>24)|0)){h=9;break}}else g=g+-1|0;i=i+1|0;f[d>>2]=i;if(!g){g=0;break a}}if((h|0)==4){f[9002]=34;g=-1;break}else if((h|0)==9){f[9002]=22;g=-1;break}}else g=0;while(0);return g|0}function wc(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0;if(g>>>0>0|(g|0)==0&e>>>0>15){m=Lg(e|0,g|0,-16,-1)|0;n=G;g=Jb(a,0,d,m,n,d+e+-16|0,h,i,j,k,l)|0;if(!b)c=g;else{c=g;a=(g|0)==0?m:0;g=(g|0)==0?n:0;o=4}}else if(!b)c=-1;else{c=-1;a=0;g=0;o=4}if((o|0)==4){f[b>>2]=a;f[b+4>>2]=g}return c|0}function xc(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;m=t;k=t=t+63&-64;t=t+16|0;j=a;l=j+128|0;do{b[j>>0]=0;j=j+1|0}while((j|0)<(l|0));do if(!((h|e)>>>0>0|(h|e|0)==0&(g|d)>>>0>4294967295|i>>>0>2147483648))if((g|0)==0&(h|0)==0|i>>>0<8192){f[9002]=22;a=-1;break}else{uf(k,16);a=((qg(g,i>>>10,c,d,k,a)|0)!=0)<<31>>31;break}else{f[9002]=27;a=-1}while(0);t=m;return a|0}function yc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=t;h=t=t+63&-64;t=t+464|0;Bb(h+240|0,a,b)|0;bh(h+240|0,c,d,0)|0;if(f|0){a=0;b=0;do{a=a+1|0;Mg(h+448|0,a);qb(h+32|0,h+240|0,208)|0;bh(h+32|0,h+448|0,4,0)|0;Ve(h+32|0,h)|0;d=f-b|0;qb(e+b|0,h|0,(d>>>0<32?d:32)|0)|0;b=a<<5}while(b>>>0<f>>>0)}ye(h+240|0,208);t=g;return}function zc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=t;d=t=t+63&-64;t=t+16|0;do if((((a|0)!=0?(b|0)!=0:0)?((b<<10>>>0)/(b>>>0)|0|0)==1024:0)?(c=na(12)|0,f[a>>2]=c,(c|0)!=0):0){f[c+4>>2]=0;f[c>>2]=0;c=Uf(d,b<<10)|0;f[9002]=c;if(c|0){f[d>>2]=0;c=-22;break}c=f[d>>2]|0;if(c){f[f[a>>2]>>2]=c;f[(f[a>>2]|0)+4>>2]=c;f[(f[a>>2]|0)+8>>2]=b<<10;c=0}else c=-22}else c=-22;while(0);t=e;return c|0}function Ac(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=t;i=t=t+63&-64;t=t+384|0;if((b|0)==0&((e|0)!=0|(f|0)!=0))Fj();if(!a)Fj();if((d+-1&255)>63)Fj();if(!((c|0)!=0|g<<24>>24==0))Fj();if((g&255)>64)Fj();if(!(g<<24>>24))ed(i,d);else gc(i,d,c,g);Nb(i,b,e,f);gb(i,a,d)|0;t=h;return}function Bc(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=t;h=t=t+63&-64;t=t+96|0;if(!(_g(h+32|0,h)|0)){g=a;i=h+32|0;j=g+32|0;do{b[g>>0]=b[i>>0]|0;g=g+1|0;i=i+1|0}while((g|0)<(j|0));le(h+64|0,h+32|0,f);a=qe(a+32|0,c,d,e,h+64|0,f,h)|0;ye(h,32);ye(h+32|0,32);ye(h+64|0,24)}else a=-1;t=k;return a|0}function Cc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;f=t;e=t=t+63&-64;t=t+320|0;if((((hf(d)|0)!=0?(Zb(d)|0)==0:0)?(Hb(e,d)|0)==0:0)?(Df(e)|0)!=0:0){d=0;do{b[a+d>>0]=b[c+d>>0]|0;d=d+1|0}while((d|0)!=32);rh(a);Oa(e+160|0,a,e);Pd(a,e+160|0);if(!(jf(a)|0))d=((ge(c,32)|0)!=0)<<31>>31;else d=-1}else d=-1;t=f;return d|0}function Dc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=0-(f[b+4>>2]|0)|0;k=0-(f[b+8>>2]|0)|0;j=0-(f[b+12>>2]|0)|0;i=0-(f[b+16>>2]|0)|0;h=0-(f[b+20>>2]|0)|0;g=0-(f[b+24>>2]|0)|0;e=0-(f[b+28>>2]|0)|0;d=0-(f[b+32>>2]|0)|0;c=0-(f[b+36>>2]|0)|0;f[a>>2]=0-(f[b>>2]|0);f[a+4>>2]=l;f[a+8>>2]=k;f[a+12>>2]=j;f[a+16>>2]=i;f[a+20>>2]=h;f[a+24>>2]=g;f[a+28>>2]=e;f[a+32>>2]=d;f[a+36>>2]=c;return}function Ec(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=t;e=t=t+63&-64;t=t+1024|0;if(f[b+28>>2]|0){c=0;do{Qg(a+64|0,0);Qg(a+68|0,c);Sa(e,1024,a,72);ff((f[(f[b>>2]|0)+4>>2]|0)+((V(f[b+24>>2]|0,c)|0)<<10)|0,e);Qg(a+64|0,1);Sa(e,1024,a,72);ff((f[(f[b>>2]|0)+4>>2]|0)+((V(f[b+24>>2]|0,c)|0)+1<<10)|0,e);c=c+1|0}while(c>>>0<(f[b+28>>2]|0)>>>0)}ye(e,1024);t=d;return}function Fc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0;l=t;k=t=t+63&-64;t=t+16|0;f[k>>2]=0;if((d+-1|0)>>>0<c>>>0){i=0;j=0;e=0;while(1){e=e&255;g=h[b+(c+-1)+(0-i)>>0]|0;m=((f[k>>2]|0)+511&e+511&(g^128)+511)>>>8&1;f[k>>2]=i&0-m|f[k>>2];j=m|j&255;i=i+1|0;if((i|0)==(d|0))break;else e=e|g}f[a>>2]=c+-1-(f[k>>2]|0);e=j+-1|0}else e=-1;t=l;return e|0}function Gc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=f[a+32>>2]|0;c=f[a+32+4>>2]|0;e=$f(d|0,c|0,3)|0;if((e&63)>>>0<56){if(56-(e&63)|0)qb(a+40+(e&63)|0,32688,56-(e&63)|0)|0}else{if(64-(e&63)|0)qb(a+40+(e&63)|0,32688,64-(e&63)|0)|0;sa(a,a+40|0,b,b+256|0);c=a+40|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));d=f[a+32>>2]|0;c=f[a+32+4>>2]|0}jd(a+96|0,d,c);sa(a,a+40|0,b,b+256|0);return}function Hc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=t;e=t=t+63&-64;t=t+32|0;zb(b,c,d,e+20|0,e+12|0,e+4|0);do if((gg(a)|0)==101){if(!($d(a,e+16|0,e,e+8|0)|0)){f[9002]=22;a=-1;break}if((f[e+20>>2]|0)==(f[e+16>>2]|0)?(f[e+4>>2]|0)==(f[e>>2]|0):0)a=(f[e+12>>2]|0)!=(f[e+8>>2]|0)&1;else a=1}else{f[9002]=22;a=-1}while(0);t=g;return a|0}function Ic(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=t;d=t=t+63&-64;t=t+80|0;do if(!((a|0)==0|(b|0)==0)){c=na(f[a+20>>2]<<3)|0;f[a+4>>2]=c;if(c){c=zc(a,f[a+16>>2]|0)|0;if(!c){Qa(d,b,f[a+36>>2]|0);ye(d+64|0,8);Ec(d,a);ye(d,72);c=0;break}else{og(a,f[b+56>>2]|0);break}}else c=-22}else c=-25;while(0);t=e;return c|0}function Jc(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,i=0;f=t;g=t=t+63&-64;t=t+16|0;c=g;d=c+12|0;do{b[c>>0]=0;c=c+1|0}while((c|0)<(d|0));d=0;do{e=b[a+d>>0]|0;c=0;do{i=g+c|0;b[i>>0]=b[i>>0]|b[33584+(c<<5)+d>>0]^e;c=c+1|0}while((c|0)!=12);d=d+1|0}while((d|0)!=32);c=0;d=0;do{c=(h[g+d>>0]|0)+-1|c;d=d+1|0}while((d|0)!=12);t=f;return c>>>8&1|0}function Kc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=b[a>>0]|0;a:do if((i+-48&255)<=9){g=0;h=a;e=i;while(1){d=(e<<24>>24)+-48|0;e=g*10|0;if(!(g>>>0<429496730&(d>>>0>~e>>>0^1))){d=0;break a}g=(d>>>0>~e>>>0?0:d)+e|0;d=h+1|0;e=b[d>>0]|0;if((e+-48&255)>9)break;else h=d}if((d|0)!=(a|0)?(h|0)==(a|0)|i<<24>>24!=48:0)f[c>>2]=g;else d=0}else d=0;while(0);return d|0}function Lc(a){a=a|0;return ((0-((0-(a^95)|0)>>>8&63^63|(0-(a^45)|0)>>>8&62^62|((a+65439|0)>>>8^255)&a+185&((122-a|0)>>>8&255^255)|((a+-65|0)>>>8^255)&a+-65&((90-a|0)>>>8&255^255)|((a+65488|0)>>>8^255)&a+4&((57-a|0)>>>8&255^255))|0)>>>8&255^255)&(0-(a^65)|0)>>>8|((0-(a^95)|0)>>>8&63^63|(0-(a^45)|0)>>>8&62^62|((a+65439|0)>>>8^255)&a+185&((122-a|0)>>>8&255^255)|((a+-65|0)>>>8^255)&a+-65&((90-a|0)>>>8&255^255)|((a+65488|0)>>>8^255)&a+4&((57-a|0)>>>8&255^255))|0}function Mc(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if((((a>>>0<=63?(j=Af(d|0,0,c|0,0)|0,k=G,!(k>>>0>0|(k|0)==0&j>>>0>1073741823)):0)?(b[f>>0]=36,b[f+1>>0]=55,b[f+2>>0]=36,b[f+3>>0]=b[35349+a>>0]|0,g=Ed(f+4|0,54,c,30)|0,(g|0)!=0):0)?(h=Ed(g,f+58-g|0,d,30)|0,(h|0)!=0):0)?(i=zd(h,f+58-h|0,e)|0,(i|0)!=0&i>>>0<(f+58|0)>>>0):0)b[i>>0]=0;else f=0;return f|0}function Nc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0;h=t;i=t=t+63&-64;t=t+16|0;se(a+64|0,c|0,d|0)|0;lg(a,i,a+64|0,d,e,g)|0;if((f[i>>2]|0)==64&(f[i+4>>2]|0)==0)if(b|0){a=Lg(d|0,e|0,64,0)|0;f[b>>2]=a;f[b+4>>2]=G;a=0}else a=0;else{if(b|0){f[b>>2]=0;f[b+4>>2]=0}ec(a|0,0,d+64|0)|0;a=-1}t=h;return a|0}function Oc(a,c,d,e,f,g){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=t;h=t=t+63&-64;t=t+32|0;if(!(e>>>0<0|(e|0)==0&d>>>0<32)?(me(h,32,0,f,g)|0,j=Lg(d|0,e|0,-32,-1)|0,(vg(c+16|0,c+32|0,j,G,h)|0)==0):0){kg(a,c,d,e,f,g)|0;c=a+32|0;do{b[a>>0]=0;a=a+1|0}while((a|0)<(c|0));a=0}else a=-1;t=i;return a|0}function Pc(a){a=a|0;return ((0-((0-(a^47)|0)>>>8&63^63|(0-(a^43)|0)>>>8&62^62|((a+65439|0)>>>8^255)&a+185&((122-a|0)>>>8&255^255)|((a+-65|0)>>>8^255)&a+-65&((90-a|0)>>>8&255^255)|((a+65488|0)>>>8^255)&a+4&((57-a|0)>>>8&255^255))|0)>>>8&255^255)&(0-(a^65)|0)>>>8|((0-(a^47)|0)>>>8&63^63|(0-(a^43)|0)>>>8&62^62|((a+65439|0)>>>8^255)&a+185&((122-a|0)>>>8&255^255)|((a+-65|0)>>>8^255)&a+-65&((90-a|0)>>>8&255^255)|((a+65488|0)>>>8^255)&a+4&((57-a|0)>>>8&255^255))|0}function Qc(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0;i=t;g=t=t+63&-64;t=t+128|0;if((gg(a)|0)==101){zi(g+104|0);e=g;h=e+100|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(h|0));d[g+100>>1]=0;c=(Rb(g+104|0,b,c,a,g)|0)==0;Ai(g+104|0);if(!c){e=hd(g,a,102)|0;ye(g,102)}else e=-1}else e=-1;t=i;return e|0}function Rc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=f[b+4>>2]|0;k=f[b+8>>2]|0;j=f[b+12>>2]|0;i=f[b+16>>2]|0;h=f[b+20>>2]|0;g=f[b+24>>2]|0;e=f[b+28>>2]|0;d=f[b+32>>2]|0;c=f[b+36>>2]|0;f[a>>2]=f[b>>2];f[a+4>>2]=l;f[a+8>>2]=k;f[a+12>>2]=j;f[a+16>>2]=i;f[a+20>>2]=h;f[a+24>>2]=g;f[a+28>>2]=e;f[a+32>>2]=d;f[a+36>>2]=c;return}function Sc(a){a=a|0;var c=0,d=0,e=0;a:do if(!(a&3)){c=a;e=5}else{c=a;d=a;while(1){if(!(b[c>>0]|0)){c=d;break a}c=c+1|0;d=c;if(!(d&3)){e=5;break}}}while(0);if((e|0)==5){while(1){d=f[c>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))c=c+4|0;else break}if((d&255)<<24>>24)do c=c+1|0;while((b[c>>0]|0)!=0)}return c-a|0}function Tc(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=t;t=t+96|0;if(!(Qh(j+32|0,j)|0)){g=a;h=j+32|0;i=g+32|0;do{b[g>>0]=b[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));le(j+64|0,j+32|0,f);a=Xe(a+32|0,c,d,e,j+64|0,f,j)|0;ye(j,32);ye(j+32|0,32);ye(j+64|0,24)}else a=-1;t=j;return a|0}function Uc(a,b){a=a|0;b=b|0;var c=0;f[a>>2]=1634760805;f[a+4>>2]=857760878;f[a+8>>2]=2036477234;f[a+12>>2]=1797285236;c=yh(b)|0;f[a+16>>2]=c;c=yh(b+4|0)|0;f[a+20>>2]=c;c=yh(b+8|0)|0;f[a+24>>2]=c;c=yh(b+12|0)|0;f[a+28>>2]=c;c=yh(b+16|0)|0;f[a+32>>2]=c;c=yh(b+20|0)|0;f[a+36>>2]=c;c=yh(b+24|0)|0;f[a+40>>2]=c;b=yh(b+28|0)|0;f[a+44>>2]=b;return}function Vc(a,b){a=a|0;b=b|0;var c=0,d=0;c=$f(f[a+72>>2]|0,f[a+72+4>>2]|0,3)|0;if((c&127)>>>0<112){if(112-(c&127)|0)qb(a+80+(c&127)|0,33456,112-(c&127)|0)|0}else{if(128-(c&127)|0)qb(a+80+(c&127)|0,33456,128-(c&127)|0)|0;ma(a,a+80|0,b,b+640|0);c=a+80|0;d=c+112|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0))}Te(a+192|0,a+64|0,16);ma(a,a+80|0,b,b+640|0);return}function Wc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+48|0;Wb(a,b+40|0,b);Vb(a+40|0,b+40|0,b);pa(a+80|0,a,c+40|0);pa(a+40|0,a+40|0,c);pa(a+120|0,c+120|0,b+120|0);pa(a,b+80|0,c+80|0);Wb(e,a,a);Vb(a,a+80|0,a+40|0);Wb(a+40|0,a+80|0,a+40|0);Vb(a+80|0,e,a+120|0);Wb(a+120|0,e,a+120|0);t=d;return}function Xc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+48|0;Wb(a,b+40|0,b);Vb(a+40|0,b+40|0,b);pa(a+80|0,a,c);pa(a+40|0,a+40|0,c+40|0);pa(a+120|0,c+120|0,b+120|0);pa(a,b+80|0,c+80|0);Wb(e,a,a);Vb(a,a+80|0,a+40|0);Wb(a+40|0,a+80|0,a+40|0);Wb(a+80|0,e,a+120|0);Vb(a+120|0,e,a+120|0);t=d;return}function Yc(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,i=0;f=h[a+7>>0]|0;g=Wf(h[a+6>>0]|0|0,0,8)|0;i=G;e=Wf(h[a+5>>0]|0|0,0,16)|0;i=i|G;d=Wf(h[a+4>>0]|0|0,0,24)|0;i=i|G|(h[a+3>>0]|0);c=Wf(h[a+2>>0]|0|0,0,40)|0;i=i|G;b=Wf(h[a+1>>0]|0|0,0,48)|0;i=i|G;a=Wf(h[a>>0]|0|0,0,56)|0;G=i|G;return g|f|e|d|c|b|a|0}function Zc(a,b){a=a|0;b=b|0;var c=0,d=0;d=t;c=t=t+63&-64;t=t+256|0;if(((Zb(b)|0)==0?(Eb(c+88|0,b)|0)==0:0)?(Df(c+88|0)|0)!=0:0){Bg(c);Vb(c,c,c+88+40|0);Za(c,c);Bg(c+48|0);Wb(c+48|0,c+48|0,c+88+40|0);pa(c+48|0,c+48|0,c);rb(a,c+48|0);a=0}else a=-1;t=d;return a|0}function _c(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+48|0;Wb(a,b+40|0,b);Vb(a+40|0,b+40|0,b);pa(a+80|0,a,c+40|0);pa(a+40|0,a+40|0,c);pa(a+120|0,c+80|0,b+120|0);Wb(e,b+80|0,b+80|0);Vb(a,a+80|0,a+40|0);Wb(a+40|0,a+80|0,a+40|0);Vb(a+80|0,e,a+120|0);Wb(a+120|0,e,a+120|0);t=d;return}function $c(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+48|0;Wb(a,b+40|0,b);Vb(a+40|0,b+40|0,b);pa(a+80|0,a,c);pa(a+40|0,a+40|0,c+40|0);pa(a+120|0,c+80|0,b+120|0);Wb(e,b+80|0,b+80|0);Vb(a,a+80|0,a+40|0);Wb(a+40|0,a+80|0,a+40|0);Wb(a+80|0,e,a+120|0);Vb(a+120|0,e,a+120|0);t=d;return}function ad(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=t;d=t=t+63&-64;t=t+800|0;if((((Hb(d+640|0,b)|0)==0?(cd(d+640|0)|0)!=0:0)?(Hb(d+480|0,c)|0)==0:0)?(cd(d+480|0)|0)!=0:0){If(d,d+480|0);Wc(d+160|0,d+640|0,d);wf(d+320|0,d+160|0);Pd(a,d+320|0);a=0}else a=-1;t=e;return a|0}function bd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=t;d=t=t+63&-64;t=t+800|0;if((((Hb(d+640|0,b)|0)==0?(cd(d+640|0)|0)!=0:0)?(Hb(d+480|0,c)|0)==0:0)?(cd(d+480|0)|0)!=0:0){If(d,d+480|0);Xc(d+160|0,d+640|0,d);wf(d+320|0,d+160|0);Pd(a,d+320|0);a=0}else a=-1;t=e;return a|0}function cd(a){a=a|0;var b=0,c=0;b=t;c=t=t+63&-64;t=t+288|0;ua(c+240|0,a);ua(c+192|0,a+40|0);ua(c+144|0,a+80|0);Vb(c+48|0,c+192|0,c+240|0);pa(c+48|0,c+48|0,c+144|0);pa(c,c+240|0,c+192|0);pa(c,c,16);ua(c+96|0,c+144|0);Wb(c,c,c+96|0);Vb(c+48|0,c+48|0,c);a=Mf(c+48|0)|0;t=b;return a|0}function dd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!(e>>>0<2147483647&e<<1>>>0<c>>>0))Fj();if(!e)c=0;else{c=0;do{g=h[d+c>>0]|0;f=c<<1;b[a+f>>0]=(g>>>4)+87+(((g>>>4)+65526|0)>>>8&217);b[a+(f|1)>>0]=(((g&15)<<8)+22272+((g&15)+65526&55552)|0)>>>8;c=c+1|0}while((c|0)!=(e|0));c=e<<1}b[a+c>>0]=0;return a|0}function ed(a,c){a=a|0;c=c|0;var d=0,e=0,g=0;e=t;g=t=t+63&-64;t=t+64|0;if((c+-1&255)>63)Fj();else{b[g>>0]=c;b[g+1>>0]=0;b[g+2>>0]=1;b[g+3>>0]=1;Dh(g+4|0);We(g+8|0,0,0);c=g+16|0;d=c+48|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));ie(a,g);t=e;return}}function fd(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;e=t;f=t=t+63&-64;t=t+208|0;d=0;do{b[a+d>>0]=b[c+d>>0]|0;d=d+1|0}while((d|0)!=32);b[a>>0]=b[a>>0]&-8;b[a+31>>0]=b[a+31>>0]&63|64;ub(f+40|0,a);Re(f,f+40+40|0,f+40+80|0);rb(a,f);t=e;return 0}function gd(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(e>>>0>0|(e|0)==0&d>>>0>4294967279)Fj();oc(a,a+d|0,0,c,d,e,g,h,i,0,k,l)|0;if(b|0){k=Lg(d|0,e|0,16,0)|0;f[b>>2]=k;f[b+4>>2]=G}return 0}function hd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=t;g=t=t+63&-64;t=t+16|0;f[g+4>>2]=a;f[g>>2]=c;b[g+8>>0]=0;if(d|0){a=0;do{b[g+8>>0]=b[g+8>>0]|b[(f[g>>2]|0)+a>>0]^b[(f[g+4>>2]|0)+a>>0];a=a+1|0}while((a|0)!=(d|0))}t=e;return (((h[g+8>>0]|0)+511|0)>>>8&1)+-1|0}function id(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(e>>>0>0|(e|0)==0&d>>>0>4294967279)Fj();Ib(a,a+d|0,0,c,d,e,g,h,i,0,k,l)|0;if(b|0){k=Lg(d|0,e|0,16,0)|0;f[b>>2]=k;f[b+4>>2]=G}return 0}function jd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;b[a+7>>0]=c;e=$f(c|0,d|0,8)|0;b[a+6>>0]=e;e=$f(c|0,d|0,16)|0;b[a+5>>0]=e;e=$f(c|0,d|0,24)|0;b[a+4>>0]=e;b[a+3>>0]=d;e=$f(c|0,d|0,40)|0;b[a+2>>0]=e;e=$f(c|0,d|0,48)|0;b[a+1>>0]=e;d=$f(c|0,d|0,56)|0;b[a>>0]=d;return}function kd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=t;g=t=t+63&-64;t=t+32|0;if(d>>>0<0|(d|0)==0&c>>>0<48)a=-1;else{c=Lg(c|0,d|0,-32,-1)|0;d=G;le(g,b,e);a=_d(a,b+32|0,c,d,g,b,f)|0}t=h;return a|0}function ld(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=t;i=t=t+63&-64;t=t+32|0;if(!(ne(i,g,h)|0)){a=mf(a,b,c,d,e,f,i)|0;ye(i,32)}else a=-1;t=j;return a|0}function md(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=t;i=t=t+63&-64;t=t+32|0;if(!(ne(i,g,h)|0)){qf(a,b,c,d,e,f,i)|0;ye(i,32);a=0}else a=-1;t=j;return a|0}function nd(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(e>>>0>0|(e|0)==0&d>>>0>4294967279)Fj();Xb(a,a+d|0,0,c,d,e,g,h,i,0,k,l)|0;if(b|0){k=Lg(d|0,e|0,16,0)|0;f[b>>2]=k;f[b+4>>2]=G}return 0}function od(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;i=t;j=t=t+63&-64;t=t+80|0;if(!((c|0)==0&(d|0)==0)){Qg(j+64|0,f);Qg(j+64+4|0,g);Uc(j,h);je(j,e,j+64|0);za(j,b,a,c,d);ye(j,64)}t=i;return 0}function pd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=t;g=t=t+63&-64;t=t+16|0;f[g+8>>2]=a;f[g+4>>2]=c;f[g>>2]=0;a=0;do{f[g>>2]=f[g>>2]|(b[(f[g+4>>2]|0)+a>>0]^b[(f[g+8>>2]|0)+a>>0])&255;a=a+1|0}while((a|0)!=(d|0));t=e;return (((f[g>>2]|0)+511|0)>>>8&1)+-1|0}function qd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=b[a>>0]|0;a:do if(!(e<<24>>24))e=0;else while(1){d=d+-1|0;f=b[c>>0]|0;if(!(e<<24>>24==f<<24>>24&((d|0)!=0&f<<24>>24!=0)))break a;a=a+1|0;c=c+1|0;e=b[a>>0]|0;if(!(e<<24>>24)){e=0;break}}while(0);return (e&255)-(h[c>>0]|0)|0}function rd(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0;h=t;e=t=t+63&-64;t=t+16|0;g=0;d=0;while(1){if(Og(e,b[c>>0]|0)|0){d=3;break}c=c+1|0;g=f[e>>2]<<d|g;d=d+6|0;if(d>>>0>=30){d=5;break}}if((d|0)==3){f[a>>2]=0;c=0}else if((d|0)==5)f[a>>2]=g;t=h;return c|0}function sd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;ig(c,a+((d<<5)+-16<<2)|0);if(d<<1|0){e=0;do{g=e<<4;zf(c,a+(g<<2)|0);Ea(c);f=e<<3;ig(b+(f<<2)|0,c);zf(c,a+((g|16)<<2)|0);Ea(c);ig(b+(f+(d<<4)<<2)|0,c);e=e+2|0}while(e>>>0<d<<1>>>0)}return}function td(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=t;g=t=t+63&-64;t=t+16|0;e=10;while(1){h=c;c=(c>>>0)/10|0;i=(h+(V(c,-10)|0)|48)&255;d=e+-1|0;b[g+d>>0]=i;if(!(h>>>0>9&(d|0)!=0))break;else e=d}i=11-e|0;qb(a|0,g+d|0,i|0)|0;b[a+i>>0]=0;t=f;return}function ud(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+48|0;ua(a,b);ua(a+80|0,b+40|0);ta(a+120|0,b+80|0);Wb(a+40|0,b,b+40|0);ua(d,a+40|0);Wb(a+40|0,a+80|0,a);Vb(a+80|0,a+80|0,a);Vb(a,d,a+40|0);Vb(a+120|0,a+120|0,a+80|0);t=c;return}function vd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;f=t;e=t=t+63&-64;t=t+16|0;b[e>>0]=0;if(!(Ya(a,c,d)|0)){c=0;do{b[e>>0]=b[e>>0]|b[a+c>>0];c=c+1|0}while((c|0)!=32);c=0-(((h[e>>0]|0)+511|0)>>>8&1)|0}else c=-1;t=f;return c|0}function wd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;do if(!(c>>>0>64|(d+-1|0)>>>0>63))if((b|0)==0|(c|0)==0){bc(a,d&255,e,f);a=0;break}else{yb(a,d&255,b,c&255,e,f);a=0;break}else a=-1;while(0);return a|0}function xd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;g=t;h=t=t+63&-64;t=t+64|0;He(h,d,32,0)|0;d=c;e=h;f=d+32|0;do{b[d>>0]=b[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));ye(h,64);h=Jh(a,c)|0;t=g;return h|0}function yd(a,c,d,e,f,g){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(e>>>0<0|(e|0)==0&d>>>0<32)a=-1;else{kg(a,c,d,e,f,g)|0;c=Lg(d|0,e|0,-32,-1)|0;Eg(a+16|0,a+32|0,c,G,a)|0;c=a+16|0;do{b[a>>0]=0;a=a+1|0}while((a|0)<(c|0));a=0}return a|0}function zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=0;g=a;while(1){a=0;d=0;do{f=e;e=e+1|0;d=(h[c+f>>0]|0)<<a|d;a=a+8|0;f=e>>>0<32}while(f&a>>>0<24);a=Ed(g,b,d,a)|0;if(!a){a=0;break}b=b+g-a|0;if(!f)break;else g=a}return a|0}function Ad(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;switch(l|0){case 1:{a=dc(a,b,c,d,e,g,h,i,j,k,1)|0;break}case 2:{a=fc(a,b,c,d,e,g,h,i,j,k,2)|0;break}default:{f[9002]=22;a=-1}}return a|0}function Bd(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;e=t;f=t=t+63&-64;t=t+64|0;He(f,c,32,0)|0;b[f>>0]=b[f>>0]&-8;b[f+31>>0]=b[f+31>>0]&63|64;c=f;d=a+32|0;do{b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0}while((a|0)<(d|0));ye(f,64);t=e;return 0}function Cd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=t;g=t=t+63&-64;t=t+32|0;if(d>>>0<0|(d|0)==0&c>>>0<48)a=-1;else{c=Lg(c|0,d|0,-32,-1)|0;d=G;le(g,b,e);a=ve(a,b+32|0,c,d,g,b,f)|0}t=h;return a|0}function Dd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=t;i=t=t+63&-64;t=t+80|0;if(!((c|0)==0&(d|0)==0)){Qg(i+64|0,f);Uc(i,g);Be(i,e,i+64|0);za(i,b,a,c,d);ye(i,64)}t=h;return 0}function Ed(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:do if(e){f=0;while(1){if(!c){a=0;break a}g=a+1|0;b[a>>0]=b[35349+(d&63)>>0]|0;f=f+6|0;if(f>>>0>=e>>>0){a=g;break}else{d=d>>>6;c=c+-1|0;a=g}}}while(0);return a|0}function Fd(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;e=t;f=t=t+63&-64;t=t+160|0;d=0;do{b[a+d>>0]=b[c+d>>0]|0;d=d+1|0}while((d|0)!=32);rh(a);ub(f,a);Pd(a,f);f=((ge(c,32)|0)!=0)<<31>>31;t=e;return f|0}function Gd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=Lg(f[a+64>>2]|0,f[a+64+4>>2]|0,b|0,c|0)|0;e=G;f[a+64>>2]=d;f[a+64+4>>2]=e;c=Lg(f[a+72>>2]|0,f[a+72+4>>2]|0,(e>>>0<c>>>0|(e|0)==(c|0)&d>>>0<b>>>0)&1|0,0)|0;f[a+72>>2]=c;f[a+72+4>>2]=G;return}function Hd(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;k=t;l=t=t+63&-64;t=t+16|0;zi(l);j=hb(l,a,b,c,d,e,f,g,h,i,j)|0;Ai(l);t=k;return j|0}function Id(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=t;h=t=t+63&-64;t=t+32|0;if(!(oe(h,f,g)|0)){a=ng(a,b,c,d,e,h)|0;ye(h,32)}else a=-1;t=i;return a|0}function Jd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=t;f=t=t+63&-64;t=t+160|0;He(c,d,32,0)|0;b[c>>0]=b[c>>0]&-8;b[c+31>>0]=b[c+31>>0]&63|64;ub(f,c);Pd(a,f);se(c|0,d|0,32)|0;se(c+32|0,a|0,32)|0;t=e;return 0}function Kd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=t;h=t=t+63&-64;t=t+32|0;if(!(oe(h,f,g)|0)){a=xg(a,b,c,d,e,h)|0;ye(h,32)}else a=-1;t=i;return a|0}function Ld(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;i=t;j=t=t+63&-64;t=t+32|0;La(j,e,h,0)|0;h=Ef(a,b,c,d,e+16|0,f,g,j)|0;ye(j,32);t=i;return h|0}function Md(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if(qd(a,34372,10)|0)if(!(qd(a,34383,9)|0)){a=ih(a,b,c,d)|0;break}else{f[9002]=22;a=-1;break}else a=fh(a,b,c,d)|0;while(0);return a|0}function Nd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=t;g=t=t+63&-64;t=t+64|0;if(!((b|0)==0&(c|0)==0)){Uc(g,e);Be(g,d,0);ec(a|0,0,b|0)|0;za(g,a,a,b,c);ye(g,64)}t=f;return 0}function Od(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a:do if(d>>>0>0|(d|0)==0&c>>>0>4294967295){f[9002]=27;a=-1}else{switch($h(a,b,c)|0){case 0:{a=0;break a}case -35:{f[9002]=22;break}default:{}}a=-1}while(0);return a|0}function Pd(a,c){a=a|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+144|0;Za(e+96|0,c+80|0);pa(e+48|0,c,e+96|0);pa(e,c+40|0,e+96|0);rb(a,e);c=(Xf(e+48|0)|0)<<7;b[a+31>>0]=c^(h[a+31>>0]|0);t=d;return}function Qd(a){a=a|0;var b=0,c=0;c=t;b=t=t+63&-64;t=t+160|0;if((((hf(a)|0)!=0?(Zb(a)|0)==0:0)?(Hb(b,a)|0)==0:0)?(cd(b)|0)!=0:0)a=(Df(b)|0)!=0&1;else a=0;t=c;return a|0}function Rd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a:do if(d>>>0>0|(d|0)==0&c>>>0>4294967295){f[9002]=27;a=-1}else{switch(ai(a,b,c)|0){case 0:{a=0;break a}case -35:{f[9002]=22;break}default:{}}a=-1}while(0);return a|0}function Sd(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;switch(h|0){case 1:{i=uc(a,b,c,d,e,f,g)|0;break}case 2:{i=xc(a,b,c,d,e,f,g)|0;break}default:Fj()}return i|0}function Td(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if(!(c>>>0>64|(d+-1|0)>>>0>63))if((b|0)==0|(c|0)==0){ed(a,d&255);a=0;break}else{gc(a,d&255,b,c&255);a=0;break}else a=-1;while(0);return a|0}function Ud(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=t;g=t=t+63&-64;t=t+64|0;if(!((b|0)==0&(c|0)==0)){Uc(g,e);je(g,d,0);ec(a|0,0,b|0)|0;za(g,a,a,b,c);ye(g,64)}t=f;return 0}function Vd(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;i=t;j=t=t+63&-64;t=t+32|0;Ha(j,e,h,0)|0;h=Gf(a,b,c,d,e+16|0,f,g,j)|0;t=i;return h|0}function Wd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=t;c=t=t+63&-64;t=t+16|0;e=Uf(c,b)|0;f[9002]=e;if(!e)c=f[c>>2]|0;else{f[c>>2]=0;c=0}f[a>>2]=c;f[a+4>>2]=c;f[a+8>>2]=(c|0)==0?0:b;t=d;return c|0}function Xd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if(qd(a,34372,10)|0)if(!(qd(a,34383,9)|0)){a=Rd(a,b,c,d)|0;break}else{f[9002]=22;a=-1;break}else a=Od(a,b,c,d)|0;while(0);return a|0}function Yd(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;i=t;t=t+32|0;if(!(qh(i,g,h)|0)){a=Pf(a,b,c,d,e,f,i)|0;ye(i,32)}else a=-1;t=i;return a|0}function Zd(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;i=t;t=t+32|0;if(!(qh(i,g,h)|0)){Tf(a,b,c,d,e,f,i)|0;ye(i,32);a=0}else a=-1;t=i;return a|0}function _d(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=Lg(c|0,d|0,-16,-1)|0;a=ld(a,b+16|0,b,d,G,e,f,g)|0}return a|0}function $d(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;if(((((b[a>>0]|0)==36?(b[a+1>>0]|0)==55:0)?(b[a+2>>0]|0)==36:0)?(Og(c,b[a+3>>0]|0)|0)==0:0)?(f=rd(d,a+4|0)|0,(f|0)!=0):0)a=rd(e,f)|0;else a=0;return a|0}function ae(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=Lg(c|0,d|0,-16,-1)|0;a=mf(a,b+16|0,b,d,G,e,f)|0}return a|0}function be(a){a=a|0;var b=0;b=f[r>>2]|0;if((a|0)>0&(b+a|0)<(b|0)|(b+a|0)<0){ba()|0;da(12);return -1}f[r>>2]=b+a;if((b+a|0)>(aa()|0)?($()|0)==0:0){f[r>>2]=b;da(12);return -1}return b|0}function ce(a){a=a|0;var c=0,d=0,e=0,f=0,g=0;d=32;c=1;e=0;while(1){d=d+-1|0;f=b[a+d>>0]|0;g=b[32320+d>>0]|0;c=c&255;e=(f&255)-(g&255)>>8&c|e&255;if(!d)break;else c=(((g^f)&255)+65535|0)>>>8&c}return (e|0)!=0|0}function de(a){a=a|0;f[a+32>>2]=0;f[a+32+4>>2]=0;f[a>>2]=f[8100];f[a+4>>2]=f[8101];f[a+8>>2]=f[8102];f[a+12>>2]=f[8103];f[a+16>>2]=f[8104];f[a+20>>2]=f[8105];f[a+24>>2]=f[8106];f[a+28>>2]=f[8107];return 0}function ee(){}function fe(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=V(b&65535,a&65535)|0;e=(c>>>16)+(V(b&65535,a>>>16)|0)|0;d=V(b>>>16,a&65535)|0;return (G=(e>>>16)+(V(b>>>16,a>>>16)|0)+(((e&65535)+d|0)>>>16)|0,e+d<<16|c&65535|0)|0}function ge(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;e=t;f=t=t+63&-64;t=t+16|0;b[f>>0]=0;d=0;do{b[f>>0]=b[f>>0]|b[a+d>>0];d=d+1|0}while((d|0)!=(c|0));t=e;return ((h[f>>0]|0)+511|0)>>>8&1|0}function he(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;if((b+-1|0)>>>0>63|g>>>0>64)a=-1;else{kc(a,c,f,b&255,d,e,g&255,h,i);a=0}return a|0}function ie(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;vf(a);c=0;do{g=tf(b+(c<<3)|0)|0;d=a+(c<<3)|0;e=f[d+4>>2]^G;f[d>>2]=f[d>>2]^g;f[d+4>>2]=e;c=c+1|0}while((c|0)!=8);return}function je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c){f[a+48>>2]=0;c=0}else{d=yh(c)|0;f[a+48>>2]=d;c=yh(c+4|0)|0}f[a+52>>2]=c;d=yh(b)|0;f[a+56>>2]=d;d=yh(b+4|0)|0;f[a+60>>2]=d;return}function ke(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=Lg(c|0,d|0,-16,-1)|0;a=nb(a,b+16|0,b,d,G,e,f)|0}return a|0}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+384|0;jh(e,0,0,24)|0;Yg(e,b,32,0)|0;Yg(e,c,32,0)|0;Bh(e,a,24)|0;t=d;return}function me(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=t;g=t=t+63&-64;t=t+32|0;La(g,d,e,0)|0;e=ch(a,b,c,d+16|0,g)|0;ye(g,32);t=f;return e|0}function ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=t;d=t=t+63&-64;t=t+32|0;if(!(vd(d,c,b)|0)){Ha(a,35488,d,0)|0;a=0}else a=-1;t=e;return a|0}function oe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=t;d=t=t+63&-64;t=t+32|0;if(!(vd(d,c,b)|0)){La(a,35440,d,0)|0;a=0}else a=-1;t=e;return a|0}function pe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=t;t=t+32|0;Me(f,b,c,d,e)|0;e=ji(a,f)|0;e=((f|0)==(a|0)?-1:e)|(hd(f,a,32)|0);t=f;return e|0}function qe(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)Fj();else return md(a+16|0,a,b,c,d,e,f,g)|0;return 0}function re(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)Fj();else{qf(a+16|0,a,b,c,d,e,f)|0;return 0}return 0}function se(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if((c|0)<(a|0)&(a|0)<(c+d|0)){e=a;c=c+d|0;a=a+d|0;while((d|0)>0){a=a-1|0;c=c-1|0;d=d-1|0;b[a>>0]=b[c>>0]|0}a=e}else qb(a,c,d)|0;return a|0}function te(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=t;t=t+64|0;Le(f,b,c,d,e)|0;e=ii(a,f)|0;e=((f|0)==(a|0)?-1:e)|(hd(f,a,64)|0);t=f;return e|0}function ue(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=t;t=t+32|0;Je(f,b,c,d,e)|0;e=ji(a,f)|0;e=((f|0)==(a|0)?-1:e)|(hd(f,a,32)|0);t=f;return e|0}function ve(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=Lg(c|0,d|0,-16,-1)|0;a=Yd(a,b+16|0,b,d,G,e,f,g)|0}return a|0}function we(a){a=a|0;var b=0,c=0,d=0,e=0;c=h[a>>0]|0;d=Wf(h[a+1>>0]|0|0,0,8)|0;e=G;b=Wf(h[a+2>>0]|0|0,0,16)|0;e=e|G;a=Wf(h[a+3>>0]|0|0,0,24)|0;G=e|G;return d|c|b|a|0}function xe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=t;g=t=t+63&-64;t=t+16|0;Ke(g,b,c,d,e)|0;e=ki(a,g)|0;t=f;return e|0}function ye(a,c){a=a|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+16|0;f[e>>2]=a;if(c|0){a=0;do{b[(f[e>>2]|0)+a>>0]=0;a=a+1|0}while((a|0)!=(c|0))}t=d;return}function ze(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=Lg(c|0,d|0,-16,-1)|0;a=Pf(a,b+16|0,b,d,G,e,f)|0}return a|0}function Ae(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;c=0;do{g=b+(c<<3)|0;d=a+(c<<3)|0;e=f[d+4>>2]^f[g+4>>2];f[d>>2]=f[d>>2]^f[g>>2];f[d+4>>2]=e;c=c+1|0}while((c|0)!=128);return}function Be(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)c=0;else c=yh(c)|0;f[a+48>>2]=c;c=yh(b)|0;f[a+52>>2]=c;c=yh(b+4|0)|0;f[a+56>>2]=c;b=yh(b+8|0)|0;f[a+60>>2]=b;return}function Ce(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=t;g=t=t+63&-64;t=t+32|0;Ha(g,d,e,0)|0;e=hh(a,b,c,d+16|0,g)|0;t=f;return e|0}function De(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=Lg(c|0,d|0,-16,-1)|0;a=pb(a,b+16|0,b,d,G,e,f)|0}return a|0}function Ee(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)Fj();else{bb(a+16|0,a,b,c,d,e,f)|0;return 0}return 0}function Fe(a,c){a=a|0;c=c|0;var d=0,e=0;e=t;t=t+64|0;Ue(a,e)|0;a=e;d=c+32|0;do{b[c>>0]=b[a>>0]|0;c=c+1|0;a=a+1|0}while((c|0)<(d|0));t=e;return 0}function Ge(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;f=Lg(c|0,d|0,a|0,b|0)|0;e=G;d=Wf(a|0,b|0,1)|0;d=Af(d&-2|0,G&1|0,c|0,0)|0;d=Lg(f|0,e|0,d|0,G|0)|0;return d|0}function He(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=t;f=t=t+63&-64;t=t+208|0;Ne(f)|0;Ja(f,b,c,d)|0;df(f,a)|0;t=e;return 0}function Ie(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=t;f=t=t+63&-64;t=t+112|0;de(f)|0;Pa(f,b,c,d)|0;gf(f,a)|0;t=e;return 0}function Je(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=t;t=t+208|0;Bb(f,e,32)|0;bh(f,b,c,d)|0;Ve(f,a)|0;t=f;return 0}function Ke(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=t;g=t=t+63&-64;t=t+96|0;ic(g,e);Ra(g,b,c,d);ab(g,a);t=f;return 0}function Le(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=t;t=t+416|0;Ab(f,e,32)|0;eh(f,b,c,d)|0;Ue(f,a)|0;t=f;return 0}function Me(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=t;t=t+416|0;wh(f,e,32)|0;lh(f,b,c,d)|0;Fe(f,a)|0;t=f;return 0}function Ne(a){a=a|0;var b=0,c=0;f[a+64>>2]=0;f[a+64+4>>2]=0;f[a+64+8>>2]=0;f[a+64+12>>2]=0;b=32752;c=a+64|0;do{f[a>>2]=f[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(c|0));return 0}function Oe(a,c){a=a|0;c=c|0;var d=0;a:do if(!c)c=0;else{d=c;while(1){d=d+-1|0;c=a+d|0;if((b[c>>0]|0)==36)break a;if(!d){c=0;break}}}while(0);return c|0}function Pe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=t;f=t=t+63&-64;t=t+64|0;df(a,f)|0;Mb(b,c,f,64,0,d,1);t=e;return 0}function Qe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+64|0;df(a,e)|0;c=Pb(b,e,64,0,c,1)|0;t=d;return c|0}function Re(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=t;e=t=t+63&-64;t=t+96|0;Wb(e+48|0,c,b);Vb(e,c,b);Za(e,e);pa(a,e+48|0,e);t=d;return}function Se(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if((b+-1|0)>>>0>63|g>>>0>64)a=-1;else{Ac(a,c,f,b&255,d,e,g&255);a=0}return a|0}function Te(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(c>>>3|0){d=0;do{e=b+(d<<3)|0;jd(a+(d<<3)|0,f[e>>2]|0,f[e+4>>2]|0);d=d+1|0}while((d|0)!=(c>>>3|0))}return}function Ue(a,b){a=a|0;b=b|0;var c=0;c=t;t=t+64|0;df(a,c)|0;Ja(a+208|0,c,64,0)|0;df(a+208|0,b)|0;ye(c,64);t=c;return 0}function Ve(a,b){a=a|0;b=b|0;var c=0;c=t;t=t+32|0;gf(a,c)|0;Pa(a+104|0,c,32,0)|0;gf(a+104|0,b)|0;ye(c,32);t=c;return 0}function We(a,c,d){a=a|0;c=c|0;d=d|0;b[a>>0]=c;b[a+1>>0]=c>>8;b[a+2>>0]=c>>16;b[a+3>>0]=c>>24;b[a+4>>0]=d;b[a+4+1>>0]=d>>8;b[a+4+2>>0]=d>>16;b[a+4+3>>0]=d>>24;return}function Xe(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)Fj();else return Zd(a+16|0,a,b,c,d,e,f,g)|0;return 0}function Ye(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)Fj();else{Tf(a+16|0,a,b,c,d,e,f)|0;return 0}return 0}function Ze(a){a=a|0;return (0-(a^62)|0)>>>8&45^45|(a+65510|0)>>>8&255&a+65|(0-(a^63)|0)>>>8&95^95|(a+65484|0)>>>8&a+71&((a+65510|0)>>>8&255^255)|(a+65474|0)>>>8&a+252&((a+65484|0)>>>8&255^255)|0}function _e(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)Fj();else{db(a+16|0,a,b,c,d,e,f)|0;return 0}return 0}function $e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(c>>>2|0){d=0;do{e=a+(d<<2)|0;f[e>>2]=f[e>>2]^f[b+(d<<2)>>2];d=d+1|0}while((d|0)!=(c>>>2|0))}return}function af(a){a=a|0;return (0-(a^62)|0)>>>8&43^43|(a+65510|0)>>>8&255&a+65|(0-(a^63)|0)>>>8&47^47|(a+65484|0)>>>8&a+71&((a+65510|0)>>>8&255^255)|(a+65474|0)>>>8&a+252&((a+65484|0)>>>8&255^255)|0}function bf(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+32|0;uf(d,32);Jd(a,b,d)|0;ye(d,32);t=c;return 0}function cf(a,b){a=a|0;b=b|0;if(b|0){b=f[a>>2]|0;if(b|0)ye(f[b+4>>2]|0,f[a+16>>2]<<10);b=f[a+4>>2]|0;if(b|0)ye(b,f[a+20>>2]<<3)}return}function df(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+704|0;Vc(a,d);Te(b,a,64);ye(d,704);ye(a,208);t=c;return 0}function ef(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=0;do{e=Yc(b+(c<<3)|0)|0;d=a+(c<<3)|0;f[d>>2]=e;f[d+4>>2]=G;c=c+1|0}while((c|0)!=16);return}function ff(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=0;do{e=tf(b+(c<<3)|0)|0;d=a+(c<<3)|0;f[d>>2]=e;f[d+4>>2]=G;c=c+1|0}while((c|0)!=128);return}function gf(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+288|0;Gc(a,d);Vf(b,a);ye(d,288);ye(a,104);t=c;return 0}function hf(a){a=a|0;var c=0,d=0;c=b[a+31>>0]&127^127;d=30;do{c=c|~b[a+d>>0];d=d+-1|0}while((d|0)!=0);return (236-(h[a>>0]|0)&(c&255)+511)>>>8&1^1|0}function jf(a){a=a|0;var c=0,d=0;c=1;d=b[a>>0]^1;do{d=b[a+c>>0]|d;c=c+1|0}while((c|0)!=31);return (((b[a+31>>0]&127|d)&255)+511|0)>>>8&1|0}function kf(a){a=a|0;var b=0;if(a>>>0<2)a=0;else{do b=Hi()|0;while(b>>>0<(((0-a|0)>>>0)%(a>>>0)|0)>>>0);a=(b>>>0)%(a>>>0)|0}return a|0}function lf(a,b){a=a|0;b=b|0;var c=0;Sh(b);c=(V((a>>>0)/3|0,-3)|0)+a|0;return (((a>>>0)/3|0)<<2|1)+(4-(3-c&0-(b>>>1&1))&0-((c>>>1|c)&1))|0}function mf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return nb(a,b,c,d,e,f,g)|0}function nf(a,b,c){a=a|0;b=b|0;c=c|0;Fb(a,b,c&255);Fb(a+40|0,b+40|0,c&255);Fb(a+80|0,b+80|0,c&255);Fb(a+120|0,b+120|0,c&255);return}function of(a){a=a|0;var c=0,d=0,e=0;d=0;c=1;while(1){e=a+d|0;c=c+(h[e>>0]|0)|0;b[e>>0]=c;d=d+1|0;if((d|0)==4)break;else c=c>>>8}return}function pf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=t;t=t+16|0;Da(a,b,c,d,e|0)|0;t=e;return (G=f[e+4>>2]|0,f[e>>2]|0)|0}function qf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;bb(a,b,c,d,e,f,g)|0;return 0}function rf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c>>>2|0){d=0;do{f[a+(d<<2)>>2]=f[b+(d<<2)>>2];d=d+1|0}while((d|0)!=(c>>>2|0))}return}function sf(a,b){a=a|0;b=b|0;var c=0,d=0;c=0;do{d=b+(c<<3)|0;We(a+(c<<3)|0,f[d>>2]|0,f[d+4>>2]|0);c=c+1|0}while((c|0)!=128);return}function tf(a){a=a|0;G=h[a+4>>0]|h[a+4+1>>0]<<8|h[a+4+2>>0]<<16|h[a+4+3>>0]<<24;return h[a>>0]|h[a+1>>0]<<8|h[a+2>>0]<<16|h[a+3>>0]<<24|0}function uf(a,c){a=a|0;c=c|0;var d=0,e=0;if(c|0){d=0;do{e=(Hi()|0)&255;b[a+d>>0]=e;d=d+1|0}while((d|0)!=(c|0))}return}function vf(a){a=a|0;var b=0,c=0,d=0;b=a;c=32752;d=b+64|0;do{f[b>>2]=f[c>>2];b=b+4|0;c=c+4|0}while((b|0)<(d|0));ec(a+64|0,0,293)|0;return}function wf(a,b){a=a|0;b=b|0;pa(a,b,b+120|0);pa(a+40|0,b+40|0,b+80|0);pa(a+80|0,b+80|0,b+120|0);pa(a+120|0,b,b+40|0);return}function xf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=$f(a|0,b|0,c|0)|0;e=G;c=Wf(a|0,b|0,64-c|0)|0;G=G|e;return c|d|0}function yf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=Wf(a|0,b|0,c|0)|0;e=G;c=$f(a|0,b|0,64-c|0)|0;G=G|e;return c|d|0}function zf(a,b){a=a|0;b=b|0;var c=0,d=0;c=0;do{d=a+(c<<2)|0;f[d>>2]=f[d>>2]^f[b+(c<<2)>>2];c=c+1|0}while((c|0)!=16);return}function Af(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=fe(a,c)|0;f=G;return (G=(V(b,c)|0)+(V(d,a)|0)+f|f&0,e|0|0)|0}function Bf(a,b,c){a=a|0;b=b|0;c=c|0;if(c>>>0<256)return gb(a,b,c&255)|0;else ca(34168,34188,103,34241);return 0}function Cf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;b=Wf(b&255|0,0,8)|0;d=G;c=Wf(c&255|0,0,16)|0;G=d|G;return b|a&255|c|0}function Df(a){a=a|0;var b=0,c=0;b=t;c=t=t+63&-64;t=t+160|0;cb(c,a);a=Mf(c)|0;t=b;return a|0}function Ef(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Ua(a,b,c,d,e,f,g,h)|0}function Ff(a,b){a=a|0;b=b|0;var c=0,d=0;c=0;do{d=$g(b+(c<<2)|0)|0;f[a+(c<<2)>>2]=d;c=c+1|0}while((c|0)!=16);return}function Gf(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return od(a,b,c,d,e,f,g,h)|0}function Hf(a,c){a=a|0;c=c|0;var d=0;d=a+48|0;a=d+16|0;do{b[d>>0]=b[c>>0]|0;d=d+1|0;c=c+1|0}while((d|0)<(a|0));return}function If(a,b){a=a|0;b=b|0;Wb(a,b+40|0,b);Vb(a+40|0,b+40|0,b);Rc(a+80|0,b+80|0);pa(a+120|0,b+120|0,112);return}function Jf(a,b){a=a|0;b=b|0;var c=0,d=0;c=t;d=t=t+63&-64;t=t+128|0;Vg(d,b);ud(a,d);t=c;return}function Kf(a,c){a=a|0;c=c|0;var d=0;d=a+32|0;a=d+16|0;do{b[d>>0]=b[c>>0]|0;d=d+1|0;c=c+1|0}while((d|0)<(a|0));return}function Lf(){var a=0;a=ha(30)|0;if((a|0)>0)f[8877]=a;else a=f[8877]|0;if(a>>>0<16)Fj();else{uf(35472,16);return}}function Mf(a){a=a|0;var b=0,c=0;b=t;c=t=t+63&-64;t=t+32|0;rb(c,a);a=ge(c,32)|0;t=b;return a|0}function Nf(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}G=(b|0)<0?-1:0;return b>>c-32|0}function Of(a,c){a=a|0;c=c|0;var d=0,e=0;d=0;do{e=a+d|0;b[e>>0]=b[e>>0]^b[c+d>>0];d=d+1|0}while((d|0)!=8);return}function Pf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return pb(a,b,c,d,e,f,g)|0}function Qf(){var a=0,b=0;a=t;b=t=t+63&-64;t=t+16|0;Ih(b);if(f[b>>2]|0)Ih(b);t=a;return}function Rf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Id(a,b,c,d,e,f,g)|0}function Sf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Dd(a,b,c,d,e,f,g)|0}function Tf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;db(a,b,c,d,e,f,g)|0;return 0}function Uf(a,b){a=a|0;b=b|0;var c=0;if(b>>>0<=4294967168?(c=Cb(b)|0,(c|0)!=0):0){f[a>>2]=c;a=0}else a=12;return a|0}function Vf(a,b){a=a|0;b=b|0;var c=0;c=0;do{Mg(a+(c<<2)|0,f[b+(c<<2)>>2]|0);c=c+1|0}while((c|0)!=8);return}function Wf(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}G=a<<c-32;return 0}function Xf(a){a=a|0;var c=0,d=0;d=t;c=t=t+63&-64;t=t+32|0;rb(c,a);t=d;return b[c>>0]&1|0}function Yf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Kd(a,b,c,d,e,f,g)|0}function Zf(a){a=a|0;var b=0;b=na(a)|0;if(!b)return b|0;if(!(f[b+-4>>2]&3))return b|0;ec(b|0,0,a|0)|0;return b|0}function _f(){var a=0;if(!(f[8876]|0)){qi();Gi();Lf();f[8876]=1;a=0}else a=1;return a|0}function $f(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}G=0;return b>>>c-32|0}function ag(a,b,c){a=a|0;b=b|0;c=c|0;Fb(a,b,c&255);Fb(a+40|0,b+40|0,c&255);Fb(a+80|0,b+80|0,c&255);return}function bg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Se(a,b,c,d,e,f,g)|0}function cg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Db(a,b,1,c,d,e,16,f,g,0,0,2)|0}function dg(a,b,c){a=a|0;b=b|0;c=c|0;if(c>>>0<1|(c|0)==1&b>>>0<0){uf(a,b);return}else ca(35231,35251,204,35277)}function eg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return xc(a,b,c,d,e,f,g)|0}function fg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Db(a,b,1,c,d,e,16,f,g,0,0,1)|0}function gg(a){a=a|0;var c=0;c=0;while(1){if(!(b[a+c>>0]|0))break;c=c+1|0;if(c>>>0>=102){c=102;break}}return c|0}function hg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Vd(a,b,c,d,e,0,0,f)|0}function ig(a,b){a=a|0;b=b|0;var c=0;c=0;do{f[a+(c<<2)>>2]=f[b+(c<<2)>>2];c=c+1|0}while((c|0)!=16);return}function jg(a,b){a=a|0;b=b|0;pa(a,b,b+120|0);pa(a+40|0,b+40|0,b+80|0);pa(a+80|0,b+80|0,b+120|0);return}function kg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ld(a,b,c,d,e,0,0,f)|0}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Mb(a,b,c,d,e,f,0);return 0}function mg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return pc(a,b,c,d,e,f)|0}function ng(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Oc(a,b,c,d,e,f)|0}function og(a,b){a=a|0;b=b|0;cf(a,b&4);wa(f[a+4>>2]|0);f[a+4>>2]=0;Hh(f[a>>2]|0);f[a>>2]=0;return}function pg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Dd(a,b,c,d,e,0,f)|0}function qg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Db(a,b,1,c,d,e,16,0,32,f,128,2)|0}function rg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Db(a,b,1,c,d,e,16,0,32,f,128,1)|0}function sg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ua(a,b,c,d,e,0,0,f)|0}function tg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Pb(a,b,c,d,e,0)|0}function ug(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;lg(a,b,c,d,e,f)|0;return 0}function vg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return xe(a,b,c,d,e)|0}function wg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return od(a,b,c,d,e,0,0,f)|0}function xg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return yd(a,b,c,d,e,f)|0}function yg(a){a=a|0;b[a+32>>0]=1;b[a+32+1>>0]=0;b[a+32+2>>0]=0;b[a+32+3>>0]=0;return}function zg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ng(a,b,c,d,e,f)|0}function Ag(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return kg(a,b,c,d,e,f)|0}function Bg(a){a=a|0;var b=0;f[a>>2]=1;a=a+4|0;b=a+36|0;do{f[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function Cg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return tg(a,b,c,d,e)|0}function Dg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return lc(a,b,c,d,e,f)|0}function Eg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ke(a,b,c,d,e)|0}function Fg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return vg(a,b,c,d,e)|0}function Gg(a,b){a=a|0;b=b|0;Ne(a)|0;if(b|0)Ja(a,33968,34,0)|0;return}function Hg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return xg(a,b,c,d,e,f)|0}function Ig(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (G=d,a-c>>>0|0)|0}function Jg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Nc(a,b,c,d,e,f)|0}function Kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return gh(a,b,c,d)|0}function Lg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (G=b+d+(a+c>>>0>>>0<a>>>0|0)>>>0,a+c>>>0|0)|0}function Mg(a,c){a=a|0;c=c|0;b[a+3>>0]=c;b[a+2>>0]=c>>>8;b[a+1>>0]=c>>>16;b[a>>0]=c>>>24;return}function Ng(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return pe(a,b,c,d,e)|0}function Og(a,b){a=a|0;b=b|0;b=Kb(b&255)|0;f[a>>2]=(b|0)==0?0:b-35349|0;return ((b|0)==0)<<31>>31|0}function Pg(a){a=a|0;if(b[a+356>>0]|0)ei(a);f[a+80>>2]=-1;f[a+80+4>>2]=-1;return}function Qg(a,c){a=a|0;c=c|0;b[a>>0]=c;b[a+1>>0]=c>>8;b[a+2>>0]=c>>16;b[a+3>>0]=c>>24;return}function Rg(a,b,c){a=a|0;b=b|0;c=c|0;bg(b,32,c,32,0,0,0)|0;return Uh(a,b)|0}function Sg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ya(a,b,c,d,e)|0;return 0}function Tg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Eg(a,b,c,d,e)|0}function Ug(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Nb(a,b,c,d);return 0}function Vg(a,b){a=a|0;b=b|0;Rc(a,b);Rc(a+40|0,b+40|0);Rc(a+80|0,b+80|0);return}function Wg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Nd(a,b,c,d,e)|0}function Xg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Pe(a,b,c,d)|0;return 0}function Yg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ug(a,b,c,d)|0;return 0}function Zg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Me(a,b,c,d,e)|0;return 0}function _g(a,b){a=a|0;b=b|0;uf(b,32);return Jh(a,b)|0}function $g(a){a=a|0;return (h[a+2>>0]|0)<<8|(h[a+3>>0]|0)|(h[a+1>>0]|0)<<16|(h[a>>0]|0)<<24|0}function ah(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Kg(a,b,c,d)|0}function bh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Pa(a,b,c,d)|0;return 0}function ch(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return mb(a,b,c,d,e)|0}function dh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return me(a,b,c,d,e)|0}function eh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ja(a,b,c,d)|0;return 0}function fh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ob(a,b,c,d,2)|0}function gh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ra(a,b,c,d);return 0}function hh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ud(a,b,c,d,e)|0}function ih(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ob(a,b,c,d,1)|0}function jh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Td(a,b,c,d)|0}function kh(a,b,c){a=a|0;b=b|0;c=c|0;return xd(a,b,c)|0}function lh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;eh(a,b,c,d)|0;return 0}function mh(a,b){a=a|0;b=b|0;fb(a,b);return 0-(Zb(a)|0)|0}function nh(a,b,c){a=a|0;b=b|0;c=c|0;Wg(a,b,0,35219,c)|0;return}function oh(a,b){a=a|0;b=b|0;G=f[a+-64+(b<<7)+4>>2]|0;return f[a+-64+(b<<7)>>2]|0}function ph(a){a=a|0;var b=0;b=a+40|0;do{f[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function qh(a,b,c){a=a|0;b=b|0;c=c|0;return oe(a,b,c)|0}function rh(a){a=a|0;b[a>>0]=b[a>>0]&-8;b[a+31>>0]=b[a+31>>0]&63|64;return}function sh(a,c){a=a|0;c=c|0;a=Tb(a,c)|0;return ((b[a>>0]|0)==(c&255)<<24>>24?a:0)|0}function th(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Fa(a,b,c,d,12);return 0}function uh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Fa(a,b,c,d,8);return 0}function vh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Fa(a,b,c,d,20);return 0}function wh(a,b,c){a=a|0;b=b|0;c=c|0;Ab(a,b,c)|0;return 0}function xh(a,b,c){a=a|0;b=b|0;c=c|0;Jd(a,b,c)|0;return 0}function yh(a){a=a|0;return h[a>>0]|h[a+1>>0]<<8|h[a+2>>0]<<16|h[a+3>>0]<<24|0}function zh(a){a=a|0;Bg(a);Bg(a+40|0);Bg(a+80|0);ph(a+120|0);return}function Ah(a,b,c){a=a|0;b=b|0;c=c|0;return Qe(a,b,c)|0}function Bh(a,b,c){a=a|0;b=b|0;c=c|0;return Bf(a,b,c)|0}function Ch(a){a=a|0;var b=0;b=t;t=t+a|0;t=t+15&-16;return b|0}function Dh(a){a=a|0;b[a>>0]=0;b[a+1>>0]=0;b[a+2>>0]=0;b[a+3>>0]=0;return}function Eh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;He(a,b,c,d)|0;return 0}function Fh(a,b,c){a=a|0;b=b|0;c=c|0;rc(a,1120+(b*960|0)|0,c);return}function Gh(a){a=a|0;ph(a);Bg(a+40|0);Bg(a+80|0);ph(a+120|0);return}function Hh(a){a=a|0;var b=0;if(a|0?(b=f[a>>2]|0,b|0):0)wa(b);wa(a);return}function Ih(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;return}function Jh(a,b){a=a|0;b=b|0;return fd(a,b)|0}function Kh(a,b){a=a|0;b=b|0;return Xh(a,b)|0}function Lh(a,b){a=a|0;b=b|0;return bi(a,b)|0}function Mh(a){a=a|0;var b=0;b=f[a>>2]|0;if(b|0)wa(b);Zh(a);return}function Nh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Da(a,b,c,d,0)|0}function Oh(a,b,c){a=a|0;b=b|0;c=c|0;return vd(a,b,c)|0}function Ph(a,b){a=a|0;b=b|0;uf(b,32);return Uh(a,b)|0}function Qh(a,b){a=a|0;b=b|0;return _g(a,b)|0}function Rh(a,b){a=a|0;b=b|0;return Kh(a,b)|0}function Sh(a){a=a|0;if((a&-7|0)==1)return;else Fj()}function Th(a,b){a=a|0;b=b|0;se(a|0,b+32|0,32)|0;return 0}function Uh(a,b){a=a|0;b=b|0;return Jh(a,b)|0}function Vh(a,b){a=a|0;b=b|0;return Lh(a,b)|0}function Wh(a){a=a|0;Bg(a);Bg(a+40|0);ph(a+80|0);return}function Xh(a,b){a=a|0;b=b|0;ab(a,b);return 0}function Yh(a,b){a=a|0;b=b|0;if(!v){v=a;w=b}}function Zh(a){a=a|0;f[a+4>>2]=0;f[a>>2]=0;f[a+8>>2]=0;return}function _h(a,b){a=a|0;b=b|0;se(a|0,b|0,32)|0;return 0}function $h(a,b,c){a=a|0;b=b|0;c=c|0;return sb(a,b,c,2)|0}function ai(a,b,c){a=a|0;b=b|0;c=c|0;return sb(a,b,c,1)|0}function bi(a,b){a=a|0;b=b|0;ic(a,b);return 0}function ci(a,b){a=a|0;b=b|0;bf(a,b)|0;return 0}function di(a){a=a|0;ph(a);Bg(a+40|0);Bg(a+80|0);return}function ei(a){a=a|0;f[a+88>>2]=-1;f[a+88+4>>2]=-1;return}function fi(a,b){a=a|0;b=b|0;return ((a|0)!=0|(b|0)!=0)&1|0}function gi(a,b){a=a|0;b=b|0;return (((b^a)&255)+-1|0)>>>31&255|0}function hi(a){a=a|0;return (a?31-(Y(a^a-1)|0)|0:32)|0}function ii(a,b){a=a|0;b=b|0;return pd(a,b,64)|0}function ji(a,b){a=a|0;b=b|0;return pd(a,b,32)|0}function ki(a,b){a=a|0;b=b|0;return pd(a,b,16)|0}function li(a,b){a=a|0;b=b|0;qb(a|0,b|0,1024)|0;return}function mi(a){a=a|0;Ne(a)|0;return 0}function ni(a,b){a=a|0;b=b|0;t=a;u=b}function oi(a,b){a=a|0;b=b|0;return a>>>(32-b|0)|a<<b|0}function pi(a){a=a|0;mi(a)|0;return 0}function qi(){Qf();return}function ri(a,b){a=a|0;b=b|0;return a<<32-b|a>>>b|0}function si(a){a=a|0;return Oe(a,(Sc(a)|0)+1|0)|0}function ti(a){a=a|0;uf(a,16);return}function ui(a){a=a|0;ec(a|0,0,1024)|0;return}function vi(){return 524288}function wi(a){a=a|0;uf(a,32);return}function xi(){return -18}function yi(){return 16777216}function zi(a){a=a|0;Zh(a);return}function Ai(a){a=a|0;Mh(a);return}function Bi(){return 32768}function Ci(){return 52}function Di(){return 33554432}function Ei(){return 35414}function Fi(){return 536870912}function Gi(){fa(1)|0;return}function Hi(){return fa(0)|0}function Ii(){return 134217728}function Ji(){return 17}function Ki(){return 102}function Li(a){a=a|0;return (a&255)>>>7|0}function Mi(){return 1073741824}function Ni(){return 67108864}function Oi(){return 12}function Pi(){return 268435456}function Qi(){return 6}function Ri(){return -2147483648}function Si(){return 34456}function Ti(){return 34383}function Ui(){return 416}function Vi(a){a=a|0;t=a}function Wi(){return 4}function Xi(){return 34303}function Yi(a){a=a|0;G=a}function Zi(){return 34401}function _i(){return 3}function $i(){return 256}function aj(){return 104}function bj(){return 384}function cj(){return 34429}function dj(){return 34412}function ej(){return 10}function fj(){return 8192}function gj(){return 34447}function hj(){return 34372}function ij(){return 34393}function jj(){return 1}function kj(){return 35342}function lj(){return 34439}function mj(){return 2}function nj(){return 34274}function oj(){return 34016}function pj(){return 208}function qj(){return 128}function rj(){return -1}function sj(){return 34281}function tj(){return 34030}function uj(){return 34289}function vj(){return 8}function wj(){return 24}function xj(){return G|0}function yj(){return 48}function zj(){return 16}function Aj(){return 36008}function Bj(){return t|0}function Cj(){return 64}function Dj(){return 32}function Ej(){return 0}function Fj(){ea()}
20574
20575// EMSCRIPTEN_END_FUNCS
20576return{___errno_location:Aj,___muldi3:Af,___udivdi3:Nh,___uremdi3:pf,_bitshift64Ashr:Nf,_bitshift64Lshr:$f,_bitshift64Shl:Wf,_crypto_aead_chacha20poly1305_abytes:zj,_crypto_aead_chacha20poly1305_decrypt:wc,_crypto_aead_chacha20poly1305_decrypt_detached:Jb,_crypto_aead_chacha20poly1305_encrypt:nd,_crypto_aead_chacha20poly1305_encrypt_detached:Xb,_crypto_aead_chacha20poly1305_ietf_abytes:zj,_crypto_aead_chacha20poly1305_ietf_decrypt:tc,_crypto_aead_chacha20poly1305_ietf_decrypt_detached:wb,_crypto_aead_chacha20poly1305_ietf_encrypt:id,_crypto_aead_chacha20poly1305_ietf_encrypt_detached:Ib,_crypto_aead_chacha20poly1305_ietf_keybytes:Dj,_crypto_aead_chacha20poly1305_ietf_keygen:wi,_crypto_aead_chacha20poly1305_ietf_npubbytes:Oi,_crypto_aead_chacha20poly1305_ietf_nsecbytes:Ej,_crypto_aead_chacha20poly1305_keybytes:Dj,_crypto_aead_chacha20poly1305_keygen:wi,_crypto_aead_chacha20poly1305_npubbytes:vj,_crypto_aead_chacha20poly1305_nsecbytes:Ej,_crypto_aead_xchacha20poly1305_ietf_abytes:zj,_crypto_aead_xchacha20poly1305_ietf_decrypt:sc,_crypto_aead_xchacha20poly1305_ietf_decrypt_detached:qc,_crypto_aead_xchacha20poly1305_ietf_encrypt:gd,_crypto_aead_xchacha20poly1305_ietf_encrypt_detached:oc,_crypto_aead_xchacha20poly1305_ietf_keybytes:Dj,_crypto_aead_xchacha20poly1305_ietf_keygen:wi,_crypto_aead_xchacha20poly1305_ietf_npubbytes:wj,_crypto_aead_xchacha20poly1305_ietf_nsecbytes:Ej,_crypto_auth:Zg,_crypto_auth_bytes:Dj,_crypto_auth_hmacsha256:Je,_crypto_auth_hmacsha256_bytes:Dj,_crypto_auth_hmacsha256_final:Ve,_crypto_auth_hmacsha256_init:Bb,_crypto_auth_hmacsha256_keybytes:Dj,_crypto_auth_hmacsha256_keygen:wi,_crypto_auth_hmacsha256_statebytes:pj,_crypto_auth_hmacsha256_update:bh,_crypto_auth_hmacsha256_verify:ue,_crypto_auth_hmacsha512:Le,_crypto_auth_hmacsha512256:Me,_crypto_auth_hmacsha512256_bytes:Dj,_crypto_auth_hmacsha512256_final:Fe,_crypto_auth_hmacsha512256_init:wh,_crypto_auth_hmacsha512256_keybytes:Dj,_crypto_auth_hmacsha512256_keygen:wi,_crypto_auth_hmacsha512256_statebytes:Ui,_crypto_auth_hmacsha512256_update:lh,_crypto_auth_hmacsha512256_verify:pe,_crypto_auth_hmacsha512_bytes:Cj,_crypto_auth_hmacsha512_final:Ue,_crypto_auth_hmacsha512_init:Ab,_crypto_auth_hmacsha512_keybytes:Dj,_crypto_auth_hmacsha512_keygen:wi,_crypto_auth_hmacsha512_statebytes:Ui,_crypto_auth_hmacsha512_update:eh,_crypto_auth_hmacsha512_verify:te,_crypto_auth_keybytes:Dj,_crypto_auth_keygen:wi,_crypto_auth_primitive:oj,_crypto_auth_verify:Ng,_crypto_box:Yf,_crypto_box_afternm:Hg,_crypto_box_beforenm:qh,_crypto_box_beforenmbytes:Dj,_crypto_box_boxzerobytes:zj,_crypto_box_curve25519xchacha20poly1305_beforenm:ne,_crypto_box_curve25519xchacha20poly1305_beforenmbytes:Dj,_crypto_box_curve25519xchacha20poly1305_detached:md,_crypto_box_curve25519xchacha20poly1305_detached_afternm:qf,_crypto_box_curve25519xchacha20poly1305_easy:qe,_crypto_box_curve25519xchacha20poly1305_easy_afternm:re,_crypto_box_curve25519xchacha20poly1305_keypair:_g,_crypto_box_curve25519xchacha20poly1305_macbytes:zj,_crypto_box_curve25519xchacha20poly1305_noncebytes:wj,_crypto_box_curve25519xchacha20poly1305_open_detached:ld,_crypto_box_curve25519xchacha20poly1305_open_detached_afternm:mf,_crypto_box_curve25519xchacha20poly1305_open_easy:_d,_crypto_box_curve25519xchacha20poly1305_open_easy_afternm:ae,_crypto_box_curve25519xchacha20poly1305_publickeybytes:Dj,_crypto_box_curve25519xchacha20poly1305_seal:Bc,_crypto_box_curve25519xchacha20poly1305_seal_open:kd,_crypto_box_curve25519xchacha20poly1305_sealbytes:yj,_crypto_box_curve25519xchacha20poly1305_secretkeybytes:Dj,_crypto_box_curve25519xchacha20poly1305_seed_keypair:xd,_crypto_box_curve25519xchacha20poly1305_seedbytes:Dj,_crypto_box_curve25519xsalsa20poly1305:Kd,_crypto_box_curve25519xsalsa20poly1305_afternm:xg,_crypto_box_curve25519xsalsa20poly1305_beforenm:oe,_crypto_box_curve25519xsalsa20poly1305_beforenmbytes:Dj,_crypto_box_curve25519xsalsa20poly1305_boxzerobytes:zj,_crypto_box_curve25519xsalsa20poly1305_keypair:_g,_crypto_box_curve25519xsalsa20poly1305_macbytes:zj,_crypto_box_curve25519xsalsa20poly1305_noncebytes:wj,_crypto_box_curve25519xsalsa20poly1305_open:Id,_crypto_box_curve25519xsalsa20poly1305_open_afternm:ng,_crypto_box_curve25519xsalsa20poly1305_publickeybytes:Dj,_crypto_box_curve25519xsalsa20poly1305_secretkeybytes:Dj,_crypto_box_curve25519xsalsa20poly1305_seed_keypair:xd,_crypto_box_curve25519xsalsa20poly1305_seedbytes:Dj,_crypto_box_curve25519xsalsa20poly1305_zerobytes:Dj,_crypto_box_detached:Zd,_crypto_box_detached_afternm:Tf,_crypto_box_easy:Xe,_crypto_box_easy_afternm:Ye,_crypto_box_keypair:Qh,_crypto_box_macbytes:zj,_crypto_box_noncebytes:wj,_crypto_box_open:Rf,_crypto_box_open_afternm:zg,_crypto_box_open_detached:Yd,_crypto_box_open_detached_afternm:Pf,_crypto_box_open_easy:ve,_crypto_box_open_easy_afternm:ze,_crypto_box_primitive:tj,_crypto_box_publickeybytes:Dj,_crypto_box_seal:Tc,_crypto_box_seal_open:Cd,_crypto_box_sealbytes:yj,_crypto_box_secretkeybytes:Dj,_crypto_box_seed_keypair:kh,_crypto_box_seedbytes:Dj,_crypto_box_zerobytes:Dj,_crypto_core_ed25519_add:bd,_crypto_core_ed25519_bytes:Dj,_crypto_core_ed25519_from_uniform:mh,_crypto_core_ed25519_is_valid_point:Qd,_crypto_core_ed25519_sub:ad,_crypto_core_ed25519_uniformbytes:Dj,_crypto_core_hchacha20:Ha,_crypto_core_hchacha20_constbytes:zj,_crypto_core_hchacha20_inputbytes:zj,_crypto_core_hchacha20_keybytes:Dj,_crypto_core_hchacha20_outputbytes:Dj,_crypto_core_hsalsa20:La,_crypto_core_hsalsa20_constbytes:zj,_crypto_core_hsalsa20_inputbytes:zj,_crypto_core_hsalsa20_keybytes:Dj,_crypto_core_hsalsa20_outputbytes:Dj,_crypto_core_salsa20:vh,_crypto_core_salsa2012:th,_crypto_core_salsa2012_constbytes:zj,_crypto_core_salsa2012_inputbytes:zj,_crypto_core_salsa2012_keybytes:Dj,_crypto_core_salsa2012_outputbytes:Cj,_crypto_core_salsa208:uh,_crypto_core_salsa208_constbytes:zj,_crypto_core_salsa208_inputbytes:zj,_crypto_core_salsa208_keybytes:Dj,_crypto_core_salsa208_outputbytes:Cj,_crypto_core_salsa20_constbytes:zj,_crypto_core_salsa20_inputbytes:zj,_crypto_core_salsa20_keybytes:Dj,_crypto_core_salsa20_outputbytes:Cj,_crypto_generichash:bg,_crypto_generichash_blake2b:Se,_crypto_generichash_blake2b_bytes:Dj,_crypto_generichash_blake2b_bytes_max:Cj,_crypto_generichash_blake2b_bytes_min:zj,_crypto_generichash_blake2b_final:Bf,_crypto_generichash_blake2b_init:Td,_crypto_generichash_blake2b_init_salt_personal:wd,_crypto_generichash_blake2b_keybytes:Dj,_crypto_generichash_blake2b_keybytes_max:Cj,_crypto_generichash_blake2b_keybytes_min:zj,_crypto_generichash_blake2b_keygen:wi,_crypto_generichash_blake2b_personalbytes:zj,_crypto_generichash_blake2b_salt_personal:he,_crypto_generichash_blake2b_saltbytes:zj,_crypto_generichash_blake2b_statebytes:bj,_crypto_generichash_blake2b_update:Ug,_crypto_generichash_bytes:Dj,_crypto_generichash_bytes_max:Cj,_crypto_generichash_bytes_min:zj,_crypto_generichash_final:Bh,_crypto_generichash_init:jh,_crypto_generichash_keybytes:Dj,_crypto_generichash_keybytes_max:Cj,_crypto_generichash_keybytes_min:zj,_crypto_generichash_keygen:wi,_crypto_generichash_primitive:sj,_crypto_generichash_statebytes:bj,_crypto_generichash_update:Yg,_crypto_hash:Eh,_crypto_hash_bytes:Cj,_crypto_hash_primitive:nj,_crypto_hash_sha256:Ie,_crypto_hash_sha256_bytes:Dj,_crypto_hash_sha256_final:gf,_crypto_hash_sha256_init:de,_crypto_hash_sha256_statebytes:aj,_crypto_hash_sha256_update:Pa,_crypto_hash_sha512:He,_crypto_hash_sha512_bytes:Cj,_crypto_hash_sha512_final:df,_crypto_hash_sha512_init:Ne,_crypto_hash_sha512_statebytes:pj,_crypto_hash_sha512_update:Ja,_crypto_kdf_blake2b_bytes_max:Cj,_crypto_kdf_blake2b_bytes_min:zj,_crypto_kdf_blake2b_contextbytes:vj,_crypto_kdf_blake2b_derive_from_key:pc,_crypto_kdf_blake2b_keybytes:Dj,_crypto_kdf_bytes_max:Cj,_crypto_kdf_bytes_min:zj,_crypto_kdf_contextbytes:vj,_crypto_kdf_derive_from_key:mg,_crypto_kdf_keybytes:Dj,_crypto_kdf_keygen:wi,_crypto_kdf_primitive:sj,_crypto_kx_client_session_keys:ac,_crypto_kx_keypair:Ph,_crypto_kx_primitive:uj,_crypto_kx_publickeybytes:Dj,_crypto_kx_secretkeybytes:Dj,_crypto_kx_seed_keypair:Rg,_crypto_kx_seedbytes:Dj,_crypto_kx_server_session_keys:$b,_crypto_kx_sessionkeybytes:Dj,_crypto_onetimeauth:Tg,_crypto_onetimeauth_bytes:zj,_crypto_onetimeauth_final:Rh,_crypto_onetimeauth_init:Vh,_crypto_onetimeauth_keybytes:Dj,_crypto_onetimeauth_keygen:wi,_crypto_onetimeauth_poly1305:Eg,_crypto_onetimeauth_poly1305_bytes:zj,_crypto_onetimeauth_poly1305_final:Kh,_crypto_onetimeauth_poly1305_init:Lh,_crypto_onetimeauth_poly1305_keybytes:Dj,_crypto_onetimeauth_poly1305_keygen:wi,_crypto_onetimeauth_poly1305_statebytes:$i,_crypto_onetimeauth_poly1305_update:Kg,_crypto_onetimeauth_poly1305_verify:vg,_crypto_onetimeauth_primitive:Xi,_crypto_onetimeauth_statebytes:$i,_crypto_onetimeauth_update:ah,_crypto_onetimeauth_verify:Fg,_crypto_pwhash:Ad,_crypto_pwhash_alg_argon2i13:jj,_crypto_pwhash_alg_argon2id13:mj,_crypto_pwhash_alg_default:mj,_crypto_pwhash_argon2i:dc,_crypto_pwhash_argon2i_alg_argon2i13:jj,_crypto_pwhash_argon2i_bytes_max:rj,_crypto_pwhash_argon2i_bytes_min:zj,_crypto_pwhash_argon2i_memlimit_interactive:Di,_crypto_pwhash_argon2i_memlimit_max:Ri,_crypto_pwhash_argon2i_memlimit_min:fj,_crypto_pwhash_argon2i_memlimit_moderate:Ii,_crypto_pwhash_argon2i_memlimit_sensitive:Fi,_crypto_pwhash_argon2i_opslimit_interactive:Wi,_crypto_pwhash_argon2i_opslimit_max:rj,_crypto_pwhash_argon2i_opslimit_min:_i,_crypto_pwhash_argon2i_opslimit_moderate:Qi,_crypto_pwhash_argon2i_opslimit_sensitive:vj,_crypto_pwhash_argon2i_passwd_max:rj,_crypto_pwhash_argon2i_passwd_min:Ej,_crypto_pwhash_argon2i_saltbytes:zj,_crypto_pwhash_argon2i_str:uc,_crypto_pwhash_argon2i_str_needs_rehash:ih,_crypto_pwhash_argon2i_str_verify:Rd,_crypto_pwhash_argon2i_strbytes:qj,_crypto_pwhash_argon2i_strprefix:Ti,_crypto_pwhash_argon2id:fc,_crypto_pwhash_argon2id_alg_argon2id13:mj,_crypto_pwhash_argon2id_bytes_max:rj,_crypto_pwhash_argon2id_bytes_min:zj,_crypto_pwhash_argon2id_memlimit_interactive:Ni,_crypto_pwhash_argon2id_memlimit_max:Ri,_crypto_pwhash_argon2id_memlimit_min:fj,_crypto_pwhash_argon2id_memlimit_moderate:Pi,_crypto_pwhash_argon2id_memlimit_sensitive:Mi,_crypto_pwhash_argon2id_opslimit_interactive:mj,_crypto_pwhash_argon2id_opslimit_max:rj,_crypto_pwhash_argon2id_opslimit_min:jj,_crypto_pwhash_argon2id_opslimit_moderate:_i,_crypto_pwhash_argon2id_opslimit_sensitive:Wi,_crypto_pwhash_argon2id_passwd_max:rj,_crypto_pwhash_argon2id_passwd_min:Ej,_crypto_pwhash_argon2id_saltbytes:zj,_crypto_pwhash_argon2id_str:xc,_crypto_pwhash_argon2id_str_needs_rehash:fh,_crypto_pwhash_argon2id_str_verify:Od,_crypto_pwhash_argon2id_strbytes:qj,_crypto_pwhash_argon2id_strprefix:hj,_crypto_pwhash_bytes_max:rj,_crypto_pwhash_bytes_min:zj,_crypto_pwhash_memlimit_interactive:Ni,_crypto_pwhash_memlimit_max:Ri,_crypto_pwhash_memlimit_min:fj,_crypto_pwhash_memlimit_moderate:Pi,_crypto_pwhash_memlimit_sensitive:Mi,_crypto_pwhash_opslimit_interactive:mj,_crypto_pwhash_opslimit_max:rj,_crypto_pwhash_opslimit_min:jj,_crypto_pwhash_opslimit_moderate:_i,_crypto_pwhash_opslimit_sensitive:Wi,_crypto_pwhash_passwd_max:rj,_crypto_pwhash_passwd_min:Ej,_crypto_pwhash_primitive:ij,_crypto_pwhash_saltbytes:zj,_crypto_pwhash_scryptsalsa208sha256:jc,_crypto_pwhash_scryptsalsa208sha256_bytes_max:rj,_crypto_pwhash_scryptsalsa208sha256_bytes_min:zj,_crypto_pwhash_scryptsalsa208sha256_ll:Hd,_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive:yi,_crypto_pwhash_scryptsalsa208sha256_memlimit_max:rj,_crypto_pwhash_scryptsalsa208sha256_memlimit_min:yi,_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive:Mi,_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive:vi,_crypto_pwhash_scryptsalsa208sha256_opslimit_max:rj,_crypto_pwhash_scryptsalsa208sha256_opslimit_min:Bi,_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive:Di,_crypto_pwhash_scryptsalsa208sha256_passwd_max:rj,_crypto_pwhash_scryptsalsa208sha256_passwd_min:Ej,_crypto_pwhash_scryptsalsa208sha256_saltbytes:Dj,_crypto_pwhash_scryptsalsa208sha256_str:Ub,_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash:Hc,_crypto_pwhash_scryptsalsa208sha256_str_verify:Qc,_crypto_pwhash_scryptsalsa208sha256_strbytes:Ki,_crypto_pwhash_scryptsalsa208sha256_strprefix:Ei,_crypto_pwhash_str:eg,_crypto_pwhash_str_alg:Sd,_crypto_pwhash_str_needs_rehash:Md,_crypto_pwhash_str_verify:Xd,_crypto_pwhash_strbytes:qj,_crypto_pwhash_strprefix:hj,_crypto_scalarmult:Oh,_crypto_scalarmult_base:Uh,_crypto_scalarmult_bytes:Dj,_crypto_scalarmult_curve25519:vd,_crypto_scalarmult_curve25519_base:Jh,_crypto_scalarmult_curve25519_bytes:Dj,_crypto_scalarmult_curve25519_scalarbytes:Dj,_crypto_scalarmult_ed25519:Cc,_crypto_scalarmult_ed25519_base:Fd,_crypto_scalarmult_ed25519_bytes:Dj,_crypto_scalarmult_ed25519_scalarbytes:Dj,_crypto_scalarmult_primitive:Zi,_crypto_scalarmult_scalarbytes:Dj,_crypto_secretbox:xg,_crypto_secretbox_boxzerobytes:zj,_crypto_secretbox_detached:db,_crypto_secretbox_easy:_e,_crypto_secretbox_keybytes:Dj,_crypto_secretbox_keygen:wi,_crypto_secretbox_macbytes:zj,_crypto_secretbox_noncebytes:wj,_crypto_secretbox_open:ng,_crypto_secretbox_open_detached:pb,_crypto_secretbox_open_easy:De,_crypto_secretbox_primitive:dj,_crypto_secretbox_xchacha20poly1305_detached:bb,_crypto_secretbox_xchacha20poly1305_easy:Ee,_crypto_secretbox_xchacha20poly1305_keybytes:Dj,_crypto_secretbox_xchacha20poly1305_macbytes:zj,_crypto_secretbox_xchacha20poly1305_noncebytes:wj,_crypto_secretbox_xchacha20poly1305_open_detached:nb,_crypto_secretbox_xchacha20poly1305_open_easy:ke,_crypto_secretbox_xsalsa20poly1305:yd,_crypto_secretbox_xsalsa20poly1305_boxzerobytes:zj,_crypto_secretbox_xsalsa20poly1305_keybytes:Dj,_crypto_secretbox_xsalsa20poly1305_keygen:wi,_crypto_secretbox_xsalsa20poly1305_macbytes:zj,_crypto_secretbox_xsalsa20poly1305_noncebytes:wj,_crypto_secretbox_xsalsa20poly1305_open:Oc,_crypto_secretbox_xsalsa20poly1305_zerobytes:Dj,_crypto_secretbox_zerobytes:Dj,_crypto_secretstream_xchacha20poly1305_abytes:Ji,_crypto_secretstream_xchacha20poly1305_headerbytes:wj,_crypto_secretstream_xchacha20poly1305_init_pull:_b,_crypto_secretstream_xchacha20poly1305_init_push:Yb,_crypto_secretstream_xchacha20poly1305_keybytes:Dj,_crypto_secretstream_xchacha20poly1305_keygen:wi,_crypto_secretstream_xchacha20poly1305_messagebytes_max:xi,_crypto_secretstream_xchacha20poly1305_pull:Na,_crypto_secretstream_xchacha20poly1305_push:_a,_crypto_secretstream_xchacha20poly1305_rekey:Gb,_crypto_secretstream_xchacha20poly1305_statebytes:Ci,_crypto_secretstream_xchacha20poly1305_tag_final:_i,_crypto_secretstream_xchacha20poly1305_tag_message:Ej,_crypto_secretstream_xchacha20poly1305_tag_push:jj,_crypto_secretstream_xchacha20poly1305_tag_rekey:mj,_crypto_shorthash:Sg,_crypto_shorthash_bytes:vj,_crypto_shorthash_keybytes:zj,_crypto_shorthash_keygen:ti,_crypto_shorthash_primitive:cj,_crypto_shorthash_siphash24:ya,_crypto_shorthash_siphash24_bytes:vj,_crypto_shorthash_siphash24_keybytes:zj,_crypto_shorthash_siphashx24:va,_crypto_shorthash_siphashx24_bytes:zj,_crypto_shorthash_siphashx24_keybytes:zj,_crypto_sign:Jg,_crypto_sign_bytes:Cj,_crypto_sign_detached:ug,_crypto_sign_ed25519:Nc,_crypto_sign_ed25519_bytes:Cj,_crypto_sign_ed25519_detached:lg,_crypto_sign_ed25519_keypair:bf,_crypto_sign_ed25519_open:lc,_crypto_sign_ed25519_pk_to_curve25519:Zc,_crypto_sign_ed25519_publickeybytes:Dj,_crypto_sign_ed25519_secretkeybytes:Cj,_crypto_sign_ed25519_seed_keypair:Jd,_crypto_sign_ed25519_seedbytes:Dj,_crypto_sign_ed25519_sk_to_curve25519:Bd,_crypto_sign_ed25519_sk_to_pk:Th,_crypto_sign_ed25519_sk_to_seed:_h,_crypto_sign_ed25519_verify_detached:tg,_crypto_sign_ed25519ph_final_create:Pe,_crypto_sign_ed25519ph_final_verify:Qe,_crypto_sign_ed25519ph_init:mi,_crypto_sign_ed25519ph_statebytes:pj,_crypto_sign_ed25519ph_update:eh,_crypto_sign_final_create:Xg,_crypto_sign_final_verify:Ah,_crypto_sign_init:pi,_crypto_sign_keypair:ci,_crypto_sign_open:Dg,_crypto_sign_primitive:lj,_crypto_sign_publickeybytes:Dj,_crypto_sign_secretkeybytes:Cj,_crypto_sign_seed_keypair:xh,_crypto_sign_seedbytes:Dj,_crypto_sign_statebytes:pj,_crypto_sign_update:lh,_crypto_sign_verify_detached:Cg,_crypto_stream:dh,_crypto_stream_chacha20:hh,_crypto_stream_chacha20_ietf:Wg,_crypto_stream_chacha20_ietf_keybytes:Dj,_crypto_stream_chacha20_ietf_keygen:wi,_crypto_stream_chacha20_ietf_noncebytes:Oi,_crypto_stream_chacha20_ietf_xor:pg,_crypto_stream_chacha20_ietf_xor_ic:Sf,_crypto_stream_chacha20_keybytes:Dj,_crypto_stream_chacha20_keygen:wi,_crypto_stream_chacha20_noncebytes:vj,_crypto_stream_chacha20_xor:wg,_crypto_stream_chacha20_xor_ic:Gf,_crypto_stream_keybytes:Dj,_crypto_stream_keygen:wi,_crypto_stream_noncebytes:wj,_crypto_stream_primitive:gj,_crypto_stream_salsa20:ch,_crypto_stream_salsa2012:kb,_crypto_stream_salsa2012_keybytes:Dj,_crypto_stream_salsa2012_keygen:wi,_crypto_stream_salsa2012_noncebytes:vj,_crypto_stream_salsa2012_xor:Wa,_crypto_stream_salsa208:lb,_crypto_stream_salsa208_keybytes:Dj,_crypto_stream_salsa208_keygen:wi,_crypto_stream_salsa208_messagebytes_max:rj,_crypto_stream_salsa208_noncebytes:vj,_crypto_stream_salsa208_xor:Xa,_crypto_stream_salsa20_keybytes:Dj,_crypto_stream_salsa20_keygen:wi,_crypto_stream_salsa20_noncebytes:vj,_crypto_stream_salsa20_xor:sg,_crypto_stream_salsa20_xor_ic:Ef,_crypto_stream_xchacha20:Ce,_crypto_stream_xchacha20_keybytes:Dj,_crypto_stream_xchacha20_keygen:wi,_crypto_stream_xchacha20_noncebytes:wj,_crypto_stream_xchacha20_xor:hg,_crypto_stream_xchacha20_xor_ic:Vd,_crypto_stream_xor:Ag,_crypto_stream_xsalsa20:me,_crypto_stream_xsalsa20_keybytes:Dj,_crypto_stream_xsalsa20_keygen:wi,_crypto_stream_xsalsa20_noncebytes:wj,_crypto_stream_xsalsa20_xor:kg,_crypto_stream_xsalsa20_xor_ic:Ld,_crypto_verify_16:ki,_crypto_verify_16_bytes:zj,_crypto_verify_32:ji,_crypto_verify_32_bytes:Dj,_crypto_verify_64:ii,_crypto_verify_64_bytes:Cj,_emscripten_replace_memory:ja,_free:wa,_i64Add:Lg,_i64Subtract:Ig,_malloc:na,_memcpy:qb,_memmove:se,_memset:ec,_randombytes:dg,_randombytes_buf:uf,_randombytes_buf_deterministic:nh,_randombytes_close:Ej,_randombytes_implementation_name:Si,_randombytes_random:Hi,_randombytes_seedbytes:Dj,_randombytes_stir:Gi,_randombytes_uniform:kf,_sbrk:be,_sodium_base642bin:Ka,_sodium_base64_encoded_len:lf,_sodium_bin2base64:Ta,_sodium_bin2hex:dd,_sodium_hex2bin:jb,_sodium_init:_f,_sodium_library_minimal:Ej,_sodium_library_version_major:ej,_sodium_library_version_minor:jj,_sodium_pad:hc,_sodium_unpad:Fc,_sodium_version_string:kj,establishStackSpace:ni,getTempRet0:xj,runPostSets:ee,setTempRet0:Yi,setThrew:Yh,stackAlloc:Ch,stackRestore:Vi,stackSave:Bj}})
20577
20578
20579// EMSCRIPTEN_END_ASM
20580(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _crypto_aead_chacha20poly1305_abytes=Module["_crypto_aead_chacha20poly1305_abytes"]=asm["_crypto_aead_chacha20poly1305_abytes"];var _crypto_aead_chacha20poly1305_decrypt=Module["_crypto_aead_chacha20poly1305_decrypt"]=asm["_crypto_aead_chacha20poly1305_decrypt"];var _crypto_aead_chacha20poly1305_decrypt_detached=Module["_crypto_aead_chacha20poly1305_decrypt_detached"]=asm["_crypto_aead_chacha20poly1305_decrypt_detached"];var _crypto_aead_chacha20poly1305_encrypt=Module["_crypto_aead_chacha20poly1305_encrypt"]=asm["_crypto_aead_chacha20poly1305_encrypt"];var _crypto_aead_chacha20poly1305_encrypt_detached=Module["_crypto_aead_chacha20poly1305_encrypt_detached"]=asm["_crypto_aead_chacha20poly1305_encrypt_detached"];var _crypto_aead_chacha20poly1305_ietf_abytes=Module["_crypto_aead_chacha20poly1305_ietf_abytes"]=asm["_crypto_aead_chacha20poly1305_ietf_abytes"];var _crypto_aead_chacha20poly1305_ietf_decrypt=Module["_crypto_aead_chacha20poly1305_ietf_decrypt"]=asm["_crypto_aead_chacha20poly1305_ietf_decrypt"];var _crypto_aead_chacha20poly1305_ietf_decrypt_detached=Module["_crypto_aead_chacha20poly1305_ietf_decrypt_detached"]=asm["_crypto_aead_chacha20poly1305_ietf_decrypt_detached"];var _crypto_aead_chacha20poly1305_ietf_encrypt=Module["_crypto_aead_chacha20poly1305_ietf_encrypt"]=asm["_crypto_aead_chacha20poly1305_ietf_encrypt"];var _crypto_aead_chacha20poly1305_ietf_encrypt_detached=Module["_crypto_aead_chacha20poly1305_ietf_encrypt_detached"]=asm["_crypto_aead_chacha20poly1305_ietf_encrypt_detached"];var _crypto_aead_chacha20poly1305_ietf_keybytes=Module["_crypto_aead_chacha20poly1305_ietf_keybytes"]=asm["_crypto_aead_chacha20poly1305_ietf_keybytes"];var _crypto_aead_chacha20poly1305_ietf_keygen=Module["_crypto_aead_chacha20poly1305_ietf_keygen"]=asm["_crypto_aead_chacha20poly1305_ietf_keygen"];var _crypto_aead_chacha20poly1305_ietf_npubbytes=Module["_crypto_aead_chacha20poly1305_ietf_npubbytes"]=asm["_crypto_aead_chacha20poly1305_ietf_npubbytes"];var _crypto_aead_chacha20poly1305_ietf_nsecbytes=Module["_crypto_aead_chacha20poly1305_ietf_nsecbytes"]=asm["_crypto_aead_chacha20poly1305_ietf_nsecbytes"];var _crypto_aead_chacha20poly1305_keybytes=Module["_crypto_aead_chacha20poly1305_keybytes"]=asm["_crypto_aead_chacha20poly1305_keybytes"];var _crypto_aead_chacha20poly1305_keygen=Module["_crypto_aead_chacha20poly1305_keygen"]=asm["_crypto_aead_chacha20poly1305_keygen"];var _crypto_aead_chacha20poly1305_npubbytes=Module["_crypto_aead_chacha20poly1305_npubbytes"]=asm["_crypto_aead_chacha20poly1305_npubbytes"];var _crypto_aead_chacha20poly1305_nsecbytes=Module["_crypto_aead_chacha20poly1305_nsecbytes"]=asm["_crypto_aead_chacha20poly1305_nsecbytes"];var _crypto_aead_xchacha20poly1305_ietf_abytes=Module["_crypto_aead_xchacha20poly1305_ietf_abytes"]=asm["_crypto_aead_xchacha20poly1305_ietf_abytes"];var _crypto_aead_xchacha20poly1305_ietf_decrypt=Module["_crypto_aead_xchacha20poly1305_ietf_decrypt"]=asm["_crypto_aead_xchacha20poly1305_ietf_decrypt"];var _crypto_aead_xchacha20poly1305_ietf_decrypt_detached=Module["_crypto_aead_xchacha20poly1305_ietf_decrypt_detached"]=asm["_crypto_aead_xchacha20poly1305_ietf_decrypt_detached"];var _crypto_aead_xchacha20poly1305_ietf_encrypt=Module["_crypto_aead_xchacha20poly1305_ietf_encrypt"]=asm["_crypto_aead_xchacha20poly1305_ietf_encrypt"];var _crypto_aead_xchacha20poly1305_ietf_encrypt_detached=Module["_crypto_aead_xchacha20poly1305_ietf_encrypt_detached"]=asm["_crypto_aead_xchacha20poly1305_ietf_encrypt_detached"];var _crypto_aead_xchacha20poly1305_ietf_keybytes=Module["_crypto_aead_xchacha20poly1305_ietf_keybytes"]=asm["_crypto_aead_xchacha20poly1305_ietf_keybytes"];var _crypto_aead_xchacha20poly1305_ietf_keygen=Module["_crypto_aead_xchacha20poly1305_ietf_keygen"]=asm["_crypto_aead_xchacha20poly1305_ietf_keygen"];var _crypto_aead_xchacha20poly1305_ietf_npubbytes=Module["_crypto_aead_xchacha20poly1305_ietf_npubbytes"]=asm["_crypto_aead_xchacha20poly1305_ietf_npubbytes"];var _crypto_aead_xchacha20poly1305_ietf_nsecbytes=Module["_crypto_aead_xchacha20poly1305_ietf_nsecbytes"]=asm["_crypto_aead_xchacha20poly1305_ietf_nsecbytes"];var _crypto_auth=Module["_crypto_auth"]=asm["_crypto_auth"];var _crypto_auth_bytes=Module["_crypto_auth_bytes"]=asm["_crypto_auth_bytes"];var _crypto_auth_hmacsha256=Module["_crypto_auth_hmacsha256"]=asm["_crypto_auth_hmacsha256"];var _crypto_auth_hmacsha256_bytes=Module["_crypto_auth_hmacsha256_bytes"]=asm["_crypto_auth_hmacsha256_bytes"];var _crypto_auth_hmacsha256_final=Module["_crypto_auth_hmacsha256_final"]=asm["_crypto_auth_hmacsha256_final"];var _crypto_auth_hmacsha256_init=Module["_crypto_auth_hmacsha256_init"]=asm["_crypto_auth_hmacsha256_init"];var _crypto_auth_hmacsha256_keybytes=Module["_crypto_auth_hmacsha256_keybytes"]=asm["_crypto_auth_hmacsha256_keybytes"];var _crypto_auth_hmacsha256_keygen=Module["_crypto_auth_hmacsha256_keygen"]=asm["_crypto_auth_hmacsha256_keygen"];var _crypto_auth_hmacsha256_statebytes=Module["_crypto_auth_hmacsha256_statebytes"]=asm["_crypto_auth_hmacsha256_statebytes"];var _crypto_auth_hmacsha256_update=Module["_crypto_auth_hmacsha256_update"]=asm["_crypto_auth_hmacsha256_update"];var _crypto_auth_hmacsha256_verify=Module["_crypto_auth_hmacsha256_verify"]=asm["_crypto_auth_hmacsha256_verify"];var _crypto_auth_hmacsha512=Module["_crypto_auth_hmacsha512"]=asm["_crypto_auth_hmacsha512"];var _crypto_auth_hmacsha512256=Module["_crypto_auth_hmacsha512256"]=asm["_crypto_auth_hmacsha512256"];var _crypto_auth_hmacsha512256_bytes=Module["_crypto_auth_hmacsha512256_bytes"]=asm["_crypto_auth_hmacsha512256_bytes"];var _crypto_auth_hmacsha512256_final=Module["_crypto_auth_hmacsha512256_final"]=asm["_crypto_auth_hmacsha512256_final"];var _crypto_auth_hmacsha512256_init=Module["_crypto_auth_hmacsha512256_init"]=asm["_crypto_auth_hmacsha512256_init"];var _crypto_auth_hmacsha512256_keybytes=Module["_crypto_auth_hmacsha512256_keybytes"]=asm["_crypto_auth_hmacsha512256_keybytes"];var _crypto_auth_hmacsha512256_keygen=Module["_crypto_auth_hmacsha512256_keygen"]=asm["_crypto_auth_hmacsha512256_keygen"];var _crypto_auth_hmacsha512256_statebytes=Module["_crypto_auth_hmacsha512256_statebytes"]=asm["_crypto_auth_hmacsha512256_statebytes"];var _crypto_auth_hmacsha512256_update=Module["_crypto_auth_hmacsha512256_update"]=asm["_crypto_auth_hmacsha512256_update"];var _crypto_auth_hmacsha512256_verify=Module["_crypto_auth_hmacsha512256_verify"]=asm["_crypto_auth_hmacsha512256_verify"];var _crypto_auth_hmacsha512_bytes=Module["_crypto_auth_hmacsha512_bytes"]=asm["_crypto_auth_hmacsha512_bytes"];var _crypto_auth_hmacsha512_final=Module["_crypto_auth_hmacsha512_final"]=asm["_crypto_auth_hmacsha512_final"];var _crypto_auth_hmacsha512_init=Module["_crypto_auth_hmacsha512_init"]=asm["_crypto_auth_hmacsha512_init"];var _crypto_auth_hmacsha512_keybytes=Module["_crypto_auth_hmacsha512_keybytes"]=asm["_crypto_auth_hmacsha512_keybytes"];var _crypto_auth_hmacsha512_keygen=Module["_crypto_auth_hmacsha512_keygen"]=asm["_crypto_auth_hmacsha512_keygen"];var _crypto_auth_hmacsha512_statebytes=Module["_crypto_auth_hmacsha512_statebytes"]=asm["_crypto_auth_hmacsha512_statebytes"];var _crypto_auth_hmacsha512_update=Module["_crypto_auth_hmacsha512_update"]=asm["_crypto_auth_hmacsha512_update"];var _crypto_auth_hmacsha512_verify=Module["_crypto_auth_hmacsha512_verify"]=asm["_crypto_auth_hmacsha512_verify"];var _crypto_auth_keybytes=Module["_crypto_auth_keybytes"]=asm["_crypto_auth_keybytes"];var _crypto_auth_keygen=Module["_crypto_auth_keygen"]=asm["_crypto_auth_keygen"];var _crypto_auth_primitive=Module["_crypto_auth_primitive"]=asm["_crypto_auth_primitive"];var _crypto_auth_verify=Module["_crypto_auth_verify"]=asm["_crypto_auth_verify"];var _crypto_box=Module["_crypto_box"]=asm["_crypto_box"];var _crypto_box_afternm=Module["_crypto_box_afternm"]=asm["_crypto_box_afternm"];var _crypto_box_beforenm=Module["_crypto_box_beforenm"]=asm["_crypto_box_beforenm"];var _crypto_box_beforenmbytes=Module["_crypto_box_beforenmbytes"]=asm["_crypto_box_beforenmbytes"];var _crypto_box_boxzerobytes=Module["_crypto_box_boxzerobytes"]=asm["_crypto_box_boxzerobytes"];var _crypto_box_curve25519xchacha20poly1305_beforenm=Module["_crypto_box_curve25519xchacha20poly1305_beforenm"]=asm["_crypto_box_curve25519xchacha20poly1305_beforenm"];var _crypto_box_curve25519xchacha20poly1305_beforenmbytes=Module["_crypto_box_curve25519xchacha20poly1305_beforenmbytes"]=asm["_crypto_box_curve25519xchacha20poly1305_beforenmbytes"];var _crypto_box_curve25519xchacha20poly1305_detached=Module["_crypto_box_curve25519xchacha20poly1305_detached"]=asm["_crypto_box_curve25519xchacha20poly1305_detached"];var _crypto_box_curve25519xchacha20poly1305_detached_afternm=Module["_crypto_box_curve25519xchacha20poly1305_detached_afternm"]=asm["_crypto_box_curve25519xchacha20poly1305_detached_afternm"];var _crypto_box_curve25519xchacha20poly1305_easy=Module["_crypto_box_curve25519xchacha20poly1305_easy"]=asm["_crypto_box_curve25519xchacha20poly1305_easy"];var _crypto_box_curve25519xchacha20poly1305_easy_afternm=Module["_crypto_box_curve25519xchacha20poly1305_easy_afternm"]=asm["_crypto_box_curve25519xchacha20poly1305_easy_afternm"];var _crypto_box_curve25519xchacha20poly1305_keypair=Module["_crypto_box_curve25519xchacha20poly1305_keypair"]=asm["_crypto_box_curve25519xchacha20poly1305_keypair"];var _crypto_box_curve25519xchacha20poly1305_macbytes=Module["_crypto_box_curve25519xchacha20poly1305_macbytes"]=asm["_crypto_box_curve25519xchacha20poly1305_macbytes"];var _crypto_box_curve25519xchacha20poly1305_noncebytes=Module["_crypto_box_curve25519xchacha20poly1305_noncebytes"]=asm["_crypto_box_curve25519xchacha20poly1305_noncebytes"];var _crypto_box_curve25519xchacha20poly1305_open_detached=Module["_crypto_box_curve25519xchacha20poly1305_open_detached"]=asm["_crypto_box_curve25519xchacha20poly1305_open_detached"];var _crypto_box_curve25519xchacha20poly1305_open_detached_afternm=Module["_crypto_box_curve25519xchacha20poly1305_open_detached_afternm"]=asm["_crypto_box_curve25519xchacha20poly1305_open_detached_afternm"];var _crypto_box_curve25519xchacha20poly1305_open_easy=Module["_crypto_box_curve25519xchacha20poly1305_open_easy"]=asm["_crypto_box_curve25519xchacha20poly1305_open_easy"];var _crypto_box_curve25519xchacha20poly1305_open_easy_afternm=Module["_crypto_box_curve25519xchacha20poly1305_open_easy_afternm"]=asm["_crypto_box_curve25519xchacha20poly1305_open_easy_afternm"];var _crypto_box_curve25519xchacha20poly1305_publickeybytes=Module["_crypto_box_curve25519xchacha20poly1305_publickeybytes"]=asm["_crypto_box_curve25519xchacha20poly1305_publickeybytes"];var _crypto_box_curve25519xchacha20poly1305_seal=Module["_crypto_box_curve25519xchacha20poly1305_seal"]=asm["_crypto_box_curve25519xchacha20poly1305_seal"];var _crypto_box_curve25519xchacha20poly1305_seal_open=Module["_crypto_box_curve25519xchacha20poly1305_seal_open"]=asm["_crypto_box_curve25519xchacha20poly1305_seal_open"];var _crypto_box_curve25519xchacha20poly1305_sealbytes=Module["_crypto_box_curve25519xchacha20poly1305_sealbytes"]=asm["_crypto_box_curve25519xchacha20poly1305_sealbytes"];var _crypto_box_curve25519xchacha20poly1305_secretkeybytes=Module["_crypto_box_curve25519xchacha20poly1305_secretkeybytes"]=asm["_crypto_box_curve25519xchacha20poly1305_secretkeybytes"];var _crypto_box_curve25519xchacha20poly1305_seed_keypair=Module["_crypto_box_curve25519xchacha20poly1305_seed_keypair"]=asm["_crypto_box_curve25519xchacha20poly1305_seed_keypair"];var _crypto_box_curve25519xchacha20poly1305_seedbytes=Module["_crypto_box_curve25519xchacha20poly1305_seedbytes"]=asm["_crypto_box_curve25519xchacha20poly1305_seedbytes"];var _crypto_box_curve25519xsalsa20poly1305=Module["_crypto_box_curve25519xsalsa20poly1305"]=asm["_crypto_box_curve25519xsalsa20poly1305"];var _crypto_box_curve25519xsalsa20poly1305_afternm=Module["_crypto_box_curve25519xsalsa20poly1305_afternm"]=asm["_crypto_box_curve25519xsalsa20poly1305_afternm"];var _crypto_box_curve25519xsalsa20poly1305_beforenm=Module["_crypto_box_curve25519xsalsa20poly1305_beforenm"]=asm["_crypto_box_curve25519xsalsa20poly1305_beforenm"];var _crypto_box_curve25519xsalsa20poly1305_beforenmbytes=Module["_crypto_box_curve25519xsalsa20poly1305_beforenmbytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_beforenmbytes"];var _crypto_box_curve25519xsalsa20poly1305_boxzerobytes=Module["_crypto_box_curve25519xsalsa20poly1305_boxzerobytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_boxzerobytes"];var _crypto_box_curve25519xsalsa20poly1305_keypair=Module["_crypto_box_curve25519xsalsa20poly1305_keypair"]=asm["_crypto_box_curve25519xsalsa20poly1305_keypair"];var _crypto_box_curve25519xsalsa20poly1305_macbytes=Module["_crypto_box_curve25519xsalsa20poly1305_macbytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_macbytes"];var _crypto_box_curve25519xsalsa20poly1305_noncebytes=Module["_crypto_box_curve25519xsalsa20poly1305_noncebytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_noncebytes"];var _crypto_box_curve25519xsalsa20poly1305_open=Module["_crypto_box_curve25519xsalsa20poly1305_open"]=asm["_crypto_box_curve25519xsalsa20poly1305_open"];var _crypto_box_curve25519xsalsa20poly1305_open_afternm=Module["_crypto_box_curve25519xsalsa20poly1305_open_afternm"]=asm["_crypto_box_curve25519xsalsa20poly1305_open_afternm"];var _crypto_box_curve25519xsalsa20poly1305_publickeybytes=Module["_crypto_box_curve25519xsalsa20poly1305_publickeybytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_publickeybytes"];var _crypto_box_curve25519xsalsa20poly1305_secretkeybytes=Module["_crypto_box_curve25519xsalsa20poly1305_secretkeybytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_secretkeybytes"];var _crypto_box_curve25519xsalsa20poly1305_seed_keypair=Module["_crypto_box_curve25519xsalsa20poly1305_seed_keypair"]=asm["_crypto_box_curve25519xsalsa20poly1305_seed_keypair"];var _crypto_box_curve25519xsalsa20poly1305_seedbytes=Module["_crypto_box_curve25519xsalsa20poly1305_seedbytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_seedbytes"];var _crypto_box_curve25519xsalsa20poly1305_zerobytes=Module["_crypto_box_curve25519xsalsa20poly1305_zerobytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_zerobytes"];var _crypto_box_detached=Module["_crypto_box_detached"]=asm["_crypto_box_detached"];var _crypto_box_detached_afternm=Module["_crypto_box_detached_afternm"]=asm["_crypto_box_detached_afternm"];var _crypto_box_easy=Module["_crypto_box_easy"]=asm["_crypto_box_easy"];var _crypto_box_easy_afternm=Module["_crypto_box_easy_afternm"]=asm["_crypto_box_easy_afternm"];var _crypto_box_keypair=Module["_crypto_box_keypair"]=asm["_crypto_box_keypair"];var _crypto_box_macbytes=Module["_crypto_box_macbytes"]=asm["_crypto_box_macbytes"];var _crypto_box_noncebytes=Module["_crypto_box_noncebytes"]=asm["_crypto_box_noncebytes"];var _crypto_box_open=Module["_crypto_box_open"]=asm["_crypto_box_open"];var _crypto_box_open_afternm=Module["_crypto_box_open_afternm"]=asm["_crypto_box_open_afternm"];var _crypto_box_open_detached=Module["_crypto_box_open_detached"]=asm["_crypto_box_open_detached"];var _crypto_box_open_detached_afternm=Module["_crypto_box_open_detached_afternm"]=asm["_crypto_box_open_detached_afternm"];var _crypto_box_open_easy=Module["_crypto_box_open_easy"]=asm["_crypto_box_open_easy"];var _crypto_box_open_easy_afternm=Module["_crypto_box_open_easy_afternm"]=asm["_crypto_box_open_easy_afternm"];var _crypto_box_primitive=Module["_crypto_box_primitive"]=asm["_crypto_box_primitive"];var _crypto_box_publickeybytes=Module["_crypto_box_publickeybytes"]=asm["_crypto_box_publickeybytes"];var _crypto_box_seal=Module["_crypto_box_seal"]=asm["_crypto_box_seal"];var _crypto_box_seal_open=Module["_crypto_box_seal_open"]=asm["_crypto_box_seal_open"];var _crypto_box_sealbytes=Module["_crypto_box_sealbytes"]=asm["_crypto_box_sealbytes"];var _crypto_box_secretkeybytes=Module["_crypto_box_secretkeybytes"]=asm["_crypto_box_secretkeybytes"];var _crypto_box_seed_keypair=Module["_crypto_box_seed_keypair"]=asm["_crypto_box_seed_keypair"];var _crypto_box_seedbytes=Module["_crypto_box_seedbytes"]=asm["_crypto_box_seedbytes"];var _crypto_box_zerobytes=Module["_crypto_box_zerobytes"]=asm["_crypto_box_zerobytes"];var _crypto_core_ed25519_add=Module["_crypto_core_ed25519_add"]=asm["_crypto_core_ed25519_add"];var _crypto_core_ed25519_bytes=Module["_crypto_core_ed25519_bytes"]=asm["_crypto_core_ed25519_bytes"];var _crypto_core_ed25519_from_uniform=Module["_crypto_core_ed25519_from_uniform"]=asm["_crypto_core_ed25519_from_uniform"];var _crypto_core_ed25519_is_valid_point=Module["_crypto_core_ed25519_is_valid_point"]=asm["_crypto_core_ed25519_is_valid_point"];var _crypto_core_ed25519_sub=Module["_crypto_core_ed25519_sub"]=asm["_crypto_core_ed25519_sub"];var _crypto_core_ed25519_uniformbytes=Module["_crypto_core_ed25519_uniformbytes"]=asm["_crypto_core_ed25519_uniformbytes"];var _crypto_core_hchacha20=Module["_crypto_core_hchacha20"]=asm["_crypto_core_hchacha20"];var _crypto_core_hchacha20_constbytes=Module["_crypto_core_hchacha20_constbytes"]=asm["_crypto_core_hchacha20_constbytes"];var _crypto_core_hchacha20_inputbytes=Module["_crypto_core_hchacha20_inputbytes"]=asm["_crypto_core_hchacha20_inputbytes"];var _crypto_core_hchacha20_keybytes=Module["_crypto_core_hchacha20_keybytes"]=asm["_crypto_core_hchacha20_keybytes"];var _crypto_core_hchacha20_outputbytes=Module["_crypto_core_hchacha20_outputbytes"]=asm["_crypto_core_hchacha20_outputbytes"];var _crypto_core_hsalsa20=Module["_crypto_core_hsalsa20"]=asm["_crypto_core_hsalsa20"];var _crypto_core_hsalsa20_constbytes=Module["_crypto_core_hsalsa20_constbytes"]=asm["_crypto_core_hsalsa20_constbytes"];var _crypto_core_hsalsa20_inputbytes=Module["_crypto_core_hsalsa20_inputbytes"]=asm["_crypto_core_hsalsa20_inputbytes"];var _crypto_core_hsalsa20_keybytes=Module["_crypto_core_hsalsa20_keybytes"]=asm["_crypto_core_hsalsa20_keybytes"];var _crypto_core_hsalsa20_outputbytes=Module["_crypto_core_hsalsa20_outputbytes"]=asm["_crypto_core_hsalsa20_outputbytes"];var _crypto_core_salsa20=Module["_crypto_core_salsa20"]=asm["_crypto_core_salsa20"];var _crypto_core_salsa2012=Module["_crypto_core_salsa2012"]=asm["_crypto_core_salsa2012"];var _crypto_core_salsa2012_constbytes=Module["_crypto_core_salsa2012_constbytes"]=asm["_crypto_core_salsa2012_constbytes"];var _crypto_core_salsa2012_inputbytes=Module["_crypto_core_salsa2012_inputbytes"]=asm["_crypto_core_salsa2012_inputbytes"];var _crypto_core_salsa2012_keybytes=Module["_crypto_core_salsa2012_keybytes"]=asm["_crypto_core_salsa2012_keybytes"];var _crypto_core_salsa2012_outputbytes=Module["_crypto_core_salsa2012_outputbytes"]=asm["_crypto_core_salsa2012_outputbytes"];var _crypto_core_salsa208=Module["_crypto_core_salsa208"]=asm["_crypto_core_salsa208"];var _crypto_core_salsa208_constbytes=Module["_crypto_core_salsa208_constbytes"]=asm["_crypto_core_salsa208_constbytes"];var _crypto_core_salsa208_inputbytes=Module["_crypto_core_salsa208_inputbytes"]=asm["_crypto_core_salsa208_inputbytes"];var _crypto_core_salsa208_keybytes=Module["_crypto_core_salsa208_keybytes"]=asm["_crypto_core_salsa208_keybytes"];var _crypto_core_salsa208_outputbytes=Module["_crypto_core_salsa208_outputbytes"]=asm["_crypto_core_salsa208_outputbytes"];var _crypto_core_salsa20_constbytes=Module["_crypto_core_salsa20_constbytes"]=asm["_crypto_core_salsa20_constbytes"];var _crypto_core_salsa20_inputbytes=Module["_crypto_core_salsa20_inputbytes"]=asm["_crypto_core_salsa20_inputbytes"];var _crypto_core_salsa20_keybytes=Module["_crypto_core_salsa20_keybytes"]=asm["_crypto_core_salsa20_keybytes"];var _crypto_core_salsa20_outputbytes=Module["_crypto_core_salsa20_outputbytes"]=asm["_crypto_core_salsa20_outputbytes"];var _crypto_generichash=Module["_crypto_generichash"]=asm["_crypto_generichash"];var _crypto_generichash_blake2b=Module["_crypto_generichash_blake2b"]=asm["_crypto_generichash_blake2b"];var _crypto_generichash_blake2b_bytes=Module["_crypto_generichash_blake2b_bytes"]=asm["_crypto_generichash_blake2b_bytes"];var _crypto_generichash_blake2b_bytes_max=Module["_crypto_generichash_blake2b_bytes_max"]=asm["_crypto_generichash_blake2b_bytes_max"];var _crypto_generichash_blake2b_bytes_min=Module["_crypto_generichash_blake2b_bytes_min"]=asm["_crypto_generichash_blake2b_bytes_min"];var _crypto_generichash_blake2b_final=Module["_crypto_generichash_blake2b_final"]=asm["_crypto_generichash_blake2b_final"];var _crypto_generichash_blake2b_init=Module["_crypto_generichash_blake2b_init"]=asm["_crypto_generichash_blake2b_init"];var _crypto_generichash_blake2b_init_salt_personal=Module["_crypto_generichash_blake2b_init_salt_personal"]=asm["_crypto_generichash_blake2b_init_salt_personal"];var _crypto_generichash_blake2b_keybytes=Module["_crypto_generichash_blake2b_keybytes"]=asm["_crypto_generichash_blake2b_keybytes"];var _crypto_generichash_blake2b_keybytes_max=Module["_crypto_generichash_blake2b_keybytes_max"]=asm["_crypto_generichash_blake2b_keybytes_max"];var _crypto_generichash_blake2b_keybytes_min=Module["_crypto_generichash_blake2b_keybytes_min"]=asm["_crypto_generichash_blake2b_keybytes_min"];var _crypto_generichash_blake2b_keygen=Module["_crypto_generichash_blake2b_keygen"]=asm["_crypto_generichash_blake2b_keygen"];var _crypto_generichash_blake2b_personalbytes=Module["_crypto_generichash_blake2b_personalbytes"]=asm["_crypto_generichash_blake2b_personalbytes"];var _crypto_generichash_blake2b_salt_personal=Module["_crypto_generichash_blake2b_salt_personal"]=asm["_crypto_generichash_blake2b_salt_personal"];var _crypto_generichash_blake2b_saltbytes=Module["_crypto_generichash_blake2b_saltbytes"]=asm["_crypto_generichash_blake2b_saltbytes"];var _crypto_generichash_blake2b_statebytes=Module["_crypto_generichash_blake2b_statebytes"]=asm["_crypto_generichash_blake2b_statebytes"];var _crypto_generichash_blake2b_update=Module["_crypto_generichash_blake2b_update"]=asm["_crypto_generichash_blake2b_update"];var _crypto_generichash_bytes=Module["_crypto_generichash_bytes"]=asm["_crypto_generichash_bytes"];var _crypto_generichash_bytes_max=Module["_crypto_generichash_bytes_max"]=asm["_crypto_generichash_bytes_max"];var _crypto_generichash_bytes_min=Module["_crypto_generichash_bytes_min"]=asm["_crypto_generichash_bytes_min"];var _crypto_generichash_final=Module["_crypto_generichash_final"]=asm["_crypto_generichash_final"];var _crypto_generichash_init=Module["_crypto_generichash_init"]=asm["_crypto_generichash_init"];var _crypto_generichash_keybytes=Module["_crypto_generichash_keybytes"]=asm["_crypto_generichash_keybytes"];var _crypto_generichash_keybytes_max=Module["_crypto_generichash_keybytes_max"]=asm["_crypto_generichash_keybytes_max"];var _crypto_generichash_keybytes_min=Module["_crypto_generichash_keybytes_min"]=asm["_crypto_generichash_keybytes_min"];var _crypto_generichash_keygen=Module["_crypto_generichash_keygen"]=asm["_crypto_generichash_keygen"];var _crypto_generichash_primitive=Module["_crypto_generichash_primitive"]=asm["_crypto_generichash_primitive"];var _crypto_generichash_statebytes=Module["_crypto_generichash_statebytes"]=asm["_crypto_generichash_statebytes"];var _crypto_generichash_update=Module["_crypto_generichash_update"]=asm["_crypto_generichash_update"];var _crypto_hash=Module["_crypto_hash"]=asm["_crypto_hash"];var _crypto_hash_bytes=Module["_crypto_hash_bytes"]=asm["_crypto_hash_bytes"];var _crypto_hash_primitive=Module["_crypto_hash_primitive"]=asm["_crypto_hash_primitive"];var _crypto_hash_sha256=Module["_crypto_hash_sha256"]=asm["_crypto_hash_sha256"];var _crypto_hash_sha256_bytes=Module["_crypto_hash_sha256_bytes"]=asm["_crypto_hash_sha256_bytes"];var _crypto_hash_sha256_final=Module["_crypto_hash_sha256_final"]=asm["_crypto_hash_sha256_final"];var _crypto_hash_sha256_init=Module["_crypto_hash_sha256_init"]=asm["_crypto_hash_sha256_init"];var _crypto_hash_sha256_statebytes=Module["_crypto_hash_sha256_statebytes"]=asm["_crypto_hash_sha256_statebytes"];var _crypto_hash_sha256_update=Module["_crypto_hash_sha256_update"]=asm["_crypto_hash_sha256_update"];var _crypto_hash_sha512=Module["_crypto_hash_sha512"]=asm["_crypto_hash_sha512"];var _crypto_hash_sha512_bytes=Module["_crypto_hash_sha512_bytes"]=asm["_crypto_hash_sha512_bytes"];var _crypto_hash_sha512_final=Module["_crypto_hash_sha512_final"]=asm["_crypto_hash_sha512_final"];var _crypto_hash_sha512_init=Module["_crypto_hash_sha512_init"]=asm["_crypto_hash_sha512_init"];var _crypto_hash_sha512_statebytes=Module["_crypto_hash_sha512_statebytes"]=asm["_crypto_hash_sha512_statebytes"];var _crypto_hash_sha512_update=Module["_crypto_hash_sha512_update"]=asm["_crypto_hash_sha512_update"];var _crypto_kdf_blake2b_bytes_max=Module["_crypto_kdf_blake2b_bytes_max"]=asm["_crypto_kdf_blake2b_bytes_max"];var _crypto_kdf_blake2b_bytes_min=Module["_crypto_kdf_blake2b_bytes_min"]=asm["_crypto_kdf_blake2b_bytes_min"];var _crypto_kdf_blake2b_contextbytes=Module["_crypto_kdf_blake2b_contextbytes"]=asm["_crypto_kdf_blake2b_contextbytes"];var _crypto_kdf_blake2b_derive_from_key=Module["_crypto_kdf_blake2b_derive_from_key"]=asm["_crypto_kdf_blake2b_derive_from_key"];var _crypto_kdf_blake2b_keybytes=Module["_crypto_kdf_blake2b_keybytes"]=asm["_crypto_kdf_blake2b_keybytes"];var _crypto_kdf_bytes_max=Module["_crypto_kdf_bytes_max"]=asm["_crypto_kdf_bytes_max"];var _crypto_kdf_bytes_min=Module["_crypto_kdf_bytes_min"]=asm["_crypto_kdf_bytes_min"];var _crypto_kdf_contextbytes=Module["_crypto_kdf_contextbytes"]=asm["_crypto_kdf_contextbytes"];var _crypto_kdf_derive_from_key=Module["_crypto_kdf_derive_from_key"]=asm["_crypto_kdf_derive_from_key"];var _crypto_kdf_keybytes=Module["_crypto_kdf_keybytes"]=asm["_crypto_kdf_keybytes"];var _crypto_kdf_keygen=Module["_crypto_kdf_keygen"]=asm["_crypto_kdf_keygen"];var _crypto_kdf_primitive=Module["_crypto_kdf_primitive"]=asm["_crypto_kdf_primitive"];var _crypto_kx_client_session_keys=Module["_crypto_kx_client_session_keys"]=asm["_crypto_kx_client_session_keys"];var _crypto_kx_keypair=Module["_crypto_kx_keypair"]=asm["_crypto_kx_keypair"];var _crypto_kx_primitive=Module["_crypto_kx_primitive"]=asm["_crypto_kx_primitive"];var _crypto_kx_publickeybytes=Module["_crypto_kx_publickeybytes"]=asm["_crypto_kx_publickeybytes"];var _crypto_kx_secretkeybytes=Module["_crypto_kx_secretkeybytes"]=asm["_crypto_kx_secretkeybytes"];var _crypto_kx_seed_keypair=Module["_crypto_kx_seed_keypair"]=asm["_crypto_kx_seed_keypair"];var _crypto_kx_seedbytes=Module["_crypto_kx_seedbytes"]=asm["_crypto_kx_seedbytes"];var _crypto_kx_server_session_keys=Module["_crypto_kx_server_session_keys"]=asm["_crypto_kx_server_session_keys"];var _crypto_kx_sessionkeybytes=Module["_crypto_kx_sessionkeybytes"]=asm["_crypto_kx_sessionkeybytes"];var _crypto_onetimeauth=Module["_crypto_onetimeauth"]=asm["_crypto_onetimeauth"];var _crypto_onetimeauth_bytes=Module["_crypto_onetimeauth_bytes"]=asm["_crypto_onetimeauth_bytes"];var _crypto_onetimeauth_final=Module["_crypto_onetimeauth_final"]=asm["_crypto_onetimeauth_final"];var _crypto_onetimeauth_init=Module["_crypto_onetimeauth_init"]=asm["_crypto_onetimeauth_init"];var _crypto_onetimeauth_keybytes=Module["_crypto_onetimeauth_keybytes"]=asm["_crypto_onetimeauth_keybytes"];var _crypto_onetimeauth_keygen=Module["_crypto_onetimeauth_keygen"]=asm["_crypto_onetimeauth_keygen"];var _crypto_onetimeauth_poly1305=Module["_crypto_onetimeauth_poly1305"]=asm["_crypto_onetimeauth_poly1305"];var _crypto_onetimeauth_poly1305_bytes=Module["_crypto_onetimeauth_poly1305_bytes"]=asm["_crypto_onetimeauth_poly1305_bytes"];var _crypto_onetimeauth_poly1305_final=Module["_crypto_onetimeauth_poly1305_final"]=asm["_crypto_onetimeauth_poly1305_final"];var _crypto_onetimeauth_poly1305_init=Module["_crypto_onetimeauth_poly1305_init"]=asm["_crypto_onetimeauth_poly1305_init"];var _crypto_onetimeauth_poly1305_keybytes=Module["_crypto_onetimeauth_poly1305_keybytes"]=asm["_crypto_onetimeauth_poly1305_keybytes"];var _crypto_onetimeauth_poly1305_keygen=Module["_crypto_onetimeauth_poly1305_keygen"]=asm["_crypto_onetimeauth_poly1305_keygen"];var _crypto_onetimeauth_poly1305_statebytes=Module["_crypto_onetimeauth_poly1305_statebytes"]=asm["_crypto_onetimeauth_poly1305_statebytes"];var _crypto_onetimeauth_poly1305_update=Module["_crypto_onetimeauth_poly1305_update"]=asm["_crypto_onetimeauth_poly1305_update"];var _crypto_onetimeauth_poly1305_verify=Module["_crypto_onetimeauth_poly1305_verify"]=asm["_crypto_onetimeauth_poly1305_verify"];var _crypto_onetimeauth_primitive=Module["_crypto_onetimeauth_primitive"]=asm["_crypto_onetimeauth_primitive"];var _crypto_onetimeauth_statebytes=Module["_crypto_onetimeauth_statebytes"]=asm["_crypto_onetimeauth_statebytes"];var _crypto_onetimeauth_update=Module["_crypto_onetimeauth_update"]=asm["_crypto_onetimeauth_update"];var _crypto_onetimeauth_verify=Module["_crypto_onetimeauth_verify"]=asm["_crypto_onetimeauth_verify"];var _crypto_pwhash=Module["_crypto_pwhash"]=asm["_crypto_pwhash"];var _crypto_pwhash_alg_argon2i13=Module["_crypto_pwhash_alg_argon2i13"]=asm["_crypto_pwhash_alg_argon2i13"];var _crypto_pwhash_alg_argon2id13=Module["_crypto_pwhash_alg_argon2id13"]=asm["_crypto_pwhash_alg_argon2id13"];var _crypto_pwhash_alg_default=Module["_crypto_pwhash_alg_default"]=asm["_crypto_pwhash_alg_default"];var _crypto_pwhash_argon2i=Module["_crypto_pwhash_argon2i"]=asm["_crypto_pwhash_argon2i"];var _crypto_pwhash_argon2i_alg_argon2i13=Module["_crypto_pwhash_argon2i_alg_argon2i13"]=asm["_crypto_pwhash_argon2i_alg_argon2i13"];var _crypto_pwhash_argon2i_bytes_max=Module["_crypto_pwhash_argon2i_bytes_max"]=asm["_crypto_pwhash_argon2i_bytes_max"];var _crypto_pwhash_argon2i_bytes_min=Module["_crypto_pwhash_argon2i_bytes_min"]=asm["_crypto_pwhash_argon2i_bytes_min"];var _crypto_pwhash_argon2i_memlimit_interactive=Module["_crypto_pwhash_argon2i_memlimit_interactive"]=asm["_crypto_pwhash_argon2i_memlimit_interactive"];var _crypto_pwhash_argon2i_memlimit_max=Module["_crypto_pwhash_argon2i_memlimit_max"]=asm["_crypto_pwhash_argon2i_memlimit_max"];var _crypto_pwhash_argon2i_memlimit_min=Module["_crypto_pwhash_argon2i_memlimit_min"]=asm["_crypto_pwhash_argon2i_memlimit_min"];var _crypto_pwhash_argon2i_memlimit_moderate=Module["_crypto_pwhash_argon2i_memlimit_moderate"]=asm["_crypto_pwhash_argon2i_memlimit_moderate"];var _crypto_pwhash_argon2i_memlimit_sensitive=Module["_crypto_pwhash_argon2i_memlimit_sensitive"]=asm["_crypto_pwhash_argon2i_memlimit_sensitive"];var _crypto_pwhash_argon2i_opslimit_interactive=Module["_crypto_pwhash_argon2i_opslimit_interactive"]=asm["_crypto_pwhash_argon2i_opslimit_interactive"];var _crypto_pwhash_argon2i_opslimit_max=Module["_crypto_pwhash_argon2i_opslimit_max"]=asm["_crypto_pwhash_argon2i_opslimit_max"];var _crypto_pwhash_argon2i_opslimit_min=Module["_crypto_pwhash_argon2i_opslimit_min"]=asm["_crypto_pwhash_argon2i_opslimit_min"];var _crypto_pwhash_argon2i_opslimit_moderate=Module["_crypto_pwhash_argon2i_opslimit_moderate"]=asm["_crypto_pwhash_argon2i_opslimit_moderate"];var _crypto_pwhash_argon2i_opslimit_sensitive=Module["_crypto_pwhash_argon2i_opslimit_sensitive"]=asm["_crypto_pwhash_argon2i_opslimit_sensitive"];var _crypto_pwhash_argon2i_passwd_max=Module["_crypto_pwhash_argon2i_passwd_max"]=asm["_crypto_pwhash_argon2i_passwd_max"];var _crypto_pwhash_argon2i_passwd_min=Module["_crypto_pwhash_argon2i_passwd_min"]=asm["_crypto_pwhash_argon2i_passwd_min"];var _crypto_pwhash_argon2i_saltbytes=Module["_crypto_pwhash_argon2i_saltbytes"]=asm["_crypto_pwhash_argon2i_saltbytes"];var _crypto_pwhash_argon2i_str=Module["_crypto_pwhash_argon2i_str"]=asm["_crypto_pwhash_argon2i_str"];var _crypto_pwhash_argon2i_str_needs_rehash=Module["_crypto_pwhash_argon2i_str_needs_rehash"]=asm["_crypto_pwhash_argon2i_str_needs_rehash"];var _crypto_pwhash_argon2i_str_verify=Module["_crypto_pwhash_argon2i_str_verify"]=asm["_crypto_pwhash_argon2i_str_verify"];var _crypto_pwhash_argon2i_strbytes=Module["_crypto_pwhash_argon2i_strbytes"]=asm["_crypto_pwhash_argon2i_strbytes"];var _crypto_pwhash_argon2i_strprefix=Module["_crypto_pwhash_argon2i_strprefix"]=asm["_crypto_pwhash_argon2i_strprefix"];var _crypto_pwhash_argon2id=Module["_crypto_pwhash_argon2id"]=asm["_crypto_pwhash_argon2id"];var _crypto_pwhash_argon2id_alg_argon2id13=Module["_crypto_pwhash_argon2id_alg_argon2id13"]=asm["_crypto_pwhash_argon2id_alg_argon2id13"];var _crypto_pwhash_argon2id_bytes_max=Module["_crypto_pwhash_argon2id_bytes_max"]=asm["_crypto_pwhash_argon2id_bytes_max"];var _crypto_pwhash_argon2id_bytes_min=Module["_crypto_pwhash_argon2id_bytes_min"]=asm["_crypto_pwhash_argon2id_bytes_min"];var _crypto_pwhash_argon2id_memlimit_interactive=Module["_crypto_pwhash_argon2id_memlimit_interactive"]=asm["_crypto_pwhash_argon2id_memlimit_interactive"];var _crypto_pwhash_argon2id_memlimit_max=Module["_crypto_pwhash_argon2id_memlimit_max"]=asm["_crypto_pwhash_argon2id_memlimit_max"];var _crypto_pwhash_argon2id_memlimit_min=Module["_crypto_pwhash_argon2id_memlimit_min"]=asm["_crypto_pwhash_argon2id_memlimit_min"];var _crypto_pwhash_argon2id_memlimit_moderate=Module["_crypto_pwhash_argon2id_memlimit_moderate"]=asm["_crypto_pwhash_argon2id_memlimit_moderate"];var _crypto_pwhash_argon2id_memlimit_sensitive=Module["_crypto_pwhash_argon2id_memlimit_sensitive"]=asm["_crypto_pwhash_argon2id_memlimit_sensitive"];var _crypto_pwhash_argon2id_opslimit_interactive=Module["_crypto_pwhash_argon2id_opslimit_interactive"]=asm["_crypto_pwhash_argon2id_opslimit_interactive"];var _crypto_pwhash_argon2id_opslimit_max=Module["_crypto_pwhash_argon2id_opslimit_max"]=asm["_crypto_pwhash_argon2id_opslimit_max"];var _crypto_pwhash_argon2id_opslimit_min=Module["_crypto_pwhash_argon2id_opslimit_min"]=asm["_crypto_pwhash_argon2id_opslimit_min"];var _crypto_pwhash_argon2id_opslimit_moderate=Module["_crypto_pwhash_argon2id_opslimit_moderate"]=asm["_crypto_pwhash_argon2id_opslimit_moderate"];var _crypto_pwhash_argon2id_opslimit_sensitive=Module["_crypto_pwhash_argon2id_opslimit_sensitive"]=asm["_crypto_pwhash_argon2id_opslimit_sensitive"];var _crypto_pwhash_argon2id_passwd_max=Module["_crypto_pwhash_argon2id_passwd_max"]=asm["_crypto_pwhash_argon2id_passwd_max"];var _crypto_pwhash_argon2id_passwd_min=Module["_crypto_pwhash_argon2id_passwd_min"]=asm["_crypto_pwhash_argon2id_passwd_min"];var _crypto_pwhash_argon2id_saltbytes=Module["_crypto_pwhash_argon2id_saltbytes"]=asm["_crypto_pwhash_argon2id_saltbytes"];var _crypto_pwhash_argon2id_str=Module["_crypto_pwhash_argon2id_str"]=asm["_crypto_pwhash_argon2id_str"];var _crypto_pwhash_argon2id_str_needs_rehash=Module["_crypto_pwhash_argon2id_str_needs_rehash"]=asm["_crypto_pwhash_argon2id_str_needs_rehash"];var _crypto_pwhash_argon2id_str_verify=Module["_crypto_pwhash_argon2id_str_verify"]=asm["_crypto_pwhash_argon2id_str_verify"];var _crypto_pwhash_argon2id_strbytes=Module["_crypto_pwhash_argon2id_strbytes"]=asm["_crypto_pwhash_argon2id_strbytes"];var _crypto_pwhash_argon2id_strprefix=Module["_crypto_pwhash_argon2id_strprefix"]=asm["_crypto_pwhash_argon2id_strprefix"];var _crypto_pwhash_bytes_max=Module["_crypto_pwhash_bytes_max"]=asm["_crypto_pwhash_bytes_max"];var _crypto_pwhash_bytes_min=Module["_crypto_pwhash_bytes_min"]=asm["_crypto_pwhash_bytes_min"];var _crypto_pwhash_memlimit_interactive=Module["_crypto_pwhash_memlimit_interactive"]=asm["_crypto_pwhash_memlimit_interactive"];var _crypto_pwhash_memlimit_max=Module["_crypto_pwhash_memlimit_max"]=asm["_crypto_pwhash_memlimit_max"];var _crypto_pwhash_memlimit_min=Module["_crypto_pwhash_memlimit_min"]=asm["_crypto_pwhash_memlimit_min"];var _crypto_pwhash_memlimit_moderate=Module["_crypto_pwhash_memlimit_moderate"]=asm["_crypto_pwhash_memlimit_moderate"];var _crypto_pwhash_memlimit_sensitive=Module["_crypto_pwhash_memlimit_sensitive"]=asm["_crypto_pwhash_memlimit_sensitive"];var _crypto_pwhash_opslimit_interactive=Module["_crypto_pwhash_opslimit_interactive"]=asm["_crypto_pwhash_opslimit_interactive"];var _crypto_pwhash_opslimit_max=Module["_crypto_pwhash_opslimit_max"]=asm["_crypto_pwhash_opslimit_max"];var _crypto_pwhash_opslimit_min=Module["_crypto_pwhash_opslimit_min"]=asm["_crypto_pwhash_opslimit_min"];var _crypto_pwhash_opslimit_moderate=Module["_crypto_pwhash_opslimit_moderate"]=asm["_crypto_pwhash_opslimit_moderate"];var _crypto_pwhash_opslimit_sensitive=Module["_crypto_pwhash_opslimit_sensitive"]=asm["_crypto_pwhash_opslimit_sensitive"];var _crypto_pwhash_passwd_max=Module["_crypto_pwhash_passwd_max"]=asm["_crypto_pwhash_passwd_max"];var _crypto_pwhash_passwd_min=Module["_crypto_pwhash_passwd_min"]=asm["_crypto_pwhash_passwd_min"];var _crypto_pwhash_primitive=Module["_crypto_pwhash_primitive"]=asm["_crypto_pwhash_primitive"];var _crypto_pwhash_saltbytes=Module["_crypto_pwhash_saltbytes"]=asm["_crypto_pwhash_saltbytes"];var _crypto_pwhash_scryptsalsa208sha256=Module["_crypto_pwhash_scryptsalsa208sha256"]=asm["_crypto_pwhash_scryptsalsa208sha256"];var _crypto_pwhash_scryptsalsa208sha256_bytes_max=Module["_crypto_pwhash_scryptsalsa208sha256_bytes_max"]=asm["_crypto_pwhash_scryptsalsa208sha256_bytes_max"];var _crypto_pwhash_scryptsalsa208sha256_bytes_min=Module["_crypto_pwhash_scryptsalsa208sha256_bytes_min"]=asm["_crypto_pwhash_scryptsalsa208sha256_bytes_min"];var _crypto_pwhash_scryptsalsa208sha256_ll=Module["_crypto_pwhash_scryptsalsa208sha256_ll"]=asm["_crypto_pwhash_scryptsalsa208sha256_ll"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_max=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_max"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_max"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_min=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_min"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_min"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_max=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_max"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_max"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_min=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_min"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_min"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"];var _crypto_pwhash_scryptsalsa208sha256_passwd_max=Module["_crypto_pwhash_scryptsalsa208sha256_passwd_max"]=asm["_crypto_pwhash_scryptsalsa208sha256_passwd_max"];var _crypto_pwhash_scryptsalsa208sha256_passwd_min=Module["_crypto_pwhash_scryptsalsa208sha256_passwd_min"]=asm["_crypto_pwhash_scryptsalsa208sha256_passwd_min"];var _crypto_pwhash_scryptsalsa208sha256_saltbytes=Module["_crypto_pwhash_scryptsalsa208sha256_saltbytes"]=asm["_crypto_pwhash_scryptsalsa208sha256_saltbytes"];var _crypto_pwhash_scryptsalsa208sha256_str=Module["_crypto_pwhash_scryptsalsa208sha256_str"]=asm["_crypto_pwhash_scryptsalsa208sha256_str"];var _crypto_pwhash_scryptsalsa208sha256_str_needs_rehash=Module["_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash"]=asm["_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash"];var _crypto_pwhash_scryptsalsa208sha256_str_verify=Module["_crypto_pwhash_scryptsalsa208sha256_str_verify"]=asm["_crypto_pwhash_scryptsalsa208sha256_str_verify"];var _crypto_pwhash_scryptsalsa208sha256_strbytes=Module["_crypto_pwhash_scryptsalsa208sha256_strbytes"]=asm["_crypto_pwhash_scryptsalsa208sha256_strbytes"];var _crypto_pwhash_scryptsalsa208sha256_strprefix=Module["_crypto_pwhash_scryptsalsa208sha256_strprefix"]=asm["_crypto_pwhash_scryptsalsa208sha256_strprefix"];var _crypto_pwhash_str=Module["_crypto_pwhash_str"]=asm["_crypto_pwhash_str"];var _crypto_pwhash_str_alg=Module["_crypto_pwhash_str_alg"]=asm["_crypto_pwhash_str_alg"];var _crypto_pwhash_str_needs_rehash=Module["_crypto_pwhash_str_needs_rehash"]=asm["_crypto_pwhash_str_needs_rehash"];var _crypto_pwhash_str_verify=Module["_crypto_pwhash_str_verify"]=asm["_crypto_pwhash_str_verify"];var _crypto_pwhash_strbytes=Module["_crypto_pwhash_strbytes"]=asm["_crypto_pwhash_strbytes"];var _crypto_pwhash_strprefix=Module["_crypto_pwhash_strprefix"]=asm["_crypto_pwhash_strprefix"];var _crypto_scalarmult=Module["_crypto_scalarmult"]=asm["_crypto_scalarmult"];var _crypto_scalarmult_base=Module["_crypto_scalarmult_base"]=asm["_crypto_scalarmult_base"];var _crypto_scalarmult_bytes=Module["_crypto_scalarmult_bytes"]=asm["_crypto_scalarmult_bytes"];var _crypto_scalarmult_curve25519=Module["_crypto_scalarmult_curve25519"]=asm["_crypto_scalarmult_curve25519"];var _crypto_scalarmult_curve25519_base=Module["_crypto_scalarmult_curve25519_base"]=asm["_crypto_scalarmult_curve25519_base"];var _crypto_scalarmult_curve25519_bytes=Module["_crypto_scalarmult_curve25519_bytes"]=asm["_crypto_scalarmult_curve25519_bytes"];var _crypto_scalarmult_curve25519_scalarbytes=Module["_crypto_scalarmult_curve25519_scalarbytes"]=asm["_crypto_scalarmult_curve25519_scalarbytes"];var _crypto_scalarmult_ed25519=Module["_crypto_scalarmult_ed25519"]=asm["_crypto_scalarmult_ed25519"];var _crypto_scalarmult_ed25519_base=Module["_crypto_scalarmult_ed25519_base"]=asm["_crypto_scalarmult_ed25519_base"];var _crypto_scalarmult_ed25519_bytes=Module["_crypto_scalarmult_ed25519_bytes"]=asm["_crypto_scalarmult_ed25519_bytes"];var _crypto_scalarmult_ed25519_scalarbytes=Module["_crypto_scalarmult_ed25519_scalarbytes"]=asm["_crypto_scalarmult_ed25519_scalarbytes"];var _crypto_scalarmult_primitive=Module["_crypto_scalarmult_primitive"]=asm["_crypto_scalarmult_primitive"];var _crypto_scalarmult_scalarbytes=Module["_crypto_scalarmult_scalarbytes"]=asm["_crypto_scalarmult_scalarbytes"];var _crypto_secretbox=Module["_crypto_secretbox"]=asm["_crypto_secretbox"];var _crypto_secretbox_boxzerobytes=Module["_crypto_secretbox_boxzerobytes"]=asm["_crypto_secretbox_boxzerobytes"];var _crypto_secretbox_detached=Module["_crypto_secretbox_detached"]=asm["_crypto_secretbox_detached"];var _crypto_secretbox_easy=Module["_crypto_secretbox_easy"]=asm["_crypto_secretbox_easy"];var _crypto_secretbox_keybytes=Module["_crypto_secretbox_keybytes"]=asm["_crypto_secretbox_keybytes"];var _crypto_secretbox_keygen=Module["_crypto_secretbox_keygen"]=asm["_crypto_secretbox_keygen"];var _crypto_secretbox_macbytes=Module["_crypto_secretbox_macbytes"]=asm["_crypto_secretbox_macbytes"];var _crypto_secretbox_noncebytes=Module["_crypto_secretbox_noncebytes"]=asm["_crypto_secretbox_noncebytes"];var _crypto_secretbox_open=Module["_crypto_secretbox_open"]=asm["_crypto_secretbox_open"];var _crypto_secretbox_open_detached=Module["_crypto_secretbox_open_detached"]=asm["_crypto_secretbox_open_detached"];var _crypto_secretbox_open_easy=Module["_crypto_secretbox_open_easy"]=asm["_crypto_secretbox_open_easy"];var _crypto_secretbox_primitive=Module["_crypto_secretbox_primitive"]=asm["_crypto_secretbox_primitive"];var _crypto_secretbox_xchacha20poly1305_detached=Module["_crypto_secretbox_xchacha20poly1305_detached"]=asm["_crypto_secretbox_xchacha20poly1305_detached"];var _crypto_secretbox_xchacha20poly1305_easy=Module["_crypto_secretbox_xchacha20poly1305_easy"]=asm["_crypto_secretbox_xchacha20poly1305_easy"];var _crypto_secretbox_xchacha20poly1305_keybytes=Module["_crypto_secretbox_xchacha20poly1305_keybytes"]=asm["_crypto_secretbox_xchacha20poly1305_keybytes"];var _crypto_secretbox_xchacha20poly1305_macbytes=Module["_crypto_secretbox_xchacha20poly1305_macbytes"]=asm["_crypto_secretbox_xchacha20poly1305_macbytes"];var _crypto_secretbox_xchacha20poly1305_noncebytes=Module["_crypto_secretbox_xchacha20poly1305_noncebytes"]=asm["_crypto_secretbox_xchacha20poly1305_noncebytes"];var _crypto_secretbox_xchacha20poly1305_open_detached=Module["_crypto_secretbox_xchacha20poly1305_open_detached"]=asm["_crypto_secretbox_xchacha20poly1305_open_detached"];var _crypto_secretbox_xchacha20poly1305_open_easy=Module["_crypto_secretbox_xchacha20poly1305_open_easy"]=asm["_crypto_secretbox_xchacha20poly1305_open_easy"];var _crypto_secretbox_xsalsa20poly1305=Module["_crypto_secretbox_xsalsa20poly1305"]=asm["_crypto_secretbox_xsalsa20poly1305"];var _crypto_secretbox_xsalsa20poly1305_boxzerobytes=Module["_crypto_secretbox_xsalsa20poly1305_boxzerobytes"]=asm["_crypto_secretbox_xsalsa20poly1305_boxzerobytes"];var _crypto_secretbox_xsalsa20poly1305_keybytes=Module["_crypto_secretbox_xsalsa20poly1305_keybytes"]=asm["_crypto_secretbox_xsalsa20poly1305_keybytes"];var _crypto_secretbox_xsalsa20poly1305_keygen=Module["_crypto_secretbox_xsalsa20poly1305_keygen"]=asm["_crypto_secretbox_xsalsa20poly1305_keygen"];var _crypto_secretbox_xsalsa20poly1305_macbytes=Module["_crypto_secretbox_xsalsa20poly1305_macbytes"]=asm["_crypto_secretbox_xsalsa20poly1305_macbytes"];var _crypto_secretbox_xsalsa20poly1305_noncebytes=Module["_crypto_secretbox_xsalsa20poly1305_noncebytes"]=asm["_crypto_secretbox_xsalsa20poly1305_noncebytes"];var _crypto_secretbox_xsalsa20poly1305_open=Module["_crypto_secretbox_xsalsa20poly1305_open"]=asm["_crypto_secretbox_xsalsa20poly1305_open"];var _crypto_secretbox_xsalsa20poly1305_zerobytes=Module["_crypto_secretbox_xsalsa20poly1305_zerobytes"]=asm["_crypto_secretbox_xsalsa20poly1305_zerobytes"];var _crypto_secretbox_zerobytes=Module["_crypto_secretbox_zerobytes"]=asm["_crypto_secretbox_zerobytes"];var _crypto_secretstream_xchacha20poly1305_abytes=Module["_crypto_secretstream_xchacha20poly1305_abytes"]=asm["_crypto_secretstream_xchacha20poly1305_abytes"];var _crypto_secretstream_xchacha20poly1305_headerbytes=Module["_crypto_secretstream_xchacha20poly1305_headerbytes"]=asm["_crypto_secretstream_xchacha20poly1305_headerbytes"];var _crypto_secretstream_xchacha20poly1305_init_pull=Module["_crypto_secretstream_xchacha20poly1305_init_pull"]=asm["_crypto_secretstream_xchacha20poly1305_init_pull"];var _crypto_secretstream_xchacha20poly1305_init_push=Module["_crypto_secretstream_xchacha20poly1305_init_push"]=asm["_crypto_secretstream_xchacha20poly1305_init_push"];var _crypto_secretstream_xchacha20poly1305_keybytes=Module["_crypto_secretstream_xchacha20poly1305_keybytes"]=asm["_crypto_secretstream_xchacha20poly1305_keybytes"];var _crypto_secretstream_xchacha20poly1305_keygen=Module["_crypto_secretstream_xchacha20poly1305_keygen"]=asm["_crypto_secretstream_xchacha20poly1305_keygen"];var _crypto_secretstream_xchacha20poly1305_messagebytes_max=Module["_crypto_secretstream_xchacha20poly1305_messagebytes_max"]=asm["_crypto_secretstream_xchacha20poly1305_messagebytes_max"];var _crypto_secretstream_xchacha20poly1305_pull=Module["_crypto_secretstream_xchacha20poly1305_pull"]=asm["_crypto_secretstream_xchacha20poly1305_pull"];var _crypto_secretstream_xchacha20poly1305_push=Module["_crypto_secretstream_xchacha20poly1305_push"]=asm["_crypto_secretstream_xchacha20poly1305_push"];var _crypto_secretstream_xchacha20poly1305_rekey=Module["_crypto_secretstream_xchacha20poly1305_rekey"]=asm["_crypto_secretstream_xchacha20poly1305_rekey"];var _crypto_secretstream_xchacha20poly1305_statebytes=Module["_crypto_secretstream_xchacha20poly1305_statebytes"]=asm["_crypto_secretstream_xchacha20poly1305_statebytes"];var _crypto_secretstream_xchacha20poly1305_tag_final=Module["_crypto_secretstream_xchacha20poly1305_tag_final"]=asm["_crypto_secretstream_xchacha20poly1305_tag_final"];var _crypto_secretstream_xchacha20poly1305_tag_message=Module["_crypto_secretstream_xchacha20poly1305_tag_message"]=asm["_crypto_secretstream_xchacha20poly1305_tag_message"];var _crypto_secretstream_xchacha20poly1305_tag_push=Module["_crypto_secretstream_xchacha20poly1305_tag_push"]=asm["_crypto_secretstream_xchacha20poly1305_tag_push"];var _crypto_secretstream_xchacha20poly1305_tag_rekey=Module["_crypto_secretstream_xchacha20poly1305_tag_rekey"]=asm["_crypto_secretstream_xchacha20poly1305_tag_rekey"];var _crypto_shorthash=Module["_crypto_shorthash"]=asm["_crypto_shorthash"];var _crypto_shorthash_bytes=Module["_crypto_shorthash_bytes"]=asm["_crypto_shorthash_bytes"];var _crypto_shorthash_keybytes=Module["_crypto_shorthash_keybytes"]=asm["_crypto_shorthash_keybytes"];var _crypto_shorthash_keygen=Module["_crypto_shorthash_keygen"]=asm["_crypto_shorthash_keygen"];var _crypto_shorthash_primitive=Module["_crypto_shorthash_primitive"]=asm["_crypto_shorthash_primitive"];var _crypto_shorthash_siphash24=Module["_crypto_shorthash_siphash24"]=asm["_crypto_shorthash_siphash24"];var _crypto_shorthash_siphash24_bytes=Module["_crypto_shorthash_siphash24_bytes"]=asm["_crypto_shorthash_siphash24_bytes"];var _crypto_shorthash_siphash24_keybytes=Module["_crypto_shorthash_siphash24_keybytes"]=asm["_crypto_shorthash_siphash24_keybytes"];var _crypto_shorthash_siphashx24=Module["_crypto_shorthash_siphashx24"]=asm["_crypto_shorthash_siphashx24"];var _crypto_shorthash_siphashx24_bytes=Module["_crypto_shorthash_siphashx24_bytes"]=asm["_crypto_shorthash_siphashx24_bytes"];var _crypto_shorthash_siphashx24_keybytes=Module["_crypto_shorthash_siphashx24_keybytes"]=asm["_crypto_shorthash_siphashx24_keybytes"];var _crypto_sign=Module["_crypto_sign"]=asm["_crypto_sign"];var _crypto_sign_bytes=Module["_crypto_sign_bytes"]=asm["_crypto_sign_bytes"];var _crypto_sign_detached=Module["_crypto_sign_detached"]=asm["_crypto_sign_detached"];var _crypto_sign_ed25519=Module["_crypto_sign_ed25519"]=asm["_crypto_sign_ed25519"];var _crypto_sign_ed25519_bytes=Module["_crypto_sign_ed25519_bytes"]=asm["_crypto_sign_ed25519_bytes"];var _crypto_sign_ed25519_detached=Module["_crypto_sign_ed25519_detached"]=asm["_crypto_sign_ed25519_detached"];var _crypto_sign_ed25519_keypair=Module["_crypto_sign_ed25519_keypair"]=asm["_crypto_sign_ed25519_keypair"];var _crypto_sign_ed25519_open=Module["_crypto_sign_ed25519_open"]=asm["_crypto_sign_ed25519_open"];var _crypto_sign_ed25519_pk_to_curve25519=Module["_crypto_sign_ed25519_pk_to_curve25519"]=asm["_crypto_sign_ed25519_pk_to_curve25519"];var _crypto_sign_ed25519_publickeybytes=Module["_crypto_sign_ed25519_publickeybytes"]=asm["_crypto_sign_ed25519_publickeybytes"];var _crypto_sign_ed25519_secretkeybytes=Module["_crypto_sign_ed25519_secretkeybytes"]=asm["_crypto_sign_ed25519_secretkeybytes"];var _crypto_sign_ed25519_seed_keypair=Module["_crypto_sign_ed25519_seed_keypair"]=asm["_crypto_sign_ed25519_seed_keypair"];var _crypto_sign_ed25519_seedbytes=Module["_crypto_sign_ed25519_seedbytes"]=asm["_crypto_sign_ed25519_seedbytes"];var _crypto_sign_ed25519_sk_to_curve25519=Module["_crypto_sign_ed25519_sk_to_curve25519"]=asm["_crypto_sign_ed25519_sk_to_curve25519"];var _crypto_sign_ed25519_sk_to_pk=Module["_crypto_sign_ed25519_sk_to_pk"]=asm["_crypto_sign_ed25519_sk_to_pk"];var _crypto_sign_ed25519_sk_to_seed=Module["_crypto_sign_ed25519_sk_to_seed"]=asm["_crypto_sign_ed25519_sk_to_seed"];var _crypto_sign_ed25519_verify_detached=Module["_crypto_sign_ed25519_verify_detached"]=asm["_crypto_sign_ed25519_verify_detached"];var _crypto_sign_ed25519ph_final_create=Module["_crypto_sign_ed25519ph_final_create"]=asm["_crypto_sign_ed25519ph_final_create"];var _crypto_sign_ed25519ph_final_verify=Module["_crypto_sign_ed25519ph_final_verify"]=asm["_crypto_sign_ed25519ph_final_verify"];var _crypto_sign_ed25519ph_init=Module["_crypto_sign_ed25519ph_init"]=asm["_crypto_sign_ed25519ph_init"];var _crypto_sign_ed25519ph_statebytes=Module["_crypto_sign_ed25519ph_statebytes"]=asm["_crypto_sign_ed25519ph_statebytes"];var _crypto_sign_ed25519ph_update=Module["_crypto_sign_ed25519ph_update"]=asm["_crypto_sign_ed25519ph_update"];var _crypto_sign_final_create=Module["_crypto_sign_final_create"]=asm["_crypto_sign_final_create"];var _crypto_sign_final_verify=Module["_crypto_sign_final_verify"]=asm["_crypto_sign_final_verify"];var _crypto_sign_init=Module["_crypto_sign_init"]=asm["_crypto_sign_init"];var _crypto_sign_keypair=Module["_crypto_sign_keypair"]=asm["_crypto_sign_keypair"];var _crypto_sign_open=Module["_crypto_sign_open"]=asm["_crypto_sign_open"];var _crypto_sign_primitive=Module["_crypto_sign_primitive"]=asm["_crypto_sign_primitive"];var _crypto_sign_publickeybytes=Module["_crypto_sign_publickeybytes"]=asm["_crypto_sign_publickeybytes"];var _crypto_sign_secretkeybytes=Module["_crypto_sign_secretkeybytes"]=asm["_crypto_sign_secretkeybytes"];var _crypto_sign_seed_keypair=Module["_crypto_sign_seed_keypair"]=asm["_crypto_sign_seed_keypair"];var _crypto_sign_seedbytes=Module["_crypto_sign_seedbytes"]=asm["_crypto_sign_seedbytes"];var _crypto_sign_statebytes=Module["_crypto_sign_statebytes"]=asm["_crypto_sign_statebytes"];var _crypto_sign_update=Module["_crypto_sign_update"]=asm["_crypto_sign_update"];var _crypto_sign_verify_detached=Module["_crypto_sign_verify_detached"]=asm["_crypto_sign_verify_detached"];var _crypto_stream=Module["_crypto_stream"]=asm["_crypto_stream"];var _crypto_stream_chacha20=Module["_crypto_stream_chacha20"]=asm["_crypto_stream_chacha20"];var _crypto_stream_chacha20_ietf=Module["_crypto_stream_chacha20_ietf"]=asm["_crypto_stream_chacha20_ietf"];var _crypto_stream_chacha20_ietf_keybytes=Module["_crypto_stream_chacha20_ietf_keybytes"]=asm["_crypto_stream_chacha20_ietf_keybytes"];var _crypto_stream_chacha20_ietf_keygen=Module["_crypto_stream_chacha20_ietf_keygen"]=asm["_crypto_stream_chacha20_ietf_keygen"];var _crypto_stream_chacha20_ietf_noncebytes=Module["_crypto_stream_chacha20_ietf_noncebytes"]=asm["_crypto_stream_chacha20_ietf_noncebytes"];var _crypto_stream_chacha20_ietf_xor=Module["_crypto_stream_chacha20_ietf_xor"]=asm["_crypto_stream_chacha20_ietf_xor"];var _crypto_stream_chacha20_ietf_xor_ic=Module["_crypto_stream_chacha20_ietf_xor_ic"]=asm["_crypto_stream_chacha20_ietf_xor_ic"];var _crypto_stream_chacha20_keybytes=Module["_crypto_stream_chacha20_keybytes"]=asm["_crypto_stream_chacha20_keybytes"];var _crypto_stream_chacha20_keygen=Module["_crypto_stream_chacha20_keygen"]=asm["_crypto_stream_chacha20_keygen"];var _crypto_stream_chacha20_noncebytes=Module["_crypto_stream_chacha20_noncebytes"]=asm["_crypto_stream_chacha20_noncebytes"];var _crypto_stream_chacha20_xor=Module["_crypto_stream_chacha20_xor"]=asm["_crypto_stream_chacha20_xor"];var _crypto_stream_chacha20_xor_ic=Module["_crypto_stream_chacha20_xor_ic"]=asm["_crypto_stream_chacha20_xor_ic"];var _crypto_stream_keybytes=Module["_crypto_stream_keybytes"]=asm["_crypto_stream_keybytes"];var _crypto_stream_keygen=Module["_crypto_stream_keygen"]=asm["_crypto_stream_keygen"];var _crypto_stream_noncebytes=Module["_crypto_stream_noncebytes"]=asm["_crypto_stream_noncebytes"];var _crypto_stream_primitive=Module["_crypto_stream_primitive"]=asm["_crypto_stream_primitive"];var _crypto_stream_salsa20=Module["_crypto_stream_salsa20"]=asm["_crypto_stream_salsa20"];var _crypto_stream_salsa2012=Module["_crypto_stream_salsa2012"]=asm["_crypto_stream_salsa2012"];var _crypto_stream_salsa2012_keybytes=Module["_crypto_stream_salsa2012_keybytes"]=asm["_crypto_stream_salsa2012_keybytes"];var _crypto_stream_salsa2012_keygen=Module["_crypto_stream_salsa2012_keygen"]=asm["_crypto_stream_salsa2012_keygen"];var _crypto_stream_salsa2012_noncebytes=Module["_crypto_stream_salsa2012_noncebytes"]=asm["_crypto_stream_salsa2012_noncebytes"];var _crypto_stream_salsa2012_xor=Module["_crypto_stream_salsa2012_xor"]=asm["_crypto_stream_salsa2012_xor"];var _crypto_stream_salsa208=Module["_crypto_stream_salsa208"]=asm["_crypto_stream_salsa208"];var _crypto_stream_salsa208_keybytes=Module["_crypto_stream_salsa208_keybytes"]=asm["_crypto_stream_salsa208_keybytes"];var _crypto_stream_salsa208_keygen=Module["_crypto_stream_salsa208_keygen"]=asm["_crypto_stream_salsa208_keygen"];var _crypto_stream_salsa208_messagebytes_max=Module["_crypto_stream_salsa208_messagebytes_max"]=asm["_crypto_stream_salsa208_messagebytes_max"];var _crypto_stream_salsa208_noncebytes=Module["_crypto_stream_salsa208_noncebytes"]=asm["_crypto_stream_salsa208_noncebytes"];var _crypto_stream_salsa208_xor=Module["_crypto_stream_salsa208_xor"]=asm["_crypto_stream_salsa208_xor"];var _crypto_stream_salsa20_keybytes=Module["_crypto_stream_salsa20_keybytes"]=asm["_crypto_stream_salsa20_keybytes"];var _crypto_stream_salsa20_keygen=Module["_crypto_stream_salsa20_keygen"]=asm["_crypto_stream_salsa20_keygen"];var _crypto_stream_salsa20_noncebytes=Module["_crypto_stream_salsa20_noncebytes"]=asm["_crypto_stream_salsa20_noncebytes"];var _crypto_stream_salsa20_xor=Module["_crypto_stream_salsa20_xor"]=asm["_crypto_stream_salsa20_xor"];var _crypto_stream_salsa20_xor_ic=Module["_crypto_stream_salsa20_xor_ic"]=asm["_crypto_stream_salsa20_xor_ic"];var _crypto_stream_xchacha20=Module["_crypto_stream_xchacha20"]=asm["_crypto_stream_xchacha20"];var _crypto_stream_xchacha20_keybytes=Module["_crypto_stream_xchacha20_keybytes"]=asm["_crypto_stream_xchacha20_keybytes"];var _crypto_stream_xchacha20_keygen=Module["_crypto_stream_xchacha20_keygen"]=asm["_crypto_stream_xchacha20_keygen"];var _crypto_stream_xchacha20_noncebytes=Module["_crypto_stream_xchacha20_noncebytes"]=asm["_crypto_stream_xchacha20_noncebytes"];var _crypto_stream_xchacha20_xor=Module["_crypto_stream_xchacha20_xor"]=asm["_crypto_stream_xchacha20_xor"];var _crypto_stream_xchacha20_xor_ic=Module["_crypto_stream_xchacha20_xor_ic"]=asm["_crypto_stream_xchacha20_xor_ic"];var _crypto_stream_xor=Module["_crypto_stream_xor"]=asm["_crypto_stream_xor"];var _crypto_stream_xsalsa20=Module["_crypto_stream_xsalsa20"]=asm["_crypto_stream_xsalsa20"];var _crypto_stream_xsalsa20_keybytes=Module["_crypto_stream_xsalsa20_keybytes"]=asm["_crypto_stream_xsalsa20_keybytes"];var _crypto_stream_xsalsa20_keygen=Module["_crypto_stream_xsalsa20_keygen"]=asm["_crypto_stream_xsalsa20_keygen"];var _crypto_stream_xsalsa20_noncebytes=Module["_crypto_stream_xsalsa20_noncebytes"]=asm["_crypto_stream_xsalsa20_noncebytes"];var _crypto_stream_xsalsa20_xor=Module["_crypto_stream_xsalsa20_xor"]=asm["_crypto_stream_xsalsa20_xor"];var _crypto_stream_xsalsa20_xor_ic=Module["_crypto_stream_xsalsa20_xor_ic"]=asm["_crypto_stream_xsalsa20_xor_ic"];var _crypto_verify_16=Module["_crypto_verify_16"]=asm["_crypto_verify_16"];var _crypto_verify_16_bytes=Module["_crypto_verify_16_bytes"]=asm["_crypto_verify_16_bytes"];var _crypto_verify_32=Module["_crypto_verify_32"]=asm["_crypto_verify_32"];var _crypto_verify_32_bytes=Module["_crypto_verify_32_bytes"]=asm["_crypto_verify_32_bytes"];var _crypto_verify_64=Module["_crypto_verify_64"]=asm["_crypto_verify_64"];var _crypto_verify_64_bytes=Module["_crypto_verify_64_bytes"]=asm["_crypto_verify_64_bytes"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _randombytes=Module["_randombytes"]=asm["_randombytes"];var _randombytes_buf=Module["_randombytes_buf"]=asm["_randombytes_buf"];var _randombytes_buf_deterministic=Module["_randombytes_buf_deterministic"]=asm["_randombytes_buf_deterministic"];var _randombytes_close=Module["_randombytes_close"]=asm["_randombytes_close"];var _randombytes_implementation_name=Module["_randombytes_implementation_name"]=asm["_randombytes_implementation_name"];var _randombytes_random=Module["_randombytes_random"]=asm["_randombytes_random"];var _randombytes_seedbytes=Module["_randombytes_seedbytes"]=asm["_randombytes_seedbytes"];var _randombytes_stir=Module["_randombytes_stir"]=asm["_randombytes_stir"];var _randombytes_uniform=Module["_randombytes_uniform"]=asm["_randombytes_uniform"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _sodium_base642bin=Module["_sodium_base642bin"]=asm["_sodium_base642bin"];var _sodium_base64_encoded_len=Module["_sodium_base64_encoded_len"]=asm["_sodium_base64_encoded_len"];var _sodium_bin2base64=Module["_sodium_bin2base64"]=asm["_sodium_bin2base64"];var _sodium_bin2hex=Module["_sodium_bin2hex"]=asm["_sodium_bin2hex"];var _sodium_hex2bin=Module["_sodium_hex2bin"]=asm["_sodium_hex2bin"];var _sodium_init=Module["_sodium_init"]=asm["_sodium_init"];var _sodium_library_minimal=Module["_sodium_library_minimal"]=asm["_sodium_library_minimal"];var _sodium_library_version_major=Module["_sodium_library_version_major"]=asm["_sodium_library_version_major"];var _sodium_library_version_minor=Module["_sodium_library_version_minor"]=asm["_sodium_library_version_minor"];var _sodium_pad=Module["_sodium_pad"]=asm["_sodium_pad"];var _sodium_unpad=Module["_sodium_unpad"]=asm["_sodium_unpad"];var _sodium_version_string=Module["_sodium_version_string"]=asm["_sodium_version_string"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];Module["asm"]=asm;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["Pointer_stringify"]=Pointer_stringify;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")});function doBrowserLoad(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,(function(){throw"could not load memory initializer "+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run()
20581 };
20582 var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("unhandledRejection",abort);Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var asm2wasmImports={"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})};var functionPointers=new Array(8);var GLOBAL_BASE=1024;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var PAGE_SIZE=16384;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){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 -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY<HEAP32[DYNAMICTOP_PTR>>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){Module["wasmMemory"]=new WebAssembly.Memory({"initial":TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=Module["wasmMemory"].buffer}else{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module["buffer"]=buffer}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="";var wasmBinaryFile="data:application/octet-stream;base64,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IAQgAhAPIABB+ABqIAEgAxAPCx8AIAFB/wFxrUIIhiAAQf8Bca2EIAJB/wFxrUIQhoQLDQAgACABIAIQnAJBAAvIAQEJfyACKAIEIAEoAgRqIQMgAigCCCABKAIIaiEEIAIoAgwgASgCDGohBSACKAIQIAEoAhBqIQYgAigCFCABKAIUaiEHIAIoAhggASgCGGohCCACKAIcIAEoAhxqIQkgAigCICABKAIgaiEKIAIoAiQgASgCJGohCyAAIAIoAgAgASgCAGo2AgAgACADNgIEIAAgBDYCCCAAIAU2AgwgACAGNgIQIAAgBzYCFCAAIAg2AhggACAJNgIcIAAgCjYCICAAIAs2AiQLJgAgAC0AAa1CCIYgAC0AAK2EIAAtAAKtQhCGhCAALQADrUIYhoQLwwMBA38gAkGAwABOBEAgACABIAIQBQ8LIAAhBCAAIAJqIQMgAEEDcSABQQNxRgRAA0AgAEEDcQRAIAJFBEAgBA8LIAAgASwAADoAACAAQQFqIQAgAUEBaiEBIAJBAWshAgwBCwsgA0F8cSICQUBqIQUDQCAAIAVMBEAgACABKAIANgIAIAAgASgCBDYCBCAAIAEoAgg2AgggACABKAIMNgIMIAAgASgCEDYCECAAIAEoAhQ2AhQgACABKAIYNgIYIAAgASgCHDYCHCAAIAEoAiA2AiAgACABKAIkNgIkIAAgASgCKDYCKCAAIAEoAiw2AiwgACABKAIwNgIwIAAgASgCNDYCNCAAIAEoAjg2AjggACABKAI8NgI8IABBQGshACABQUBrIQEMAQsLA0AgACACSARAIAAgASgCADYCACAAQQRqIQAgAUEEaiEBDAELCwUgA0EEayECA0AgACACSARAIAAgASwAADoAACAAIAEsAAE6AAEgACABLAACOgACIAAgASwAAzoAAyAAQQRqIQAgAUEEaiEBDAELCwsDQCAAIANIBEAgACABLAAAOgAAIABBAWohACABQQFqIQEMAQsLIAQLyAEBCX8gASgCBCACKAIEayEDIAEoAgggAigCCGshBCABKAIMIAIoAgxrIQUgASgCECACKAIQayEGIAEoAhQgAigCFGshByABKAIYIAIoAhhrIQggASgCHCACKAIcayEJIAEoAiAgAigCIGshCiABKAIkIAIoAiRrIQsgACABKAIAIAIoAgBrNgIAIAAg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aigAADYCGCAAIAFBDGooAAA2AhwgACABQRBqKAAANgIgIAAgAUEUaigAADYCJCAAIAFBGGooAAA2AiggACABQRxqKAAANgIsCxEAIAAgASACIANCACAEEPsBCw0AIAAgASACEEIaQQALBQBB0AELCQAgACABEPoDC3YBA38CfyMDIQUjA0E/akFAcSQDIwMhAyMDQRBqJAMgA0EAOgAAIAAgASACEPsDBH9BfwVBACEBA0AgAyADLAAAIAAgAWosAAByOgAAIAFBAWoiAUEgRw0AC0EAIAMtAABB/wNqQQh2QQFxawshACAFCyQDIAAL8wMBL38gASgCACIMIAAoAgAiDXNBACACayICcSEDIAFBBGoiDigCACIPIABBBGoiECgCACIRcyACcSEEIAFBCGoiEigCACITIABBCGoiFCgCACIVcyACcSEFIAFBDGoiFigCACIXIABBDGoiGCgCACIZcyACcSEGIAFBEGoiGigCACIbIABBEGoiHCgCACIdcyACcSEHIAFBFGoiHigCACIfIABBFGoiICgCACIhcyACcSEIIAFBGGoiIigCACIjIABBGGoiJCgCACIlcyACcSEJIAFBHGoiJigCACInIABBHGoiKCgCACIpcyACcSEKIAFBIGoiKigCACIrIABBIGoiLCgCACItcyACcSELIAFBJGoiLigCACIvIABBJGoiMCgCACIxcyACcSECIAAgAyANczYCACAQIAQgEXM2AgAgFCAFIBVzNgIAIBggBiAZczYCACAcIAcgHXM2AgAgICAIICFzNgIAICQgCSAlczYCACAoIAogKXM2AgAgLCALIC1zNgIAIDAgAiAxczYCACABIAMgDHM2AgAgDiAEIA9zNgIAIBIgBSATczYCACAWIAYgF3M2AgAgGiAHIBtzNgIAIB4gCCAfczYCACAiIAkgI3M2AgAgJiAKICdzNgIAICogCyArczYCACAuIAIgL3M2AgALBABBAwsMACAAQQBBgAgQIRoLegEHfwJ/IwMhCCMDQT9qQUBxJAMjAyEFIwNBEGokA0EKIQIDQCAFIAJBf2oiA2oiBiABIAFBCm4iB0F2bGpBMHI6AAAgAUEJSyADQQBHcQRAIAMhAiAHIQEMAQsLIAAgBkELIAJrIgEQGRogACABakEAOgAAIAgLJAMLuwEBBX8CQCAALAAAIgZBUGpB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JAMjAyEDIwNBIGokAyADIAIgARBwBH9BfwUgAEGQnQIgA0EAEDYaQQALIQAgBQskAyAAC4IGAQZ/IwMhBSMDQcABaiQDIAUhBiACQYABSwR/IAAQQRogACABIAKtECUaIAAgBhA1GiAGIQFBwAAFIAILIQQgABBBGiAFQUBrIgNCtuzYsePGjZs2NwMAIANCtuzYsePGjZs2NwMIIANCtuzYsePGjZs2NwMQIANCtuzYsePGjZs2NwMYIANCtuzYsePGjZs2NwMgIANCtuzYsePGjZs2NwMoIANCtuzYsePGjZs2NwMwIANCtuzYsePGjZs2NwM4IANBQGtCtuzYsePGjZs2NwMAIANCtuzYsePGjZs2NwNIIANCtuzYsePGjZs2NwNQIANCtuzYsePGjZs2NwNYIANCtuzYsePGjZs2NwNgIANCtuzYsePGjZs2NwNoIANCtuzYsePGjZs2NwNwIANCtuzYsePGjZs2NwN4IARFIgdFBEAgAyABLAAAQTZzOgAAIARBAUcEQEEBIQIDQCADIAJqIgggCCwAACABIAJqLAAAczoAACACQQFqIgIgBEcNAAsLCyAAIANCgAEQJRogAEHQAWoiAhBBGiADQty48eLFi5eu3AA3AwAgA0LcuPHixYuXrtwANwMIIANC3Ljx4sWLl67cADcDECADQty48eLFi5eu3AA3AxggA0LcuPHixYuXrtwANwMgIANC3Ljx4sWLl67cADcDKCADQty48eLFi5eu3AA3AzAgA0LcuPHixYuXrtwANwM4IANBQGtC3Ljx4sWLl67cADcDACADQty48eLFi5eu3AA3A0ggA0LcuPHixYuXrtwANwNQIANC3Ljx4sWLl67cADcDWCADQty48eLFi5eu3AA3A2AgA0LcuPHixYuXrtwANwNoIANC3Ljx4sWLl67cADcDcCADQty48eLFi5eu3AA3A3ggB0UEQCADIAEsAABB3ABzOgAAIARBAUcEQEEBIQADQCADIABqIgcgBywAACABIABqLAAAczoAACAAQQFqIgAgBEcNAAsLCyACIANCgAEQJRogA0GAARAOIAZBwAAQDiAFJANBAAu6BAELfwJ/IwMhEiMDQT9qQUBxJAMjAyEKIwNBEGokAyAKQQA2AgAgBxCSAQJAAkAgAwR/IAdBBHFFIQ8gBEUhEAJ/AkACQAJAAkACQANAA0ACQCACIAhqLAAAIQ0gDwR/IA0Q0QMFIA0Q0gMLIhFB/wFHDQAgEA0GIAQgDRBgRQ0HIAhBAWoiCCADSQ0BDAULCyARIAxBBnRqIQwgCUEGaiINQQdLBEAgCUF+aiEJIAsgAU8NAiAAIAtqIAwgCXY6AAAgC0EBaiELBSANIQkLIAhBAWoiCCADSQ0ACwwBCyAKIAg2AgBBmKECQSI2AgBBfyEIIAwhASAJDAQLIAogCDYCAEEAIQggDCEBIAkMAwsgCiAINgIAQQAhCCAMIQEgCQwCCyAKIAg2AgBBACEIIAwhASAJDAELIAogCDYCAEEAIQggDCEBIAkLIgBBBEsEf0EAIQtBfwUgCCEJDAILBUEAIQFBACEADAELIQAMAQtBASAAdEF/aiABcQRAQX8hAEEAIQsFIAkgB0ECcXIEfyAJBSACIAMgCiAEIABBAXYQ0AMLIgAEQEEAIQsFIAQEQCAKKAIAIgAgA0kEQAJAA0AgBCACIABqLAAAEGBFDQEgAEEBaiIAIANJDQALIAogADYCAEEAIQAMBQsgCiAANgIACwtBACEACwsLIAooAgAhASAGBEAgBiACIAFqNgIABSABIANHBEBBmKECQRY2AgBBfyEACwsgBQRAIAUgCzYCAAsgEgskAyAAC9IDAQV/IAQQkgEgA0EDbiIHQX1sIANqIQUgB0ECdCEGIAUEQCAGQQJyIAVBAXZqIAZBBGogBEECcRshBgsgBiABTwRAEAALIANBAEchBSAEQQRxBEAgBQRAQQAhBUEAIQQDQCAIQQh0IAIgCWotAAByIQggBUEIaiIFQQVLBEADQCAEQQFqIQcgACAEaiAIIAVBemoiBXZBP3EQ8gE6AAAgBUEFSwR/IAchBAwBBSAHCyEECwsgCUEBaiIJIANHDQALIAUEQCAAIARqIAhBBiAFa3RBP3EQ8gE6AAAgBEEBaiEECwVBACEECwUgBQRAQQAhBEEAIQUDQCAIQQh0IAIgCWotAAByIQggBUEIaiIFQQVLBEADQCAEQQFqIQcgACAEaiAIIAVBemoiBXZBP3EQ8QE6AAAgBUEFSwR/IAchBAwBBSAHCyEECwsgCUEBaiIJIANHDQALIAUEQCAAIARqIAhBBiAFa3RBP3EQ8QE6AAAgBEEBaiEECwVBACEECwsgBiAESQRAQcmbAkHcmwJB5gFB7JsCEAILIAYgBEsEQCAAIARqQT0gBiAEaxAhGiAGIQQLIAAgBGpBACABIARBAWoiAiACIAFJGyAEaxAhGiAACw8AIABBeXFBAUcEQBAACwuSAQEFfwJ/IwMhByMDQT9qQUBxJAMjAyEDIwNBEGokAyADQQhqIgUgADYCACADQQRqIgYgATYCACADQQA2AgBBACEAA0AgAyADKAIAIAYoAgAgAGosAAAgBSgCACAAaiwAAHNB/wFxcjYCACAAQQFqIgAgAkcNAAsgAygCAEH/A2pBCHZBAXFBf2ohACAHCyQDIAALEQAgACABIAIgA0IAIAQQ9QELDQAgACABIAIgAxDIAws4AQF/IwMhAiMDQSBqJAMgACACEFMaIABB6ABqIgAgAkIgEEIaIAAgARBTGiACQSAQDiACJANBAAsTACAAIAEgAiADIARBABD9AUEACycBAX8gACAALAAAQXhxOgAAIABBH2oiASABLAAAQT9xQcAAcjoAAAsXACAAEEEaIAEEQCAAQaCRAkIiECUaCwt0AQR/An8jAyEGIwNBP2pBQHEkAyMDIQMjA0GgAWokAyABIAJCIBBNGiABIAEsAABBeHE6AAAgAUEfaiIFIAUsAABBP3FBwAByOgAAIAMgARB+IAAgAxA7IAEgAkEgECsaIAFBIGogAEEgECsaIAYLJANBAAuCBAEGfyMDIQUjA0HgAGokAyAFIQYgAkHAAEsEfyAAEFQaIAAgASACrRBCGiAAIAYQUxogBiEBQSAFIAILIQQgABBUGiAFQSBqIgNCtuzYsePGjZs2NwMAIANCtuzYsePGjZs2NwMIIANCtuzYsePGjZs2NwMQIANCtuzYsePGjZs2NwMYIANCtuzYsePGjZs2NwMgIANCtuzYsePGjZs2NwMoIANCtuzYsePGjZs2NwMwIANCtuzYsePGjZs2NwM4IARFIgdFBEAgAyABLAAAQTZzOgAAIARBAUcEQEEBIQIDQCADIAJqIgggCCwAACABIAJqLAAAczoAACACQQFqIgIgBEcNAAsLCyAAIANCwAAQQhogAEHoAGoiAhBUGiADQty48eLFi5eu3AA3AwAgA0LcuPHixYuXrtwANwMIIANC3Ljx4sWLl67cADcDECADQty48eLFi5eu3AA3AxggA0LcuPHixYuXrtwANwMgIANC3Ljx4sWLl67cADcD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AUEDdEkEf0FyBSAAKAIoBH8gAQR/IAFB////B0sEf0FvBUFjQQAgACgCNCIAQf///wdLG0FkIAAbDwsFQXALBUF0CwsLCwsLBUF/CwVBZwsLIgAL8gQCD38RfkEAQYCAgAggACwAUBshDCAAKAIEIQggACgCCCEJIAAoAgwhCiAAKAIQIQsgAEEUaiINKAIAIQQgAEEYaiIOKAIAIQMgAEEcaiIPKAIAIQUgAEEgaiIQKAIAIQYgAEEkaiIRKAIAIQcgAkIPVgRAIAAoAgCtIRIgC0EFbK0hFCAKQQVsrSEbIAlBBWytIR0gCEEFbK0hICAIrSEVIAmtIRwgCq0hHiALrSEhIAMhACABIQMDQCADQQNqKAAAQQJ2Qf///x9xIABqrSIWIBR+IAMoAABB////H3EgBGqtIhcgEn58IANBBmooAABBBHZB////H3EgBWqtIhggG358IANBCWooAABBBnYgBmqtIhkgHX58IANBDGooAABBCHYgDHIgB2qtIhogIH58IR8gFiAVfiAXIBx+fCAYIBJ+fCAZIBR+fCAaIBt+fCAWIBJ+IBcgFX58IBggFH58IBkgG358IBogHX58IB9CGohC/////w+DfCIiQhqIQv////8Pg3wiE6dB////H3EhBSAWIBx+IBcgHn58IBggFX58IBkgEn58IBogFH58IBNCGohC/////w+DfCITp0H///8fcSEGIBYgHn4gFyAhfnwgGCAcfnwgGSAVfnwgGiASfnwgE0IaiEL/////D4N8IhOnQf///x9xIQcgE0IaiKdBBWwgH6dB////H3FqIgBB////H3EhASAAQRp2ICKnQf///x9xaiEAIANBEGohAyACQnB8IgJCD1YEQCABIQQMAQsLBSAEIQEgAyEACyANIAE2AgAgDiAANgIAIA8gBTYCACAQIAY2AgAgESAHNgIAC4kDAQh/IwMhCCMDQT9qQUBxJAMjAyEDIwNBQGskAyACQf8BcQRAIAJB/wFxIQkgAkH/AXFBwABMBEACfyAAKQNQQgBSBH9BfwUgAEHgAmoiBCgCACICQYABSwRAIABCgAEQrQEgACAAQeAAaiICEK4BIAQgBCgCAEGAf2oiBjYCACAGQYEBSQRAIAIgAEHgAWogBhAZGiACIQUgBCgCACEHBUH5kQJBmZICQbACQcaSAhACCwUgAEHgAGoh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ByAKakEHEAwgC3MiCyAHakEJEAwgAnMiASALakENEAwgCnMiCiABakESEAwgB3MhAyAPIAVqQQcQDCAMcyIMIA9qQQkQDCAQcyICIAxqQQ0QDCAFcyIWIAJqQRIQDCAPcyEQIA4gDWpBBxAMICRzIgUgDmpBCRAMIBFzIgcgBWpBDRAMIA1zIg0gB2pBEhAMIA5zIREgJUECaiIlIARIBEAgASEOIAIhDyADIQEgECECIBEhAwwBCwsgACAGIBJqEBIgAEEEaiAIIBhqEBIgAEEIaiAJIBlqEBIgAEEMaiAVIBpqEBIgAEEQaiAKIBtqEBIgAEEUaiADIBNqEBIgAEEYaiALIBxqEBIgAEEcaiABIB1qEBIgAEEgaiACIB5qEBIgAEEkaiAWIB9qEBIgAEEoaiAQIBRqEBIgAEEsaiAMICBqEBIgAEEwaiAFICNqEBIgAEE0aiAHICJqEBIgAEE4aiANICFqEBIgAEE8aiARIBdqEBILjBQCFH8dfiAALAAAIABBAWoiBywAACAAQQJqIgIsAAAQFUL///8AgyEgIAIQGEIFiEL///8AgyEjIABBBWoiCCwAACAAQQZqIgksAAAgAEEHaiIDLAAAEBVCAohC////AIMhJiADEBhCB4hC////AIMhJyAAQQpqIgoQGEIEiEL///8AgyEoIABBDWoiCywAACAAQQ5qIgwsAAAgAEEPaiIELAAAEBVCAYhC////AIMhLiAEEBhCBohC////AIMhISAAQRJqIg0sAAAgAEETaiIOLAAAIABBFGoiDywAABAVQgOIQv///wCDISQgAEEVaiIQLAAAIABBFmoiESwAACAAQRdqIgUsAAAQFUL///8AgyEeIAUQGEIFiEL///8AgyElIABBGmoiEiwAACAAQRtqIhMsAAAgAEEcaiIGLAAAEBVCAohC////AIMhHSAGEBhCB4hC////AIMhGyAAQR9qIhQQGEIEiEL///8AgyEfIAAsACIgACwAIyAAQSRqIgEsAAAQFUIBiEL///8AgyEiIAEQGEIGiEL///8AgyEpIAAsACcgACwAKCAALAApEBVCA4hC////AIMhLyAALAAqIAAsACsgAEEsaiIBLAAAEBVC////AIMhHCABEBhCBYhC////AIMhKiAALAAvIAAsADAgAEExaiIBLAAAEBVCAohC////AIMhFSAB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IAEgARAnQQAgAyAEQQMQkAEEQEFgIQAMCQsgByADKAIANgIAIAQoAgAhASAAEKkBIgBFBEBBYEEAIAEsAAAbIQALBUFgIQALBUFgIQALCwsLBUFmIQALBUFgIQALCwsgCgskAyAACyoBAX8DQCAAIAJBA3RqIAEgAkEDdGopAAA3AwAgAkEBaiICQYABRw0ACwtEAQF/IAAgAUEEcRCVBCAAQQRqIgEoAgAQHSABQQA2AgAgACgCACICBEAgAigCACIBBEAgARAdCwsgAhAdIABBADYCAAvHAQEBfyAAIAEoAABB////H3E2AgAgACABQQNqKAAAQQJ2QYP+/x9xNgIEIAAgAUEGaigAAEEEdkH/gf8fcTYCCCAAIAFBCWooAABBBnZB///AH3E2AgwgACABQQxqKAAAQQh2Qf//P3E2AhAgAEEUaiICQgA3AgAgAkIANwIIIAJBADYCECAAIAFBEGooAAA2AiggACABQRRqKAAANgIsIAAgAUEYaigAADYCMCAAIAFBHGooAAA2AjQgAEIANwM4IABBADoAUAuLAgIBfwN+AkACQCAAQThqIgMpAwAiBEIAUQ0AIAJCECAEfSIFIAUgAlYbIgZCAFIEQEIAIQUDQCAAQUBrIAQgBXynaiABIAWnaiwAADoAACADKQMAIQQgBUIBfCIFIAZUDQALCyADIAQgBnwiBDcDACAEQhBaBEAgACAAQUBrQhAQqgEgA0IANwMAIAEgBqdqIQEgAiAGfSECDAELDAELIAJCcIMhBCACQg9WBH4gACABIAQQqgEgASAEp2ohASACIAR9BSACCyIEQgBSBEBCACECA0AgAEFAayADKQMAIAJ8p2ogASACp2osAAA6AAAgAkIBfCICIARUDQALIAMgAykDACAEfDcDAAsLC7gDAg1/A34gACkDOCIPQgBSBEAgAEFAayAPpyICakEBOgAAIA9CAXwiD0IQVARAIABBQGsgD6dqQQBBDyACaxAhGgsgAEEBOgBQIAAgAEFAa0IQEKoBCyAAKAIcIAAoAhgiAkEadmoiA0H///8fcSEEIANBGnYgACgCIGoiA0H///8fcSEGIANBGnYgACgCJGoiB0EadkEFbCAAKAIUaiIDQf///x9xIQggB0GAgIBgciAIQQVqIgpBGnYgA0EadiACQf///x9xaiIFaiILQRp2IARqIgxB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hBCIAgsTACAAIAGtIAKtQiCGhCADEI8CCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChCKAgsTACAAIAEgAq0gA61CIIaEEJICCxMAIAAgAa0gAq1CIIaEIAMQkQILHwAgACABIAKtIAOtQiCGhCAErSAFrUIghoQgBhCTAgstACAAIAGtIAKtQiCGhCADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQlAILLQAgACABrSACrUIghoQgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEIIECxIAIAAgASACrSADrUIghoQQJQsSACAAIAEgAq0gA61CIIaEEE0LEgAgACABIAKtIAOtQiCGhBBCCxMAIAAgASACrSADrUIghoQQowQLFQAgACABIAKtIAOtQiCGhBBNGkEACxIAIAAgASACrSADrUIghoQQOAsSACAAIAEgAq0gA61CIIaEECALHQAgACABIAIgA60gBK1CIIaEIAUgBiAHIAgQpQILGAAgACABIAIgA60gBK1CIIaEIAUgBhB5CxkAIAAgASACIAOtIAStQiCGhCAFIAYQrAILFwAgACABIAKtIAOtQiCGhCAEIAUQuAILFQAgACABIAKtIAOtQiCGhCAEELkCCxcAIAAgASACrSADrUIghoQgBCAFELsCCxkAIAAgASACrSADrUIghoQgBCAFIAYQvAELGQAgACABIAIgA60gBK1CIIaEIAUgBhCDAQsbACAAIAEgAiADrSAErUIghoQgBSAGIAcQvgELFwAgACABIAKtIAOtQiCGhCAEIAUQ3QILGQAgACABIAKtIAOtQiCGhCAEIAUgBhDDAQsZACAAIAEgAiADrSAErUIghoQgBSAGEIQBCxsAIAAgASACIAOtIAStQiCGhCAFIAYgBxDGAQsXACAAIAEgAq0gA61CIIaEIAQgBRDEAwsVACAAIAEgAq0gA61CIIaEIAQQxQMLFwAgACABIAKtIAOtQiCGhCAEIAUQxgMLGQAgACABIAKtIAOtQiCGhCAEIAUgBhDpAQsZACAAIAEgAiADrSAErUIghoQgBSAGEIwBCxsAIAAgASACIAOtIAStQiCGhCAFIAYgBxDqAQsXACAAIAEgAq0gA61CIIaEIAQgBRDHAwsLACAAIAEgAhCCAQsZACAAIAEgAq0gA61CIIaEIAQgBSAGEOsBCxkAIAAgASACIAOtIAStQiCGhCAFIAYQjQELGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEOwBCxUAIAAgASACrSADrUIghoQgBBC2AwsTACAAIAEgAq0gA61CIIaEENcBCxUAIAAgASACrSADrUIghoQgBBCGAQsGAEHekQILFQAgACABIAKtIAOtQiCGhCAEEOIBCxUAIAAgASACrSADrUIghoQgBBDaAwsSACAAIAEgAq0gA61CIIaEEG0LFQAgACABIAKtIAOtQiCGhCAEEPgBCxgAIAAgASACrSADrUIghoQgBBCGARpBAAsnACAAIAEgAiADIAStIAWtQiCGhCAGIAetIAitQiCGhCAKIAsQlwILJQAgACABIAIgA60gBK1CIIaEIAUgBq0gB61CIIaEIAkgChCGBAslACAAIAIgA60gBK1CIIaEIAUgBiAHrSAIrUIghoQgCSAKEI4CCyUAIAAgASADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQgAQLJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALELMBCzoBAn8jAyEEIwNBIGokAyAEIAEgAiADEIYBGkF/IAAgBBBmIAQgAEYbIAQgAEEgED9yIQUgBCQDIAULJQAgACABIAIgA60gBK1CIIaEIAUgBq0gB61CIIaEIAkgChCzBAslACAAIAIgA60gBK1CIIaEIAUgBiAHrSAIrUIghoQgCSAKEKwBCyUAIAAgASADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQqgQLJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALELgBCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQugQLJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCvAgslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEK8ECy0BAX8CQCABBEADQCAAIAFBf2oiAWoiAiwAAEEkRg0CIAENAEEAIQILCwsgAgv7AQEDfwJAIAFB/wFxIgIEQCAAQQNxBEAgAUH/AXEhAwNAIAAsAAAiBEUgBCADQRh0QRh1RnINAyAAQQFqIgBBA3ENAAsLIAJBgYKECGwh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AhCzAiACIAIoAgBBAWo2AgAgAiACEEYgA0HQAmoiAUHQhAIgAhAPIAEgARBEIANBoAJqIgIgARAQIANB8AFqIgYgASACEA8gA0HgA2oiBCAGIAEQFyACIAJB0IQCEA8gBCACIAQQFyAEIAQQsAQgACAEEDwgACwAAUEBcSEEIANBsANqIgYgARBEIAEgBiAEECogAhBDIAJB0IQCIAQQKiABIAEgAhAaIANBwAFqIgIQIyADQZABaiIEIAEgAhAXIANBMGoiBiABIAIQGiADQeAAaiIBIAQQRiADIAYgARAPIAAgAxA8IAggCUGAAXEgCC0AAHI6AAAgA0GgBmoiASAAED0EQBAABSAFIAEQNyAHIAUQLiAFIAcQKSAHIAUQLiAFIAcQKSABIAUQFCAAIAEQOyAKJAMLC2MBBX9BICEBQQEhAgNAIAAgAUF/aiIBaiwAACIEQf8BcSABQbCEAmosAAAiBUH/AXFrQQh1IAJB/wFxIgJxIANyIQMgBSAEc0H/AXFB//8DakEIdiACcSECIAENAAsgA0EARws7ACADQu////8PVgRAEAALIAAgACADp2pBACACIAMgBCAFIAYgBxCzARogAQRAIAEgA0IQfDcDAAtBAAvXIAIBfzd+IAEsAAAgASwAASABQQJqIgQsAAAQFUL///8AgyEFIAQQGEIFiEL///8AgyEJIAEsAAUgASwABiABQQdqIgQsAAAQFUICiEL///8AgyEPIAQQGEIHiEL///8AgyEQIAFBCmoQGEIEiEL///8AgyEKIAEsAA0gASwADiABQQ9qIgQsAAAQFUIBiEL///8AgyELIAQQGEIGiEL///8AgyEHIAEsABIgASwAEyABLAAUEBVCA4hC////AIMhBiABLAAVIAEsABYgAUEXaiIELAAAEBVC////AIMhDCAEEBhCBYhC////AIMhDSABLAAaIAEsABsgAUEcaiIBLAAAEBVCAohC////AIMhCCABEBhCB4ghDiACLAAAIAIsAAEgAkECaiIBLAAAEBVC////AIMhGSABEBhCBYhC////AIMhGiACLAAFIAIsAAYgAkEHaiIBLAAAEBVCAohC////AIMhGyABEBhCB4hC////AIMhHiACQQpqEBhCBIhC////AIMhEyACLAANIAIsAA4gAkEPaiIBLAAAEBVCAYhC////AIMhFyABEBhCBohC////AIMhGCACLAASIAIsABMgAiwAFBAVQgOIQv///wCDIRQgAiwAFSACLAAWIAJBF2oiASwAABAVQv///wCDIRUgARAYQgWIQv///wCDIRYgAiwAGiACLAAbIAJBHGoiASwAABAVQgKIQv///wCDIRIgARAYQgeIIREgAywAACADLAABIANBAmoiASwAABAVQv///wCDISEgARAYQgWIQv///wCDIR8gAywABSADLAAGIANBB2oiASwAABAVQgKIQv///wCDISwgARAYQgeIQv///wCDIS0gA0EKahAYQgSIQv///wCDIS4gAywADSADLAAOIANBD2oiASwAABAVQgGIQv///wCDIS8gARAYQgaIQv///wCDITAgAywAEiADLAATIAMsABQQFUIDiEL///8AgyExIAMsABUgAywAFiADQRdqIgEsAAAQFUL///8AgyEnIAEQGEIFiEL///8AgyEoIBogDX4gGSAIfnwgGyAMfnwgHiAGfnwgEyAHfnwgFyALfnwgGCAKfnwgFSAPfnwgFCAQfnwgFiAJfnwgEiAFfnwgAywAGiADLAAbIANBHGoiASwAABAVQgKIQv///wCDfCIyQoCAQH0hIyAWIAh+IBUgDn58IBIgDX58IBEgDH58IBQgDn4gFSAIfnwgFiANfnwgEiAMfnwgESAGfnwiIEKAgEB9IhxCFYd8ISIgGiAFfiAZIAl+fCAffCAhIBkgBX58IjNCgIBAfSI0QhWIfCI1QoCAQH0hKyAVIA1+IBggDn58IBQgCH58IBYgDH58IBIgBn58IBEgB358IBggCH4gFyAOfnwgFSAMfnwgFCANfnwgFiAGfnwgEiAHfnwgESALfnwiH0KAgEB9Ih1CFYd8IjZCgIBAfSI3QhWHICAgHEKAgIB/g318ISEgHyARIA5+IiBCgIBAfSIcQhWHIh9Cg6FWfnwgHUKAgIB/g30gFyAIfiATIA5+fCAYIA1+fCAVIAZ+fCAUIAx+fCAWIAd+fCASIAt+fCARIAp+fCATIAh+IB4gDn58IBcgDX58IBggDH58IBUgB358IBQgBn58IBYgC358IBIgCn58IBEgEH58Ih1CgIBAfSIkQhWHfCI4QoCAQH0iOUIVh3whJiAdIB9C04xDfnwgESAIfiASIA5+fCASIAh+IBYgDn58IBEgDX58Ih1CgIBA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rCKd/70QuP5nA1//jekk/ikZC/8Vw6YAdvUtAEPVlf+fDBL/u6TjAaAZBQAMTsMBK8XhADCOKf7Emzz/38cSAZGInAD8dan+keLuAO8XawBttbz/5nAx/kmq7f/nt+P/UNwUAMJrfwF/zWUALjTFAdKrJP9YA1r/OJeNAGC7//8qTsgA/kZGAfR9qADMRIoBfNdGAGZCyP4RNOQAddyP/sv4ewA4Eq7/upek/zPo0AGg5Cv/+R0ZAUS+PwANAAAAAP8AAAAA9QAAAAAAAPsAAAAAAAD9AAAAAPMAAAAABwAAAAAAAwAAAADzAAAAAAUAQYuBAgtACwAAAAAACwAAAADzAAAAAAAA/QAAAAAA/wAAAAADAAAAAPUAAAAAAAAADwAAAAAA/wAAAAD/AAAAAAcAAAAABQBBzIICCwEBAEHwggILAQEAQZCDAguwASbolY/CsiewRcP0ifLvmPDV36wF08YzObE4AohtU/wFxxdqcD1N2E+6PAt2DRBnDyogU/osOczGTsf9d5KsA3rs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////3/t0/VcGmMSWNac96Le+d4UAEHPhAILBBAGbQcAQYCFAguhAmfmCWqFrme7cvNuPDr1T6V/Ug5RjGgFm6vZgx8ZzeBbmC+KQpFEN3HP+8C1pdu16VvCVjnxEfFZpII/ktVeHKuYqgfYAVuDEr6FMSTDfQxVdF2+cv6x3oCnBtybdPGbwcFpm+SGR77vxp3BD8yhDCRvLOktqoR0StypsFzaiPl2UlE+mG3GMajIJwOwx39Zv/ML4MZHkafVUWPKBmcpKRSFCrcnOCEbLvxtLE0TDThTVHMKZbsKanYuycKBhSxykqHov6JLZhqocItLwqNRbMcZ6JLRJAaZ1oU1DvRwoGoQFsGkGQhsNx5Md0gntbywNLMMHDlKqthOT8qcW/NvLmjugo90b2OleBR4yIQIAseM+v++kOtsUKT3o/m+8nhxxoAAQeCHAgvBBQjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABBwI4CCwEBAEHgjgIL4QLg63p8O0G4rhZW4/rxn8Rq2gmN65wysf2GYgUWX0m4AF+clbyjUIwksdCxVZyD71sERFzEWByOhtgiTt3QnxFX7P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/zet6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuIBMnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8R19n/////////////////////////////////////////2v/////////////////////////////////////////b/////////////////////////////////////////1NpZ0VkMjU1MTkgbm8gRWQyNTUxOSBjb2xsaXNpb25zAQBB0JECC/kKaG1hY3NoYTUxMjI1NgBjdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNQBTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX19maW5hbABvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAc2hhNTEyAGJsYWtlMmIAeDI1NTE5Ymxha2UyYgBwb2x5MTMwNQAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJABhcmdvbjJpAGN1cnZlMjU1MTkAeHNhbHNhMjBwb2x5MTMwNQBzaXBoYXNoMjQAZWQyNTUxOQB4c2Fsc2EyMABqcwAieyByZXR1cm4gTW9kdWxlLmdldFJhbmRvbVZhbHVlKCk7IH0iAHsgaWYgKE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHRyeSB7IHZhciB3aW5kb3dfID0gJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgPyB3aW5kb3cgOiBzZWxmOyB2YXIgY3J5cHRvXyA9IHR5cGVvZiB3aW5kb3dfLmNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3dfLmNyeXB0byA6IHdpbmRvd18ubXNDcnlwdG87IHZhciByYW5kb21WYWx1ZXNTdGFuZGFyZCA9IGZ1bmN0aW9uKCkgeyB2YXIgYnVmID0gbmV3IFVpbnQzMkFycmF5KDEpOyBjcnlwdG9fLmdldFJhbmRvbVZhbHVlcyhidWYpOyByZXR1cm4gYnVmWzBdID4+PiAwOyB9OyByYW5kb21WYWx1ZXNTdGFuZGFyZCgpOyBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPSByYW5kb21WYWx1ZXNTdGFuZGFyZDsgfSBjYXRjaCAoZSkgeyB0cnkgeyB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7IHZhciByYW5kb21WYWx1ZU5vZGVKUyA9IGZ1bmN0aW9uKCkgeyB2YXIgYnVmID0gY3J5cHRvWydyYW5kb21CeXRlcyddKDQpOyByZXR1cm4gKGJ1ZlswXSA8PCAyNCB8IGJ1ZlsxXSA8PCAxNiB8IGJ1ZlsyXSA8PCA4IHwgYnVmWzNdKSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVOb2RlSlMoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVOb2RlSlM7IH0gY2F0Y2ggKGUpIHsgdGhyb3cgJ05vIHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3VuZCc7IH0gfSB9IH0ATGlic29kaXVtRFJHYnVmX2xlbiA8PSBTSVpFX01BWAByYW5kb21ieXRlcy9yYW5kb21ieXRlcy5jAHJhbmRvbWJ5dGVzAGI2NF9wb3MgPD0gYjY0X2xlbgBzb2RpdW0vY29kZWNzLmMAc29kaXVtX2JpbjJiYXNlNjQAMS4wLjE2AC4vMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoAJDck";var asmjsCodeFile="";if(!isDataURI(wasmTextFile)){wasmTextFile=locateFile(wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=locateFile(asmjsCodeFile)}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":asm2wasmImports,"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength<oldBuffer.byteLength){err("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here")}var oldView=new Int8Array(oldBuffer);var newView=new Int8Array(newBuffer);newView.set(oldView);updateGlobalBuffer(newBuffer);updateGlobalBufferViews()}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}var binary=tryParseAsDataURI(wasmBinaryFile);if(binary){return binary}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then((function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()})).catch((function(){return getBinary()}))}return new Promise((function(resolve,reject){resolve(getBinary())}))}function doNativeWasm(global,env,providedBuffer){if(typeof WebAssembly!=="object"){err("no native wasm support detected");return false}if(!(Module["wasmMemory"]instanceof WebAssembly.Memory)){err("no native wasm Memory in use");return false}env["memory"]=Module["wasmMemory"];info["global"]={"NaN":NaN,"Infinity":Infinity};info["global.Math"]=Math;info["env"]=env;function receiveInstance(instance,module){exports=instance.exports;if(exports.memory)mergeMemory(exports.memory);Module["asm"]=exports;Module["usingWasm"]=true;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then((function(binary){return WebAssembly.instantiate(binary,info)})).then(receiver,(function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)}))}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,(function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)}))}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asmPreload"]=Module["asm"];var asmjsReallocBuffer=Module["reallocBuffer"];var wasmReallocBuffer=(function(size){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;size=alignUp(size,PAGE_MULTIPLE);var old=Module["buffer"];var oldSize=old.byteLength;if(Module["usingWasm"]){try{var result=Module["wasmMemory"].grow((size-oldSize)/wasmPageSize);if(result!==(-1|0)){return Module["buffer"]=Module["wasmMemory"].buffer}else{return null}}catch(e){return null}}});Module["reallocBuffer"]=(function(size){if(finalMethod==="asmjs"){return asmjsReallocBuffer(size)}else{return wasmReallocBuffer(size)}});var finalMethod="";Module["asm"]=(function(global,env,providedBuffer){if(!env["table"]){var TABLE_SIZE=Module["wasmTableSize"];if(TABLE_SIZE===undefined)TABLE_SIZE=1024;var MAX_TABLE_SIZE=Module["wasmMaxTableSize"];if(typeof WebAssembly==="object"&&typeof WebAssembly.Table==="function"){if(MAX_TABLE_SIZE!==undefined){env["table"]=new WebAssembly.Table({"initial":TABLE_SIZE,"maximum":MAX_TABLE_SIZE,"element":"anyfunc"})}else{env["table"]=new WebAssembly.Table({"initial":TABLE_SIZE,element:"anyfunc"})}}else{env["table"]=new Array(TABLE_SIZE)}Module["wasmTable"]=env["table"]}if(!env["__memory_base"]){env["__memory_base"]=Module["STATIC_BASE"]}if(!env["__table_base"]){env["__table_base"]=0}var exports;exports=doNativeWasm(global,env,providedBuffer);assert(exports,"no binaryen method succeeded.");return exports})}integrateWasmJS();var ASM_CONSTS=[(function(){return Module.getRandomValue()}),(function(){if(Module.getRandomValue===undefined){try{var window_="object"===typeof window?window:self;var crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto;var randomValuesStandard=(function(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0});randomValuesStandard();Module.getRandomValue=randomValuesStandard}catch(e){try{var crypto=require("crypto");var randomValueNodeJS=(function(){var buf=crypto["randomBytes"](4);return(buf[0]<<24|buf[1]<<16|buf[2]<<8|buf[3])>>>0});randomValueNodeJS();Module.getRandomValue=randomValueNodeJS}catch(e){throw"No secure random number generator found"}}}})];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+37024;__ATINIT__.push();var STATIC_BUMP=37024;Module["STATIC_BASE"]=STATIC_BASE;Module["STATIC_BUMP"]=STATIC_BUMP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"])}function _abort(){Module["abort"]()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:var maxHeapSize=2*1024*1024*1024-65536;return maxHeapSize/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output});function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==="boolean"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,"base64")}catch(_){buf=new Buffer(s,"base64")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}Module["wasmTableSize"]=0;Module["wasmMaxTableSize"]=0;Module.asmGlobalArg={};Module.asmLibraryArg={"k":enlargeMemory,"j":getTotalMemory,"i":abortOnCannotGrowMemory,"e":___assert_fail,"f":___setErrNo,"c":_abort,"d":_emscripten_asm_const_i,"h":_emscripten_memcpy_big,"g":_sysconf,"a":DYNAMICTOP_PTR,"b":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["l"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_abytes=Module["_crypto_aead_chacha20poly1305_abytes"]=(function(){return Module["asm"]["m"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_decrypt=Module["_crypto_aead_chacha20poly1305_decrypt"]=(function(){return Module["asm"]["n"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_decrypt_detached=Module["_crypto_aead_chacha20poly1305_decrypt_detached"]=(function(){return Module["asm"]["o"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_encrypt=Module["_crypto_aead_chacha20poly1305_encrypt"]=(function(){return Module["asm"]["p"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_encrypt_detached=Module["_crypto_aead_chacha20poly1305_encrypt_detached"]=(function(){return Module["asm"]["q"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_abytes=Module["_crypto_aead_chacha20poly1305_ietf_abytes"]=(function(){return Module["asm"]["r"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_decrypt=Module["_crypto_aead_chacha20poly1305_ietf_decrypt"]=(function(){return Module["asm"]["s"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_decrypt_detached=Module["_crypto_aead_chacha20poly1305_ietf_decrypt_detached"]=(function(){return Module["asm"]["t"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_encrypt=Module["_crypto_aead_chacha20poly1305_ietf_encrypt"]=(function(){return Module["asm"]["u"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_encrypt_detached=Module["_crypto_aead_chacha20poly1305_ietf_encrypt_detached"]=(function(){return Module["asm"]["v"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_keybytes=Module["_crypto_aead_chacha20poly1305_ietf_keybytes"]=(function(){return Module["asm"]["w"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_keygen=Module["_crypto_aead_chacha20poly1305_ietf_keygen"]=(function(){return Module["asm"]["x"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_npubbytes=Module["_crypto_aead_chacha20poly1305_ietf_npubbytes"]=(function(){return Module["asm"]["y"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_ietf_nsecbytes=Module["_crypto_aead_chacha20poly1305_ietf_nsecbytes"]=(function(){return Module["asm"]["z"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_keybytes=Module["_crypto_aead_chacha20poly1305_keybytes"]=(function(){return Module["asm"]["A"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_keygen=Module["_crypto_aead_chacha20poly1305_keygen"]=(function(){return Module["asm"]["B"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_npubbytes=Module["_crypto_aead_chacha20poly1305_npubbytes"]=(function(){return Module["asm"]["C"].apply(null,arguments)});var _crypto_aead_chacha20poly1305_nsecbytes=Module["_crypto_aead_chacha20poly1305_nsecbytes"]=(function(){return Module["asm"]["D"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_abytes=Module["_crypto_aead_xchacha20poly1305_ietf_abytes"]=(function(){return Module["asm"]["E"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_decrypt=Module["_crypto_aead_xchacha20poly1305_ietf_decrypt"]=(function(){return Module["asm"]["F"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_decrypt_detached=Module["_crypto_aead_xchacha20poly1305_ietf_decrypt_detached"]=(function(){return Module["asm"]["G"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_encrypt=Module["_crypto_aead_xchacha20poly1305_ietf_encrypt"]=(function(){return Module["asm"]["H"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_encrypt_detached=Module["_crypto_aead_xchacha20poly1305_ietf_encrypt_detached"]=(function(){return Module["asm"]["I"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_keybytes=Module["_crypto_aead_xchacha20poly1305_ietf_keybytes"]=(function(){return Module["asm"]["J"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_keygen=Module["_crypto_aead_xchacha20poly1305_ietf_keygen"]=(function(){return Module["asm"]["K"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_npubbytes=Module["_crypto_aead_xchacha20poly1305_ietf_npubbytes"]=(function(){return Module["asm"]["L"].apply(null,arguments)});var _crypto_aead_xchacha20poly1305_ietf_nsecbytes=Module["_crypto_aead_xchacha20poly1305_ietf_nsecbytes"]=(function(){return Module["asm"]["M"].apply(null,arguments)});var _crypto_auth=Module["_crypto_auth"]=(function(){return Module["asm"]["N"].apply(null,arguments)});var _crypto_auth_bytes=Module["_crypto_auth_bytes"]=(function(){return Module["asm"]["O"].apply(null,arguments)});var _crypto_auth_hmacsha256=Module["_crypto_auth_hmacsha256"]=(function(){return Module["asm"]["P"].apply(null,arguments)});var _crypto_auth_hmacsha256_bytes=Module["_crypto_auth_hmacsha256_bytes"]=(function(){return Module["asm"]["Q"].apply(null,arguments)});var _crypto_auth_hmacsha256_final=Module["_crypto_auth_hmacsha256_final"]=(function(){return Module["asm"]["R"].apply(null,arguments)});var _crypto_auth_hmacsha256_init=Module["_crypto_auth_hmacsha256_init"]=(function(){return Module["asm"]["S"].apply(null,arguments)});var _crypto_auth_hmacsha256_keybytes=Module["_crypto_auth_hmacsha256_keybytes"]=(function(){return Module["asm"]["T"].apply(null,arguments)});var _crypto_auth_hmacsha256_keygen=Module["_crypto_auth_hmacsha256_keygen"]=(function(){return Module["asm"]["U"].apply(null,arguments)});var _crypto_auth_hmacsha256_statebytes=Module["_crypto_auth_hmacsha256_statebytes"]=(function(){return Module["asm"]["V"].apply(null,arguments)});var _crypto_auth_hmacsha256_update=Module["_crypto_auth_hmacsha256_update"]=(function(){return Module["asm"]["W"].apply(null,arguments)});var _crypto_auth_hmacsha256_verify=Module["_crypto_auth_hmacsha256_verify"]=(function(){return Module["asm"]["X"].apply(null,arguments)});var _crypto_auth_hmacsha512=Module["_crypto_auth_hmacsha512"]=(function(){return Module["asm"]["Y"].apply(null,arguments)});var _crypto_auth_hmacsha512256=Module["_crypto_auth_hmacsha512256"]=(function(){return Module["asm"]["Z"].apply(null,arguments)});var _crypto_auth_hmacsha512256_bytes=Module["_crypto_auth_hmacsha512256_bytes"]=(function(){return Module["asm"]["_"].apply(null,arguments)});var _crypto_auth_hmacsha512256_final=Module["_crypto_auth_hmacsha512256_final"]=(function(){return Module["asm"]["$"].apply(null,arguments)});var _crypto_auth_hmacsha512256_init=Module["_crypto_auth_hmacsha512256_init"]=(function(){return Module["asm"]["aa"].apply(null,arguments)});var _crypto_auth_hmacsha512256_keybytes=Module["_crypto_auth_hmacsha512256_keybytes"]=(function(){return Module["asm"]["ba"].apply(null,arguments)});var _crypto_auth_hmacsha512256_keygen=Module["_crypto_auth_hmacsha512256_keygen"]=(function(){return Module["asm"]["ca"].apply(null,arguments)});var _crypto_auth_hmacsha512256_statebytes=Module["_crypto_auth_hmacsha512256_statebytes"]=(function(){return Module["asm"]["da"].apply(null,arguments)});var _crypto_auth_hmacsha512256_update=Module["_crypto_auth_hmacsha512256_update"]=(function(){return Module["asm"]["ea"].apply(null,arguments)});var _crypto_auth_hmacsha512256_verify=Module["_crypto_auth_hmacsha512256_verify"]=(function(){return Module["asm"]["fa"].apply(null,arguments)});var _crypto_auth_hmacsha512_bytes=Module["_crypto_auth_hmacsha512_bytes"]=(function(){return Module["asm"]["ga"].apply(null,arguments)});var _crypto_auth_hmacsha512_final=Module["_crypto_auth_hmacsha512_final"]=(function(){return Module["asm"]["ha"].apply(null,arguments)});var _crypto_auth_hmacsha512_init=Module["_crypto_auth_hmacsha512_init"]=(function(){return Module["asm"]["ia"].apply(null,arguments)});var _crypto_auth_hmacsha512_keybytes=Module["_crypto_auth_hmacsha512_keybytes"]=(function(){return Module["asm"]["ja"].apply(null,arguments)});var _crypto_auth_hmacsha512_keygen=Module["_crypto_auth_hmacsha512_keygen"]=(function(){return Module["asm"]["ka"].apply(null,arguments)});var _crypto_auth_hmacsha512_statebytes=Module["_crypto_auth_hmacsha512_statebytes"]=(function(){return Module["asm"]["la"].apply(null,arguments)});var _crypto_auth_hmacsha512_update=Module["_crypto_auth_hmacsha512_update"]=(function(){return Module["asm"]["ma"].apply(null,arguments)});var _crypto_auth_hmacsha512_verify=Module["_crypto_auth_hmacsha512_verify"]=(function(){return Module["asm"]["na"].apply(null,arguments)});var _crypto_auth_keybytes=Module["_crypto_auth_keybytes"]=(function(){return Module["asm"]["oa"].apply(null,arguments)});var _crypto_auth_keygen=Module["_crypto_auth_keygen"]=(function(){return Module["asm"]["pa"].apply(null,arguments)});var _crypto_auth_primitive=Module["_crypto_auth_primitive"]=(function(){return Module["asm"]["qa"].apply(null,arguments)});var _crypto_auth_verify=Module["_crypto_auth_verify"]=(function(){return Module["asm"]["ra"].apply(null,arguments)});var _crypto_box=Module["_crypto_box"]=(function(){return Module["asm"]["sa"].apply(null,arguments)});var _crypto_box_afternm=Module["_crypto_box_afternm"]=(function(){return Module["asm"]["ta"].apply(null,arguments)});var _crypto_box_beforenm=Module["_crypto_box_beforenm"]=(function(){return Module["asm"]["ua"].apply(null,arguments)});var _crypto_box_beforenmbytes=Module["_crypto_box_beforenmbytes"]=(function(){return Module["asm"]["va"].apply(null,arguments)});var _crypto_box_boxzerobytes=Module["_crypto_box_boxzerobytes"]=(function(){return Module["asm"]["wa"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_beforenm=Module["_crypto_box_curve25519xchacha20poly1305_beforenm"]=(function(){return Module["asm"]["xa"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_beforenmbytes=Module["_crypto_box_curve25519xchacha20poly1305_beforenmbytes"]=(function(){return Module["asm"]["ya"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_detached=Module["_crypto_box_curve25519xchacha20poly1305_detached"]=(function(){return Module["asm"]["za"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_detached_afternm=Module["_crypto_box_curve25519xchacha20poly1305_detached_afternm"]=(function(){return Module["asm"]["Aa"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_easy=Module["_crypto_box_curve25519xchacha20poly1305_easy"]=(function(){return Module["asm"]["Ba"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_easy_afternm=Module["_crypto_box_curve25519xchacha20poly1305_easy_afternm"]=(function(){return Module["asm"]["Ca"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_keypair=Module["_crypto_box_curve25519xchacha20poly1305_keypair"]=(function(){return Module["asm"]["Da"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_macbytes=Module["_crypto_box_curve25519xchacha20poly1305_macbytes"]=(function(){return Module["asm"]["Ea"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_noncebytes=Module["_crypto_box_curve25519xchacha20poly1305_noncebytes"]=(function(){return Module["asm"]["Fa"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_open_detached=Module["_crypto_box_curve25519xchacha20poly1305_open_detached"]=(function(){return Module["asm"]["Ga"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_open_detached_afternm=Module["_crypto_box_curve25519xchacha20poly1305_open_detached_afternm"]=(function(){return Module["asm"]["Ha"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_open_easy=Module["_crypto_box_curve25519xchacha20poly1305_open_easy"]=(function(){return Module["asm"]["Ia"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_open_easy_afternm=Module["_crypto_box_curve25519xchacha20poly1305_open_easy_afternm"]=(function(){return Module["asm"]["Ja"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_publickeybytes=Module["_crypto_box_curve25519xchacha20poly1305_publickeybytes"]=(function(){return Module["asm"]["Ka"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_seal=Module["_crypto_box_curve25519xchacha20poly1305_seal"]=(function(){return Module["asm"]["La"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_seal_open=Module["_crypto_box_curve25519xchacha20poly1305_seal_open"]=(function(){return Module["asm"]["Ma"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_sealbytes=Module["_crypto_box_curve25519xchacha20poly1305_sealbytes"]=(function(){return Module["asm"]["Na"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_secretkeybytes=Module["_crypto_box_curve25519xchacha20poly1305_secretkeybytes"]=(function(){return Module["asm"]["Oa"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_seed_keypair=Module["_crypto_box_curve25519xchacha20poly1305_seed_keypair"]=(function(){return Module["asm"]["Pa"].apply(null,arguments)});var _crypto_box_curve25519xchacha20poly1305_seedbytes=Module["_crypto_box_curve25519xchacha20poly1305_seedbytes"]=(function(){return Module["asm"]["Qa"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305=Module["_crypto_box_curve25519xsalsa20poly1305"]=(function(){return Module["asm"]["Ra"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_afternm=Module["_crypto_box_curve25519xsalsa20poly1305_afternm"]=(function(){return Module["asm"]["Sa"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_beforenm=Module["_crypto_box_curve25519xsalsa20poly1305_beforenm"]=(function(){return Module["asm"]["Ta"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_beforenmbytes=Module["_crypto_box_curve25519xsalsa20poly1305_beforenmbytes"]=(function(){return Module["asm"]["Ua"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_boxzerobytes=Module["_crypto_box_curve25519xsalsa20poly1305_boxzerobytes"]=(function(){return Module["asm"]["Va"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_keypair=Module["_crypto_box_curve25519xsalsa20poly1305_keypair"]=(function(){return Module["asm"]["Wa"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_macbytes=Module["_crypto_box_curve25519xsalsa20poly1305_macbytes"]=(function(){return Module["asm"]["Xa"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_noncebytes=Module["_crypto_box_curve25519xsalsa20poly1305_noncebytes"]=(function(){return Module["asm"]["Ya"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_open=Module["_crypto_box_curve25519xsalsa20poly1305_open"]=(function(){return Module["asm"]["Za"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_open_afternm=Module["_crypto_box_curve25519xsalsa20poly1305_open_afternm"]=(function(){return Module["asm"]["_a"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_publickeybytes=Module["_crypto_box_curve25519xsalsa20poly1305_publickeybytes"]=(function(){return Module["asm"]["$a"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_secretkeybytes=Module["_crypto_box_curve25519xsalsa20poly1305_secretkeybytes"]=(function(){return Module["asm"]["ab"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_seed_keypair=Module["_crypto_box_curve25519xsalsa20poly1305_seed_keypair"]=(function(){return Module["asm"]["bb"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_seedbytes=Module["_crypto_box_curve25519xsalsa20poly1305_seedbytes"]=(function(){return Module["asm"]["cb"].apply(null,arguments)});var _crypto_box_curve25519xsalsa20poly1305_zerobytes=Module["_crypto_box_curve25519xsalsa20poly1305_zerobytes"]=(function(){return Module["asm"]["db"].apply(null,arguments)});var _crypto_box_detached=Module["_crypto_box_detached"]=(function(){return Module["asm"]["eb"].apply(null,arguments)});var _crypto_box_detached_afternm=Module["_crypto_box_detached_afternm"]=(function(){return Module["asm"]["fb"].apply(null,arguments)});var _crypto_box_easy=Module["_crypto_box_easy"]=(function(){return Module["asm"]["gb"].apply(null,arguments)});var _crypto_box_easy_afternm=Module["_crypto_box_easy_afternm"]=(function(){return Module["asm"]["hb"].apply(null,arguments)});var _crypto_box_keypair=Module["_crypto_box_keypair"]=(function(){return Module["asm"]["ib"].apply(null,arguments)});var _crypto_box_macbytes=Module["_crypto_box_macbytes"]=(function(){return Module["asm"]["jb"].apply(null,arguments)});var _crypto_box_noncebytes=Module["_crypto_box_noncebytes"]=(function(){return Module["asm"]["kb"].apply(null,arguments)});var _crypto_box_open=Module["_crypto_box_open"]=(function(){return Module["asm"]["lb"].apply(null,arguments)});var _crypto_box_open_afternm=Module["_crypto_box_open_afternm"]=(function(){return Module["asm"]["mb"].apply(null,arguments)});var _crypto_box_open_detached=Module["_crypto_box_open_detached"]=(function(){return Module["asm"]["nb"].apply(null,arguments)});var _crypto_box_open_detached_afternm=Module["_crypto_box_open_detached_afternm"]=(function(){return Module["asm"]["ob"].apply(null,arguments)});var _crypto_box_open_easy=Module["_crypto_box_open_easy"]=(function(){return Module["asm"]["pb"].apply(null,arguments)});var _crypto_box_open_easy_afternm=Module["_crypto_box_open_easy_afternm"]=(function(){return Module["asm"]["qb"].apply(null,arguments)});var _crypto_box_primitive=Module["_crypto_box_primitive"]=(function(){return Module["asm"]["rb"].apply(null,arguments)});var _crypto_box_publickeybytes=Module["_crypto_box_publickeybytes"]=(function(){return Module["asm"]["sb"].apply(null,arguments)});var _crypto_box_seal=Module["_crypto_box_seal"]=(function(){return Module["asm"]["tb"].apply(null,arguments)});var _crypto_box_seal_open=Module["_crypto_box_seal_open"]=(function(){return Module["asm"]["ub"].apply(null,arguments)});var _crypto_box_sealbytes=Module["_crypto_box_sealbytes"]=(function(){return Module["asm"]["vb"].apply(null,arguments)});var _crypto_box_secretkeybytes=Module["_crypto_box_secretkeybytes"]=(function(){return Module["asm"]["wb"].apply(null,arguments)});var _crypto_box_seed_keypair=Module["_crypto_box_seed_keypair"]=(function(){return Module["asm"]["xb"].apply(null,arguments)});var _crypto_box_seedbytes=Module["_crypto_box_seedbytes"]=(function(){return Module["asm"]["yb"].apply(null,arguments)});var _crypto_box_zerobytes=Module["_crypto_box_zerobytes"]=(function(){return Module["asm"]["zb"].apply(null,arguments)});var _crypto_core_ed25519_add=Module["_crypto_core_ed25519_add"]=(function(){return Module["asm"]["Ab"].apply(null,arguments)});var _crypto_core_ed25519_bytes=Module["_crypto_core_ed25519_bytes"]=(function(){return Module["asm"]["Bb"].apply(null,arguments)});var _crypto_core_ed25519_from_uniform=Module["_crypto_core_ed25519_from_uniform"]=(function(){return Module["asm"]["Cb"].apply(null,arguments)});var _crypto_core_ed25519_is_valid_point=Module["_crypto_core_ed25519_is_valid_point"]=(function(){return Module["asm"]["Db"].apply(null,arguments)});var _crypto_core_ed25519_sub=Module["_crypto_core_ed25519_sub"]=(function(){return Module["asm"]["Eb"].apply(null,arguments)});var _crypto_core_ed25519_uniformbytes=Module["_crypto_core_ed25519_uniformbytes"]=(function(){return Module["asm"]["Fb"].apply(null,arguments)});var _crypto_core_hchacha20=Module["_crypto_core_hchacha20"]=(function(){return Module["asm"]["Gb"].apply(null,arguments)});var _crypto_core_hchacha20_constbytes=Module["_crypto_core_hchacha20_constbytes"]=(function(){return Module["asm"]["Hb"].apply(null,arguments)});var _crypto_core_hchacha20_inputbytes=Module["_crypto_core_hchacha20_inputbytes"]=(function(){return Module["asm"]["Ib"].apply(null,arguments)});var _crypto_core_hchacha20_keybytes=Module["_crypto_core_hchacha20_keybytes"]=(function(){return Module["asm"]["Jb"].apply(null,arguments)});var _crypto_core_hchacha20_outputbytes=Module["_crypto_core_hchacha20_outputbytes"]=(function(){return Module["asm"]["Kb"].apply(null,arguments)});var _crypto_core_hsalsa20=Module["_crypto_core_hsalsa20"]=(function(){return Module["asm"]["Lb"].apply(null,arguments)});var _crypto_core_hsalsa20_constbytes=Module["_crypto_core_hsalsa20_constbytes"]=(function(){return Module["asm"]["Mb"].apply(null,arguments)});var _crypto_core_hsalsa20_inputbytes=Module["_crypto_core_hsalsa20_inputbytes"]=(function(){return Module["asm"]["Nb"].apply(null,arguments)});var _crypto_core_hsalsa20_keybytes=Module["_crypto_core_hsalsa20_keybytes"]=(function(){return Module["asm"]["Ob"].apply(null,arguments)});var _crypto_core_hsalsa20_outputbytes=Module["_crypto_core_hsalsa20_outputbytes"]=(function(){return Module["asm"]["Pb"].apply(null,arguments)});var _crypto_core_salsa20=Module["_crypto_core_salsa20"]=(function(){return Module["asm"]["Qb"].apply(null,arguments)});var _crypto_core_salsa2012=Module["_crypto_core_salsa2012"]=(function(){return Module["asm"]["Rb"].apply(null,arguments)});var _crypto_core_salsa2012_constbytes=Module["_crypto_core_salsa2012_constbytes"]=(function(){return Module["asm"]["Sb"].apply(null,arguments)});var _crypto_core_salsa2012_inputbytes=Module["_crypto_core_salsa2012_inputbytes"]=(function(){return Module["asm"]["Tb"].apply(null,arguments)});var _crypto_core_salsa2012_keybytes=Module["_crypto_core_salsa2012_keybytes"]=(function(){return Module["asm"]["Ub"].apply(null,arguments)});var _crypto_core_salsa2012_outputbytes=Module["_crypto_core_salsa2012_outputbytes"]=(function(){return Module["asm"]["Vb"].apply(null,arguments)});var _crypto_core_salsa208=Module["_crypto_core_salsa208"]=(function(){return Module["asm"]["Wb"].apply(null,arguments)});var _crypto_core_salsa208_constbytes=Module["_crypto_core_salsa208_constbytes"]=(function(){return Module["asm"]["Xb"].apply(null,arguments)});var _crypto_core_salsa208_inputbytes=Module["_crypto_core_salsa208_inputbytes"]=(function(){return Module["asm"]["Yb"].apply(null,arguments)});var _crypto_core_salsa208_keybytes=Module["_crypto_core_salsa208_keybytes"]=(function(){return Module["asm"]["Zb"].apply(null,arguments)});var _crypto_core_salsa208_outputbytes=Module["_crypto_core_salsa208_outputbytes"]=(function(){return Module["asm"]["_b"].apply(null,arguments)});var _crypto_core_salsa20_constbytes=Module["_crypto_core_salsa20_constbytes"]=(function(){return Module["asm"]["$b"].apply(null,arguments)});var _crypto_core_salsa20_inputbytes=Module["_crypto_core_salsa20_inputbytes"]=(function(){return Module["asm"]["ac"].apply(null,arguments)});var _crypto_core_salsa20_keybytes=Module["_crypto_core_salsa20_keybytes"]=(function(){return Module["asm"]["bc"].apply(null,arguments)});var _crypto_core_salsa20_outputbytes=Module["_crypto_core_salsa20_outputbytes"]=(function(){return Module["asm"]["cc"].apply(null,arguments)});var _crypto_generichash=Module["_crypto_generichash"]=(function(){return Module["asm"]["dc"].apply(null,arguments)});var _crypto_generichash_blake2b=Module["_crypto_generichash_blake2b"]=(function(){return Module["asm"]["ec"].apply(null,arguments)});var _crypto_generichash_blake2b_bytes=Module["_crypto_generichash_blake2b_bytes"]=(function(){return Module["asm"]["fc"].apply(null,arguments)});var _crypto_generichash_blake2b_bytes_max=Module["_crypto_generichash_blake2b_bytes_max"]=(function(){return Module["asm"]["gc"].apply(null,arguments)});var _crypto_generichash_blake2b_bytes_min=Module["_crypto_generichash_blake2b_bytes_min"]=(function(){return Module["asm"]["hc"].apply(null,arguments)});var _crypto_generichash_blake2b_final=Module["_crypto_generichash_blake2b_final"]=(function(){return Module["asm"]["ic"].apply(null,arguments)});var _crypto_generichash_blake2b_init=Module["_crypto_generichash_blake2b_init"]=(function(){return Module["asm"]["jc"].apply(null,arguments)});var _crypto_generichash_blake2b_init_salt_personal=Module["_crypto_generichash_blake2b_init_salt_personal"]=(function(){return Module["asm"]["kc"].apply(null,arguments)});var _crypto_generichash_blake2b_keybytes=Module["_crypto_generichash_blake2b_keybytes"]=(function(){return Module["asm"]["lc"].apply(null,arguments)});var _crypto_generichash_blake2b_keybytes_max=Module["_crypto_generichash_blake2b_keybytes_max"]=(function(){return Module["asm"]["mc"].apply(null,arguments)});var _crypto_generichash_blake2b_keybytes_min=Module["_crypto_generichash_blake2b_keybytes_min"]=(function(){return Module["asm"]["nc"].apply(null,arguments)});var _crypto_generichash_blake2b_keygen=Module["_crypto_generichash_blake2b_keygen"]=(function(){return Module["asm"]["oc"].apply(null,arguments)});var _crypto_generichash_blake2b_personalbytes=Module["_crypto_generichash_blake2b_personalbytes"]=(function(){return Module["asm"]["pc"].apply(null,arguments)});var _crypto_generichash_blake2b_salt_personal=Module["_crypto_generichash_blake2b_salt_personal"]=(function(){return Module["asm"]["qc"].apply(null,arguments)});var _crypto_generichash_blake2b_saltbytes=Module["_crypto_generichash_blake2b_saltbytes"]=(function(){return Module["asm"]["rc"].apply(null,arguments)});var _crypto_generichash_blake2b_statebytes=Module["_crypto_generichash_blake2b_statebytes"]=(function(){return Module["asm"]["sc"].apply(null,arguments)});var _crypto_generichash_blake2b_update=Module["_crypto_generichash_blake2b_update"]=(function(){return Module["asm"]["tc"].apply(null,arguments)});var _crypto_generichash_bytes=Module["_crypto_generichash_bytes"]=(function(){return Module["asm"]["uc"].apply(null,arguments)});var _crypto_generichash_bytes_max=Module["_crypto_generichash_bytes_max"]=(function(){return Module["asm"]["vc"].apply(null,arguments)});var _crypto_generichash_bytes_min=Module["_crypto_generichash_bytes_min"]=(function(){return Module["asm"]["wc"].apply(null,arguments)});var _crypto_generichash_final=Module["_crypto_generichash_final"]=(function(){return Module["asm"]["xc"].apply(null,arguments)});var _crypto_generichash_init=Module["_crypto_generichash_init"]=(function(){return Module["asm"]["yc"].apply(null,arguments)});var _crypto_generichash_keybytes=Module["_crypto_generichash_keybytes"]=(function(){return Module["asm"]["zc"].apply(null,arguments)});var _crypto_generichash_keybytes_max=Module["_crypto_generichash_keybytes_max"]=(function(){return Module["asm"]["Ac"].apply(null,arguments)});var _crypto_generichash_keybytes_min=Module["_crypto_generichash_keybytes_min"]=(function(){return Module["asm"]["Bc"].apply(null,arguments)});var _crypto_generichash_keygen=Module["_crypto_generichash_keygen"]=(function(){return Module["asm"]["Cc"].apply(null,arguments)});var _crypto_generichash_primitive=Module["_crypto_generichash_primitive"]=(function(){return Module["asm"]["Dc"].apply(null,arguments)});var _crypto_generichash_statebytes=Module["_crypto_generichash_statebytes"]=(function(){return Module["asm"]["Ec"].apply(null,arguments)});var _crypto_generichash_update=Module["_crypto_generichash_update"]=(function(){return Module["asm"]["Fc"].apply(null,arguments)});var _crypto_hash=Module["_crypto_hash"]=(function(){return Module["asm"]["Gc"].apply(null,arguments)});var _crypto_hash_bytes=Module["_crypto_hash_bytes"]=(function(){return Module["asm"]["Hc"].apply(null,arguments)});var _crypto_hash_primitive=Module["_crypto_hash_primitive"]=(function(){return Module["asm"]["Ic"].apply(null,arguments)});var _crypto_hash_sha256=Module["_crypto_hash_sha256"]=(function(){return Module["asm"]["Jc"].apply(null,arguments)});var _crypto_hash_sha256_bytes=Module["_crypto_hash_sha256_bytes"]=(function(){return Module["asm"]["Kc"].apply(null,arguments)});var _crypto_hash_sha256_final=Module["_crypto_hash_sha256_final"]=(function(){return Module["asm"]["Lc"].apply(null,arguments)});var _crypto_hash_sha256_init=Module["_crypto_hash_sha256_init"]=(function(){return Module["asm"]["Mc"].apply(null,arguments)});var _crypto_hash_sha256_statebytes=Module["_crypto_hash_sha256_statebytes"]=(function(){return Module["asm"]["Nc"].apply(null,arguments)});var _crypto_hash_sha256_update=Module["_crypto_hash_sha256_update"]=(function(){return Module["asm"]["Oc"].apply(null,arguments)});var _crypto_hash_sha512=Module["_crypto_hash_sha512"]=(function(){return Module["asm"]["Pc"].apply(null,arguments)});var _crypto_hash_sha512_bytes=Module["_crypto_hash_sha512_bytes"]=(function(){return Module["asm"]["Qc"].apply(null,arguments)});var _crypto_hash_sha512_final=Module["_crypto_hash_sha512_final"]=(function(){return Module["asm"]["Rc"].apply(null,arguments)});var _crypto_hash_sha512_init=Module["_crypto_hash_sha512_init"]=(function(){return Module["asm"]["Sc"].apply(null,arguments)});var _crypto_hash_sha512_statebytes=Module["_crypto_hash_sha512_statebytes"]=(function(){return Module["asm"]["Tc"].apply(null,arguments)});var _crypto_hash_sha512_update=Module["_crypto_hash_sha512_update"]=(function(){return Module["asm"]["Uc"].apply(null,arguments)});var _crypto_kdf_blake2b_bytes_max=Module["_crypto_kdf_blake2b_bytes_max"]=(function(){return Module["asm"]["Vc"].apply(null,arguments)});var _crypto_kdf_blake2b_bytes_min=Module["_crypto_kdf_blake2b_bytes_min"]=(function(){return Module["asm"]["Wc"].apply(null,arguments)});var _crypto_kdf_blake2b_contextbytes=Module["_crypto_kdf_blake2b_contextbytes"]=(function(){return Module["asm"]["Xc"].apply(null,arguments)});var _crypto_kdf_blake2b_derive_from_key=Module["_crypto_kdf_blake2b_derive_from_key"]=(function(){return Module["asm"]["Yc"].apply(null,arguments)});var _crypto_kdf_blake2b_keybytes=Module["_crypto_kdf_blake2b_keybytes"]=(function(){return Module["asm"]["Zc"].apply(null,arguments)});var _crypto_kdf_bytes_max=Module["_crypto_kdf_bytes_max"]=(function(){return Module["asm"]["_c"].apply(null,arguments)});var _crypto_kdf_bytes_min=Module["_crypto_kdf_bytes_min"]=(function(){return Module["asm"]["$c"].apply(null,arguments)});var _crypto_kdf_contextbytes=Module["_crypto_kdf_contextbytes"]=(function(){return Module["asm"]["ad"].apply(null,arguments)});var _crypto_kdf_derive_from_key=Module["_crypto_kdf_derive_from_key"]=(function(){return Module["asm"]["bd"].apply(null,arguments)});var _crypto_kdf_keybytes=Module["_crypto_kdf_keybytes"]=(function(){return Module["asm"]["cd"].apply(null,arguments)});var _crypto_kdf_keygen=Module["_crypto_kdf_keygen"]=(function(){return Module["asm"]["dd"].apply(null,arguments)});var _crypto_kdf_primitive=Module["_crypto_kdf_primitive"]=(function(){return Module["asm"]["ed"].apply(null,arguments)});var _crypto_kx_client_session_keys=Module["_crypto_kx_client_session_keys"]=(function(){return Module["asm"]["fd"].apply(null,arguments)});var _crypto_kx_keypair=Module["_crypto_kx_keypair"]=(function(){return Module["asm"]["gd"].apply(null,arguments)});var _crypto_kx_primitive=Module["_crypto_kx_primitive"]=(function(){return Module["asm"]["hd"].apply(null,arguments)});var _crypto_kx_publickeybytes=Module["_crypto_kx_publickeybytes"]=(function(){return Module["asm"]["id"].apply(null,arguments)});var _crypto_kx_secretkeybytes=Module["_crypto_kx_secretkeybytes"]=(function(){return Module["asm"]["jd"].apply(null,arguments)});var _crypto_kx_seed_keypair=Module["_crypto_kx_seed_keypair"]=(function(){return Module["asm"]["kd"].apply(null,arguments)});var _crypto_kx_seedbytes=Module["_crypto_kx_seedbytes"]=(function(){return Module["asm"]["ld"].apply(null,arguments)});var _crypto_kx_server_session_keys=Module["_crypto_kx_server_session_keys"]=(function(){return Module["asm"]["md"].apply(null,arguments)});var _crypto_kx_sessionkeybytes=Module["_crypto_kx_sessionkeybytes"]=(function(){return Module["asm"]["nd"].apply(null,arguments)});var _crypto_onetimeauth=Module["_crypto_onetimeauth"]=(function(){return Module["asm"]["od"].apply(null,arguments)});var _crypto_onetimeauth_bytes=Module["_crypto_onetimeauth_bytes"]=(function(){return Module["asm"]["pd"].apply(null,arguments)});var _crypto_onetimeauth_final=Module["_crypto_onetimeauth_final"]=(function(){return Module["asm"]["qd"].apply(null,arguments)});var _crypto_onetimeauth_init=Module["_crypto_onetimeauth_init"]=(function(){return Module["asm"]["rd"].apply(null,arguments)});var _crypto_onetimeauth_keybytes=Module["_crypto_onetimeauth_keybytes"]=(function(){return Module["asm"]["sd"].apply(null,arguments)});var _crypto_onetimeauth_keygen=Module["_crypto_onetimeauth_keygen"]=(function(){return Module["asm"]["td"].apply(null,arguments)});var _crypto_onetimeauth_poly1305=Module["_crypto_onetimeauth_poly1305"]=(function(){return Module["asm"]["ud"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_bytes=Module["_crypto_onetimeauth_poly1305_bytes"]=(function(){return Module["asm"]["vd"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_final=Module["_crypto_onetimeauth_poly1305_final"]=(function(){return Module["asm"]["wd"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_init=Module["_crypto_onetimeauth_poly1305_init"]=(function(){return Module["asm"]["xd"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_keybytes=Module["_crypto_onetimeauth_poly1305_keybytes"]=(function(){return Module["asm"]["yd"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_keygen=Module["_crypto_onetimeauth_poly1305_keygen"]=(function(){return Module["asm"]["zd"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_statebytes=Module["_crypto_onetimeauth_poly1305_statebytes"]=(function(){return Module["asm"]["Ad"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_update=Module["_crypto_onetimeauth_poly1305_update"]=(function(){return Module["asm"]["Bd"].apply(null,arguments)});var _crypto_onetimeauth_poly1305_verify=Module["_crypto_onetimeauth_poly1305_verify"]=(function(){return Module["asm"]["Cd"].apply(null,arguments)});var _crypto_onetimeauth_primitive=Module["_crypto_onetimeauth_primitive"]=(function(){return Module["asm"]["Dd"].apply(null,arguments)});var _crypto_onetimeauth_statebytes=Module["_crypto_onetimeauth_statebytes"]=(function(){return Module["asm"]["Ed"].apply(null,arguments)});var _crypto_onetimeauth_update=Module["_crypto_onetimeauth_update"]=(function(){return Module["asm"]["Fd"].apply(null,arguments)});var _crypto_onetimeauth_verify=Module["_crypto_onetimeauth_verify"]=(function(){return Module["asm"]["Gd"].apply(null,arguments)});var _crypto_pwhash=Module["_crypto_pwhash"]=(function(){return Module["asm"]["Hd"].apply(null,arguments)});var _crypto_pwhash_alg_argon2i13=Module["_crypto_pwhash_alg_argon2i13"]=(function(){return Module["asm"]["Id"].apply(null,arguments)});var _crypto_pwhash_alg_argon2id13=Module["_crypto_pwhash_alg_argon2id13"]=(function(){return Module["asm"]["Jd"].apply(null,arguments)});var _crypto_pwhash_alg_default=Module["_crypto_pwhash_alg_default"]=(function(){return Module["asm"]["Kd"].apply(null,arguments)});var _crypto_pwhash_argon2i=Module["_crypto_pwhash_argon2i"]=(function(){return Module["asm"]["Ld"].apply(null,arguments)});var _crypto_pwhash_argon2i_alg_argon2i13=Module["_crypto_pwhash_argon2i_alg_argon2i13"]=(function(){return Module["asm"]["Md"].apply(null,arguments)});var _crypto_pwhash_argon2i_bytes_max=Module["_crypto_pwhash_argon2i_bytes_max"]=(function(){return Module["asm"]["Nd"].apply(null,arguments)});var _crypto_pwhash_argon2i_bytes_min=Module["_crypto_pwhash_argon2i_bytes_min"]=(function(){return Module["asm"]["Od"].apply(null,arguments)});var _crypto_pwhash_argon2i_memlimit_interactive=Module["_crypto_pwhash_argon2i_memlimit_interactive"]=(function(){return Module["asm"]["Pd"].apply(null,arguments)});var _crypto_pwhash_argon2i_memlimit_max=Module["_crypto_pwhash_argon2i_memlimit_max"]=(function(){return Module["asm"]["Qd"].apply(null,arguments)});var _crypto_pwhash_argon2i_memlimit_min=Module["_crypto_pwhash_argon2i_memlimit_min"]=(function(){return Module["asm"]["Rd"].apply(null,arguments)});var _crypto_pwhash_argon2i_memlimit_moderate=Module["_crypto_pwhash_argon2i_memlimit_moderate"]=(function(){return Module["asm"]["Sd"].apply(null,arguments)});var _crypto_pwhash_argon2i_memlimit_sensitive=Module["_crypto_pwhash_argon2i_memlimit_sensitive"]=(function(){return Module["asm"]["Td"].apply(null,arguments)});var _crypto_pwhash_argon2i_opslimit_interactive=Module["_crypto_pwhash_argon2i_opslimit_interactive"]=(function(){return Module["asm"]["Ud"].apply(null,arguments)});var _crypto_pwhash_argon2i_opslimit_max=Module["_crypto_pwhash_argon2i_opslimit_max"]=(function(){return Module["asm"]["Vd"].apply(null,arguments)});var _crypto_pwhash_argon2i_opslimit_min=Module["_crypto_pwhash_argon2i_opslimit_min"]=(function(){return Module["asm"]["Wd"].apply(null,arguments)});var _crypto_pwhash_argon2i_opslimit_moderate=Module["_crypto_pwhash_argon2i_opslimit_moderate"]=(function(){return Module["asm"]["Xd"].apply(null,arguments)});var _crypto_pwhash_argon2i_opslimit_sensitive=Module["_crypto_pwhash_argon2i_opslimit_sensitive"]=(function(){return Module["asm"]["Yd"].apply(null,arguments)});var _crypto_pwhash_argon2i_passwd_max=Module["_crypto_pwhash_argon2i_passwd_max"]=(function(){return Module["asm"]["Zd"].apply(null,arguments)});var _crypto_pwhash_argon2i_passwd_min=Module["_crypto_pwhash_argon2i_passwd_min"]=(function(){return Module["asm"]["_d"].apply(null,arguments)});var _crypto_pwhash_argon2i_saltbytes=Module["_crypto_pwhash_argon2i_saltbytes"]=(function(){return Module["asm"]["$d"].apply(null,arguments)});var _crypto_pwhash_argon2i_str=Module["_crypto_pwhash_argon2i_str"]=(function(){return Module["asm"]["ae"].apply(null,arguments)});var _crypto_pwhash_argon2i_str_needs_rehash=Module["_crypto_pwhash_argon2i_str_needs_rehash"]=(function(){return Module["asm"]["be"].apply(null,arguments)});var _crypto_pwhash_argon2i_str_verify=Module["_crypto_pwhash_argon2i_str_verify"]=(function(){return Module["asm"]["ce"].apply(null,arguments)});var _crypto_pwhash_argon2i_strbytes=Module["_crypto_pwhash_argon2i_strbytes"]=(function(){return Module["asm"]["de"].apply(null,arguments)});var _crypto_pwhash_argon2i_strprefix=Module["_crypto_pwhash_argon2i_strprefix"]=(function(){return Module["asm"]["ee"].apply(null,arguments)});var _crypto_pwhash_argon2id=Module["_crypto_pwhash_argon2id"]=(function(){return Module["asm"]["fe"].apply(null,arguments)});var _crypto_pwhash_argon2id_alg_argon2id13=Module["_crypto_pwhash_argon2id_alg_argon2id13"]=(function(){return Module["asm"]["ge"].apply(null,arguments)});var _crypto_pwhash_argon2id_bytes_max=Module["_crypto_pwhash_argon2id_bytes_max"]=(function(){return Module["asm"]["he"].apply(null,arguments)});var _crypto_pwhash_argon2id_bytes_min=Module["_crypto_pwhash_argon2id_bytes_min"]=(function(){return Module["asm"]["ie"].apply(null,arguments)});var _crypto_pwhash_argon2id_memlimit_interactive=Module["_crypto_pwhash_argon2id_memlimit_interactive"]=(function(){return Module["asm"]["je"].apply(null,arguments)});var _crypto_pwhash_argon2id_memlimit_max=Module["_crypto_pwhash_argon2id_memlimit_max"]=(function(){return Module["asm"]["ke"].apply(null,arguments)});var _crypto_pwhash_argon2id_memlimit_min=Module["_crypto_pwhash_argon2id_memlimit_min"]=(function(){return Module["asm"]["le"].apply(null,arguments)});var _crypto_pwhash_argon2id_memlimit_moderate=Module["_crypto_pwhash_argon2id_memlimit_moderate"]=(function(){return Module["asm"]["me"].apply(null,arguments)});var _crypto_pwhash_argon2id_memlimit_sensitive=Module["_crypto_pwhash_argon2id_memlimit_sensitive"]=(function(){return Module["asm"]["ne"].apply(null,arguments)});var _crypto_pwhash_argon2id_opslimit_interactive=Module["_crypto_pwhash_argon2id_opslimit_interactive"]=(function(){return Module["asm"]["oe"].apply(null,arguments)});var _crypto_pwhash_argon2id_opslimit_max=Module["_crypto_pwhash_argon2id_opslimit_max"]=(function(){return Module["asm"]["pe"].apply(null,arguments)});var _crypto_pwhash_argon2id_opslimit_min=Module["_crypto_pwhash_argon2id_opslimit_min"]=(function(){return Module["asm"]["qe"].apply(null,arguments)});var _crypto_pwhash_argon2id_opslimit_moderate=Module["_crypto_pwhash_argon2id_opslimit_moderate"]=(function(){return Module["asm"]["re"].apply(null,arguments)});var _crypto_pwhash_argon2id_opslimit_sensitive=Module["_crypto_pwhash_argon2id_opslimit_sensitive"]=(function(){return Module["asm"]["se"].apply(null,arguments)});var _crypto_pwhash_argon2id_passwd_max=Module["_crypto_pwhash_argon2id_passwd_max"]=(function(){return Module["asm"]["te"].apply(null,arguments)});var _crypto_pwhash_argon2id_passwd_min=Module["_crypto_pwhash_argon2id_passwd_min"]=(function(){return Module["asm"]["ue"].apply(null,arguments)});var _crypto_pwhash_argon2id_saltbytes=Module["_crypto_pwhash_argon2id_saltbytes"]=(function(){return Module["asm"]["ve"].apply(null,arguments)});var _crypto_pwhash_argon2id_str=Module["_crypto_pwhash_argon2id_str"]=(function(){return Module["asm"]["we"].apply(null,arguments)});var _crypto_pwhash_argon2id_str_needs_rehash=Module["_crypto_pwhash_argon2id_str_needs_rehash"]=(function(){return Module["asm"]["xe"].apply(null,arguments)});var _crypto_pwhash_argon2id_str_verify=Module["_crypto_pwhash_argon2id_str_verify"]=(function(){return Module["asm"]["ye"].apply(null,arguments)});var _crypto_pwhash_argon2id_strbytes=Module["_crypto_pwhash_argon2id_strbytes"]=(function(){return Module["asm"]["ze"].apply(null,arguments)});var _crypto_pwhash_argon2id_strprefix=Module["_crypto_pwhash_argon2id_strprefix"]=(function(){return Module["asm"]["Ae"].apply(null,arguments)});var _crypto_pwhash_bytes_max=Module["_crypto_pwhash_bytes_max"]=(function(){return Module["asm"]["Be"].apply(null,arguments)});var _crypto_pwhash_bytes_min=Module["_crypto_pwhash_bytes_min"]=(function(){return Module["asm"]["Ce"].apply(null,arguments)});var _crypto_pwhash_memlimit_interactive=Module["_crypto_pwhash_memlimit_interactive"]=(function(){return Module["asm"]["De"].apply(null,arguments)});var _crypto_pwhash_memlimit_max=Module["_crypto_pwhash_memlimit_max"]=(function(){return Module["asm"]["Ee"].apply(null,arguments)});var _crypto_pwhash_memlimit_min=Module["_crypto_pwhash_memlimit_min"]=(function(){return Module["asm"]["Fe"].apply(null,arguments)});var _crypto_pwhash_memlimit_moderate=Module["_crypto_pwhash_memlimit_moderate"]=(function(){return Module["asm"]["Ge"].apply(null,arguments)});var _crypto_pwhash_memlimit_sensitive=Module["_crypto_pwhash_memlimit_sensitive"]=(function(){return Module["asm"]["He"].apply(null,arguments)});var _crypto_pwhash_opslimit_interactive=Module["_crypto_pwhash_opslimit_interactive"]=(function(){return Module["asm"]["Ie"].apply(null,arguments)});var _crypto_pwhash_opslimit_max=Module["_crypto_pwhash_opslimit_max"]=(function(){return Module["asm"]["Je"].apply(null,arguments)});var _crypto_pwhash_opslimit_min=Module["_crypto_pwhash_opslimit_min"]=(function(){return Module["asm"]["Ke"].apply(null,arguments)});var _crypto_pwhash_opslimit_moderate=Module["_crypto_pwhash_opslimit_moderate"]=(function(){return Module["asm"]["Le"].apply(null,arguments)});var _crypto_pwhash_opslimit_sensitive=Module["_crypto_pwhash_opslimit_sensitive"]=(function(){return Module["asm"]["Me"].apply(null,arguments)});var _crypto_pwhash_passwd_max=Module["_crypto_pwhash_passwd_max"]=(function(){return Module["asm"]["Ne"].apply(null,arguments)});var _crypto_pwhash_passwd_min=Module["_crypto_pwhash_passwd_min"]=(function(){return Module["asm"]["Oe"].apply(null,arguments)});var _crypto_pwhash_primitive=Module["_crypto_pwhash_primitive"]=(function(){return Module["asm"]["Pe"].apply(null,arguments)});var _crypto_pwhash_saltbytes=Module["_crypto_pwhash_saltbytes"]=(function(){return Module["asm"]["Qe"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256=Module["_crypto_pwhash_scryptsalsa208sha256"]=(function(){return Module["asm"]["Re"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_bytes_max=Module["_crypto_pwhash_scryptsalsa208sha256_bytes_max"]=(function(){return Module["asm"]["Se"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_bytes_min=Module["_crypto_pwhash_scryptsalsa208sha256_bytes_min"]=(function(){return Module["asm"]["Te"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_ll=Module["_crypto_pwhash_scryptsalsa208sha256_ll"]=(function(){return Module["asm"]["Ue"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_memlimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"]=(function(){return Module["asm"]["Ve"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_memlimit_max=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_max"]=(function(){return Module["asm"]["We"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_memlimit_min=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_min"]=(function(){return Module["asm"]["Xe"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"]=(function(){return Module["asm"]["Ye"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_opslimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"]=(function(){return Module["asm"]["Ze"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_opslimit_max=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_max"]=(function(){return Module["asm"]["_e"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_opslimit_min=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_min"]=(function(){return Module["asm"]["$e"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"]=(function(){return Module["asm"]["af"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_passwd_max=Module["_crypto_pwhash_scryptsalsa208sha256_passwd_max"]=(function(){return Module["asm"]["bf"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_passwd_min=Module["_crypto_pwhash_scryptsalsa208sha256_passwd_min"]=(function(){return Module["asm"]["cf"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_saltbytes=Module["_crypto_pwhash_scryptsalsa208sha256_saltbytes"]=(function(){return Module["asm"]["df"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_str=Module["_crypto_pwhash_scryptsalsa208sha256_str"]=(function(){return Module["asm"]["ef"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_str_needs_rehash=Module["_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash"]=(function(){return Module["asm"]["ff"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_str_verify=Module["_crypto_pwhash_scryptsalsa208sha256_str_verify"]=(function(){return Module["asm"]["gf"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_strbytes=Module["_crypto_pwhash_scryptsalsa208sha256_strbytes"]=(function(){return Module["asm"]["hf"].apply(null,arguments)});var _crypto_pwhash_scryptsalsa208sha256_strprefix=Module["_crypto_pwhash_scryptsalsa208sha256_strprefix"]=(function(){return Module["asm"]["jf"].apply(null,arguments)});var _crypto_pwhash_str=Module["_crypto_pwhash_str"]=(function(){return Module["asm"]["kf"].apply(null,arguments)});var _crypto_pwhash_str_alg=Module["_crypto_pwhash_str_alg"]=(function(){return Module["asm"]["lf"].apply(null,arguments)});var _crypto_pwhash_str_needs_rehash=Module["_crypto_pwhash_str_needs_rehash"]=(function(){return Module["asm"]["mf"].apply(null,arguments)});var _crypto_pwhash_str_verify=Module["_crypto_pwhash_str_verify"]=(function(){return Module["asm"]["nf"].apply(null,arguments)});var _crypto_pwhash_strbytes=Module["_crypto_pwhash_strbytes"]=(function(){return Module["asm"]["of"].apply(null,arguments)});var _crypto_pwhash_strprefix=Module["_crypto_pwhash_strprefix"]=(function(){return Module["asm"]["pf"].apply(null,arguments)});var _crypto_scalarmult=Module["_crypto_scalarmult"]=(function(){return Module["asm"]["qf"].apply(null,arguments)});var _crypto_scalarmult_base=Module["_crypto_scalarmult_base"]=(function(){return Module["asm"]["rf"].apply(null,arguments)});var _crypto_scalarmult_bytes=Module["_crypto_scalarmult_bytes"]=(function(){return Module["asm"]["sf"].apply(null,arguments)});var _crypto_scalarmult_curve25519=Module["_crypto_scalarmult_curve25519"]=(function(){return Module["asm"]["tf"].apply(null,arguments)});var _crypto_scalarmult_curve25519_base=Module["_crypto_scalarmult_curve25519_base"]=(function(){return Module["asm"]["uf"].apply(null,arguments)});var _crypto_scalarmult_curve25519_bytes=Module["_crypto_scalarmult_curve25519_bytes"]=(function(){return Module["asm"]["vf"].apply(null,arguments)});var _crypto_scalarmult_curve25519_scalarbytes=Module["_crypto_scalarmult_curve25519_scalarbytes"]=(function(){return Module["asm"]["wf"].apply(null,arguments)});var _crypto_scalarmult_ed25519=Module["_crypto_scalarmult_ed25519"]=(function(){return Module["asm"]["xf"].apply(null,arguments)});var _crypto_scalarmult_ed25519_base=Module["_crypto_scalarmult_ed25519_base"]=(function(){return Module["asm"]["yf"].apply(null,arguments)});var _crypto_scalarmult_ed25519_bytes=Module["_crypto_scalarmult_ed25519_bytes"]=(function(){return Module["asm"]["zf"].apply(null,arguments)});var _crypto_scalarmult_ed25519_scalarbytes=Module["_crypto_scalarmult_ed25519_scalarbytes"]=(function(){return Module["asm"]["Af"].apply(null,arguments)});var _crypto_scalarmult_primitive=Module["_crypto_scalarmult_primitive"]=(function(){return Module["asm"]["Bf"].apply(null,arguments)});var _crypto_scalarmult_scalarbytes=Module["_crypto_scalarmult_scalarbytes"]=(function(){return Module["asm"]["Cf"].apply(null,arguments)});var _crypto_secretbox=Module["_crypto_secretbox"]=(function(){return Module["asm"]["Df"].apply(null,arguments)});var _crypto_secretbox_boxzerobytes=Module["_crypto_secretbox_boxzerobytes"]=(function(){return Module["asm"]["Ef"].apply(null,arguments)});var _crypto_secretbox_detached=Module["_crypto_secretbox_detached"]=(function(){return Module["asm"]["Ff"].apply(null,arguments)});var _crypto_secretbox_easy=Module["_crypto_secretbox_easy"]=(function(){return Module["asm"]["Gf"].apply(null,arguments)});var _crypto_secretbox_keybytes=Module["_crypto_secretbox_keybytes"]=(function(){return Module["asm"]["Hf"].apply(null,arguments)});var _crypto_secretbox_keygen=Module["_crypto_secretbox_keygen"]=(function(){return Module["asm"]["If"].apply(null,arguments)});var _crypto_secretbox_macbytes=Module["_crypto_secretbox_macbytes"]=(function(){return Module["asm"]["Jf"].apply(null,arguments)});var _crypto_secretbox_noncebytes=Module["_crypto_secretbox_noncebytes"]=(function(){return Module["asm"]["Kf"].apply(null,arguments)});var _crypto_secretbox_open=Module["_crypto_secretbox_open"]=(function(){return Module["asm"]["Lf"].apply(null,arguments)});var _crypto_secretbox_open_detached=Module["_crypto_secretbox_open_detached"]=(function(){return Module["asm"]["Mf"].apply(null,arguments)});var _crypto_secretbox_open_easy=Module["_crypto_secretbox_open_easy"]=(function(){return Module["asm"]["Nf"].apply(null,arguments)});var _crypto_secretbox_primitive=Module["_crypto_secretbox_primitive"]=(function(){return Module["asm"]["Of"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_detached=Module["_crypto_secretbox_xchacha20poly1305_detached"]=(function(){return Module["asm"]["Pf"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_easy=Module["_crypto_secretbox_xchacha20poly1305_easy"]=(function(){return Module["asm"]["Qf"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_keybytes=Module["_crypto_secretbox_xchacha20poly1305_keybytes"]=(function(){return Module["asm"]["Rf"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_macbytes=Module["_crypto_secretbox_xchacha20poly1305_macbytes"]=(function(){return Module["asm"]["Sf"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_noncebytes=Module["_crypto_secretbox_xchacha20poly1305_noncebytes"]=(function(){return Module["asm"]["Tf"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_open_detached=Module["_crypto_secretbox_xchacha20poly1305_open_detached"]=(function(){return Module["asm"]["Uf"].apply(null,arguments)});var _crypto_secretbox_xchacha20poly1305_open_easy=Module["_crypto_secretbox_xchacha20poly1305_open_easy"]=(function(){return Module["asm"]["Vf"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305=Module["_crypto_secretbox_xsalsa20poly1305"]=(function(){return Module["asm"]["Wf"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_boxzerobytes=Module["_crypto_secretbox_xsalsa20poly1305_boxzerobytes"]=(function(){return Module["asm"]["Xf"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_keybytes=Module["_crypto_secretbox_xsalsa20poly1305_keybytes"]=(function(){return Module["asm"]["Yf"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_keygen=Module["_crypto_secretbox_xsalsa20poly1305_keygen"]=(function(){return Module["asm"]["Zf"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_macbytes=Module["_crypto_secretbox_xsalsa20poly1305_macbytes"]=(function(){return Module["asm"]["_f"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_noncebytes=Module["_crypto_secretbox_xsalsa20poly1305_noncebytes"]=(function(){return Module["asm"]["$f"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_open=Module["_crypto_secretbox_xsalsa20poly1305_open"]=(function(){return Module["asm"]["ag"].apply(null,arguments)});var _crypto_secretbox_xsalsa20poly1305_zerobytes=Module["_crypto_secretbox_xsalsa20poly1305_zerobytes"]=(function(){return Module["asm"]["bg"].apply(null,arguments)});var _crypto_secretbox_zerobytes=Module["_crypto_secretbox_zerobytes"]=(function(){return Module["asm"]["cg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_abytes=Module["_crypto_secretstream_xchacha20poly1305_abytes"]=(function(){return Module["asm"]["dg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_headerbytes=Module["_crypto_secretstream_xchacha20poly1305_headerbytes"]=(function(){return Module["asm"]["eg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_init_pull=Module["_crypto_secretstream_xchacha20poly1305_init_pull"]=(function(){return Module["asm"]["fg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_init_push=Module["_crypto_secretstream_xchacha20poly1305_init_push"]=(function(){return Module["asm"]["gg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_keybytes=Module["_crypto_secretstream_xchacha20poly1305_keybytes"]=(function(){return Module["asm"]["hg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_keygen=Module["_crypto_secretstream_xchacha20poly1305_keygen"]=(function(){return Module["asm"]["ig"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_messagebytes_max=Module["_crypto_secretstream_xchacha20poly1305_messagebytes_max"]=(function(){return Module["asm"]["jg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_pull=Module["_crypto_secretstream_xchacha20poly1305_pull"]=(function(){return Module["asm"]["kg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_push=Module["_crypto_secretstream_xchacha20poly1305_push"]=(function(){return Module["asm"]["lg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_rekey=Module["_crypto_secretstream_xchacha20poly1305_rekey"]=(function(){return Module["asm"]["mg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_statebytes=Module["_crypto_secretstream_xchacha20poly1305_statebytes"]=(function(){return Module["asm"]["ng"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_tag_final=Module["_crypto_secretstream_xchacha20poly1305_tag_final"]=(function(){return Module["asm"]["og"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_tag_message=Module["_crypto_secretstream_xchacha20poly1305_tag_message"]=(function(){return Module["asm"]["pg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_tag_push=Module["_crypto_secretstream_xchacha20poly1305_tag_push"]=(function(){return Module["asm"]["qg"].apply(null,arguments)});var _crypto_secretstream_xchacha20poly1305_tag_rekey=Module["_crypto_secretstream_xchacha20poly1305_tag_rekey"]=(function(){return Module["asm"]["rg"].apply(null,arguments)});var _crypto_shorthash=Module["_crypto_shorthash"]=(function(){return Module["asm"]["sg"].apply(null,arguments)});var _crypto_shorthash_bytes=Module["_crypto_shorthash_bytes"]=(function(){return Module["asm"]["tg"].apply(null,arguments)});var _crypto_shorthash_keybytes=Module["_crypto_shorthash_keybytes"]=(function(){return Module["asm"]["ug"].apply(null,arguments)});var _crypto_shorthash_keygen=Module["_crypto_shorthash_keygen"]=(function(){return Module["asm"]["vg"].apply(null,arguments)});var _crypto_shorthash_primitive=Module["_crypto_shorthash_primitive"]=(function(){return Module["asm"]["wg"].apply(null,arguments)});var _crypto_shorthash_siphash24=Module["_crypto_shorthash_siphash24"]=(function(){return Module["asm"]["xg"].apply(null,arguments)});var _crypto_shorthash_siphash24_bytes=Module["_crypto_shorthash_siphash24_bytes"]=(function(){return Module["asm"]["yg"].apply(null,arguments)});var _crypto_shorthash_siphash24_keybytes=Module["_crypto_shorthash_siphash24_keybytes"]=(function(){return Module["asm"]["zg"].apply(null,arguments)});var _crypto_shorthash_siphashx24=Module["_crypto_shorthash_siphashx24"]=(function(){return Module["asm"]["Ag"].apply(null,arguments)});var _crypto_shorthash_siphashx24_bytes=Module["_crypto_shorthash_siphashx24_bytes"]=(function(){return Module["asm"]["Bg"].apply(null,arguments)});var _crypto_shorthash_siphashx24_keybytes=Module["_crypto_shorthash_siphashx24_keybytes"]=(function(){return Module["asm"]["Cg"].apply(null,arguments)});var _crypto_sign=Module["_crypto_sign"]=(function(){return Module["asm"]["Dg"].apply(null,arguments)});var _crypto_sign_bytes=Module["_crypto_sign_bytes"]=(function(){return Module["asm"]["Eg"].apply(null,arguments)});var _crypto_sign_detached=Module["_crypto_sign_detached"]=(function(){return Module["asm"]["Fg"].apply(null,arguments)});var _crypto_sign_ed25519=Module["_crypto_sign_ed25519"]=(function(){return Module["asm"]["Gg"].apply(null,arguments)});var _crypto_sign_ed25519_bytes=Module["_crypto_sign_ed25519_bytes"]=(function(){return Module["asm"]["Hg"].apply(null,arguments)});var _crypto_sign_ed25519_detached=Module["_crypto_sign_ed25519_detached"]=(function(){return Module["asm"]["Ig"].apply(null,arguments)});var _crypto_sign_ed25519_keypair=Module["_crypto_sign_ed25519_keypair"]=(function(){return Module["asm"]["Jg"].apply(null,arguments)});var _crypto_sign_ed25519_open=Module["_crypto_sign_ed25519_open"]=(function(){return Module["asm"]["Kg"].apply(null,arguments)});var _crypto_sign_ed25519_pk_to_curve25519=Module["_crypto_sign_ed25519_pk_to_curve25519"]=(function(){return Module["asm"]["Lg"].apply(null,arguments)});var _crypto_sign_ed25519_publickeybytes=Module["_crypto_sign_ed25519_publickeybytes"]=(function(){return Module["asm"]["Mg"].apply(null,arguments)});var _crypto_sign_ed25519_secretkeybytes=Module["_crypto_sign_ed25519_secretkeybytes"]=(function(){return Module["asm"]["Ng"].apply(null,arguments)});var _crypto_sign_ed25519_seed_keypair=Module["_crypto_sign_ed25519_seed_keypair"]=(function(){return Module["asm"]["Og"].apply(null,arguments)});var _crypto_sign_ed25519_seedbytes=Module["_crypto_sign_ed25519_seedbytes"]=(function(){return Module["asm"]["Pg"].apply(null,arguments)});var _crypto_sign_ed25519_sk_to_curve25519=Module["_crypto_sign_ed25519_sk_to_curve25519"]=(function(){return Module["asm"]["Qg"].apply(null,arguments)});var _crypto_sign_ed25519_sk_to_pk=Module["_crypto_sign_ed25519_sk_to_pk"]=(function(){return Module["asm"]["Rg"].apply(null,arguments)});var _crypto_sign_ed25519_sk_to_seed=Module["_crypto_sign_ed25519_sk_to_seed"]=(function(){return Module["asm"]["Sg"].apply(null,arguments)});var _crypto_sign_ed25519_verify_detached=Module["_crypto_sign_ed25519_verify_detached"]=(function(){return Module["asm"]["Tg"].apply(null,arguments)});var _crypto_sign_ed25519ph_final_create=Module["_crypto_sign_ed25519ph_final_create"]=(function(){return Module["asm"]["Ug"].apply(null,arguments)});var _crypto_sign_ed25519ph_final_verify=Module["_crypto_sign_ed25519ph_final_verify"]=(function(){return Module["asm"]["Vg"].apply(null,arguments)});var _crypto_sign_ed25519ph_init=Module["_crypto_sign_ed25519ph_init"]=(function(){return Module["asm"]["Wg"].apply(null,arguments)});var _crypto_sign_ed25519ph_statebytes=Module["_crypto_sign_ed25519ph_statebytes"]=(function(){return Module["asm"]["Xg"].apply(null,arguments)});var _crypto_sign_ed25519ph_update=Module["_crypto_sign_ed25519ph_update"]=(function(){return Module["asm"]["Yg"].apply(null,arguments)});var _crypto_sign_final_create=Module["_crypto_sign_final_create"]=(function(){return Module["asm"]["Zg"].apply(null,arguments)});var _crypto_sign_final_verify=Module["_crypto_sign_final_verify"]=(function(){return Module["asm"]["_g"].apply(null,arguments)});var _crypto_sign_init=Module["_crypto_sign_init"]=(function(){return Module["asm"]["$g"].apply(null,arguments)});var _crypto_sign_keypair=Module["_crypto_sign_keypair"]=(function(){return Module["asm"]["ah"].apply(null,arguments)});var _crypto_sign_open=Module["_crypto_sign_open"]=(function(){return Module["asm"]["bh"].apply(null,arguments)});var _crypto_sign_primitive=Module["_crypto_sign_primitive"]=(function(){return Module["asm"]["ch"].apply(null,arguments)});var _crypto_sign_publickeybytes=Module["_crypto_sign_publickeybytes"]=(function(){return Module["asm"]["dh"].apply(null,arguments)});var _crypto_sign_secretkeybytes=Module["_crypto_sign_secretkeybytes"]=(function(){return Module["asm"]["eh"].apply(null,arguments)});var _crypto_sign_seed_keypair=Module["_crypto_sign_seed_keypair"]=(function(){return Module["asm"]["fh"].apply(null,arguments)});var _crypto_sign_seedbytes=Module["_crypto_sign_seedbytes"]=(function(){return Module["asm"]["gh"].apply(null,arguments)});var _crypto_sign_statebytes=Module["_crypto_sign_statebytes"]=(function(){return Module["asm"]["hh"].apply(null,arguments)});var _crypto_sign_update=Module["_crypto_sign_update"]=(function(){return Module["asm"]["ih"].apply(null,arguments)});var _crypto_sign_verify_detached=Module["_crypto_sign_verify_detached"]=(function(){return Module["asm"]["jh"].apply(null,arguments)});var _crypto_stream=Module["_crypto_stream"]=(function(){return Module["asm"]["kh"].apply(null,arguments)});var _crypto_stream_chacha20=Module["_crypto_stream_chacha20"]=(function(){return Module["asm"]["lh"].apply(null,arguments)});var _crypto_stream_chacha20_ietf=Module["_crypto_stream_chacha20_ietf"]=(function(){return Module["asm"]["mh"].apply(null,arguments)});var _crypto_stream_chacha20_ietf_keybytes=Module["_crypto_stream_chacha20_ietf_keybytes"]=(function(){return Module["asm"]["nh"].apply(null,arguments)});var _crypto_stream_chacha20_ietf_keygen=Module["_crypto_stream_chacha20_ietf_keygen"]=(function(){return Module["asm"]["oh"].apply(null,arguments)});var _crypto_stream_chacha20_ietf_noncebytes=Module["_crypto_stream_chacha20_ietf_noncebytes"]=(function(){return Module["asm"]["ph"].apply(null,arguments)});var _crypto_stream_chacha20_ietf_xor=Module["_crypto_stream_chacha20_ietf_xor"]=(function(){return Module["asm"]["qh"].apply(null,arguments)});var _crypto_stream_chacha20_ietf_xor_ic=Module["_crypto_stream_chacha20_ietf_xor_ic"]=(function(){return Module["asm"]["rh"].apply(null,arguments)});var _crypto_stream_chacha20_keybytes=Module["_crypto_stream_chacha20_keybytes"]=(function(){return Module["asm"]["sh"].apply(null,arguments)});var _crypto_stream_chacha20_keygen=Module["_crypto_stream_chacha20_keygen"]=(function(){return Module["asm"]["th"].apply(null,arguments)});var _crypto_stream_chacha20_noncebytes=Module["_crypto_stream_chacha20_noncebytes"]=(function(){return Module["asm"]["uh"].apply(null,arguments)});var _crypto_stream_chacha20_xor=Module["_crypto_stream_chacha20_xor"]=(function(){return Module["asm"]["vh"].apply(null,arguments)});var _crypto_stream_chacha20_xor_ic=Module["_crypto_stream_chacha20_xor_ic"]=(function(){return Module["asm"]["wh"].apply(null,arguments)});var _crypto_stream_keybytes=Module["_crypto_stream_keybytes"]=(function(){return Module["asm"]["xh"].apply(null,arguments)});var _crypto_stream_keygen=Module["_crypto_stream_keygen"]=(function(){return Module["asm"]["yh"].apply(null,arguments)});var _crypto_stream_noncebytes=Module["_crypto_stream_noncebytes"]=(function(){return Module["asm"]["zh"].apply(null,arguments)});var _crypto_stream_primitive=Module["_crypto_stream_primitive"]=(function(){return Module["asm"]["Ah"].apply(null,arguments)});var _crypto_stream_salsa20=Module["_crypto_stream_salsa20"]=(function(){return Module["asm"]["Bh"].apply(null,arguments)});var _crypto_stream_salsa2012=Module["_crypto_stream_salsa2012"]=(function(){return Module["asm"]["Ch"].apply(null,arguments)});var _crypto_stream_salsa2012_keybytes=Module["_crypto_stream_salsa2012_keybytes"]=(function(){return Module["asm"]["Dh"].apply(null,arguments)});var _crypto_stream_salsa2012_keygen=Module["_crypto_stream_salsa2012_keygen"]=(function(){return Module["asm"]["Eh"].apply(null,arguments)});var _crypto_stream_salsa2012_noncebytes=Module["_crypto_stream_salsa2012_noncebytes"]=(function(){return Module["asm"]["Fh"].apply(null,arguments)});var _crypto_stream_salsa2012_xor=Module["_crypto_stream_salsa2012_xor"]=(function(){return Module["asm"]["Gh"].apply(null,arguments)});var _crypto_stream_salsa208=Module["_crypto_stream_salsa208"]=(function(){return Module["asm"]["Hh"].apply(null,arguments)});var _crypto_stream_salsa208_keybytes=Module["_crypto_stream_salsa208_keybytes"]=(function(){return Module["asm"]["Ih"].apply(null,arguments)});var _crypto_stream_salsa208_keygen=Module["_crypto_stream_salsa208_keygen"]=(function(){return Module["asm"]["Jh"].apply(null,arguments)});var _crypto_stream_salsa208_messagebytes_max=Module["_crypto_stream_salsa208_messagebytes_max"]=(function(){return Module["asm"]["Kh"].apply(null,arguments)});var _crypto_stream_salsa208_noncebytes=Module["_crypto_stream_salsa208_noncebytes"]=(function(){return Module["asm"]["Lh"].apply(null,arguments)});var _crypto_stream_salsa208_xor=Module["_crypto_stream_salsa208_xor"]=(function(){return Module["asm"]["Mh"].apply(null,arguments)});var _crypto_stream_salsa20_keybytes=Module["_crypto_stream_salsa20_keybytes"]=(function(){return Module["asm"]["Nh"].apply(null,arguments)});var _crypto_stream_salsa20_keygen=Module["_crypto_stream_salsa20_keygen"]=(function(){return Module["asm"]["Oh"].apply(null,arguments)});var _crypto_stream_salsa20_noncebytes=Module["_crypto_stream_salsa20_noncebytes"]=(function(){return Module["asm"]["Ph"].apply(null,arguments)});var _crypto_stream_salsa20_xor=Module["_crypto_stream_salsa20_xor"]=(function(){return Module["asm"]["Qh"].apply(null,arguments)});var _crypto_stream_salsa20_xor_ic=Module["_crypto_stream_salsa20_xor_ic"]=(function(){return Module["asm"]["Rh"].apply(null,arguments)});var _crypto_stream_xchacha20=Module["_crypto_stream_xchacha20"]=(function(){return Module["asm"]["Sh"].apply(null,arguments)});var _crypto_stream_xchacha20_keybytes=Module["_crypto_stream_xchacha20_keybytes"]=(function(){return Module["asm"]["Th"].apply(null,arguments)});var _crypto_stream_xchacha20_keygen=Module["_crypto_stream_xchacha20_keygen"]=(function(){return Module["asm"]["Uh"].apply(null,arguments)});var _crypto_stream_xchacha20_noncebytes=Module["_crypto_stream_xchacha20_noncebytes"]=(function(){return Module["asm"]["Vh"].apply(null,arguments)});var _crypto_stream_xchacha20_xor=Module["_crypto_stream_xchacha20_xor"]=(function(){return Module["asm"]["Wh"].apply(null,arguments)});var _crypto_stream_xchacha20_xor_ic=Module["_crypto_stream_xchacha20_xor_ic"]=(function(){return Module["asm"]["Xh"].apply(null,arguments)});var _crypto_stream_xor=Module["_crypto_stream_xor"]=(function(){return Module["asm"]["Yh"].apply(null,arguments)});var _crypto_stream_xsalsa20=Module["_crypto_stream_xsalsa20"]=(function(){return Module["asm"]["Zh"].apply(null,arguments)});var _crypto_stream_xsalsa20_keybytes=Module["_crypto_stream_xsalsa20_keybytes"]=(function(){return Module["asm"]["_h"].apply(null,arguments)});var _crypto_stream_xsalsa20_keygen=Module["_crypto_stream_xsalsa20_keygen"]=(function(){return Module["asm"]["$h"].apply(null,arguments)});var _crypto_stream_xsalsa20_noncebytes=Module["_crypto_stream_xsalsa20_noncebytes"]=(function(){return Module["asm"]["ai"].apply(null,arguments)});var _crypto_stream_xsalsa20_xor=Module["_crypto_stream_xsalsa20_xor"]=(function(){return Module["asm"]["bi"].apply(null,arguments)});var _crypto_stream_xsalsa20_xor_ic=Module["_crypto_stream_xsalsa20_xor_ic"]=(function(){return Module["asm"]["ci"].apply(null,arguments)});var _crypto_verify_16=Module["_crypto_verify_16"]=(function(){return Module["asm"]["di"].apply(null,arguments)});var _crypto_verify_16_bytes=Module["_crypto_verify_16_bytes"]=(function(){return Module["asm"]["ei"].apply(null,arguments)});var _crypto_verify_32=Module["_crypto_verify_32"]=(function(){return Module["asm"]["fi"].apply(null,arguments)});var _crypto_verify_32_bytes=Module["_crypto_verify_32_bytes"]=(function(){return Module["asm"]["gi"].apply(null,arguments)});var _crypto_verify_64=Module["_crypto_verify_64"]=(function(){return Module["asm"]["hi"].apply(null,arguments)});var _crypto_verify_64_bytes=Module["_crypto_verify_64_bytes"]=(function(){return Module["asm"]["ii"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["ji"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["ki"].apply(null,arguments)});var _randombytes=Module["_randombytes"]=(function(){return Module["asm"]["li"].apply(null,arguments)});var _randombytes_buf=Module["_randombytes_buf"]=(function(){return Module["asm"]["mi"].apply(null,arguments)});var _randombytes_buf_deterministic=Module["_randombytes_buf_deterministic"]=(function(){return Module["asm"]["ni"].apply(null,arguments)});var _randombytes_close=Module["_randombytes_close"]=(function(){return Module["asm"]["oi"].apply(null,arguments)});var _randombytes_implementation_name=Module["_randombytes_implementation_name"]=(function(){return Module["asm"]["pi"].apply(null,arguments)});var _randombytes_random=Module["_randombytes_random"]=(function(){return Module["asm"]["qi"].apply(null,arguments)});var _randombytes_seedbytes=Module["_randombytes_seedbytes"]=(function(){return Module["asm"]["ri"].apply(null,arguments)});var _randombytes_stir=Module["_randombytes_stir"]=(function(){return Module["asm"]["si"].apply(null,arguments)});var _randombytes_uniform=Module["_randombytes_uniform"]=(function(){return Module["asm"]["ti"].apply(null,arguments)});var _sodium_base642bin=Module["_sodium_base642bin"]=(function(){return Module["asm"]["ui"].apply(null,arguments)});var _sodium_base64_encoded_len=Module["_sodium_base64_encoded_len"]=(function(){return Module["asm"]["vi"].apply(null,arguments)});var _sodium_bin2base64=Module["_sodium_bin2base64"]=(function(){return Module["asm"]["wi"].apply(null,arguments)});var _sodium_bin2hex=Module["_sodium_bin2hex"]=(function(){return Module["asm"]["xi"].apply(null,arguments)});var _sodium_hex2bin=Module["_sodium_hex2bin"]=(function(){return Module["asm"]["yi"].apply(null,arguments)});var _sodium_init=Module["_sodium_init"]=(function(){return Module["asm"]["zi"].apply(null,arguments)});var _sodium_library_minimal=Module["_sodium_library_minimal"]=(function(){return Module["asm"]["Ai"].apply(null,arguments)});var _sodium_library_version_major=Module["_sodium_library_version_major"]=(function(){return Module["asm"]["Bi"].apply(null,arguments)});var _sodium_library_version_minor=Module["_sodium_library_version_minor"]=(function(){return Module["asm"]["Ci"].apply(null,arguments)});var _sodium_pad=Module["_sodium_pad"]=(function(){return Module["asm"]["Di"].apply(null,arguments)});var _sodium_unpad=Module["_sodium_unpad"]=(function(){return Module["asm"]["Ei"].apply(null,arguments)});var _sodium_version_string=Module["_sodium_version_string"]=(function(){return Module["asm"]["Fi"].apply(null,arguments)});Module["asm"]=asm;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["Pointer_stringify"]=Pointer_stringify;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run()
20583 }).catch(function () {
20584 _Module.useBackupModule();
20585 });
20586function nacl_cooked(nacl_raw) {
20587 'use strict';
20588 var exports = {};
20589
20590 //---------------------------------------------------------------------------
20591 // Horrifying UTF-8 and hex codecs
20592
20593 function encode_utf8(s) {
20594 return encode_latin1(unescape(encodeURIComponent(s)));
20595 }
20596
20597 function encode_latin1(s) {
20598 var result = new Uint8Array(s.length);
20599 for (var i = 0; i < s.length; i++) {
20600 var c = s.charCodeAt(i);
20601 if ((c & 0xff) !== c) throw {message: "Cannot encode string in Latin1", str: s};
20602 result[i] = (c & 0xff);
20603 }
20604 return result;
20605 }
20606
20607 function decode_utf8(bs) {
20608 return decodeURIComponent(escape(decode_latin1(bs)));
20609 }
20610
20611 function decode_latin1(bs) {
20612 var encoded = [];
20613 for (var i = 0; i < bs.length; i++) {
20614 encoded.push(String.fromCharCode(bs[i]));
20615 }
20616 return encoded.join('');
20617 }
20618
20619 function to_hex(bs) {
20620 var encoded = [];
20621 for (var i = 0; i < bs.length; i++) {
20622 encoded.push("0123456789abcdef"[(bs[i] >> 4) & 15]);
20623 encoded.push("0123456789abcdef"[bs[i] & 15]);
20624 }
20625 return encoded.join('');
20626 }
20627
20628 function from_hex(s) {
20629 var result = new Uint8Array(s.length / 2);
20630 for (var i = 0; i < s.length / 2; i++) {
20631 result[i] = parseInt(s.substr(2*i,2),16);
20632 }
20633 return result;
20634 }
20635
20636 //---------------------------------------------------------------------------
20637 // Allocation
20638
20639 function MALLOC(nbytes) {
20640 var result = nacl_raw._malloc(nbytes);
20641 if (result === 0) {
20642 throw {message: "malloc() failed", nbytes: nbytes};
20643 }
20644 return result;
20645 }
20646
20647 function FREE(pointer) {
20648 nacl_raw._free(pointer);
20649 }
20650
20651 //---------------------------------------------------------------------------
20652
20653 function injectBytes(bs, leftPadding) {
20654 var p = leftPadding || 0;
20655 var address = MALLOC(bs.length + p);
20656 nacl_raw.HEAPU8.set(bs, address + p);
20657 for (var i = address; i < address + p; i++) {
20658 nacl_raw.HEAPU8[i] = 0;
20659 }
20660 return address;
20661 }
20662
20663 function check_injectBytes(function_name, what, thing, expected_length, leftPadding) {
20664 check_length(function_name, what, thing, expected_length);
20665 return injectBytes(thing, leftPadding);
20666 }
20667
20668 function extractBytes(address, length) {
20669 var result = new Uint8Array(length);
20670 result.set(nacl_raw.HEAPU8.subarray(address, address + length));
20671 return result;
20672 }
20673
20674 //---------------------------------------------------------------------------
20675
20676 function check(function_name, result) {
20677 if (result !== 0) {
20678 throw {message: "nacl_raw." + function_name + " signalled an error"};
20679 }
20680 }
20681
20682 function check_length(function_name, what, thing, expected_length) {
20683 if (thing.length !== expected_length) {
20684 throw {message: "nacl." + function_name + " expected " +
20685 expected_length + "-byte " + what + " but got length " + thing.length};
20686 }
20687 }
20688
20689 function Target(length) {
20690 this.length = length;
20691 this.address = MALLOC(length);
20692 }
20693
20694 Target.prototype.extractBytes = function (offset) {
20695 var result = extractBytes(this.address + (offset || 0), this.length - (offset || 0));
20696 FREE(this.address);
20697 this.address = null;
20698 return result;
20699 };
20700
20701 function free_all(addresses) {
20702 for (var i = 0; i < addresses.length; i++) {
20703 FREE(addresses[i]);
20704 }
20705 }
20706
20707 //---------------------------------------------------------------------------
20708 // Randomness
20709
20710 function random_bytes(count) {
20711 var bs = new Target(count);
20712 nacl_raw._randombytes_buf(bs.address, count);
20713 return bs.extractBytes();
20714 }
20715
20716 nacl_raw._randombytes_stir();
20717
20718 //---------------------------------------------------------------------------
20719 // Boxing
20720
20721 function crypto_box_keypair() {
20722 var pk = new Target(nacl_raw._crypto_box_publickeybytes());
20723 var sk = new Target(nacl_raw._crypto_box_secretkeybytes());
20724 check("_crypto_box_keypair", nacl_raw._crypto_box_keypair(pk.address, sk.address));
20725 return {boxPk: pk.extractBytes(), boxSk: sk.extractBytes()};
20726 }
20727
20728 function crypto_box_random_nonce() {
20729 return random_bytes(nacl_raw._crypto_box_noncebytes());
20730 }
20731
20732 function crypto_box(msg, nonce, pk, sk) {
20733 var m = injectBytes(msg, nacl_raw._crypto_box_zerobytes());
20734 var na = check_injectBytes("crypto_box", "nonce", nonce, nacl_raw._crypto_box_noncebytes());
20735 var pka = check_injectBytes("crypto_box", "pk", pk, nacl_raw._crypto_box_publickeybytes());
20736 var ska = check_injectBytes("crypto_box", "sk", sk, nacl_raw._crypto_box_secretkeybytes());
20737 var c = new Target(msg.length + nacl_raw._crypto_box_zerobytes());
20738 check("_crypto_box", nacl_raw._crypto_box(c.address, m, c.length, 0, na, pka, ska));
20739 free_all([m, na, pka, ska]);
20740 return c.extractBytes(nacl_raw._crypto_box_boxzerobytes());
20741 }
20742
20743 function crypto_box_open(ciphertext, nonce, pk, sk) {
20744 var c = injectBytes(ciphertext, nacl_raw._crypto_box_boxzerobytes());
20745 var na = check_injectBytes("crypto_box_open",
20746 "nonce", nonce, nacl_raw._crypto_box_noncebytes());
20747 var pka = check_injectBytes("crypto_box_open",
20748 "pk", pk, nacl_raw._crypto_box_publickeybytes());
20749 var ska = check_injectBytes("crypto_box_open",
20750 "sk", sk, nacl_raw._crypto_box_secretkeybytes());
20751 var m = new Target(ciphertext.length + nacl_raw._crypto_box_boxzerobytes());
20752 check("_crypto_box_open", nacl_raw._crypto_box_open(m.address, c, m.length, 0, na, pka, ska));
20753 free_all([c, na, pka, ska]);
20754 return m.extractBytes(nacl_raw._crypto_box_zerobytes());
20755 }
20756
20757 function crypto_box_precompute(pk, sk) {
20758 var pka = check_injectBytes("crypto_box_precompute",
20759 "pk", pk, nacl_raw._crypto_box_publickeybytes());
20760 var ska = check_injectBytes("crypto_box_precompute",
20761 "sk", sk, nacl_raw._crypto_box_secretkeybytes());
20762 var k = new Target(nacl_raw._crypto_box_beforenmbytes());
20763 check("_crypto_box_beforenm",
20764 nacl_raw._crypto_box_beforenm(k.address, pka, ska));
20765 free_all([pka, ska]);
20766 return {boxK: k.extractBytes()};
20767 }
20768
20769 function crypto_box_precomputed(msg, nonce, state) {
20770 var m = injectBytes(msg, nacl_raw._crypto_box_zerobytes());
20771 var na = check_injectBytes("crypto_box_precomputed",
20772 "nonce", nonce, nacl_raw._crypto_box_noncebytes());
20773 var ka = check_injectBytes("crypto_box_precomputed",
20774 "boxK", state.boxK, nacl_raw._crypto_box_beforenmbytes());
20775 var c = new Target(msg.length + nacl_raw._crypto_box_zerobytes());
20776 check("_crypto_box_afternm",
20777 nacl_raw._crypto_box_afternm(c.address, m, c.length, 0, na, ka));
20778 free_all([m, na, ka]);
20779 return c.extractBytes(nacl_raw._crypto_box_boxzerobytes());
20780 }
20781
20782 function crypto_box_open_precomputed(ciphertext, nonce, state) {
20783 var c = injectBytes(ciphertext, nacl_raw._crypto_box_boxzerobytes());
20784 var na = check_injectBytes("crypto_box_open_precomputed",
20785 "nonce", nonce, nacl_raw._crypto_box_noncebytes());
20786 var ka = check_injectBytes("crypto_box_open_precomputed",
20787 "boxK", state.boxK, nacl_raw._crypto_box_beforenmbytes());
20788 var m = new Target(ciphertext.length + nacl_raw._crypto_box_boxzerobytes());
20789 check("_crypto_box_open_afternm",
20790 nacl_raw._crypto_box_open_afternm(m.address, c, m.length, 0, na, ka));
20791 free_all([c, na, ka]);
20792 return m.extractBytes(nacl_raw._crypto_box_zerobytes());
20793 }
20794
20795 //---------------------------------------------------------------------------
20796 // Hashing
20797
20798 function crypto_hash(bs) {
20799 var address = injectBytes(bs);
20800 var hash = new Target(nacl_raw._crypto_hash_bytes());
20801 check("_crypto_hash", nacl_raw._crypto_hash(hash.address, address, bs.length, 0));
20802 FREE(address);
20803 return hash.extractBytes();
20804 }
20805
20806 function crypto_hash_sha256(bs) {
20807 var address = injectBytes(bs);
20808 var hash = new Target(nacl_raw._crypto_hash_sha256_bytes());
20809 check("_crypto_hash_sha256",
20810 nacl_raw._crypto_hash_sha256(hash.address, address, bs.length, 0));
20811 FREE(address);
20812 return hash.extractBytes();
20813 }
20814
20815 function crypto_hash_string(s) {
20816 return crypto_hash(encode_utf8(s));
20817 }
20818
20819 //---------------------------------------------------------------------------
20820 // Symmetric-key encryption
20821
20822 function crypto_stream_random_nonce() {
20823 return random_bytes(nacl_raw._crypto_stream_noncebytes());
20824 }
20825
20826 function crypto_stream(len, nonce, key) {
20827 var na = check_injectBytes("crypto_stream",
20828 "nonce", nonce, nacl_raw._crypto_stream_noncebytes());
20829 var ka = check_injectBytes("crypto_stream",
20830 "key", key, nacl_raw._crypto_stream_keybytes());
20831 var out = new Target(len);
20832 check("_crypto_stream", nacl_raw._crypto_stream(out.address, len, 0, na, ka));
20833 free_all([na, ka]);
20834 return out.extractBytes();
20835 }
20836
20837 function crypto_stream_xor(msg, nonce, key) {
20838 var na = check_injectBytes("crypto_stream_xor",
20839 "nonce", nonce, nacl_raw._crypto_stream_noncebytes());
20840 var ka = check_injectBytes("crypto_stream_xor",
20841 "key", key, nacl_raw._crypto_stream_keybytes());
20842 var ma = injectBytes(msg);
20843 var out = new Target(msg.length);
20844 check("_crypto_stream_xor",
20845 nacl_raw._crypto_stream_xor(out.address, ma, msg.length, 0, na, ka));
20846 free_all([na, ka, ma]);
20847 return out.extractBytes();
20848 }
20849
20850 //---------------------------------------------------------------------------
20851 // One-time authentication
20852
20853 function crypto_onetimeauth(msg, key) {
20854 var ka = check_injectBytes("crypto_onetimeauth",
20855 "key", key, nacl_raw._crypto_onetimeauth_keybytes());
20856 var ma = injectBytes(msg);
20857 var authenticator = new Target(nacl_raw._crypto_onetimeauth_bytes());
20858 check("_crypto_onetimeauth",
20859 nacl_raw._crypto_onetimeauth(authenticator.address, ma, msg.length, 0, ka));
20860 free_all([ka, ma]);
20861 return authenticator.extractBytes();
20862 }
20863
20864 function crypto_onetimeauth_verify(authenticator, msg, key) {
20865 if (authenticator.length != nacl_raw._crypto_onetimeauth_bytes()) return false;
20866 var ka = check_injectBytes("crypto_onetimeauth_verify",
20867 "key", key, nacl_raw._crypto_onetimeauth_keybytes());
20868 var ma = injectBytes(msg);
20869 var aa = injectBytes(authenticator);
20870 var result = nacl_raw._crypto_onetimeauth_verify(aa, ma, msg.length, 0, ka);
20871 free_all([ka, ma, aa]);
20872 return (result == 0);
20873 }
20874
20875 //---------------------------------------------------------------------------
20876 // Authentication
20877
20878 function crypto_auth(msg, key) {
20879 var ka = check_injectBytes("crypto_auth", "key", key, nacl_raw._crypto_auth_keybytes());
20880 var ma = injectBytes(msg);
20881 var authenticator = new Target(nacl_raw._crypto_auth_bytes());
20882 check("_crypto_auth", nacl_raw._crypto_auth(authenticator.address, ma, msg.length, 0, ka));
20883 free_all([ka, ma]);
20884 return authenticator.extractBytes();
20885 }
20886
20887 function crypto_auth_verify(authenticator, msg, key) {
20888 if (authenticator.length != nacl_raw._crypto_auth_bytes()) return false;
20889 var ka = check_injectBytes("crypto_auth_verify",
20890 "key", key, nacl_raw._crypto_auth_keybytes());
20891 var ma = injectBytes(msg);
20892 var aa = injectBytes(authenticator);
20893 var result = nacl_raw._crypto_auth_verify(aa, ma, msg.length, 0, ka);
20894 free_all([ka, ma, aa]);
20895 return (result == 0);
20896 }
20897
20898 //---------------------------------------------------------------------------
20899 // Authenticated symmetric-key encryption
20900
20901 function crypto_secretbox_random_nonce() {
20902 return random_bytes(nacl_raw._crypto_secretbox_noncebytes());
20903 }
20904
20905 function crypto_secretbox(msg, nonce, key) {
20906 var m = injectBytes(msg, nacl_raw._crypto_secretbox_zerobytes());
20907 var na = check_injectBytes("crypto_secretbox",
20908 "nonce", nonce, nacl_raw._crypto_secretbox_noncebytes());
20909 var ka = check_injectBytes("crypto_secretbox",
20910 "key", key, nacl_raw._crypto_secretbox_keybytes());
20911 var c = new Target(msg.length + nacl_raw._crypto_secretbox_zerobytes());
20912 check("_crypto_secretbox", nacl_raw._crypto_secretbox(c.address, m, c.length, 0, na, ka));
20913 free_all([m, na, ka]);
20914 return c.extractBytes(nacl_raw._crypto_secretbox_boxzerobytes());
20915 }
20916
20917 function crypto_secretbox_open(ciphertext, nonce, key) {
20918 var c = injectBytes(ciphertext, nacl_raw._crypto_secretbox_boxzerobytes());
20919 var na = check_injectBytes("crypto_secretbox_open",
20920 "nonce", nonce, nacl_raw._crypto_secretbox_noncebytes());
20921 var ka = check_injectBytes("crypto_secretbox_open",
20922 "key", key, nacl_raw._crypto_secretbox_keybytes());
20923 var m = new Target(ciphertext.length + nacl_raw._crypto_secretbox_boxzerobytes());
20924 check("_crypto_secretbox_open",
20925 nacl_raw._crypto_secretbox_open(m.address, c, m.length, 0, na, ka));
20926 free_all([c, na, ka]);
20927 return m.extractBytes(nacl_raw._crypto_secretbox_zerobytes());
20928 }
20929
20930 //---------------------------------------------------------------------------
20931 // Boxing with ephemeral keys
20932
20933 function crypto_box_seal(msg, pk) {
20934 var m = injectBytes(msg);
20935 var pka = check_injectBytes("crypto_box_seal",
20936 "pk", pk, nacl_raw._crypto_box_publickeybytes());
20937 var c = new Target(msg.length + nacl_raw._crypto_box_sealbytes());
20938 check("_crypto_box_seal", nacl_raw._crypto_box_seal(c.address, m, msg.length, 0, pka));
20939 free_all([m, pka]);
20940 return c.extractBytes();
20941 }
20942
20943 function crypto_box_seal_open(ciphertext, pk, sk) {
20944 var c = injectBytes(ciphertext);
20945 var pka = check_injectBytes("crypto_box_seal_open",
20946 "pk", pk, nacl_raw._crypto_box_publickeybytes());
20947 var ska = check_injectBytes("crypto_box_seal_open",
20948 "sk", sk, nacl_raw._crypto_box_secretkeybytes());
20949 var m = new Target(ciphertext.length - nacl_raw._crypto_box_sealbytes());
20950 check("_crypto_box_seal_open",
20951 nacl_raw._crypto_box_seal_open(m.address, c, ciphertext.length, 0, pka, ska));
20952 free_all([c, pka, ska]);
20953 return m.extractBytes();
20954 }
20955
20956 //---------------------------------------------------------------------------
20957 // Signing
20958
20959 function crypto_sign_keypair() {
20960 var pk = new Target(nacl_raw._crypto_sign_publickeybytes());
20961 var sk = new Target(nacl_raw._crypto_sign_secretkeybytes());
20962 check("_crypto_sign_keypair", nacl_raw._crypto_sign_keypair(pk.address, sk.address));
20963 return {signPk: pk.extractBytes(), signSk: sk.extractBytes()};
20964 }
20965
20966 function crypto_sign(msg, sk) {
20967 var ma = injectBytes(msg);
20968 var ska = check_injectBytes("crypto_sign", "sk", sk, nacl_raw._crypto_sign_secretkeybytes());
20969 var sm = new Target(msg.length + nacl_raw._crypto_sign_bytes());
20970 var smlen = new Target(8);
20971 check("_crypto_sign",
20972 nacl_raw._crypto_sign(sm.address, smlen.address, ma, msg.length, 0, ska));
20973 free_all([ma, ska]);
20974 sm.length = nacl_raw.HEAPU32[smlen.address >> 2];
20975 FREE(smlen.address);
20976 return sm.extractBytes();
20977 }
20978
20979 function crypto_sign_detached(msg, sk) {
20980 // WARNING: Experimental. Works for ed25519 but not necessarily other implementations.
20981 var signed_msg = crypto_sign(msg, sk);
20982 return signed_msg.subarray(0, nacl_raw._crypto_sign_bytes());
20983 }
20984
20985 function crypto_sign_open(sm, pk) {
20986 var sma = injectBytes(sm);
20987 var pka = check_injectBytes("crypto_sign_open",
20988 "pk", pk, nacl_raw._crypto_sign_publickeybytes());
20989 var m = new Target(sm.length);
20990 var mlen = new Target(8);
20991 if (nacl_raw._crypto_sign_open(m.address, mlen.address, sma, sm.length, 0, pka) === 0) {
20992 free_all([sma, pka]);
20993 m.length = nacl_raw.HEAPU32[mlen.address >> 2];
20994 FREE(mlen.address);
20995 return m.extractBytes();
20996 } else {
20997 free_all([sma, pka, m.address, mlen.address]);
20998 return null;
20999 }
21000 }
21001
21002 function crypto_sign_verify_detached(detached_signature, msg, pk) {
21003 // WARNING: Experimental. Works for ed25519 but not necessarily other implementations.
21004 var signed_msg = new Uint8Array(detached_signature.length + msg.length);
21005 signed_msg.set(detached_signature, 0);
21006 signed_msg.set(msg, detached_signature.length);
21007 return crypto_sign_open(signed_msg, pk) !== null;
21008 }
21009
21010 //---------------------------------------------------------------------------
21011 // Keys
21012
21013 function crypto_sign_seed_keypair(bs) {
21014 var seeda = check_injectBytes("crypto_sign_seed_keypair",
21015 "seed", bs, nacl_raw._crypto_sign_secretkeybytes() / 2);
21016 var pk = new Target(nacl_raw._crypto_sign_publickeybytes());
21017 var sk = new Target(nacl_raw._crypto_sign_secretkeybytes());
21018 check("_crypto_sign_seed_keypair",
21019 nacl_raw._crypto_sign_seed_keypair(pk.address, sk.address, seeda));
21020 FREE(seeda);
21021 return {signPk: pk.extractBytes(), signSk: sk.extractBytes()};
21022 }
21023
21024 function crypto_box_seed_keypair(bs) {
21025 var hash = new Uint8Array(crypto_hash(bs));
21026 return crypto_box_keypair_from_raw_sk(hash.subarray(0,
21027 nacl_raw._crypto_box_secretkeybytes()));
21028 }
21029
21030 function crypto_box_keypair_from_raw_sk(sk) {
21031 return {boxPk: crypto_scalarmult_base(sk), boxSk: sk};
21032 }
21033
21034 //---------------------------------------------------------------------------
21035 // Scalarmult
21036
21037 function crypto_scalarmult(n,p) {
21038 var na = check_injectBytes("crypto_scalarmult", "n", n,
21039 nacl_raw._crypto_scalarmult_curve25519_scalarbytes());
21040 var pa = check_injectBytes("crypto_scalarmult", "p", p,
21041 nacl_raw._crypto_scalarmult_curve25519_bytes());
21042 var q = new Target(nacl_raw._crypto_scalarmult_curve25519_bytes());
21043 check("_crypto_scalarmult_curve25519",
21044 nacl_raw._crypto_scalarmult_curve25519(q.address, na, pa));
21045 FREE(na);
21046 FREE(pa);
21047 return q.extractBytes();
21048 }
21049
21050 function crypto_scalarmult_base(n) {
21051 var na = check_injectBytes("crypto_scalarmult_base", "n", n,
21052 nacl_raw._crypto_scalarmult_curve25519_scalarbytes());
21053 var q = new Target(nacl_raw._crypto_scalarmult_curve25519_bytes());
21054 check("_crypto_scalarmult_curve25519_base",
21055 nacl_raw._crypto_scalarmult_curve25519_base(q.address, na));
21056 FREE(na);
21057 return q.extractBytes();
21058 }
21059
21060 //---------------------------------------------------------------------------
21061
21062 exports.crypto_auth_BYTES = nacl_raw._crypto_auth_bytes();
21063 exports.crypto_auth_KEYBYTES = nacl_raw._crypto_auth_keybytes();
21064 exports.crypto_box_BEFORENMBYTES = nacl_raw._crypto_box_beforenmbytes();
21065 exports.crypto_box_BOXZEROBYTES = nacl_raw._crypto_box_boxzerobytes();
21066 exports.crypto_box_NONCEBYTES = nacl_raw._crypto_box_noncebytes();
21067 exports.crypto_box_PUBLICKEYBYTES = nacl_raw._crypto_box_publickeybytes();
21068 exports.crypto_box_SECRETKEYBYTES = nacl_raw._crypto_box_secretkeybytes();
21069 exports.crypto_box_ZEROBYTES = nacl_raw._crypto_box_zerobytes();
21070 exports.crypto_hash_BYTES = nacl_raw._crypto_hash_bytes();
21071 exports.crypto_hash_sha256_BYTES = nacl_raw._crypto_hash_sha256_bytes();
21072 // exports.crypto_hashblocks_BLOCKBYTES = nacl_raw._crypto_hashblocks_blockbytes();
21073 // exports.crypto_hashblocks_STATEBYTES = nacl_raw._crypto_hashblocks_statebytes();
21074 exports.crypto_onetimeauth_BYTES = nacl_raw._crypto_onetimeauth_bytes();
21075 exports.crypto_onetimeauth_KEYBYTES = nacl_raw._crypto_onetimeauth_keybytes();
21076 exports.crypto_secretbox_BOXZEROBYTES = nacl_raw._crypto_secretbox_boxzerobytes();
21077 exports.crypto_secretbox_KEYBYTES = nacl_raw._crypto_secretbox_keybytes();
21078 exports.crypto_secretbox_NONCEBYTES = nacl_raw._crypto_secretbox_noncebytes();
21079 exports.crypto_secretbox_ZEROBYTES = nacl_raw._crypto_secretbox_zerobytes();
21080 exports.crypto_sign_BYTES = nacl_raw._crypto_sign_bytes();
21081 exports.crypto_sign_PUBLICKEYBYTES = nacl_raw._crypto_sign_publickeybytes();
21082 exports.crypto_sign_SECRETKEYBYTES = nacl_raw._crypto_sign_secretkeybytes();
21083 // exports.crypto_stream_BEFORENMBYTES = nacl_raw._crypto_stream_beforenmbytes();
21084 exports.crypto_stream_KEYBYTES = nacl_raw._crypto_stream_keybytes();
21085 exports.crypto_stream_NONCEBYTES = nacl_raw._crypto_stream_noncebytes();
21086 exports.crypto_scalarmult_SCALARBYTES = nacl_raw._crypto_scalarmult_curve25519_scalarbytes();
21087 exports.crypto_scalarmult_BYTES = nacl_raw._crypto_scalarmult_curve25519_bytes();
21088
21089 exports.encode_utf8 = encode_utf8;
21090 exports.encode_latin1 = encode_latin1;
21091 exports.decode_utf8 = decode_utf8;
21092 exports.decode_latin1 = decode_latin1;
21093 exports.to_hex = to_hex;
21094 exports.from_hex = from_hex;
21095
21096 exports.random_bytes = random_bytes;
21097
21098 exports.crypto_box_keypair = crypto_box_keypair;
21099 exports.crypto_box_random_nonce = crypto_box_random_nonce;
21100 exports.crypto_box = crypto_box;
21101 exports.crypto_box_open = crypto_box_open;
21102 exports.crypto_box_precompute = crypto_box_precompute;
21103 exports.crypto_box_precomputed = crypto_box_precomputed;
21104 exports.crypto_box_open_precomputed = crypto_box_open_precomputed;
21105
21106 exports.crypto_stream_random_nonce = crypto_stream_random_nonce;
21107 exports.crypto_stream = crypto_stream;
21108 exports.crypto_stream_xor = crypto_stream_xor;
21109
21110 exports.crypto_onetimeauth = crypto_onetimeauth;
21111 exports.crypto_onetimeauth_verify = crypto_onetimeauth_verify;
21112
21113 exports.crypto_auth = crypto_auth;
21114 exports.crypto_auth_verify = crypto_auth_verify;
21115
21116 exports.crypto_secretbox_random_nonce = crypto_secretbox_random_nonce;
21117 exports.crypto_secretbox = crypto_secretbox;
21118 exports.crypto_secretbox_open = crypto_secretbox_open;
21119
21120 exports.crypto_box_seal = crypto_box_seal;
21121 exports.crypto_box_seal_open = crypto_box_seal_open;
21122
21123 exports.crypto_sign_keypair = crypto_sign_keypair;
21124 exports.crypto_sign = crypto_sign;
21125 exports.crypto_sign_detached = crypto_sign_detached;
21126 exports.crypto_sign_open = crypto_sign_open;
21127 exports.crypto_sign_verify_detached = crypto_sign_verify_detached;
21128
21129 exports.crypto_hash = crypto_hash;
21130 exports.crypto_hash_sha256 = crypto_hash_sha256;
21131 exports.crypto_hash_string = crypto_hash_string;
21132
21133 exports.crypto_sign_seed_keypair = crypto_sign_seed_keypair;
21134 exports.crypto_box_seed_keypair = crypto_box_seed_keypair;
21135 exports.crypto_box_keypair_from_raw_sk = crypto_box_keypair_from_raw_sk;
21136 // Backwards-compatibility:
21137 exports.crypto_sign_keypair_from_seed = crypto_sign_seed_keypair;
21138 exports.crypto_box_keypair_from_seed = crypto_box_seed_keypair;
21139
21140 exports.crypto_scalarmult = crypto_scalarmult;
21141 exports.crypto_scalarmult_base = crypto_scalarmult_base;
21142
21143 return exports;
21144}
21145 return nacl_raw.ready.then(function () {
21146 var nacl = nacl_cooked(nacl_raw);
21147 nacl.nacl_raw = nacl_raw;
21148 on_ready(nacl);
21149 return nacl;
21150 });
21151 })((typeof window !== 'undefined') ? window : undefined_reference_value,
21152 (typeof document !== 'undefined') ? document : undefined_reference_value);
21153 }
21154};
21155
21156// export common.js module to allow one js file for browser and node.js
21157if (typeof module !== 'undefined' && module.exports) {
21158 module.exports = nacl_factory;
21159}
21160
21161}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/js-nacl/lib")
21162},{"_process":374,"buffer":50,"crypto":72,"fs":48,"path":367}],123:[function(require,module,exports){
21163"use strict";
21164
21165var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21166
21167var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
21168
21169var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
21170
21171Object.defineProperty(exports, "__esModule", {
21172 value: true
21173});
21174
21175var every = _interopRequire(require("lodash/every"));
21176
21177var each = _interopRequire(require("lodash/each"));
21178
21179var times = _interopRequire(require("lodash/times"));
21180
21181var isArray = _interopRequire(require("lodash/isArray"));
21182
21183var includeIoMixin = _interopRequire(require("./io-mixin"));
21184
21185var Array = exports.Array = (function () {
21186 function Array(childType, length) {
21187 _classCallCheck(this, Array);
21188
21189 this._childType = childType;
21190 this._length = length;
21191 }
21192
21193 _createClass(Array, {
21194 read: {
21195 value: function read(io) {
21196 var _this = this;
21197
21198 return times(this._length, function () {
21199 return _this._childType.read(io);
21200 });
21201 }
21202 },
21203 write: {
21204 value: function write(value, io) {
21205 var _this = this;
21206
21207 if (!isArray(value)) {
21208 throw new Error("XDR Write Error: value is not array");
21209 }
21210
21211 if (value.length !== this._length) {
21212 throw new Error("XDR Write Error: Got array of size " + value.length + "," + ("expected " + this._length));
21213 }
21214
21215 each(value, function (child) {
21216 return _this._childType.write(child, io);
21217 });
21218 }
21219 },
21220 isValid: {
21221 value: function isValid(value) {
21222 var _this = this;
21223
21224 if (!isArray(value)) {
21225 return false;
21226 }
21227 if (value.length !== this._length) {
21228 return false;
21229 }
21230
21231 return every(value, function (child) {
21232 return _this._childType.isValid(child);
21233 });
21234 }
21235 }
21236 });
21237
21238 return Array;
21239})();
21240
21241includeIoMixin(Array.prototype);
21242},{"./io-mixin":133,"lodash/each":312,"lodash/every":314,"lodash/isArray":323,"lodash/times":350}],124:[function(require,module,exports){
21243"use strict";
21244
21245var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21246
21247Object.defineProperty(exports, "__esModule", {
21248 value: true
21249});
21250
21251var Int = require("./int").Int;
21252
21253var isBoolean = _interopRequire(require("lodash/isBoolean"));
21254
21255var includeIoMixin = _interopRequire(require("./io-mixin"));
21256
21257var Bool = {
21258 read: function read(io) {
21259 var value = Int.read(io);
21260
21261 switch (value) {
21262 case 0:
21263 return false;
21264 case 1:
21265 return true;
21266 default:
21267 throw new Error("XDR Read Error: Got " + value + " when trying to read a bool");
21268 }
21269 },
21270
21271 write: function write(value, io) {
21272 var intVal = value ? 1 : 0;
21273 return Int.write(intVal, io);
21274 },
21275
21276 isValid: function isValid(value) {
21277 return isBoolean(value);
21278 }
21279};
21280
21281exports.Bool = Bool;
21282includeIoMixin(Bool);
21283},{"./int":132,"./io-mixin":133,"lodash/isBoolean":325}],125:[function(require,module,exports){
21284"use strict";
21285
21286var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21287
21288var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
21289
21290var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
21291
21292var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
21293
21294var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
21295
21296exports.config = config;
21297Object.defineProperty(exports, "__esModule", {
21298 value: true
21299});
21300
21301var XDR = _interopRequireWildcard(require("./types"));
21302
21303var isUndefined = _interopRequire(require("lodash/isUndefined"));
21304
21305var isPlainObject = _interopRequire(require("lodash/isPlainObject"));
21306
21307var isArray = _interopRequire(require("lodash/isArray"));
21308
21309var each = _interopRequire(require("lodash/each"));
21310
21311var map = _interopRequire(require("lodash/map"));
21312
21313var pick = _interopRequire(require("lodash/pick"));
21314
21315function config(fn) {
21316 var types = arguments[1] === undefined ? {} : arguments[1];
21317
21318 if (fn) {
21319 var builder = new TypeBuilder(types);
21320 fn(builder);
21321 builder.resolve();
21322 }
21323
21324 return types;
21325}
21326
21327var Reference = exports.Reference = (function () {
21328 function Reference() {
21329 _classCallCheck(this, Reference);
21330 }
21331
21332 _createClass(Reference, {
21333 resolve: {
21334 /* jshint unused: false */
21335
21336 value: function resolve(context) {
21337 throw new Error("implement resolve in child class");
21338 }
21339 }
21340 });
21341
21342 return Reference;
21343})();
21344
21345var SimpleReference = (function (_Reference) {
21346 function SimpleReference(name) {
21347 _classCallCheck(this, SimpleReference);
21348
21349 this.name = name;
21350 }
21351
21352 _inherits(SimpleReference, _Reference);
21353
21354 _createClass(SimpleReference, {
21355 resolve: {
21356 value: function resolve(context) {
21357 var defn = context.definitions[this.name];
21358 return defn.resolve(context);
21359 }
21360 }
21361 });
21362
21363 return SimpleReference;
21364})(Reference);
21365
21366var ArrayReference = (function (_Reference2) {
21367 function ArrayReference(childReference, length) {
21368 var variable = arguments[2] === undefined ? false : arguments[2];
21369
21370 _classCallCheck(this, ArrayReference);
21371
21372 this.childReference = childReference;
21373 this.length = length;
21374 this.variable = variable;
21375 }
21376
21377 _inherits(ArrayReference, _Reference2);
21378
21379 _createClass(ArrayReference, {
21380 resolve: {
21381 value: function resolve(context) {
21382 var resolvedChild = this.childReference;
21383 var length = this.length;
21384
21385 if (resolvedChild instanceof Reference) {
21386 resolvedChild = resolvedChild.resolve(context);
21387 }
21388
21389 if (length instanceof Reference) {
21390 length = length.resolve(context);
21391 }
21392
21393 if (this.variable) {
21394 return new XDR.VarArray(resolvedChild, length);
21395 } else {
21396 return new XDR.Array(resolvedChild, length);
21397 }
21398 }
21399 }
21400 });
21401
21402 return ArrayReference;
21403})(Reference);
21404
21405var OptionReference = (function (_Reference3) {
21406 function OptionReference(childReference) {
21407 _classCallCheck(this, OptionReference);
21408
21409 this.childReference = childReference;
21410 this.name = childReference.name;
21411 }
21412
21413 _inherits(OptionReference, _Reference3);
21414
21415 _createClass(OptionReference, {
21416 resolve: {
21417 value: function resolve(context) {
21418 var resolvedChild = this.childReference;
21419
21420 if (resolvedChild instanceof Reference) {
21421 resolvedChild = resolvedChild.resolve(context);
21422 }
21423
21424 return new XDR.Option(resolvedChild);
21425 }
21426 }
21427 });
21428
21429 return OptionReference;
21430})(Reference);
21431
21432var SizedReference = (function (_Reference4) {
21433 function SizedReference(sizedType, length) {
21434 _classCallCheck(this, SizedReference);
21435
21436 this.sizedType = sizedType;
21437 this.length = length;
21438 }
21439
21440 _inherits(SizedReference, _Reference4);
21441
21442 _createClass(SizedReference, {
21443 resolve: {
21444 value: function resolve(context) {
21445 var length = this.length;
21446
21447 if (length instanceof Reference) {
21448 length = length.resolve(context);
21449 }
21450
21451 return new this.sizedType(length);
21452 }
21453 }
21454 });
21455
21456 return SizedReference;
21457})(Reference);
21458
21459var Definition = (function () {
21460 function Definition(constructor, name, config) {
21461 _classCallCheck(this, Definition);
21462
21463 this.constructor = constructor;
21464 this.name = name;
21465 this.config = config;
21466 }
21467
21468 _createClass(Definition, {
21469 resolve: {
21470
21471 // resolve calls the constructor of this definition with the provided context
21472 // and this definitions config values. The definitions constructor should
21473 // populate the final type on `context.results`, and may refer to other
21474 // definitions through `context.definitions`
21475
21476 value: function resolve(context) {
21477 if (this.name in context.results) {
21478 return context.results[this.name];
21479 }
21480
21481 return this.constructor(context, this.name, this.config);
21482 }
21483 }
21484 });
21485
21486 return Definition;
21487})();
21488
21489var TypeBuilder = (function () {
21490 function TypeBuilder(destination) {
21491 _classCallCheck(this, TypeBuilder);
21492
21493 this._destination = destination;
21494 this._definitions = {};
21495 }
21496
21497 _createClass(TypeBuilder, {
21498 "enum": {
21499 value: function _enum(name, members) {
21500 var result = new Definition(XDR.Enum.create, name, members);
21501 this.define(name, result);
21502 }
21503 },
21504 struct: {
21505 value: function struct(name, members) {
21506 var result = new Definition(XDR.Struct.create, name, members);
21507 this.define(name, result);
21508 }
21509 },
21510 union: {
21511 value: function union(name, config) {
21512 var result = new Definition(XDR.Union.create, name, config);
21513 this.define(name, result);
21514 }
21515 },
21516 typedef: {
21517 value: function typedef(name, config) {
21518 // let the reference resoltion system do it's thing
21519 // the "constructor" for a typedef just returns the resolved value
21520 var createTypedef = function (context, name, value) {
21521 if (value instanceof Reference) {
21522 value = value.resolve(context);
21523 }
21524 context.results[name] = value;
21525 return value;
21526 };
21527
21528 var result = new Definition(createTypedef, name, config);
21529 this.define(name, result);
21530 }
21531 },
21532 "const": {
21533 value: function _const(name, config) {
21534 var createConst = function (context, name, value) {
21535 context.results[name] = value;
21536 return value;
21537 };
21538
21539 var result = new Definition(createConst, name, config);
21540 this.define(name, result);
21541 }
21542 },
21543 "void": {
21544 value: function _void() {
21545 return XDR.Void;
21546 }
21547 },
21548 bool: {
21549 value: function bool() {
21550 return XDR.Bool;
21551 }
21552 },
21553 int: {
21554 value: function int() {
21555 return XDR.Int;
21556 }
21557 },
21558 hyper: {
21559 value: function hyper() {
21560 return XDR.Hyper;
21561 }
21562 },
21563 uint: {
21564 value: function uint() {
21565 return XDR.UnsignedInt;
21566 }
21567 },
21568 uhyper: {
21569 value: function uhyper() {
21570 return XDR.UnsignedHyper;
21571 }
21572 },
21573 float: {
21574 value: function float() {
21575 return XDR.Float;
21576 }
21577 },
21578 double: {
21579 value: function double() {
21580 return XDR.Double;
21581 }
21582 },
21583 quadruple: {
21584 value: function quadruple() {
21585 return XDR.Quadruple;
21586 }
21587 },
21588 string: {
21589 value: function string(length) {
21590 return new SizedReference(XDR.String, length);
21591 }
21592 },
21593 opaque: {
21594 value: function opaque(length) {
21595 return new SizedReference(XDR.Opaque, length);
21596 }
21597 },
21598 varOpaque: {
21599 value: function varOpaque(length) {
21600 return new SizedReference(XDR.VarOpaque, length);
21601 }
21602 },
21603 array: {
21604 value: function array(childType, length) {
21605 return new ArrayReference(childType, length);
21606 }
21607 },
21608 varArray: {
21609 value: function varArray(childType, maxLength) {
21610 return new ArrayReference(childType, maxLength, true);
21611 }
21612 },
21613 option: {
21614 value: function option(childType) {
21615 return new OptionReference(childType);
21616 }
21617 },
21618 define: {
21619 value: function define(name, definition) {
21620 if (isUndefined(this._destination[name])) {
21621 this._definitions[name] = definition;
21622 } else {
21623 throw new Error("XDR Error:" + name + " is already defined");
21624 }
21625 }
21626 },
21627 lookup: {
21628 value: function lookup(name) {
21629 return new SimpleReference(name);
21630 }
21631 },
21632 resolve: {
21633 value: function resolve() {
21634 var _this = this;
21635
21636 each(this._definitions, function (defn, name) {
21637 defn.resolve({
21638 definitions: _this._definitions,
21639 results: _this._destination
21640 });
21641 });
21642 }
21643 }
21644 });
21645
21646 return TypeBuilder;
21647})();
21648},{"./types":139,"lodash/each":312,"lodash/isArray":323,"lodash/isPlainObject":335,"lodash/isUndefined":340,"lodash/map":343,"lodash/pick":346}],126:[function(require,module,exports){
21649(function (Buffer){
21650"use strict";
21651
21652var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21653
21654var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
21655
21656var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
21657
21658var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
21659
21660Object.defineProperty(exports, "__esModule", {
21661 value: true
21662});
21663
21664var BaseCursor = _interopRequire(require("cursor"));
21665
21666var calculatePadding = require("./util").calculatePadding;
21667
21668var Cursor = exports.Cursor = (function (_BaseCursor) {
21669 function Cursor() {
21670 _classCallCheck(this, Cursor);
21671
21672 if (_BaseCursor != null) {
21673 _BaseCursor.apply(this, arguments);
21674 }
21675 }
21676
21677 _inherits(Cursor, _BaseCursor);
21678
21679 _createClass(Cursor, {
21680 writeBufferPadded: {
21681 value: function writeBufferPadded(buffer) {
21682 var padding = calculatePadding(buffer.length);
21683 var paddingBuffer = Buffer.alloc(padding);
21684
21685 return this.copyFrom(new Cursor(buffer)).copyFrom(new Cursor(paddingBuffer));
21686 }
21687 }
21688 });
21689
21690 return Cursor;
21691})(BaseCursor);
21692}).call(this,require("buffer").Buffer)
21693},{"./util":143,"buffer":50,"cursor":73}],127:[function(require,module,exports){
21694"use strict";
21695
21696var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21697
21698Object.defineProperty(exports, "__esModule", {
21699 value: true
21700});
21701
21702var isNumber = _interopRequire(require("lodash/isNumber"));
21703
21704var includeIoMixin = _interopRequire(require("./io-mixin"));
21705
21706var Double = {
21707
21708 read: function read(io) {
21709 return io.readDoubleBE();
21710 },
21711
21712 write: function write(value, io) {
21713 if (!isNumber(value)) {
21714 throw new Error("XDR Write Error: not a number");
21715 }
21716
21717 io.writeDoubleBE(value);
21718 },
21719
21720 isValid: function isValid(value) {
21721 return isNumber(value);
21722 } };
21723
21724exports.Double = Double;
21725includeIoMixin(Double);
21726},{"./io-mixin":133,"lodash/isNumber":332}],128:[function(require,module,exports){
21727"use strict";
21728
21729var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21730
21731var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
21732
21733var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
21734
21735var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
21736
21737var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
21738
21739Object.defineProperty(exports, "__esModule", {
21740 value: true
21741});
21742
21743var Int = require("./int").Int;
21744
21745var each = _interopRequire(require("lodash/each"));
21746
21747var vals = _interopRequire(require("lodash/values"));
21748
21749var includeIoMixin = _interopRequire(require("./io-mixin"));
21750
21751var Enum = exports.Enum = (function () {
21752 function Enum(name, value) {
21753 _classCallCheck(this, Enum);
21754
21755 this.name = name;
21756 this.value = value;
21757 }
21758
21759 _createClass(Enum, null, {
21760 read: {
21761 value: function read(io) {
21762 var intVal = Int.read(io);
21763
21764 if (!this._byValue.has(intVal)) {
21765 throw new Error("XDR Read Error: Unknown " + this.enumName + " member for value " + intVal);
21766 }
21767
21768 return this._byValue.get(intVal);
21769 }
21770 },
21771 write: {
21772 value: function write(value, io) {
21773 if (!(value instanceof this)) {
21774 throw new Error("XDR Write Error: Unknown " + value + " is not a " + this.enumName);
21775 }
21776
21777 Int.write(value.value, io);
21778 }
21779 },
21780 isValid: {
21781 value: function isValid(value) {
21782 return value instanceof this;
21783 }
21784 },
21785 members: {
21786 value: function members() {
21787 return this._members;
21788 }
21789 },
21790 values: {
21791 value: function values() {
21792 return vals(this._members);
21793 }
21794 },
21795 fromName: {
21796 value: function fromName(name) {
21797 var result = this._members[name];
21798
21799 if (!result) {
21800 throw new Error("" + name + " is not a member of " + this.enumName);
21801 }
21802
21803 return result;
21804 }
21805 },
21806 fromValue: {
21807 value: function fromValue(value) {
21808 var result = this._byValue.get(value);
21809
21810 if (!result) {
21811 throw new Error("" + value + " is not a value of any member of " + this.enumName);
21812 }
21813
21814 return result;
21815 }
21816 },
21817 create: {
21818 value: function create(context, name, members) {
21819 var ChildEnum = (function (_Enum) {
21820 var _class = function ChildEnum() {
21821 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
21822 args[_key] = arguments[_key];
21823 }
21824
21825 _classCallCheck(this, _class);
21826
21827 _get(Object.getPrototypeOf(_class.prototype), "constructor", this).apply(this, args);
21828 };
21829
21830 _inherits(_class, _Enum);
21831
21832 return _class;
21833 })(Enum);
21834
21835 ChildEnum.enumName = name;
21836 context.results[name] = ChildEnum;
21837
21838 ChildEnum._members = {};
21839 ChildEnum._byValue = new Map();
21840
21841 each(members, function (value, key) {
21842 var inst = new ChildEnum(key, value);
21843 ChildEnum._members[key] = inst;
21844 ChildEnum._byValue.set(value, inst);
21845 ChildEnum[key] = function () {
21846 return inst;
21847 };
21848 });
21849
21850 return ChildEnum;
21851 }
21852 }
21853 });
21854
21855 return Enum;
21856})();
21857
21858includeIoMixin(Enum);
21859},{"./int":132,"./io-mixin":133,"lodash/each":312,"lodash/values":356}],129:[function(require,module,exports){
21860"use strict";
21861
21862var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21863
21864Object.defineProperty(exports, "__esModule", {
21865 value: true
21866});
21867
21868var isNumber = _interopRequire(require("lodash/isNumber"));
21869
21870var includeIoMixin = _interopRequire(require("./io-mixin"));
21871
21872var Float = {
21873
21874 read: function read(io) {
21875 return io.readFloatBE();
21876 },
21877
21878 write: function write(value, io) {
21879 if (!isNumber(value)) {
21880 throw new Error("XDR Write Error: not a number");
21881 }
21882
21883 io.writeFloatBE(value);
21884 },
21885
21886 isValid: function isValid(value) {
21887 return isNumber(value);
21888 } };
21889
21890exports.Float = Float;
21891includeIoMixin(Float);
21892},{"./io-mixin":133,"lodash/isNumber":332}],130:[function(require,module,exports){
21893"use strict";
21894
21895var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21896
21897var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
21898
21899var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
21900
21901var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
21902
21903var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
21904
21905Object.defineProperty(exports, "__esModule", {
21906 value: true
21907});
21908
21909var Long = _interopRequire(require("long"));
21910
21911var includeIoMixin = _interopRequire(require("./io-mixin"));
21912
21913var Hyper = exports.Hyper = (function (_Long) {
21914 function Hyper(low, high) {
21915 _classCallCheck(this, Hyper);
21916
21917 _get(Object.getPrototypeOf(Hyper.prototype), "constructor", this).call(this, low, high, false);
21918 }
21919
21920 _inherits(Hyper, _Long);
21921
21922 _createClass(Hyper, null, {
21923 read: {
21924 value: function read(io) {
21925 var high = io.readInt32BE();
21926 var low = io.readInt32BE();
21927 return this.fromBits(low, high);
21928 }
21929 },
21930 write: {
21931 value: function write(value, io) {
21932 if (!(value instanceof this)) {
21933 throw new Error("XDR Write Error: " + value + " is not a Hyper");
21934 }
21935
21936 io.writeInt32BE(value.high);
21937 io.writeInt32BE(value.low);
21938 }
21939 },
21940 fromString: {
21941 value: function fromString(string) {
21942 if (!/^-?\d+$/.test(string)) {
21943 throw new Error("Invalid hyper string: " + string);
21944 }
21945 var result = _get(Object.getPrototypeOf(Hyper), "fromString", this).call(this, string, false);
21946 return new this(result.low, result.high);
21947 }
21948 },
21949 fromBits: {
21950 value: function fromBits(low, high) {
21951 var result = _get(Object.getPrototypeOf(Hyper), "fromBits", this).call(this, low, high, false);
21952 return new this(result.low, result.high);
21953 }
21954 },
21955 isValid: {
21956 value: function isValid(value) {
21957 return value instanceof this;
21958 }
21959 }
21960 });
21961
21962 return Hyper;
21963})(Long);
21964
21965includeIoMixin(Hyper);
21966
21967Hyper.MAX_VALUE = new Hyper(Long.MAX_VALUE.low, Long.MAX_VALUE.high);
21968Hyper.MIN_VALUE = new Hyper(Long.MIN_VALUE.low, Long.MIN_VALUE.high);
21969},{"./io-mixin":133,"long":357}],131:[function(require,module,exports){
21970"use strict";
21971
21972var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
21973
21974var _defaults = function (obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; };
21975
21976Object.defineProperty(exports, "__esModule", {
21977 value: true
21978});
21979
21980_defaults(exports, _interopRequireWildcard(require("./types")));
21981
21982var _config = require("./config");
21983
21984_defaults(exports, _interopRequireWildcard(_config));
21985
21986var config = _config.config;
21987},{"./config":125,"./types":139}],132:[function(require,module,exports){
21988"use strict";
21989
21990var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
21991
21992Object.defineProperty(exports, "__esModule", {
21993 value: true
21994});
21995
21996var isNumber = _interopRequire(require("lodash/isNumber"));
21997
21998var includeIoMixin = _interopRequire(require("./io-mixin"));
21999
22000var Int = {
22001
22002 read: function read(io) {
22003 return io.readInt32BE();
22004 },
22005
22006 write: function write(value, io) {
22007 if (!isNumber(value)) {
22008 throw new Error("XDR Write Error: not a number");
22009 }
22010
22011 if (Math.floor(value) !== value) {
22012 throw new Error("XDR Write Error: not an integer");
22013 }
22014
22015 io.writeInt32BE(value);
22016 },
22017
22018 isValid: function isValid(value) {
22019 if (!isNumber(value)) {
22020 return false;
22021 }
22022 if (Math.floor(value) !== value) {
22023 return false;
22024 }
22025
22026 return value >= Int.MIN_VALUE && value <= Int.MAX_VALUE;
22027 } };
22028
22029exports.Int = Int;
22030Int.MAX_VALUE = Math.pow(2, 31) - 1;
22031Int.MIN_VALUE = -Math.pow(2, 31);
22032
22033includeIoMixin(Int);
22034},{"./io-mixin":133,"lodash/isNumber":332}],133:[function(require,module,exports){
22035(function (Buffer){
22036"use strict";
22037
22038var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22039
22040module.exports = includeIoMixin;
22041
22042var Cursor = require("./cursor").Cursor;
22043
22044var extend = _interopRequire(require("lodash/extend"));
22045
22046var isFunction = _interopRequire(require("lodash/isFunction"));
22047
22048//TODO: build a system to grow a buffer as we write to it
22049var BUFFER_SIZE = Math.pow(2, 16);
22050
22051var staticMethods = {
22052 toXDR: function toXDR(val) {
22053 var cursor = new Cursor(BUFFER_SIZE);
22054 this.write(val, cursor);
22055 var bytesWritten = cursor.tell();
22056 cursor.rewind();
22057
22058 return cursor.slice(bytesWritten).buffer();
22059 },
22060
22061 fromXDR: function fromXDR(input) {
22062 var format = arguments[1] === undefined ? "raw" : arguments[1];
22063
22064 var buffer = undefined;
22065 switch (format) {
22066 case "raw":
22067 buffer = input;break;
22068 case "hex":
22069 buffer = Buffer.from(input, "hex");break;
22070 case "base64":
22071 buffer = Buffer.from(input, "base64");break;
22072 default:
22073 throw new Error("Invalid format " + format + ", must be \"raw\", \"hex\", \"base64\"");
22074 }
22075
22076 var cursor = new Cursor(buffer);
22077 var result = this.read(cursor);
22078
22079 //TODO: error out if the entire buffer isn't consumed
22080
22081 return result;
22082 } };
22083
22084var instanceMethods = {
22085 toXDR: function toXDR() {
22086 var format = arguments[0] === undefined ? "raw" : arguments[0];
22087
22088 var buffer = this.constructor.toXDR(this);
22089 switch (format) {
22090 case "raw":
22091 return buffer;
22092 case "hex":
22093 return buffer.toString("hex");
22094 case "base64":
22095 return buffer.toString("base64");
22096 default:
22097 throw new Error("Invalid format " + format + ", must be \"raw\", \"hex\", \"base64\"");
22098 }
22099 }
22100};
22101
22102function includeIoMixin(obj) {
22103 extend(obj, staticMethods);
22104
22105 if (isFunction(obj)) {
22106 extend(obj.prototype, instanceMethods);
22107 }
22108}
22109}).call(this,require("buffer").Buffer)
22110},{"./cursor":126,"buffer":50,"lodash/extend":315,"lodash/isFunction":328}],134:[function(require,module,exports){
22111(function (Buffer){
22112"use strict";
22113
22114var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22115
22116var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22117
22118var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22119
22120Object.defineProperty(exports, "__esModule", {
22121 value: true
22122});
22123
22124var _util = require("./util");
22125
22126var calculatePadding = _util.calculatePadding;
22127var slicePadding = _util.slicePadding;
22128
22129var includeIoMixin = _interopRequire(require("./io-mixin"));
22130
22131var Opaque = exports.Opaque = (function () {
22132 function Opaque(length) {
22133 _classCallCheck(this, Opaque);
22134
22135 this._length = length;
22136 this._padding = calculatePadding(length);
22137 }
22138
22139 _createClass(Opaque, {
22140 read: {
22141 value: function read(io) {
22142 var result = io.slice(this._length);
22143 slicePadding(io, this._padding);
22144 return result.buffer();
22145 }
22146 },
22147 write: {
22148 value: function write(value, io) {
22149 if (value.length !== this._length) {
22150 throw new Error("XDR Write Error: Got " + value.length + " bytes, expected " + this._length);
22151 }
22152
22153 io.writeBufferPadded(value);
22154 }
22155 },
22156 isValid: {
22157 value: function isValid(value) {
22158 return Buffer.isBuffer(value) && value.length === this._length;
22159 }
22160 }
22161 });
22162
22163 return Opaque;
22164})();
22165
22166includeIoMixin(Opaque.prototype);
22167}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
22168},{"../../is-buffer/index.js":120,"./io-mixin":133,"./util":143}],135:[function(require,module,exports){
22169"use strict";
22170
22171var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22172
22173var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22174
22175var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22176
22177Object.defineProperty(exports, "__esModule", {
22178 value: true
22179});
22180
22181var Bool = require("./bool").Bool;
22182
22183var isNull = _interopRequire(require("lodash/isNull"));
22184
22185var isUndefined = _interopRequire(require("lodash/isUndefined"));
22186
22187var includeIoMixin = _interopRequire(require("./io-mixin"));
22188
22189var Option = exports.Option = (function () {
22190 function Option(childType) {
22191 _classCallCheck(this, Option);
22192
22193 this._childType = childType;
22194 }
22195
22196 _createClass(Option, {
22197 read: {
22198 value: function read(io) {
22199 if (Bool.read(io)) {
22200 return this._childType.read(io);
22201 }
22202 }
22203 },
22204 write: {
22205 value: function write(value, io) {
22206 var isPresent = !(isNull(value) || isUndefined(value));
22207
22208 Bool.write(isPresent, io);
22209
22210 if (isPresent) {
22211 this._childType.write(value, io);
22212 }
22213 }
22214 },
22215 isValid: {
22216 value: function isValid(value) {
22217 if (isNull(value)) {
22218 return true;
22219 }
22220 if (isUndefined(value)) {
22221 return true;
22222 }
22223
22224 return this._childType.isValid(value);
22225 }
22226 }
22227 });
22228
22229 return Option;
22230})();
22231
22232includeIoMixin(Option.prototype);
22233},{"./bool":124,"./io-mixin":133,"lodash/isNull":331,"lodash/isUndefined":340}],136:[function(require,module,exports){
22234"use strict";
22235
22236var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22237
22238Object.defineProperty(exports, "__esModule", {
22239 value: true
22240});
22241
22242var includeIoMixin = _interopRequire(require("./io-mixin"));
22243
22244var Quadruple = {
22245 /* jshint unused: false */
22246
22247 read: function read(io) {
22248 throw new Error("XDR Read Error: quadruple not supported");
22249 },
22250
22251 write: function write(value, io) {
22252 throw new Error("XDR Write Error: quadruple not supported");
22253 },
22254
22255 isValid: function isValid(value) {
22256 return false;
22257 } };
22258
22259exports.Quadruple = Quadruple;
22260includeIoMixin(Quadruple);
22261},{"./io-mixin":133}],137:[function(require,module,exports){
22262(function (Buffer){
22263"use strict";
22264
22265var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22266
22267var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22268
22269var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22270
22271Object.defineProperty(exports, "__esModule", {
22272 value: true
22273});
22274
22275var Int = require("./int").Int;
22276
22277var UnsignedInt = require("./unsigned-int").UnsignedInt;
22278
22279var _util = require("./util");
22280
22281var calculatePadding = _util.calculatePadding;
22282var slicePadding = _util.slicePadding;
22283
22284var isString = _interopRequire(require("lodash/isString"));
22285
22286var isArray = _interopRequire(require("lodash/isArray"));
22287
22288var includeIoMixin = _interopRequire(require("./io-mixin"));
22289
22290var String = exports.String = (function () {
22291 function String() {
22292 var maxLength = arguments[0] === undefined ? UnsignedInt.MAX_VALUE : arguments[0];
22293
22294 _classCallCheck(this, String);
22295
22296 this._maxLength = maxLength;
22297 }
22298
22299 _createClass(String, {
22300 read: {
22301 value: function read(io) {
22302 var length = Int.read(io);
22303
22304 if (length > this._maxLength) {
22305 throw new Error("XDR Read Error: Saw " + length + " length String," + ("max allowed is " + this._maxLength));
22306 }
22307 var padding = calculatePadding(length);
22308 var result = io.slice(length);
22309 slicePadding(io, padding);
22310 return result.buffer();
22311 }
22312 },
22313 readString: {
22314 value: function readString(io) {
22315 return this.read(io).toString("utf8");
22316 }
22317 },
22318 write: {
22319 value: function write(value, io) {
22320 if (value.length > this._maxLength) {
22321 throw new Error("XDR Write Error: Got " + value.length + " bytes," + ("max allows is " + this._maxLength));
22322 }
22323
22324 var buffer = undefined;
22325 if (isString(value)) {
22326 buffer = Buffer.from(value, "utf8");
22327 } else {
22328 buffer = Buffer.from(value);
22329 }
22330
22331 Int.write(buffer.length, io);
22332 io.writeBufferPadded(buffer);
22333 }
22334 },
22335 isValid: {
22336 value: function isValid(value) {
22337 var buffer = undefined;
22338 if (isString(value)) {
22339 buffer = Buffer.from(value, "utf8");
22340 } else if (isArray(value) || Buffer.isBuffer(value)) {
22341 buffer = Buffer.from(value);
22342 } else {
22343 return false;
22344 }
22345 return buffer.length <= this._maxLength;
22346 }
22347 }
22348 });
22349
22350 return String;
22351})();
22352
22353includeIoMixin(String.prototype);
22354}).call(this,require("buffer").Buffer)
22355},{"./int":132,"./io-mixin":133,"./unsigned-int":142,"./util":143,"buffer":50,"lodash/isArray":323,"lodash/isString":337}],138:[function(require,module,exports){
22356"use strict";
22357
22358var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22359
22360var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } };
22361
22362var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
22363
22364var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
22365
22366var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22367
22368var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22369
22370Object.defineProperty(exports, "__esModule", {
22371 value: true
22372});
22373
22374var each = _interopRequire(require("lodash/each"));
22375
22376var map = _interopRequire(require("lodash/map"));
22377
22378var isUndefined = _interopRequire(require("lodash/isUndefined"));
22379
22380var fromPairs = _interopRequire(require("lodash/fromPairs"));
22381
22382var Reference = require("./config").Reference;
22383
22384var includeIoMixin = _interopRequire(require("./io-mixin"));
22385
22386var Struct = exports.Struct = (function () {
22387 function Struct(attributes) {
22388 _classCallCheck(this, Struct);
22389
22390 this._attributes = attributes || {};
22391 }
22392
22393 _createClass(Struct, null, {
22394 read: {
22395 value: function read(io) {
22396 var fields = map(this._fields, function (field) {
22397 var _field = _slicedToArray(field, 2);
22398
22399 var name = _field[0];
22400 var type = _field[1];
22401
22402 var value = type.read(io);
22403 return [name, value];
22404 });
22405
22406 return new this(fromPairs(fields));
22407 }
22408 },
22409 write: {
22410 value: function write(value, io) {
22411 if (!(value instanceof this)) {
22412 throw new Error("XDR Write Error: " + value + " is not a " + this.structName);
22413 }
22414 each(this._fields, function (field) {
22415 var _field = _slicedToArray(field, 2);
22416
22417 var name = _field[0];
22418 var type = _field[1];
22419
22420 var attribute = value._attributes[name];
22421 type.write(attribute, io);
22422 });
22423 }
22424 },
22425 isValid: {
22426 value: function isValid(value) {
22427 return value instanceof this;
22428 }
22429 },
22430 create: {
22431 value: function create(context, name, fields) {
22432 var ChildStruct = (function (_Struct) {
22433 var _class = function ChildStruct() {
22434 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
22435 args[_key] = arguments[_key];
22436 }
22437
22438 _classCallCheck(this, _class);
22439
22440 _get(Object.getPrototypeOf(_class.prototype), "constructor", this).apply(this, args);
22441 };
22442
22443 _inherits(_class, _Struct);
22444
22445 return _class;
22446 })(Struct);
22447
22448 ChildStruct.structName = name;
22449
22450 context.results[name] = ChildStruct;
22451
22452 ChildStruct._fields = fields.map(function (_ref) {
22453 var _ref2 = _slicedToArray(_ref, 2);
22454
22455 var name = _ref2[0];
22456 var field = _ref2[1];
22457
22458 if (field instanceof Reference) {
22459 field = field.resolve(context);
22460 }
22461
22462 return [name, field];
22463 });
22464
22465 each(ChildStruct._fields, function (field) {
22466 var _field = _slicedToArray(field, 1);
22467
22468 var fieldName = _field[0];
22469
22470 ChildStruct.prototype[fieldName] = readOrWriteAttribute(fieldName);
22471 });
22472
22473 return ChildStruct;
22474 }
22475 }
22476 });
22477
22478 return Struct;
22479})();
22480
22481includeIoMixin(Struct);
22482
22483function readOrWriteAttribute(name) {
22484 return function (value) {
22485 if (!isUndefined(value)) {
22486 this._attributes[name] = value;
22487 }
22488
22489 return this._attributes[name];
22490 };
22491}
22492},{"./config":125,"./io-mixin":133,"lodash/each":312,"lodash/fromPairs":318,"lodash/isUndefined":340,"lodash/map":343}],139:[function(require,module,exports){
22493"use strict";
22494
22495var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
22496
22497var _defaults = function (obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; };
22498
22499Object.defineProperty(exports, "__esModule", {
22500 value: true
22501});
22502
22503_defaults(exports, _interopRequireWildcard(require("./int")));
22504
22505_defaults(exports, _interopRequireWildcard(require("./hyper")));
22506
22507_defaults(exports, _interopRequireWildcard(require("./unsigned-int")));
22508
22509_defaults(exports, _interopRequireWildcard(require("./unsigned-hyper")));
22510
22511_defaults(exports, _interopRequireWildcard(require("./float")));
22512
22513_defaults(exports, _interopRequireWildcard(require("./double")));
22514
22515_defaults(exports, _interopRequireWildcard(require("./quadruple")));
22516
22517_defaults(exports, _interopRequireWildcard(require("./bool")));
22518
22519_defaults(exports, _interopRequireWildcard(require("./string")));
22520
22521_defaults(exports, _interopRequireWildcard(require("./opaque")));
22522
22523_defaults(exports, _interopRequireWildcard(require("./var-opaque")));
22524
22525_defaults(exports, _interopRequireWildcard(require("./array")));
22526
22527_defaults(exports, _interopRequireWildcard(require("./var-array")));
22528
22529_defaults(exports, _interopRequireWildcard(require("./option")));
22530
22531_defaults(exports, _interopRequireWildcard(require("./void")));
22532
22533_defaults(exports, _interopRequireWildcard(require("./enum")));
22534
22535_defaults(exports, _interopRequireWildcard(require("./struct")));
22536
22537_defaults(exports, _interopRequireWildcard(require("./union")));
22538},{"./array":123,"./bool":124,"./double":127,"./enum":128,"./float":129,"./hyper":130,"./int":132,"./opaque":134,"./option":135,"./quadruple":136,"./string":137,"./struct":138,"./union":140,"./unsigned-hyper":141,"./unsigned-int":142,"./var-array":144,"./var-opaque":145,"./void":146}],140:[function(require,module,exports){
22539"use strict";
22540
22541var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22542
22543var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } };
22544
22545var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
22546
22547var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
22548
22549var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22550
22551var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22552
22553Object.defineProperty(exports, "__esModule", {
22554 value: true
22555});
22556
22557var each = _interopRequire(require("lodash/each"));
22558
22559var isUndefined = _interopRequire(require("lodash/isUndefined"));
22560
22561var isString = _interopRequire(require("lodash/isString"));
22562
22563var Void = require("./void").Void;
22564
22565var Reference = require("./config").Reference;
22566
22567var includeIoMixin = _interopRequire(require("./io-mixin"));
22568
22569var Union = exports.Union = (function () {
22570 function Union(aSwitch, value) {
22571 _classCallCheck(this, Union);
22572
22573 this.set(aSwitch, value);
22574 }
22575
22576 _createClass(Union, {
22577 set: {
22578 value: function set(aSwitch, value) {
22579 if (isString(aSwitch)) {
22580 aSwitch = this.constructor._switchOn.fromName(aSwitch);
22581 }
22582
22583 this._switch = aSwitch;
22584 this._arm = this.constructor.armForSwitch(this._switch);
22585 this._armType = this.constructor.armTypeForArm(this._arm);
22586 this._value = value;
22587 }
22588 },
22589 get: {
22590 value: function get() {
22591 var armName = arguments[0] === undefined ? this._arm : arguments[0];
22592
22593 if (this._arm !== Void && this._arm !== armName) {
22594 throw new Error("" + armName + " not set");
22595 }
22596 return this._value;
22597 }
22598 },
22599 "switch": {
22600 value: function _switch() {
22601 return this._switch;
22602 }
22603 },
22604 arm: {
22605 value: function arm() {
22606 return this._arm;
22607 }
22608 },
22609 armType: {
22610 value: function armType() {
22611 return this._armType;
22612 }
22613 },
22614 value: {
22615 value: function value() {
22616 return this._value;
22617 }
22618 }
22619 }, {
22620 armForSwitch: {
22621 value: function armForSwitch(aSwitch) {
22622 if (this._switches.has(aSwitch)) {
22623 return this._switches.get(aSwitch);
22624 } else if (this._defaultArm) {
22625 return this._defaultArm;
22626 } else {
22627 throw new Error("Bad union switch: " + aSwitch);
22628 }
22629 }
22630 },
22631 armTypeForArm: {
22632 value: function armTypeForArm(arm) {
22633 if (arm === Void) {
22634 return Void;
22635 } else {
22636 return this._arms[arm];
22637 }
22638 }
22639 },
22640 read: {
22641 value: function read(io) {
22642 var aSwitch = this._switchOn.read(io);
22643 var arm = this.armForSwitch(aSwitch);
22644 var armType = this.armTypeForArm(arm);
22645 var value = armType.read(io);
22646 return new this(aSwitch, value);
22647 }
22648 },
22649 write: {
22650 value: function write(value, io) {
22651 if (!(value instanceof this)) {
22652 throw new Error("XDR Write Error: " + value + " is not a " + this.unionName);
22653 }
22654
22655 this._switchOn.write(value["switch"](), io);
22656 value.armType().write(value.value(), io);
22657 }
22658 },
22659 isValid: {
22660 value: function isValid(value) {
22661 return value instanceof this;
22662 }
22663 },
22664 create: {
22665 value: function create(context, name, config) {
22666 var ChildUnion = (function (_Union) {
22667 var _class = function ChildUnion() {
22668 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
22669 args[_key] = arguments[_key];
22670 }
22671
22672 _classCallCheck(this, _class);
22673
22674 _get(Object.getPrototypeOf(_class.prototype), "constructor", this).apply(this, args);
22675 };
22676
22677 _inherits(_class, _Union);
22678
22679 return _class;
22680 })(Union);
22681
22682 ChildUnion.unionName = name;
22683 context.results[name] = ChildUnion;
22684
22685 if (config.switchOn instanceof Reference) {
22686 ChildUnion._switchOn = config.switchOn.resolve(context);
22687 } else {
22688 ChildUnion._switchOn = config.switchOn;
22689 }
22690
22691 ChildUnion._switches = new Map();
22692 ChildUnion._arms = {};
22693
22694 each(config.arms, function (value, name) {
22695 if (value instanceof Reference) {
22696 value = value.resolve(context);
22697 }
22698
22699 ChildUnion._arms[name] = value;
22700 });
22701
22702 // resolve default arm
22703 var defaultArm = config.defaultArm;
22704 if (defaultArm instanceof Reference) {
22705 defaultArm = defaultArm.resolve(context);
22706 }
22707
22708 ChildUnion._defaultArm = defaultArm;
22709
22710 each(config.switches, function (_ref) {
22711 var _ref2 = _slicedToArray(_ref, 2);
22712
22713 var aSwitch = _ref2[0];
22714 var armName = _ref2[1];
22715
22716 if (isString(aSwitch)) {
22717 aSwitch = ChildUnion._switchOn.fromName(aSwitch);
22718 }
22719
22720 ChildUnion._switches.set(aSwitch, armName);
22721 });
22722
22723 // add enum-based helpers
22724 // NOTE: we don't have good notation for "is a subclass of XDR.Enum",
22725 // and so we use the following check (does _switchOn have a `values`
22726 // attribute) to approximate the intent.
22727 if (!isUndefined(ChildUnion._switchOn.values)) {
22728 each(ChildUnion._switchOn.values(), function (aSwitch) {
22729 // Add enum-based constrocutors
22730 ChildUnion[aSwitch.name] = function (value) {
22731 return new ChildUnion(aSwitch, value);
22732 };
22733
22734 // Add enum-based "set" helpers
22735 ChildUnion.prototype[aSwitch.name] = function (value) {
22736 return this.set(aSwitch, value);
22737 };
22738 });
22739 }
22740
22741 // Add arm accessor helpers
22742 each(ChildUnion._arms, function (type, name) {
22743 if (type === Void) {
22744 return;
22745 }
22746
22747 ChildUnion.prototype[name] = function () {
22748 return this.get(name);
22749 };
22750 });
22751
22752 return ChildUnion;
22753 }
22754 }
22755 });
22756
22757 return Union;
22758})();
22759
22760includeIoMixin(Union);
22761},{"./config":125,"./io-mixin":133,"./void":146,"lodash/each":312,"lodash/isString":337,"lodash/isUndefined":340}],141:[function(require,module,exports){
22762"use strict";
22763
22764var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22765
22766var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22767
22768var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
22769
22770var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
22771
22772var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22773
22774Object.defineProperty(exports, "__esModule", {
22775 value: true
22776});
22777
22778var Long = _interopRequire(require("long"));
22779
22780var includeIoMixin = _interopRequire(require("./io-mixin"));
22781
22782var UnsignedHyper = exports.UnsignedHyper = (function (_Long) {
22783 function UnsignedHyper(low, high) {
22784 _classCallCheck(this, UnsignedHyper);
22785
22786 _get(Object.getPrototypeOf(UnsignedHyper.prototype), "constructor", this).call(this, low, high, true);
22787 }
22788
22789 _inherits(UnsignedHyper, _Long);
22790
22791 _createClass(UnsignedHyper, null, {
22792 read: {
22793 value: function read(io) {
22794 var high = io.readInt32BE();
22795 var low = io.readInt32BE();
22796 return this.fromBits(low, high);
22797 }
22798 },
22799 write: {
22800 value: function write(value, io) {
22801 if (!(value instanceof this)) {
22802 throw new Error("XDR Write Error: " + value + " is not an UnsignedHyper");
22803 }
22804
22805 io.writeInt32BE(value.high);
22806 io.writeInt32BE(value.low);
22807 }
22808 },
22809 fromString: {
22810 value: function fromString(string) {
22811 if (!/^\d+$/.test(string)) {
22812 throw new Error("Invalid hyper string: " + string);
22813 }
22814 var result = _get(Object.getPrototypeOf(UnsignedHyper), "fromString", this).call(this, string, true);
22815 return new this(result.low, result.high);
22816 }
22817 },
22818 fromBits: {
22819 value: function fromBits(low, high) {
22820 var result = _get(Object.getPrototypeOf(UnsignedHyper), "fromBits", this).call(this, low, high, true);
22821 return new this(result.low, result.high);
22822 }
22823 },
22824 isValid: {
22825 value: function isValid(value) {
22826 return value instanceof this;
22827 }
22828 }
22829 });
22830
22831 return UnsignedHyper;
22832})(Long);
22833
22834includeIoMixin(UnsignedHyper);
22835
22836UnsignedHyper.MAX_VALUE = new UnsignedHyper(Long.MAX_UNSIGNED_VALUE.low, Long.MAX_UNSIGNED_VALUE.high);
22837
22838UnsignedHyper.MIN_VALUE = new UnsignedHyper(Long.MIN_VALUE.low, Long.MIN_VALUE.high);
22839},{"./io-mixin":133,"long":357}],142:[function(require,module,exports){
22840"use strict";
22841
22842var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22843
22844Object.defineProperty(exports, "__esModule", {
22845 value: true
22846});
22847
22848var isNumber = _interopRequire(require("lodash/isNumber"));
22849
22850var includeIoMixin = _interopRequire(require("./io-mixin"));
22851
22852var UnsignedInt = {
22853
22854 read: function read(io) {
22855 return io.readUInt32BE();
22856 },
22857
22858 write: function write(value, io) {
22859 if (!isNumber(value)) {
22860 throw new Error("XDR Write Error: not a number");
22861 }
22862
22863 if (Math.floor(value) !== value) {
22864 throw new Error("XDR Write Error: not an integer");
22865 }
22866
22867 if (value < 0) {
22868 throw new Error("XDR Write Error: negative number " + value);
22869 }
22870
22871 io.writeUInt32BE(value);
22872 },
22873
22874 isValid: function isValid(value) {
22875 if (!isNumber(value)) {
22876 return false;
22877 }
22878 if (Math.floor(value) !== value) {
22879 return false;
22880 }
22881
22882 return value >= UnsignedInt.MIN_VALUE && value <= UnsignedInt.MAX_VALUE;
22883 } };
22884
22885exports.UnsignedInt = UnsignedInt;
22886UnsignedInt.MAX_VALUE = Math.pow(2, 32) - 1;
22887UnsignedInt.MIN_VALUE = 0;
22888
22889includeIoMixin(UnsignedInt);
22890},{"./io-mixin":133,"lodash/isNumber":332}],143:[function(require,module,exports){
22891"use strict";
22892
22893var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22894
22895exports.calculatePadding = calculatePadding;
22896exports.slicePadding = slicePadding;
22897Object.defineProperty(exports, "__esModule", {
22898 value: true
22899});
22900
22901var every = _interopRequire(require("lodash/every"));
22902
22903function calculatePadding(length) {
22904 switch (length % 4) {
22905 case 0:
22906 return 0;
22907 case 1:
22908 return 3;
22909 case 2:
22910 return 2;
22911 case 3:
22912 return 1;
22913 }
22914}
22915
22916function slicePadding(io, length) {
22917 var padding = io.slice(length);
22918 var allZero = every(padding.buffer(), function (byte) {
22919 return byte === 0;
22920 });
22921
22922 if (allZero !== true) {
22923 throw new Error("XDR Read Error: invalid padding");
22924 }
22925}
22926},{"lodash/every":314}],144:[function(require,module,exports){
22927"use strict";
22928
22929var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
22930
22931var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
22932
22933var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
22934
22935Object.defineProperty(exports, "__esModule", {
22936 value: true
22937});
22938
22939var Int = require("./int").Int;
22940
22941var UnsignedInt = require("./unsigned-int").UnsignedInt;
22942
22943var every = _interopRequire(require("lodash/every"));
22944
22945var each = _interopRequire(require("lodash/each"));
22946
22947var times = _interopRequire(require("lodash/times"));
22948
22949var isArray = _interopRequire(require("lodash/isArray"));
22950
22951var includeIoMixin = _interopRequire(require("./io-mixin"));
22952
22953var VarArray = exports.VarArray = (function () {
22954 function VarArray(childType) {
22955 var maxLength = arguments[1] === undefined ? UnsignedInt.MAX_VALUE : arguments[1];
22956
22957 _classCallCheck(this, VarArray);
22958
22959 this._childType = childType;
22960 this._maxLength = maxLength;
22961 }
22962
22963 _createClass(VarArray, {
22964 read: {
22965 value: function read(io) {
22966 var _this = this;
22967
22968 var length = Int.read(io);
22969
22970 if (length > this._maxLength) {
22971 throw new Error("XDR Read Error: Saw " + length + " length VarArray," + ("max allowed is " + this._maxLength));
22972 }
22973
22974 return times(length, function () {
22975 return _this._childType.read(io);
22976 });
22977 }
22978 },
22979 write: {
22980 value: function write(value, io) {
22981 var _this = this;
22982
22983 if (!isArray(value)) {
22984 throw new Error("XDR Write Error: value is not array");
22985 }
22986
22987 if (value.length > this._maxLength) {
22988 throw new Error("XDR Write Error: Got array of size " + value.length + "," + ("max allowed is " + this._maxLength));
22989 }
22990
22991 Int.write(value.length, io);
22992 each(value, function (child) {
22993 return _this._childType.write(child, io);
22994 });
22995 }
22996 },
22997 isValid: {
22998 value: function isValid(value) {
22999 var _this = this;
23000
23001 if (!isArray(value)) {
23002 return false;
23003 }
23004 if (value.length > this._maxLength) {
23005 return false;
23006 }
23007
23008 return every(value, function (child) {
23009 return _this._childType.isValid(child);
23010 });
23011 }
23012 }
23013 });
23014
23015 return VarArray;
23016})();
23017
23018includeIoMixin(VarArray.prototype);
23019},{"./int":132,"./io-mixin":133,"./unsigned-int":142,"lodash/each":312,"lodash/every":314,"lodash/isArray":323,"lodash/times":350}],145:[function(require,module,exports){
23020(function (Buffer){
23021"use strict";
23022
23023var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
23024
23025var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
23026
23027var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
23028
23029Object.defineProperty(exports, "__esModule", {
23030 value: true
23031});
23032
23033var Int = require("./int").Int;
23034
23035var UnsignedInt = require("./unsigned-int").UnsignedInt;
23036
23037var _util = require("./util");
23038
23039var calculatePadding = _util.calculatePadding;
23040var slicePadding = _util.slicePadding;
23041
23042var includeIoMixin = _interopRequire(require("./io-mixin"));
23043
23044var VarOpaque = exports.VarOpaque = (function () {
23045 function VarOpaque() {
23046 var maxLength = arguments[0] === undefined ? UnsignedInt.MAX_VALUE : arguments[0];
23047
23048 _classCallCheck(this, VarOpaque);
23049
23050 this._maxLength = maxLength;
23051 }
23052
23053 _createClass(VarOpaque, {
23054 read: {
23055 value: function read(io) {
23056 var length = Int.read(io);
23057
23058 if (length > this._maxLength) {
23059 throw new Error("XDR Read Error: Saw " + length + " length VarOpaque," + ("max allowed is " + this._maxLength));
23060 }
23061 var padding = calculatePadding(length);
23062 var result = io.slice(length);
23063 slicePadding(io, padding);
23064 return result.buffer();
23065 }
23066 },
23067 write: {
23068 value: function write(value, io) {
23069 if (value.length > this._maxLength) {
23070 throw new Error("XDR Write Error: Got " + value.length + " bytes," + ("max allows is " + this._maxLength));
23071 }
23072 Int.write(value.length, io);
23073 io.writeBufferPadded(value);
23074 }
23075 },
23076 isValid: {
23077 value: function isValid(value) {
23078 return Buffer.isBuffer(value) && value.length <= this._maxLength;
23079 }
23080 }
23081 });
23082
23083 return VarOpaque;
23084})();
23085
23086includeIoMixin(VarOpaque.prototype);
23087}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
23088},{"../../is-buffer/index.js":120,"./int":132,"./io-mixin":133,"./unsigned-int":142,"./util":143}],146:[function(require,module,exports){
23089"use strict";
23090
23091var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
23092
23093Object.defineProperty(exports, "__esModule", {
23094 value: true
23095});
23096
23097var isUndefined = _interopRequire(require("lodash/isUndefined"));
23098
23099var includeIoMixin = _interopRequire(require("./io-mixin"));
23100
23101var Void = {
23102 /* jshint unused: false */
23103
23104 read: function read(io) {
23105 return undefined;
23106 },
23107
23108 write: function write(value, io) {
23109 if (!isUndefined(value)) {
23110 throw new Error("XDR Write Error: trying to write value to a void slot");
23111 }
23112 },
23113
23114 isValid: function isValid(value) {
23115 return isUndefined(value);
23116 } };
23117
23118exports.Void = Void;
23119includeIoMixin(Void);
23120},{"./io-mixin":133,"lodash/isUndefined":340}],147:[function(require,module,exports){
23121var getNative = require('./_getNative'),
23122 root = require('./_root');
23123
23124/* Built-in method references that are verified to be native. */
23125var DataView = getNative(root, 'DataView');
23126
23127module.exports = DataView;
23128
23129},{"./_getNative":245,"./_root":290}],148:[function(require,module,exports){
23130var hashClear = require('./_hashClear'),
23131 hashDelete = require('./_hashDelete'),
23132 hashGet = require('./_hashGet'),
23133 hashHas = require('./_hashHas'),
23134 hashSet = require('./_hashSet');
23135
23136/**
23137 * Creates a hash object.
23138 *
23139 * @private
23140 * @constructor
23141 * @param {Array} [entries] The key-value pairs to cache.
23142 */
23143function Hash(entries) {
23144 var index = -1,
23145 length = entries == null ? 0 : entries.length;
23146
23147 this.clear();
23148 while (++index < length) {
23149 var entry = entries[index];
23150 this.set(entry[0], entry[1]);
23151 }
23152}
23153
23154// Add methods to `Hash`.
23155Hash.prototype.clear = hashClear;
23156Hash.prototype['delete'] = hashDelete;
23157Hash.prototype.get = hashGet;
23158Hash.prototype.has = hashHas;
23159Hash.prototype.set = hashSet;
23160
23161module.exports = Hash;
23162
23163},{"./_hashClear":254,"./_hashDelete":255,"./_hashGet":256,"./_hashHas":257,"./_hashSet":258}],149:[function(require,module,exports){
23164var listCacheClear = require('./_listCacheClear'),
23165 listCacheDelete = require('./_listCacheDelete'),
23166 listCacheGet = require('./_listCacheGet'),
23167 listCacheHas = require('./_listCacheHas'),
23168 listCacheSet = require('./_listCacheSet');
23169
23170/**
23171 * Creates an list cache object.
23172 *
23173 * @private
23174 * @constructor
23175 * @param {Array} [entries] The key-value pairs to cache.
23176 */
23177function ListCache(entries) {
23178 var index = -1,
23179 length = entries == null ? 0 : entries.length;
23180
23181 this.clear();
23182 while (++index < length) {
23183 var entry = entries[index];
23184 this.set(entry[0], entry[1]);
23185 }
23186}
23187
23188// Add methods to `ListCache`.
23189ListCache.prototype.clear = listCacheClear;
23190ListCache.prototype['delete'] = listCacheDelete;
23191ListCache.prototype.get = listCacheGet;
23192ListCache.prototype.has = listCacheHas;
23193ListCache.prototype.set = listCacheSet;
23194
23195module.exports = ListCache;
23196
23197},{"./_listCacheClear":270,"./_listCacheDelete":271,"./_listCacheGet":272,"./_listCacheHas":273,"./_listCacheSet":274}],150:[function(require,module,exports){
23198var getNative = require('./_getNative'),
23199 root = require('./_root');
23200
23201/* Built-in method references that are verified to be native. */
23202var Map = getNative(root, 'Map');
23203
23204module.exports = Map;
23205
23206},{"./_getNative":245,"./_root":290}],151:[function(require,module,exports){
23207var mapCacheClear = require('./_mapCacheClear'),
23208 mapCacheDelete = require('./_mapCacheDelete'),
23209 mapCacheGet = require('./_mapCacheGet'),
23210 mapCacheHas = require('./_mapCacheHas'),
23211 mapCacheSet = require('./_mapCacheSet');
23212
23213/**
23214 * Creates a map cache object to store key-value pairs.
23215 *
23216 * @private
23217 * @constructor
23218 * @param {Array} [entries] The key-value pairs to cache.
23219 */
23220function MapCache(entries) {
23221 var index = -1,
23222 length = entries == null ? 0 : entries.length;
23223
23224 this.clear();
23225 while (++index < length) {
23226 var entry = entries[index];
23227 this.set(entry[0], entry[1]);
23228 }
23229}
23230
23231// Add methods to `MapCache`.
23232MapCache.prototype.clear = mapCacheClear;
23233MapCache.prototype['delete'] = mapCacheDelete;
23234MapCache.prototype.get = mapCacheGet;
23235MapCache.prototype.has = mapCacheHas;
23236MapCache.prototype.set = mapCacheSet;
23237
23238module.exports = MapCache;
23239
23240},{"./_mapCacheClear":275,"./_mapCacheDelete":276,"./_mapCacheGet":277,"./_mapCacheHas":278,"./_mapCacheSet":279}],152:[function(require,module,exports){
23241var getNative = require('./_getNative'),
23242 root = require('./_root');
23243
23244/* Built-in method references that are verified to be native. */
23245var Promise = getNative(root, 'Promise');
23246
23247module.exports = Promise;
23248
23249},{"./_getNative":245,"./_root":290}],153:[function(require,module,exports){
23250var getNative = require('./_getNative'),
23251 root = require('./_root');
23252
23253/* Built-in method references that are verified to be native. */
23254var Set = getNative(root, 'Set');
23255
23256module.exports = Set;
23257
23258},{"./_getNative":245,"./_root":290}],154:[function(require,module,exports){
23259var MapCache = require('./_MapCache'),
23260 setCacheAdd = require('./_setCacheAdd'),
23261 setCacheHas = require('./_setCacheHas');
23262
23263/**
23264 *
23265 * Creates an array cache object to store unique values.
23266 *
23267 * @private
23268 * @constructor
23269 * @param {Array} [values] The values to cache.
23270 */
23271function SetCache(values) {
23272 var index = -1,
23273 length = values == null ? 0 : values.length;
23274
23275 this.__data__ = new MapCache;
23276 while (++index < length) {
23277 this.add(values[index]);
23278 }
23279}
23280
23281// Add methods to `SetCache`.
23282SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
23283SetCache.prototype.has = setCacheHas;
23284
23285module.exports = SetCache;
23286
23287},{"./_MapCache":151,"./_setCacheAdd":291,"./_setCacheHas":292}],155:[function(require,module,exports){
23288var ListCache = require('./_ListCache'),
23289 stackClear = require('./_stackClear'),
23290 stackDelete = require('./_stackDelete'),
23291 stackGet = require('./_stackGet'),
23292 stackHas = require('./_stackHas'),
23293 stackSet = require('./_stackSet');
23294
23295/**
23296 * Creates a stack cache object to store key-value pairs.
23297 *
23298 * @private
23299 * @constructor
23300 * @param {Array} [entries] The key-value pairs to cache.
23301 */
23302function Stack(entries) {
23303 var data = this.__data__ = new ListCache(entries);
23304 this.size = data.size;
23305}
23306
23307// Add methods to `Stack`.
23308Stack.prototype.clear = stackClear;
23309Stack.prototype['delete'] = stackDelete;
23310Stack.prototype.get = stackGet;
23311Stack.prototype.has = stackHas;
23312Stack.prototype.set = stackSet;
23313
23314module.exports = Stack;
23315
23316},{"./_ListCache":149,"./_stackClear":296,"./_stackDelete":297,"./_stackGet":298,"./_stackHas":299,"./_stackSet":300}],156:[function(require,module,exports){
23317var root = require('./_root');
23318
23319/** Built-in value references. */
23320var Symbol = root.Symbol;
23321
23322module.exports = Symbol;
23323
23324},{"./_root":290}],157:[function(require,module,exports){
23325var root = require('./_root');
23326
23327/** Built-in value references. */
23328var Uint8Array = root.Uint8Array;
23329
23330module.exports = Uint8Array;
23331
23332},{"./_root":290}],158:[function(require,module,exports){
23333var getNative = require('./_getNative'),
23334 root = require('./_root');
23335
23336/* Built-in method references that are verified to be native. */
23337var WeakMap = getNative(root, 'WeakMap');
23338
23339module.exports = WeakMap;
23340
23341},{"./_getNative":245,"./_root":290}],159:[function(require,module,exports){
23342/**
23343 * A faster alternative to `Function#apply`, this function invokes `func`
23344 * with the `this` binding of `thisArg` and the arguments of `args`.
23345 *
23346 * @private
23347 * @param {Function} func The function to invoke.
23348 * @param {*} thisArg The `this` binding of `func`.
23349 * @param {Array} args The arguments to invoke `func` with.
23350 * @returns {*} Returns the result of `func`.
23351 */
23352function apply(func, thisArg, args) {
23353 switch (args.length) {
23354 case 0: return func.call(thisArg);
23355 case 1: return func.call(thisArg, args[0]);
23356 case 2: return func.call(thisArg, args[0], args[1]);
23357 case 3: return func.call(thisArg, args[0], args[1], args[2]);
23358 }
23359 return func.apply(thisArg, args);
23360}
23361
23362module.exports = apply;
23363
23364},{}],160:[function(require,module,exports){
23365/**
23366 * A specialized version of `_.forEach` for arrays without support for
23367 * iteratee shorthands.
23368 *
23369 * @private
23370 * @param {Array} [array] The array to iterate over.
23371 * @param {Function} iteratee The function invoked per iteration.
23372 * @returns {Array} Returns `array`.
23373 */
23374function arrayEach(array, iteratee) {
23375 var index = -1,
23376 length = array == null ? 0 : array.length;
23377
23378 while (++index < length) {
23379 if (iteratee(array[index], index, array) === false) {
23380 break;
23381 }
23382 }
23383 return array;
23384}
23385
23386module.exports = arrayEach;
23387
23388},{}],161:[function(require,module,exports){
23389/**
23390 * A specialized version of `_.every` for arrays without support for
23391 * iteratee shorthands.
23392 *
23393 * @private
23394 * @param {Array} [array] The array to iterate over.
23395 * @param {Function} predicate The function invoked per iteration.
23396 * @returns {boolean} Returns `true` if all elements pass the predicate check,
23397 * else `false`.
23398 */
23399function arrayEvery(array, predicate) {
23400 var index = -1,
23401 length = array == null ? 0 : array.length;
23402
23403 while (++index < length) {
23404 if (!predicate(array[index], index, array)) {
23405 return false;
23406 }
23407 }
23408 return true;
23409}
23410
23411module.exports = arrayEvery;
23412
23413},{}],162:[function(require,module,exports){
23414/**
23415 * A specialized version of `_.filter` for arrays without support for
23416 * iteratee shorthands.
23417 *
23418 * @private
23419 * @param {Array} [array] The array to iterate over.
23420 * @param {Function} predicate The function invoked per iteration.
23421 * @returns {Array} Returns the new filtered array.
23422 */
23423function arrayFilter(array, predicate) {
23424 var index = -1,
23425 length = array == null ? 0 : array.length,
23426 resIndex = 0,
23427 result = [];
23428
23429 while (++index < length) {
23430 var value = array[index];
23431 if (predicate(value, index, array)) {
23432 result[resIndex++] = value;
23433 }
23434 }
23435 return result;
23436}
23437
23438module.exports = arrayFilter;
23439
23440},{}],163:[function(require,module,exports){
23441var baseTimes = require('./_baseTimes'),
23442 isArguments = require('./isArguments'),
23443 isArray = require('./isArray'),
23444 isBuffer = require('./isBuffer'),
23445 isIndex = require('./_isIndex'),
23446 isTypedArray = require('./isTypedArray');
23447
23448/** Used for built-in method references. */
23449var objectProto = Object.prototype;
23450
23451/** Used to check objects for own properties. */
23452var hasOwnProperty = objectProto.hasOwnProperty;
23453
23454/**
23455 * Creates an array of the enumerable property names of the array-like `value`.
23456 *
23457 * @private
23458 * @param {*} value The value to query.
23459 * @param {boolean} inherited Specify returning inherited property names.
23460 * @returns {Array} Returns the array of property names.
23461 */
23462function arrayLikeKeys(value, inherited) {
23463 var isArr = isArray(value),
23464 isArg = !isArr && isArguments(value),
23465 isBuff = !isArr && !isArg && isBuffer(value),
23466 isType = !isArr && !isArg && !isBuff && isTypedArray(value),
23467 skipIndexes = isArr || isArg || isBuff || isType,
23468 result = skipIndexes ? baseTimes(value.length, String) : [],
23469 length = result.length;
23470
23471 for (var key in value) {
23472 if ((inherited || hasOwnProperty.call(value, key)) &&
23473 !(skipIndexes && (
23474 // Safari 9 has enumerable `arguments.length` in strict mode.
23475 key == 'length' ||
23476 // Node.js 0.10 has enumerable non-index properties on buffers.
23477 (isBuff && (key == 'offset' || key == 'parent')) ||
23478 // PhantomJS 2 has enumerable non-index properties on typed arrays.
23479 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
23480 // Skip index properties.
23481 isIndex(key, length)
23482 ))) {
23483 result.push(key);
23484 }
23485 }
23486 return result;
23487}
23488
23489module.exports = arrayLikeKeys;
23490
23491},{"./_baseTimes":211,"./_isIndex":263,"./isArguments":322,"./isArray":323,"./isBuffer":326,"./isTypedArray":339}],164:[function(require,module,exports){
23492/**
23493 * A specialized version of `_.map` for arrays without support for iteratee
23494 * shorthands.
23495 *
23496 * @private
23497 * @param {Array} [array] The array to iterate over.
23498 * @param {Function} iteratee The function invoked per iteration.
23499 * @returns {Array} Returns the new mapped array.
23500 */
23501function arrayMap(array, iteratee) {
23502 var index = -1,
23503 length = array == null ? 0 : array.length,
23504 result = Array(length);
23505
23506 while (++index < length) {
23507 result[index] = iteratee(array[index], index, array);
23508 }
23509 return result;
23510}
23511
23512module.exports = arrayMap;
23513
23514},{}],165:[function(require,module,exports){
23515/**
23516 * Appends the elements of `values` to `array`.
23517 *
23518 * @private
23519 * @param {Array} array The array to modify.
23520 * @param {Array} values The values to append.
23521 * @returns {Array} Returns `array`.
23522 */
23523function arrayPush(array, values) {
23524 var index = -1,
23525 length = values.length,
23526 offset = array.length;
23527
23528 while (++index < length) {
23529 array[offset + index] = values[index];
23530 }
23531 return array;
23532}
23533
23534module.exports = arrayPush;
23535
23536},{}],166:[function(require,module,exports){
23537/**
23538 * A specialized version of `_.some` for arrays without support for iteratee
23539 * shorthands.
23540 *
23541 * @private
23542 * @param {Array} [array] The array to iterate over.
23543 * @param {Function} predicate The function invoked per iteration.
23544 * @returns {boolean} Returns `true` if any element passes the predicate check,
23545 * else `false`.
23546 */
23547function arraySome(array, predicate) {
23548 var index = -1,
23549 length = array == null ? 0 : array.length;
23550
23551 while (++index < length) {
23552 if (predicate(array[index], index, array)) {
23553 return true;
23554 }
23555 }
23556 return false;
23557}
23558
23559module.exports = arraySome;
23560
23561},{}],167:[function(require,module,exports){
23562var baseProperty = require('./_baseProperty');
23563
23564/**
23565 * Gets the size of an ASCII `string`.
23566 *
23567 * @private
23568 * @param {string} string The string inspect.
23569 * @returns {number} Returns the string size.
23570 */
23571var asciiSize = baseProperty('length');
23572
23573module.exports = asciiSize;
23574
23575},{"./_baseProperty":204}],168:[function(require,module,exports){
23576/**
23577 * Converts an ASCII `string` to an array.
23578 *
23579 * @private
23580 * @param {string} string The string to convert.
23581 * @returns {Array} Returns the converted array.
23582 */
23583function asciiToArray(string) {
23584 return string.split('');
23585}
23586
23587module.exports = asciiToArray;
23588
23589},{}],169:[function(require,module,exports){
23590var baseAssignValue = require('./_baseAssignValue'),
23591 eq = require('./eq');
23592
23593/** Used for built-in method references. */
23594var objectProto = Object.prototype;
23595
23596/** Used to check objects for own properties. */
23597var hasOwnProperty = objectProto.hasOwnProperty;
23598
23599/**
23600 * Assigns `value` to `key` of `object` if the existing value is not equivalent
23601 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
23602 * for equality comparisons.
23603 *
23604 * @private
23605 * @param {Object} object The object to modify.
23606 * @param {string} key The key of the property to assign.
23607 * @param {*} value The value to assign.
23608 */
23609function assignValue(object, key, value) {
23610 var objValue = object[key];
23611 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
23612 (value === undefined && !(key in object))) {
23613 baseAssignValue(object, key, value);
23614 }
23615}
23616
23617module.exports = assignValue;
23618
23619},{"./_baseAssignValue":173,"./eq":313}],170:[function(require,module,exports){
23620var eq = require('./eq');
23621
23622/**
23623 * Gets the index at which the `key` is found in `array` of key-value pairs.
23624 *
23625 * @private
23626 * @param {Array} array The array to inspect.
23627 * @param {*} key The key to search for.
23628 * @returns {number} Returns the index of the matched value, else `-1`.
23629 */
23630function assocIndexOf(array, key) {
23631 var length = array.length;
23632 while (length--) {
23633 if (eq(array[length][0], key)) {
23634 return length;
23635 }
23636 }
23637 return -1;
23638}
23639
23640module.exports = assocIndexOf;
23641
23642},{"./eq":313}],171:[function(require,module,exports){
23643var copyObject = require('./_copyObject'),
23644 keys = require('./keys');
23645
23646/**
23647 * The base implementation of `_.assign` without support for multiple sources
23648 * or `customizer` functions.
23649 *
23650 * @private
23651 * @param {Object} object The destination object.
23652 * @param {Object} source The source object.
23653 * @returns {Object} Returns `object`.
23654 */
23655function baseAssign(object, source) {
23656 return object && copyObject(source, keys(source), object);
23657}
23658
23659module.exports = baseAssign;
23660
23661},{"./_copyObject":227,"./keys":341}],172:[function(require,module,exports){
23662var copyObject = require('./_copyObject'),
23663 keysIn = require('./keysIn');
23664
23665/**
23666 * The base implementation of `_.assignIn` without support for multiple sources
23667 * or `customizer` functions.
23668 *
23669 * @private
23670 * @param {Object} object The destination object.
23671 * @param {Object} source The source object.
23672 * @returns {Object} Returns `object`.
23673 */
23674function baseAssignIn(object, source) {
23675 return object && copyObject(source, keysIn(source), object);
23676}
23677
23678module.exports = baseAssignIn;
23679
23680},{"./_copyObject":227,"./keysIn":342}],173:[function(require,module,exports){
23681var defineProperty = require('./_defineProperty');
23682
23683/**
23684 * The base implementation of `assignValue` and `assignMergeValue` without
23685 * value checks.
23686 *
23687 * @private
23688 * @param {Object} object The object to modify.
23689 * @param {string} key The key of the property to assign.
23690 * @param {*} value The value to assign.
23691 */
23692function baseAssignValue(object, key, value) {
23693 if (key == '__proto__' && defineProperty) {
23694 defineProperty(object, key, {
23695 'configurable': true,
23696 'enumerable': true,
23697 'value': value,
23698 'writable': true
23699 });
23700 } else {
23701 object[key] = value;
23702 }
23703}
23704
23705module.exports = baseAssignValue;
23706
23707},{"./_defineProperty":235}],174:[function(require,module,exports){
23708var Stack = require('./_Stack'),
23709 arrayEach = require('./_arrayEach'),
23710 assignValue = require('./_assignValue'),
23711 baseAssign = require('./_baseAssign'),
23712 baseAssignIn = require('./_baseAssignIn'),
23713 cloneBuffer = require('./_cloneBuffer'),
23714 copyArray = require('./_copyArray'),
23715 copySymbols = require('./_copySymbols'),
23716 copySymbolsIn = require('./_copySymbolsIn'),
23717 getAllKeys = require('./_getAllKeys'),
23718 getAllKeysIn = require('./_getAllKeysIn'),
23719 getTag = require('./_getTag'),
23720 initCloneArray = require('./_initCloneArray'),
23721 initCloneByTag = require('./_initCloneByTag'),
23722 initCloneObject = require('./_initCloneObject'),
23723 isArray = require('./isArray'),
23724 isBuffer = require('./isBuffer'),
23725 isMap = require('./isMap'),
23726 isObject = require('./isObject'),
23727 isSet = require('./isSet'),
23728 keys = require('./keys');
23729
23730/** Used to compose bitmasks for cloning. */
23731var CLONE_DEEP_FLAG = 1,
23732 CLONE_FLAT_FLAG = 2,
23733 CLONE_SYMBOLS_FLAG = 4;
23734
23735/** `Object#toString` result references. */
23736var argsTag = '[object Arguments]',
23737 arrayTag = '[object Array]',
23738 boolTag = '[object Boolean]',
23739 dateTag = '[object Date]',
23740 errorTag = '[object Error]',
23741 funcTag = '[object Function]',
23742 genTag = '[object GeneratorFunction]',
23743 mapTag = '[object Map]',
23744 numberTag = '[object Number]',
23745 objectTag = '[object Object]',
23746 regexpTag = '[object RegExp]',
23747 setTag = '[object Set]',
23748 stringTag = '[object String]',
23749 symbolTag = '[object Symbol]',
23750 weakMapTag = '[object WeakMap]';
23751
23752var arrayBufferTag = '[object ArrayBuffer]',
23753 dataViewTag = '[object DataView]',
23754 float32Tag = '[object Float32Array]',
23755 float64Tag = '[object Float64Array]',
23756 int8Tag = '[object Int8Array]',
23757 int16Tag = '[object Int16Array]',
23758 int32Tag = '[object Int32Array]',
23759 uint8Tag = '[object Uint8Array]',
23760 uint8ClampedTag = '[object Uint8ClampedArray]',
23761 uint16Tag = '[object Uint16Array]',
23762 uint32Tag = '[object Uint32Array]';
23763
23764/** Used to identify `toStringTag` values supported by `_.clone`. */
23765var cloneableTags = {};
23766cloneableTags[argsTag] = cloneableTags[arrayTag] =
23767cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
23768cloneableTags[boolTag] = cloneableTags[dateTag] =
23769cloneableTags[float32Tag] = cloneableTags[float64Tag] =
23770cloneableTags[int8Tag] = cloneableTags[int16Tag] =
23771cloneableTags[int32Tag] = cloneableTags[mapTag] =
23772cloneableTags[numberTag] = cloneableTags[objectTag] =
23773cloneableTags[regexpTag] = cloneableTags[setTag] =
23774cloneableTags[stringTag] = cloneableTags[symbolTag] =
23775cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
23776cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
23777cloneableTags[errorTag] = cloneableTags[funcTag] =
23778cloneableTags[weakMapTag] = false;
23779
23780/**
23781 * The base implementation of `_.clone` and `_.cloneDeep` which tracks
23782 * traversed objects.
23783 *
23784 * @private
23785 * @param {*} value The value to clone.
23786 * @param {boolean} bitmask The bitmask flags.
23787 * 1 - Deep clone
23788 * 2 - Flatten inherited properties
23789 * 4 - Clone symbols
23790 * @param {Function} [customizer] The function to customize cloning.
23791 * @param {string} [key] The key of `value`.
23792 * @param {Object} [object] The parent object of `value`.
23793 * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
23794 * @returns {*} Returns the cloned value.
23795 */
23796function baseClone(value, bitmask, customizer, key, object, stack) {
23797 var result,
23798 isDeep = bitmask & CLONE_DEEP_FLAG,
23799 isFlat = bitmask & CLONE_FLAT_FLAG,
23800 isFull = bitmask & CLONE_SYMBOLS_FLAG;
23801
23802 if (customizer) {
23803 result = object ? customizer(value, key, object, stack) : customizer(value);
23804 }
23805 if (result !== undefined) {
23806 return result;
23807 }
23808 if (!isObject(value)) {
23809 return value;
23810 }
23811 var isArr = isArray(value);
23812 if (isArr) {
23813 result = initCloneArray(value);
23814 if (!isDeep) {
23815 return copyArray(value, result);
23816 }
23817 } else {
23818 var tag = getTag(value),
23819 isFunc = tag == funcTag || tag == genTag;
23820
23821 if (isBuffer(value)) {
23822 return cloneBuffer(value, isDeep);
23823 }
23824 if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
23825 result = (isFlat || isFunc) ? {} : initCloneObject(value);
23826 if (!isDeep) {
23827 return isFlat
23828 ? copySymbolsIn(value, baseAssignIn(result, value))
23829 : copySymbols(value, baseAssign(result, value));
23830 }
23831 } else {
23832 if (!cloneableTags[tag]) {
23833 return object ? value : {};
23834 }
23835 result = initCloneByTag(value, tag, isDeep);
23836 }
23837 }
23838 // Check for circular references and return its corresponding clone.
23839 stack || (stack = new Stack);
23840 var stacked = stack.get(value);
23841 if (stacked) {
23842 return stacked;
23843 }
23844 stack.set(value, result);
23845
23846 if (isSet(value)) {
23847 value.forEach(function(subValue) {
23848 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
23849 });
23850
23851 return result;
23852 }
23853
23854 if (isMap(value)) {
23855 value.forEach(function(subValue, key) {
23856 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
23857 });
23858
23859 return result;
23860 }
23861
23862 var keysFunc = isFull
23863 ? (isFlat ? getAllKeysIn : getAllKeys)
23864 : (isFlat ? keysIn : keys);
23865
23866 var props = isArr ? undefined : keysFunc(value);
23867 arrayEach(props || value, function(subValue, key) {
23868 if (props) {
23869 key = subValue;
23870 subValue = value[key];
23871 }
23872 // Recursively populate clone (susceptible to call stack limits).
23873 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
23874 });
23875 return result;
23876}
23877
23878module.exports = baseClone;
23879
23880},{"./_Stack":155,"./_arrayEach":160,"./_assignValue":169,"./_baseAssign":171,"./_baseAssignIn":172,"./_cloneBuffer":221,"./_copyArray":226,"./_copySymbols":228,"./_copySymbolsIn":229,"./_getAllKeys":241,"./_getAllKeysIn":242,"./_getTag":250,"./_initCloneArray":259,"./_initCloneByTag":260,"./_initCloneObject":261,"./isArray":323,"./isBuffer":326,"./isMap":330,"./isObject":333,"./isSet":336,"./keys":341}],175:[function(require,module,exports){
23881var isObject = require('./isObject');
23882
23883/** Built-in value references. */
23884var objectCreate = Object.create;
23885
23886/**
23887 * The base implementation of `_.create` without support for assigning
23888 * properties to the created object.
23889 *
23890 * @private
23891 * @param {Object} proto The object to inherit from.
23892 * @returns {Object} Returns the new object.
23893 */
23894var baseCreate = (function() {
23895 function object() {}
23896 return function(proto) {
23897 if (!isObject(proto)) {
23898 return {};
23899 }
23900 if (objectCreate) {
23901 return objectCreate(proto);
23902 }
23903 object.prototype = proto;
23904 var result = new object;
23905 object.prototype = undefined;
23906 return result;
23907 };
23908}());
23909
23910module.exports = baseCreate;
23911
23912},{"./isObject":333}],176:[function(require,module,exports){
23913var baseForOwn = require('./_baseForOwn'),
23914 createBaseEach = require('./_createBaseEach');
23915
23916/**
23917 * The base implementation of `_.forEach` without support for iteratee shorthands.
23918 *
23919 * @private
23920 * @param {Array|Object} collection The collection to iterate over.
23921 * @param {Function} iteratee The function invoked per iteration.
23922 * @returns {Array|Object} Returns `collection`.
23923 */
23924var baseEach = createBaseEach(baseForOwn);
23925
23926module.exports = baseEach;
23927
23928},{"./_baseForOwn":181,"./_createBaseEach":232}],177:[function(require,module,exports){
23929var baseEach = require('./_baseEach');
23930
23931/**
23932 * The base implementation of `_.every` without support for iteratee shorthands.
23933 *
23934 * @private
23935 * @param {Array|Object} collection The collection to iterate over.
23936 * @param {Function} predicate The function invoked per iteration.
23937 * @returns {boolean} Returns `true` if all elements pass the predicate check,
23938 * else `false`
23939 */
23940function baseEvery(collection, predicate) {
23941 var result = true;
23942 baseEach(collection, function(value, index, collection) {
23943 result = !!predicate(value, index, collection);
23944 return result;
23945 });
23946 return result;
23947}
23948
23949module.exports = baseEvery;
23950
23951},{"./_baseEach":176}],178:[function(require,module,exports){
23952/**
23953 * The base implementation of `_.findIndex` and `_.findLastIndex` without
23954 * support for iteratee shorthands.
23955 *
23956 * @private
23957 * @param {Array} array The array to inspect.
23958 * @param {Function} predicate The function invoked per iteration.
23959 * @param {number} fromIndex The index to search from.
23960 * @param {boolean} [fromRight] Specify iterating from right to left.
23961 * @returns {number} Returns the index of the matched value, else `-1`.
23962 */
23963function baseFindIndex(array, predicate, fromIndex, fromRight) {
23964 var length = array.length,
23965 index = fromIndex + (fromRight ? 1 : -1);
23966
23967 while ((fromRight ? index-- : ++index < length)) {
23968 if (predicate(array[index], index, array)) {
23969 return index;
23970 }
23971 }
23972 return -1;
23973}
23974
23975module.exports = baseFindIndex;
23976
23977},{}],179:[function(require,module,exports){
23978var arrayPush = require('./_arrayPush'),
23979 isFlattenable = require('./_isFlattenable');
23980
23981/**
23982 * The base implementation of `_.flatten` with support for restricting flattening.
23983 *
23984 * @private
23985 * @param {Array} array The array to flatten.
23986 * @param {number} depth The maximum recursion depth.
23987 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
23988 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
23989 * @param {Array} [result=[]] The initial result value.
23990 * @returns {Array} Returns the new flattened array.
23991 */
23992function baseFlatten(array, depth, predicate, isStrict, result) {
23993 var index = -1,
23994 length = array.length;
23995
23996 predicate || (predicate = isFlattenable);
23997 result || (result = []);
23998
23999 while (++index < length) {
24000 var value = array[index];
24001 if (depth > 0 && predicate(value)) {
24002 if (depth > 1) {
24003 // Recursively flatten arrays (susceptible to call stack limits).
24004 baseFlatten(value, depth - 1, predicate, isStrict, result);
24005 } else {
24006 arrayPush(result, value);
24007 }
24008 } else if (!isStrict) {
24009 result[result.length] = value;
24010 }
24011 }
24012 return result;
24013}
24014
24015module.exports = baseFlatten;
24016
24017},{"./_arrayPush":165,"./_isFlattenable":262}],180:[function(require,module,exports){
24018var createBaseFor = require('./_createBaseFor');
24019
24020/**
24021 * The base implementation of `baseForOwn` which iterates over `object`
24022 * properties returned by `keysFunc` and invokes `iteratee` for each property.
24023 * Iteratee functions may exit iteration early by explicitly returning `false`.
24024 *
24025 * @private
24026 * @param {Object} object The object to iterate over.
24027 * @param {Function} iteratee The function invoked per iteration.
24028 * @param {Function} keysFunc The function to get the keys of `object`.
24029 * @returns {Object} Returns `object`.
24030 */
24031var baseFor = createBaseFor();
24032
24033module.exports = baseFor;
24034
24035},{"./_createBaseFor":233}],181:[function(require,module,exports){
24036var baseFor = require('./_baseFor'),
24037 keys = require('./keys');
24038
24039/**
24040 * The base implementation of `_.forOwn` without support for iteratee shorthands.
24041 *
24042 * @private
24043 * @param {Object} object The object to iterate over.
24044 * @param {Function} iteratee The function invoked per iteration.
24045 * @returns {Object} Returns `object`.
24046 */
24047function baseForOwn(object, iteratee) {
24048 return object && baseFor(object, iteratee, keys);
24049}
24050
24051module.exports = baseForOwn;
24052
24053},{"./_baseFor":180,"./keys":341}],182:[function(require,module,exports){
24054var castPath = require('./_castPath'),
24055 toKey = require('./_toKey');
24056
24057/**
24058 * The base implementation of `_.get` without support for default values.
24059 *
24060 * @private
24061 * @param {Object} object The object to query.
24062 * @param {Array|string} path The path of the property to get.
24063 * @returns {*} Returns the resolved value.
24064 */
24065function baseGet(object, path) {
24066 path = castPath(path, object);
24067
24068 var index = 0,
24069 length = path.length;
24070
24071 while (object != null && index < length) {
24072 object = object[toKey(path[index++])];
24073 }
24074 return (index && index == length) ? object : undefined;
24075}
24076
24077module.exports = baseGet;
24078
24079},{"./_castPath":217,"./_toKey":305}],183:[function(require,module,exports){
24080var arrayPush = require('./_arrayPush'),
24081 isArray = require('./isArray');
24082
24083/**
24084 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
24085 * `keysFunc` and `symbolsFunc` to get the enumerable property names and
24086 * symbols of `object`.
24087 *
24088 * @private
24089 * @param {Object} object The object to query.
24090 * @param {Function} keysFunc The function to get the keys of `object`.
24091 * @param {Function} symbolsFunc The function to get the symbols of `object`.
24092 * @returns {Array} Returns the array of property names and symbols.
24093 */
24094function baseGetAllKeys(object, keysFunc, symbolsFunc) {
24095 var result = keysFunc(object);
24096 return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
24097}
24098
24099module.exports = baseGetAllKeys;
24100
24101},{"./_arrayPush":165,"./isArray":323}],184:[function(require,module,exports){
24102var Symbol = require('./_Symbol'),
24103 getRawTag = require('./_getRawTag'),
24104 objectToString = require('./_objectToString');
24105
24106/** `Object#toString` result references. */
24107var nullTag = '[object Null]',
24108 undefinedTag = '[object Undefined]';
24109
24110/** Built-in value references. */
24111var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
24112
24113/**
24114 * The base implementation of `getTag` without fallbacks for buggy environments.
24115 *
24116 * @private
24117 * @param {*} value The value to query.
24118 * @returns {string} Returns the `toStringTag`.
24119 */
24120function baseGetTag(value) {
24121 if (value == null) {
24122 return value === undefined ? undefinedTag : nullTag;
24123 }
24124 return (symToStringTag && symToStringTag in Object(value))
24125 ? getRawTag(value)
24126 : objectToString(value);
24127}
24128
24129module.exports = baseGetTag;
24130
24131},{"./_Symbol":156,"./_getRawTag":247,"./_objectToString":287}],185:[function(require,module,exports){
24132/**
24133 * The base implementation of `_.hasIn` without support for deep paths.
24134 *
24135 * @private
24136 * @param {Object} [object] The object to query.
24137 * @param {Array|string} key The key to check.
24138 * @returns {boolean} Returns `true` if `key` exists, else `false`.
24139 */
24140function baseHasIn(object, key) {
24141 return object != null && key in Object(object);
24142}
24143
24144module.exports = baseHasIn;
24145
24146},{}],186:[function(require,module,exports){
24147var baseFindIndex = require('./_baseFindIndex'),
24148 baseIsNaN = require('./_baseIsNaN'),
24149 strictIndexOf = require('./_strictIndexOf');
24150
24151/**
24152 * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
24153 *
24154 * @private
24155 * @param {Array} array The array to inspect.
24156 * @param {*} value The value to search for.
24157 * @param {number} fromIndex The index to search from.
24158 * @returns {number} Returns the index of the matched value, else `-1`.
24159 */
24160function baseIndexOf(array, value, fromIndex) {
24161 return value === value
24162 ? strictIndexOf(array, value, fromIndex)
24163 : baseFindIndex(array, baseIsNaN, fromIndex);
24164}
24165
24166module.exports = baseIndexOf;
24167
24168},{"./_baseFindIndex":178,"./_baseIsNaN":192,"./_strictIndexOf":301}],187:[function(require,module,exports){
24169var baseGetTag = require('./_baseGetTag'),
24170 isObjectLike = require('./isObjectLike');
24171
24172/** `Object#toString` result references. */
24173var argsTag = '[object Arguments]';
24174
24175/**
24176 * The base implementation of `_.isArguments`.
24177 *
24178 * @private
24179 * @param {*} value The value to check.
24180 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
24181 */
24182function baseIsArguments(value) {
24183 return isObjectLike(value) && baseGetTag(value) == argsTag;
24184}
24185
24186module.exports = baseIsArguments;
24187
24188},{"./_baseGetTag":184,"./isObjectLike":334}],188:[function(require,module,exports){
24189var baseIsEqualDeep = require('./_baseIsEqualDeep'),
24190 isObjectLike = require('./isObjectLike');
24191
24192/**
24193 * The base implementation of `_.isEqual` which supports partial comparisons
24194 * and tracks traversed objects.
24195 *
24196 * @private
24197 * @param {*} value The value to compare.
24198 * @param {*} other The other value to compare.
24199 * @param {boolean} bitmask The bitmask flags.
24200 * 1 - Unordered comparison
24201 * 2 - Partial comparison
24202 * @param {Function} [customizer] The function to customize comparisons.
24203 * @param {Object} [stack] Tracks traversed `value` and `other` objects.
24204 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
24205 */
24206function baseIsEqual(value, other, bitmask, customizer, stack) {
24207 if (value === other) {
24208 return true;
24209 }
24210 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
24211 return value !== value && other !== other;
24212 }
24213 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
24214}
24215
24216module.exports = baseIsEqual;
24217
24218},{"./_baseIsEqualDeep":189,"./isObjectLike":334}],189:[function(require,module,exports){
24219var Stack = require('./_Stack'),
24220 equalArrays = require('./_equalArrays'),
24221 equalByTag = require('./_equalByTag'),
24222 equalObjects = require('./_equalObjects'),
24223 getTag = require('./_getTag'),
24224 isArray = require('./isArray'),
24225 isBuffer = require('./isBuffer'),
24226 isTypedArray = require('./isTypedArray');
24227
24228/** Used to compose bitmasks for value comparisons. */
24229var COMPARE_PARTIAL_FLAG = 1;
24230
24231/** `Object#toString` result references. */
24232var argsTag = '[object Arguments]',
24233 arrayTag = '[object Array]',
24234 objectTag = '[object Object]';
24235
24236/** Used for built-in method references. */
24237var objectProto = Object.prototype;
24238
24239/** Used to check objects for own properties. */
24240var hasOwnProperty = objectProto.hasOwnProperty;
24241
24242/**
24243 * A specialized version of `baseIsEqual` for arrays and objects which performs
24244 * deep comparisons and tracks traversed objects enabling objects with circular
24245 * references to be compared.
24246 *
24247 * @private
24248 * @param {Object} object The object to compare.
24249 * @param {Object} other The other object to compare.
24250 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24251 * @param {Function} customizer The function to customize comparisons.
24252 * @param {Function} equalFunc The function to determine equivalents of values.
24253 * @param {Object} [stack] Tracks traversed `object` and `other` objects.
24254 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
24255 */
24256function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
24257 var objIsArr = isArray(object),
24258 othIsArr = isArray(other),
24259 objTag = objIsArr ? arrayTag : getTag(object),
24260 othTag = othIsArr ? arrayTag : getTag(other);
24261
24262 objTag = objTag == argsTag ? objectTag : objTag;
24263 othTag = othTag == argsTag ? objectTag : othTag;
24264
24265 var objIsObj = objTag == objectTag,
24266 othIsObj = othTag == objectTag,
24267 isSameTag = objTag == othTag;
24268
24269 if (isSameTag && isBuffer(object)) {
24270 if (!isBuffer(other)) {
24271 return false;
24272 }
24273 objIsArr = true;
24274 objIsObj = false;
24275 }
24276 if (isSameTag && !objIsObj) {
24277 stack || (stack = new Stack);
24278 return (objIsArr || isTypedArray(object))
24279 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
24280 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
24281 }
24282 if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
24283 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
24284 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
24285
24286 if (objIsWrapped || othIsWrapped) {
24287 var objUnwrapped = objIsWrapped ? object.value() : object,
24288 othUnwrapped = othIsWrapped ? other.value() : other;
24289
24290 stack || (stack = new Stack);
24291 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
24292 }
24293 }
24294 if (!isSameTag) {
24295 return false;
24296 }
24297 stack || (stack = new Stack);
24298 return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
24299}
24300
24301module.exports = baseIsEqualDeep;
24302
24303},{"./_Stack":155,"./_equalArrays":236,"./_equalByTag":237,"./_equalObjects":238,"./_getTag":250,"./isArray":323,"./isBuffer":326,"./isTypedArray":339}],190:[function(require,module,exports){
24304var getTag = require('./_getTag'),
24305 isObjectLike = require('./isObjectLike');
24306
24307/** `Object#toString` result references. */
24308var mapTag = '[object Map]';
24309
24310/**
24311 * The base implementation of `_.isMap` without Node.js optimizations.
24312 *
24313 * @private
24314 * @param {*} value The value to check.
24315 * @returns {boolean} Returns `true` if `value` is a map, else `false`.
24316 */
24317function baseIsMap(value) {
24318 return isObjectLike(value) && getTag(value) == mapTag;
24319}
24320
24321module.exports = baseIsMap;
24322
24323},{"./_getTag":250,"./isObjectLike":334}],191:[function(require,module,exports){
24324var Stack = require('./_Stack'),
24325 baseIsEqual = require('./_baseIsEqual');
24326
24327/** Used to compose bitmasks for value comparisons. */
24328var COMPARE_PARTIAL_FLAG = 1,
24329 COMPARE_UNORDERED_FLAG = 2;
24330
24331/**
24332 * The base implementation of `_.isMatch` without support for iteratee shorthands.
24333 *
24334 * @private
24335 * @param {Object} object The object to inspect.
24336 * @param {Object} source The object of property values to match.
24337 * @param {Array} matchData The property names, values, and compare flags to match.
24338 * @param {Function} [customizer] The function to customize comparisons.
24339 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
24340 */
24341function baseIsMatch(object, source, matchData, customizer) {
24342 var index = matchData.length,
24343 length = index,
24344 noCustomizer = !customizer;
24345
24346 if (object == null) {
24347 return !length;
24348 }
24349 object = Object(object);
24350 while (index--) {
24351 var data = matchData[index];
24352 if ((noCustomizer && data[2])
24353 ? data[1] !== object[data[0]]
24354 : !(data[0] in object)
24355 ) {
24356 return false;
24357 }
24358 }
24359 while (++index < length) {
24360 data = matchData[index];
24361 var key = data[0],
24362 objValue = object[key],
24363 srcValue = data[1];
24364
24365 if (noCustomizer && data[2]) {
24366 if (objValue === undefined && !(key in object)) {
24367 return false;
24368 }
24369 } else {
24370 var stack = new Stack;
24371 if (customizer) {
24372 var result = customizer(objValue, srcValue, key, object, source, stack);
24373 }
24374 if (!(result === undefined
24375 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
24376 : result
24377 )) {
24378 return false;
24379 }
24380 }
24381 }
24382 return true;
24383}
24384
24385module.exports = baseIsMatch;
24386
24387},{"./_Stack":155,"./_baseIsEqual":188}],192:[function(require,module,exports){
24388/**
24389 * The base implementation of `_.isNaN` without support for number objects.
24390 *
24391 * @private
24392 * @param {*} value The value to check.
24393 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
24394 */
24395function baseIsNaN(value) {
24396 return value !== value;
24397}
24398
24399module.exports = baseIsNaN;
24400
24401},{}],193:[function(require,module,exports){
24402var isFunction = require('./isFunction'),
24403 isMasked = require('./_isMasked'),
24404 isObject = require('./isObject'),
24405 toSource = require('./_toSource');
24406
24407/**
24408 * Used to match `RegExp`
24409 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
24410 */
24411var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
24412
24413/** Used to detect host constructors (Safari). */
24414var reIsHostCtor = /^\[object .+?Constructor\]$/;
24415
24416/** Used for built-in method references. */
24417var funcProto = Function.prototype,
24418 objectProto = Object.prototype;
24419
24420/** Used to resolve the decompiled source of functions. */
24421var funcToString = funcProto.toString;
24422
24423/** Used to check objects for own properties. */
24424var hasOwnProperty = objectProto.hasOwnProperty;
24425
24426/** Used to detect if a method is native. */
24427var reIsNative = RegExp('^' +
24428 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
24429 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
24430);
24431
24432/**
24433 * The base implementation of `_.isNative` without bad shim checks.
24434 *
24435 * @private
24436 * @param {*} value The value to check.
24437 * @returns {boolean} Returns `true` if `value` is a native function,
24438 * else `false`.
24439 */
24440function baseIsNative(value) {
24441 if (!isObject(value) || isMasked(value)) {
24442 return false;
24443 }
24444 var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
24445 return pattern.test(toSource(value));
24446}
24447
24448module.exports = baseIsNative;
24449
24450},{"./_isMasked":267,"./_toSource":306,"./isFunction":328,"./isObject":333}],194:[function(require,module,exports){
24451var getTag = require('./_getTag'),
24452 isObjectLike = require('./isObjectLike');
24453
24454/** `Object#toString` result references. */
24455var setTag = '[object Set]';
24456
24457/**
24458 * The base implementation of `_.isSet` without Node.js optimizations.
24459 *
24460 * @private
24461 * @param {*} value The value to check.
24462 * @returns {boolean} Returns `true` if `value` is a set, else `false`.
24463 */
24464function baseIsSet(value) {
24465 return isObjectLike(value) && getTag(value) == setTag;
24466}
24467
24468module.exports = baseIsSet;
24469
24470},{"./_getTag":250,"./isObjectLike":334}],195:[function(require,module,exports){
24471var baseGetTag = require('./_baseGetTag'),
24472 isLength = require('./isLength'),
24473 isObjectLike = require('./isObjectLike');
24474
24475/** `Object#toString` result references. */
24476var argsTag = '[object Arguments]',
24477 arrayTag = '[object Array]',
24478 boolTag = '[object Boolean]',
24479 dateTag = '[object Date]',
24480 errorTag = '[object Error]',
24481 funcTag = '[object Function]',
24482 mapTag = '[object Map]',
24483 numberTag = '[object Number]',
24484 objectTag = '[object Object]',
24485 regexpTag = '[object RegExp]',
24486 setTag = '[object Set]',
24487 stringTag = '[object String]',
24488 weakMapTag = '[object WeakMap]';
24489
24490var arrayBufferTag = '[object ArrayBuffer]',
24491 dataViewTag = '[object DataView]',
24492 float32Tag = '[object Float32Array]',
24493 float64Tag = '[object Float64Array]',
24494 int8Tag = '[object Int8Array]',
24495 int16Tag = '[object Int16Array]',
24496 int32Tag = '[object Int32Array]',
24497 uint8Tag = '[object Uint8Array]',
24498 uint8ClampedTag = '[object Uint8ClampedArray]',
24499 uint16Tag = '[object Uint16Array]',
24500 uint32Tag = '[object Uint32Array]';
24501
24502/** Used to identify `toStringTag` values of typed arrays. */
24503var typedArrayTags = {};
24504typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
24505typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
24506typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
24507typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
24508typedArrayTags[uint32Tag] = true;
24509typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
24510typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
24511typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
24512typedArrayTags[errorTag] = typedArrayTags[funcTag] =
24513typedArrayTags[mapTag] = typedArrayTags[numberTag] =
24514typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
24515typedArrayTags[setTag] = typedArrayTags[stringTag] =
24516typedArrayTags[weakMapTag] = false;
24517
24518/**
24519 * The base implementation of `_.isTypedArray` without Node.js optimizations.
24520 *
24521 * @private
24522 * @param {*} value The value to check.
24523 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
24524 */
24525function baseIsTypedArray(value) {
24526 return isObjectLike(value) &&
24527 isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
24528}
24529
24530module.exports = baseIsTypedArray;
24531
24532},{"./_baseGetTag":184,"./isLength":329,"./isObjectLike":334}],196:[function(require,module,exports){
24533var baseMatches = require('./_baseMatches'),
24534 baseMatchesProperty = require('./_baseMatchesProperty'),
24535 identity = require('./identity'),
24536 isArray = require('./isArray'),
24537 property = require('./property');
24538
24539/**
24540 * The base implementation of `_.iteratee`.
24541 *
24542 * @private
24543 * @param {*} [value=_.identity] The value to convert to an iteratee.
24544 * @returns {Function} Returns the iteratee.
24545 */
24546function baseIteratee(value) {
24547 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
24548 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
24549 if (typeof value == 'function') {
24550 return value;
24551 }
24552 if (value == null) {
24553 return identity;
24554 }
24555 if (typeof value == 'object') {
24556 return isArray(value)
24557 ? baseMatchesProperty(value[0], value[1])
24558 : baseMatches(value);
24559 }
24560 return property(value);
24561}
24562
24563module.exports = baseIteratee;
24564
24565},{"./_baseMatches":200,"./_baseMatchesProperty":201,"./identity":321,"./isArray":323,"./property":347}],197:[function(require,module,exports){
24566var isPrototype = require('./_isPrototype'),
24567 nativeKeys = require('./_nativeKeys');
24568
24569/** Used for built-in method references. */
24570var objectProto = Object.prototype;
24571
24572/** Used to check objects for own properties. */
24573var hasOwnProperty = objectProto.hasOwnProperty;
24574
24575/**
24576 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
24577 *
24578 * @private
24579 * @param {Object} object The object to query.
24580 * @returns {Array} Returns the array of property names.
24581 */
24582function baseKeys(object) {
24583 if (!isPrototype(object)) {
24584 return nativeKeys(object);
24585 }
24586 var result = [];
24587 for (var key in Object(object)) {
24588 if (hasOwnProperty.call(object, key) && key != 'constructor') {
24589 result.push(key);
24590 }
24591 }
24592 return result;
24593}
24594
24595module.exports = baseKeys;
24596
24597},{"./_isPrototype":268,"./_nativeKeys":284}],198:[function(require,module,exports){
24598var isObject = require('./isObject'),
24599 isPrototype = require('./_isPrototype'),
24600 nativeKeysIn = require('./_nativeKeysIn');
24601
24602/** Used for built-in method references. */
24603var objectProto = Object.prototype;
24604
24605/** Used to check objects for own properties. */
24606var hasOwnProperty = objectProto.hasOwnProperty;
24607
24608/**
24609 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
24610 *
24611 * @private
24612 * @param {Object} object The object to query.
24613 * @returns {Array} Returns the array of property names.
24614 */
24615function baseKeysIn(object) {
24616 if (!isObject(object)) {
24617 return nativeKeysIn(object);
24618 }
24619 var isProto = isPrototype(object),
24620 result = [];
24621
24622 for (var key in object) {
24623 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
24624 result.push(key);
24625 }
24626 }
24627 return result;
24628}
24629
24630module.exports = baseKeysIn;
24631
24632},{"./_isPrototype":268,"./_nativeKeysIn":285,"./isObject":333}],199:[function(require,module,exports){
24633var baseEach = require('./_baseEach'),
24634 isArrayLike = require('./isArrayLike');
24635
24636/**
24637 * The base implementation of `_.map` without support for iteratee shorthands.
24638 *
24639 * @private
24640 * @param {Array|Object} collection The collection to iterate over.
24641 * @param {Function} iteratee The function invoked per iteration.
24642 * @returns {Array} Returns the new mapped array.
24643 */
24644function baseMap(collection, iteratee) {
24645 var index = -1,
24646 result = isArrayLike(collection) ? Array(collection.length) : [];
24647
24648 baseEach(collection, function(value, key, collection) {
24649 result[++index] = iteratee(value, key, collection);
24650 });
24651 return result;
24652}
24653
24654module.exports = baseMap;
24655
24656},{"./_baseEach":176,"./isArrayLike":324}],200:[function(require,module,exports){
24657var baseIsMatch = require('./_baseIsMatch'),
24658 getMatchData = require('./_getMatchData'),
24659 matchesStrictComparable = require('./_matchesStrictComparable');
24660
24661/**
24662 * The base implementation of `_.matches` which doesn't clone `source`.
24663 *
24664 * @private
24665 * @param {Object} source The object of property values to match.
24666 * @returns {Function} Returns the new spec function.
24667 */
24668function baseMatches(source) {
24669 var matchData = getMatchData(source);
24670 if (matchData.length == 1 && matchData[0][2]) {
24671 return matchesStrictComparable(matchData[0][0], matchData[0][1]);
24672 }
24673 return function(object) {
24674 return object === source || baseIsMatch(object, source, matchData);
24675 };
24676}
24677
24678module.exports = baseMatches;
24679
24680},{"./_baseIsMatch":191,"./_getMatchData":244,"./_matchesStrictComparable":281}],201:[function(require,module,exports){
24681var baseIsEqual = require('./_baseIsEqual'),
24682 get = require('./get'),
24683 hasIn = require('./hasIn'),
24684 isKey = require('./_isKey'),
24685 isStrictComparable = require('./_isStrictComparable'),
24686 matchesStrictComparable = require('./_matchesStrictComparable'),
24687 toKey = require('./_toKey');
24688
24689/** Used to compose bitmasks for value comparisons. */
24690var COMPARE_PARTIAL_FLAG = 1,
24691 COMPARE_UNORDERED_FLAG = 2;
24692
24693/**
24694 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
24695 *
24696 * @private
24697 * @param {string} path The path of the property to get.
24698 * @param {*} srcValue The value to match.
24699 * @returns {Function} Returns the new spec function.
24700 */
24701function baseMatchesProperty(path, srcValue) {
24702 if (isKey(path) && isStrictComparable(srcValue)) {
24703 return matchesStrictComparable(toKey(path), srcValue);
24704 }
24705 return function(object) {
24706 var objValue = get(object, path);
24707 return (objValue === undefined && objValue === srcValue)
24708 ? hasIn(object, path)
24709 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
24710 };
24711}
24712
24713module.exports = baseMatchesProperty;
24714
24715},{"./_baseIsEqual":188,"./_isKey":265,"./_isStrictComparable":269,"./_matchesStrictComparable":281,"./_toKey":305,"./get":319,"./hasIn":320}],202:[function(require,module,exports){
24716var basePickBy = require('./_basePickBy'),
24717 hasIn = require('./hasIn');
24718
24719/**
24720 * The base implementation of `_.pick` without support for individual
24721 * property identifiers.
24722 *
24723 * @private
24724 * @param {Object} object The source object.
24725 * @param {string[]} paths The property paths to pick.
24726 * @returns {Object} Returns the new object.
24727 */
24728function basePick(object, paths) {
24729 return basePickBy(object, paths, function(value, path) {
24730 return hasIn(object, path);
24731 });
24732}
24733
24734module.exports = basePick;
24735
24736},{"./_basePickBy":203,"./hasIn":320}],203:[function(require,module,exports){
24737var baseGet = require('./_baseGet'),
24738 baseSet = require('./_baseSet'),
24739 castPath = require('./_castPath');
24740
24741/**
24742 * The base implementation of `_.pickBy` without support for iteratee shorthands.
24743 *
24744 * @private
24745 * @param {Object} object The source object.
24746 * @param {string[]} paths The property paths to pick.
24747 * @param {Function} predicate The function invoked per property.
24748 * @returns {Object} Returns the new object.
24749 */
24750function basePickBy(object, paths, predicate) {
24751 var index = -1,
24752 length = paths.length,
24753 result = {};
24754
24755 while (++index < length) {
24756 var path = paths[index],
24757 value = baseGet(object, path);
24758
24759 if (predicate(value, path)) {
24760 baseSet(result, castPath(path, object), value);
24761 }
24762 }
24763 return result;
24764}
24765
24766module.exports = basePickBy;
24767
24768},{"./_baseGet":182,"./_baseSet":208,"./_castPath":217}],204:[function(require,module,exports){
24769/**
24770 * The base implementation of `_.property` without support for deep paths.
24771 *
24772 * @private
24773 * @param {string} key The key of the property to get.
24774 * @returns {Function} Returns the new accessor function.
24775 */
24776function baseProperty(key) {
24777 return function(object) {
24778 return object == null ? undefined : object[key];
24779 };
24780}
24781
24782module.exports = baseProperty;
24783
24784},{}],205:[function(require,module,exports){
24785var baseGet = require('./_baseGet');
24786
24787/**
24788 * A specialized version of `baseProperty` which supports deep paths.
24789 *
24790 * @private
24791 * @param {Array|string} path The path of the property to get.
24792 * @returns {Function} Returns the new accessor function.
24793 */
24794function basePropertyDeep(path) {
24795 return function(object) {
24796 return baseGet(object, path);
24797 };
24798}
24799
24800module.exports = basePropertyDeep;
24801
24802},{"./_baseGet":182}],206:[function(require,module,exports){
24803/** Used as references for various `Number` constants. */
24804var MAX_SAFE_INTEGER = 9007199254740991;
24805
24806/* Built-in method references for those with the same name as other `lodash` methods. */
24807var nativeFloor = Math.floor;
24808
24809/**
24810 * The base implementation of `_.repeat` which doesn't coerce arguments.
24811 *
24812 * @private
24813 * @param {string} string The string to repeat.
24814 * @param {number} n The number of times to repeat the string.
24815 * @returns {string} Returns the repeated string.
24816 */
24817function baseRepeat(string, n) {
24818 var result = '';
24819 if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
24820 return result;
24821 }
24822 // Leverage the exponentiation by squaring algorithm for a faster repeat.
24823 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
24824 do {
24825 if (n % 2) {
24826 result += string;
24827 }
24828 n = nativeFloor(n / 2);
24829 if (n) {
24830 string += string;
24831 }
24832 } while (n);
24833
24834 return result;
24835}
24836
24837module.exports = baseRepeat;
24838
24839},{}],207:[function(require,module,exports){
24840var identity = require('./identity'),
24841 overRest = require('./_overRest'),
24842 setToString = require('./_setToString');
24843
24844/**
24845 * The base implementation of `_.rest` which doesn't validate or coerce arguments.
24846 *
24847 * @private
24848 * @param {Function} func The function to apply a rest parameter to.
24849 * @param {number} [start=func.length-1] The start position of the rest parameter.
24850 * @returns {Function} Returns the new function.
24851 */
24852function baseRest(func, start) {
24853 return setToString(overRest(func, start, identity), func + '');
24854}
24855
24856module.exports = baseRest;
24857
24858},{"./_overRest":289,"./_setToString":294,"./identity":321}],208:[function(require,module,exports){
24859var assignValue = require('./_assignValue'),
24860 castPath = require('./_castPath'),
24861 isIndex = require('./_isIndex'),
24862 isObject = require('./isObject'),
24863 toKey = require('./_toKey');
24864
24865/**
24866 * The base implementation of `_.set`.
24867 *
24868 * @private
24869 * @param {Object} object The object to modify.
24870 * @param {Array|string} path The path of the property to set.
24871 * @param {*} value The value to set.
24872 * @param {Function} [customizer] The function to customize path creation.
24873 * @returns {Object} Returns `object`.
24874 */
24875function baseSet(object, path, value, customizer) {
24876 if (!isObject(object)) {
24877 return object;
24878 }
24879 path = castPath(path, object);
24880
24881 var index = -1,
24882 length = path.length,
24883 lastIndex = length - 1,
24884 nested = object;
24885
24886 while (nested != null && ++index < length) {
24887 var key = toKey(path[index]),
24888 newValue = value;
24889
24890 if (index != lastIndex) {
24891 var objValue = nested[key];
24892 newValue = customizer ? customizer(objValue, key, nested) : undefined;
24893 if (newValue === undefined) {
24894 newValue = isObject(objValue)
24895 ? objValue
24896 : (isIndex(path[index + 1]) ? [] : {});
24897 }
24898 }
24899 assignValue(nested, key, newValue);
24900 nested = nested[key];
24901 }
24902 return object;
24903}
24904
24905module.exports = baseSet;
24906
24907},{"./_assignValue":169,"./_castPath":217,"./_isIndex":263,"./_toKey":305,"./isObject":333}],209:[function(require,module,exports){
24908var constant = require('./constant'),
24909 defineProperty = require('./_defineProperty'),
24910 identity = require('./identity');
24911
24912/**
24913 * The base implementation of `setToString` without support for hot loop shorting.
24914 *
24915 * @private
24916 * @param {Function} func The function to modify.
24917 * @param {Function} string The `toString` result.
24918 * @returns {Function} Returns `func`.
24919 */
24920var baseSetToString = !defineProperty ? identity : function(func, string) {
24921 return defineProperty(func, 'toString', {
24922 'configurable': true,
24923 'enumerable': false,
24924 'value': constant(string),
24925 'writable': true
24926 });
24927};
24928
24929module.exports = baseSetToString;
24930
24931},{"./_defineProperty":235,"./constant":311,"./identity":321}],210:[function(require,module,exports){
24932/**
24933 * The base implementation of `_.slice` without an iteratee call guard.
24934 *
24935 * @private
24936 * @param {Array} array The array to slice.
24937 * @param {number} [start=0] The start position.
24938 * @param {number} [end=array.length] The end position.
24939 * @returns {Array} Returns the slice of `array`.
24940 */
24941function baseSlice(array, start, end) {
24942 var index = -1,
24943 length = array.length;
24944
24945 if (start < 0) {
24946 start = -start > length ? 0 : (length + start);
24947 }
24948 end = end > length ? length : end;
24949 if (end < 0) {
24950 end += length;
24951 }
24952 length = start > end ? 0 : ((end - start) >>> 0);
24953 start >>>= 0;
24954
24955 var result = Array(length);
24956 while (++index < length) {
24957 result[index] = array[index + start];
24958 }
24959 return result;
24960}
24961
24962module.exports = baseSlice;
24963
24964},{}],211:[function(require,module,exports){
24965/**
24966 * The base implementation of `_.times` without support for iteratee shorthands
24967 * or max array length checks.
24968 *
24969 * @private
24970 * @param {number} n The number of times to invoke `iteratee`.
24971 * @param {Function} iteratee The function invoked per iteration.
24972 * @returns {Array} Returns the array of results.
24973 */
24974function baseTimes(n, iteratee) {
24975 var index = -1,
24976 result = Array(n);
24977
24978 while (++index < n) {
24979 result[index] = iteratee(index);
24980 }
24981 return result;
24982}
24983
24984module.exports = baseTimes;
24985
24986},{}],212:[function(require,module,exports){
24987var Symbol = require('./_Symbol'),
24988 arrayMap = require('./_arrayMap'),
24989 isArray = require('./isArray'),
24990 isSymbol = require('./isSymbol');
24991
24992/** Used as references for various `Number` constants. */
24993var INFINITY = 1 / 0;
24994
24995/** Used to convert symbols to primitives and strings. */
24996var symbolProto = Symbol ? Symbol.prototype : undefined,
24997 symbolToString = symbolProto ? symbolProto.toString : undefined;
24998
24999/**
25000 * The base implementation of `_.toString` which doesn't convert nullish
25001 * values to empty strings.
25002 *
25003 * @private
25004 * @param {*} value The value to process.
25005 * @returns {string} Returns the string.
25006 */
25007function baseToString(value) {
25008 // Exit early for strings to avoid a performance hit in some environments.
25009 if (typeof value == 'string') {
25010 return value;
25011 }
25012 if (isArray(value)) {
25013 // Recursively convert values (susceptible to call stack limits).
25014 return arrayMap(value, baseToString) + '';
25015 }
25016 if (isSymbol(value)) {
25017 return symbolToString ? symbolToString.call(value) : '';
25018 }
25019 var result = (value + '');
25020 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
25021}
25022
25023module.exports = baseToString;
25024
25025},{"./_Symbol":156,"./_arrayMap":164,"./isArray":323,"./isSymbol":338}],213:[function(require,module,exports){
25026/**
25027 * The base implementation of `_.unary` without support for storing metadata.
25028 *
25029 * @private
25030 * @param {Function} func The function to cap arguments for.
25031 * @returns {Function} Returns the new capped function.
25032 */
25033function baseUnary(func) {
25034 return function(value) {
25035 return func(value);
25036 };
25037}
25038
25039module.exports = baseUnary;
25040
25041},{}],214:[function(require,module,exports){
25042var arrayMap = require('./_arrayMap');
25043
25044/**
25045 * The base implementation of `_.values` and `_.valuesIn` which creates an
25046 * array of `object` property values corresponding to the property names
25047 * of `props`.
25048 *
25049 * @private
25050 * @param {Object} object The object to query.
25051 * @param {Array} props The property names to get values for.
25052 * @returns {Object} Returns the array of property values.
25053 */
25054function baseValues(object, props) {
25055 return arrayMap(props, function(key) {
25056 return object[key];
25057 });
25058}
25059
25060module.exports = baseValues;
25061
25062},{"./_arrayMap":164}],215:[function(require,module,exports){
25063/**
25064 * Checks if a `cache` value for `key` exists.
25065 *
25066 * @private
25067 * @param {Object} cache The cache to query.
25068 * @param {string} key The key of the entry to check.
25069 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
25070 */
25071function cacheHas(cache, key) {
25072 return cache.has(key);
25073}
25074
25075module.exports = cacheHas;
25076
25077},{}],216:[function(require,module,exports){
25078var identity = require('./identity');
25079
25080/**
25081 * Casts `value` to `identity` if it's not a function.
25082 *
25083 * @private
25084 * @param {*} value The value to inspect.
25085 * @returns {Function} Returns cast function.
25086 */
25087function castFunction(value) {
25088 return typeof value == 'function' ? value : identity;
25089}
25090
25091module.exports = castFunction;
25092
25093},{"./identity":321}],217:[function(require,module,exports){
25094var isArray = require('./isArray'),
25095 isKey = require('./_isKey'),
25096 stringToPath = require('./_stringToPath'),
25097 toString = require('./toString');
25098
25099/**
25100 * Casts `value` to a path array if it's not one.
25101 *
25102 * @private
25103 * @param {*} value The value to inspect.
25104 * @param {Object} [object] The object to query keys on.
25105 * @returns {Array} Returns the cast property path array.
25106 */
25107function castPath(value, object) {
25108 if (isArray(value)) {
25109 return value;
25110 }
25111 return isKey(value, object) ? [value] : stringToPath(toString(value));
25112}
25113
25114module.exports = castPath;
25115
25116},{"./_isKey":265,"./_stringToPath":304,"./isArray":323,"./toString":354}],218:[function(require,module,exports){
25117var baseSlice = require('./_baseSlice');
25118
25119/**
25120 * Casts `array` to a slice if it's needed.
25121 *
25122 * @private
25123 * @param {Array} array The array to inspect.
25124 * @param {number} start The start position.
25125 * @param {number} [end=array.length] The end position.
25126 * @returns {Array} Returns the cast slice.
25127 */
25128function castSlice(array, start, end) {
25129 var length = array.length;
25130 end = end === undefined ? length : end;
25131 return (!start && end >= length) ? array : baseSlice(array, start, end);
25132}
25133
25134module.exports = castSlice;
25135
25136},{"./_baseSlice":210}],219:[function(require,module,exports){
25137var baseIndexOf = require('./_baseIndexOf');
25138
25139/**
25140 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
25141 * that is not found in the character symbols.
25142 *
25143 * @private
25144 * @param {Array} strSymbols The string symbols to inspect.
25145 * @param {Array} chrSymbols The character symbols to find.
25146 * @returns {number} Returns the index of the last unmatched string symbol.
25147 */
25148function charsEndIndex(strSymbols, chrSymbols) {
25149 var index = strSymbols.length;
25150
25151 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
25152 return index;
25153}
25154
25155module.exports = charsEndIndex;
25156
25157},{"./_baseIndexOf":186}],220:[function(require,module,exports){
25158var Uint8Array = require('./_Uint8Array');
25159
25160/**
25161 * Creates a clone of `arrayBuffer`.
25162 *
25163 * @private
25164 * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
25165 * @returns {ArrayBuffer} Returns the cloned array buffer.
25166 */
25167function cloneArrayBuffer(arrayBuffer) {
25168 var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
25169 new Uint8Array(result).set(new Uint8Array(arrayBuffer));
25170 return result;
25171}
25172
25173module.exports = cloneArrayBuffer;
25174
25175},{"./_Uint8Array":157}],221:[function(require,module,exports){
25176var root = require('./_root');
25177
25178/** Detect free variable `exports`. */
25179var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
25180
25181/** Detect free variable `module`. */
25182var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
25183
25184/** Detect the popular CommonJS extension `module.exports`. */
25185var moduleExports = freeModule && freeModule.exports === freeExports;
25186
25187/** Built-in value references. */
25188var Buffer = moduleExports ? root.Buffer : undefined,
25189 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;
25190
25191/**
25192 * Creates a clone of `buffer`.
25193 *
25194 * @private
25195 * @param {Buffer} buffer The buffer to clone.
25196 * @param {boolean} [isDeep] Specify a deep clone.
25197 * @returns {Buffer} Returns the cloned buffer.
25198 */
25199function cloneBuffer(buffer, isDeep) {
25200 if (isDeep) {
25201 return buffer.slice();
25202 }
25203 var length = buffer.length,
25204 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
25205
25206 buffer.copy(result);
25207 return result;
25208}
25209
25210module.exports = cloneBuffer;
25211
25212},{"./_root":290}],222:[function(require,module,exports){
25213var cloneArrayBuffer = require('./_cloneArrayBuffer');
25214
25215/**
25216 * Creates a clone of `dataView`.
25217 *
25218 * @private
25219 * @param {Object} dataView The data view to clone.
25220 * @param {boolean} [isDeep] Specify a deep clone.
25221 * @returns {Object} Returns the cloned data view.
25222 */
25223function cloneDataView(dataView, isDeep) {
25224 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
25225 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
25226}
25227
25228module.exports = cloneDataView;
25229
25230},{"./_cloneArrayBuffer":220}],223:[function(require,module,exports){
25231/** Used to match `RegExp` flags from their coerced string values. */
25232var reFlags = /\w*$/;
25233
25234/**
25235 * Creates a clone of `regexp`.
25236 *
25237 * @private
25238 * @param {Object} regexp The regexp to clone.
25239 * @returns {Object} Returns the cloned regexp.
25240 */
25241function cloneRegExp(regexp) {
25242 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
25243 result.lastIndex = regexp.lastIndex;
25244 return result;
25245}
25246
25247module.exports = cloneRegExp;
25248
25249},{}],224:[function(require,module,exports){
25250var Symbol = require('./_Symbol');
25251
25252/** Used to convert symbols to primitives and strings. */
25253var symbolProto = Symbol ? Symbol.prototype : undefined,
25254 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
25255
25256/**
25257 * Creates a clone of the `symbol` object.
25258 *
25259 * @private
25260 * @param {Object} symbol The symbol object to clone.
25261 * @returns {Object} Returns the cloned symbol object.
25262 */
25263function cloneSymbol(symbol) {
25264 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
25265}
25266
25267module.exports = cloneSymbol;
25268
25269},{"./_Symbol":156}],225:[function(require,module,exports){
25270var cloneArrayBuffer = require('./_cloneArrayBuffer');
25271
25272/**
25273 * Creates a clone of `typedArray`.
25274 *
25275 * @private
25276 * @param {Object} typedArray The typed array to clone.
25277 * @param {boolean} [isDeep] Specify a deep clone.
25278 * @returns {Object} Returns the cloned typed array.
25279 */
25280function cloneTypedArray(typedArray, isDeep) {
25281 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
25282 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
25283}
25284
25285module.exports = cloneTypedArray;
25286
25287},{"./_cloneArrayBuffer":220}],226:[function(require,module,exports){
25288/**
25289 * Copies the values of `source` to `array`.
25290 *
25291 * @private
25292 * @param {Array} source The array to copy values from.
25293 * @param {Array} [array=[]] The array to copy values to.
25294 * @returns {Array} Returns `array`.
25295 */
25296function copyArray(source, array) {
25297 var index = -1,
25298 length = source.length;
25299
25300 array || (array = Array(length));
25301 while (++index < length) {
25302 array[index] = source[index];
25303 }
25304 return array;
25305}
25306
25307module.exports = copyArray;
25308
25309},{}],227:[function(require,module,exports){
25310var assignValue = require('./_assignValue'),
25311 baseAssignValue = require('./_baseAssignValue');
25312
25313/**
25314 * Copies properties of `source` to `object`.
25315 *
25316 * @private
25317 * @param {Object} source The object to copy properties from.
25318 * @param {Array} props The property identifiers to copy.
25319 * @param {Object} [object={}] The object to copy properties to.
25320 * @param {Function} [customizer] The function to customize copied values.
25321 * @returns {Object} Returns `object`.
25322 */
25323function copyObject(source, props, object, customizer) {
25324 var isNew = !object;
25325 object || (object = {});
25326
25327 var index = -1,
25328 length = props.length;
25329
25330 while (++index < length) {
25331 var key = props[index];
25332
25333 var newValue = customizer
25334 ? customizer(object[key], source[key], key, object, source)
25335 : undefined;
25336
25337 if (newValue === undefined) {
25338 newValue = source[key];
25339 }
25340 if (isNew) {
25341 baseAssignValue(object, key, newValue);
25342 } else {
25343 assignValue(object, key, newValue);
25344 }
25345 }
25346 return object;
25347}
25348
25349module.exports = copyObject;
25350
25351},{"./_assignValue":169,"./_baseAssignValue":173}],228:[function(require,module,exports){
25352var copyObject = require('./_copyObject'),
25353 getSymbols = require('./_getSymbols');
25354
25355/**
25356 * Copies own symbols of `source` to `object`.
25357 *
25358 * @private
25359 * @param {Object} source The object to copy symbols from.
25360 * @param {Object} [object={}] The object to copy symbols to.
25361 * @returns {Object} Returns `object`.
25362 */
25363function copySymbols(source, object) {
25364 return copyObject(source, getSymbols(source), object);
25365}
25366
25367module.exports = copySymbols;
25368
25369},{"./_copyObject":227,"./_getSymbols":248}],229:[function(require,module,exports){
25370var copyObject = require('./_copyObject'),
25371 getSymbolsIn = require('./_getSymbolsIn');
25372
25373/**
25374 * Copies own and inherited symbols of `source` to `object`.
25375 *
25376 * @private
25377 * @param {Object} source The object to copy symbols from.
25378 * @param {Object} [object={}] The object to copy symbols to.
25379 * @returns {Object} Returns `object`.
25380 */
25381function copySymbolsIn(source, object) {
25382 return copyObject(source, getSymbolsIn(source), object);
25383}
25384
25385module.exports = copySymbolsIn;
25386
25387},{"./_copyObject":227,"./_getSymbolsIn":249}],230:[function(require,module,exports){
25388var root = require('./_root');
25389
25390/** Used to detect overreaching core-js shims. */
25391var coreJsData = root['__core-js_shared__'];
25392
25393module.exports = coreJsData;
25394
25395},{"./_root":290}],231:[function(require,module,exports){
25396var baseRest = require('./_baseRest'),
25397 isIterateeCall = require('./_isIterateeCall');
25398
25399/**
25400 * Creates a function like `_.assign`.
25401 *
25402 * @private
25403 * @param {Function} assigner The function to assign values.
25404 * @returns {Function} Returns the new assigner function.
25405 */
25406function createAssigner(assigner) {
25407 return baseRest(function(object, sources) {
25408 var index = -1,
25409 length = sources.length,
25410 customizer = length > 1 ? sources[length - 1] : undefined,
25411 guard = length > 2 ? sources[2] : undefined;
25412
25413 customizer = (assigner.length > 3 && typeof customizer == 'function')
25414 ? (length--, customizer)
25415 : undefined;
25416
25417 if (guard && isIterateeCall(sources[0], sources[1], guard)) {
25418 customizer = length < 3 ? undefined : customizer;
25419 length = 1;
25420 }
25421 object = Object(object);
25422 while (++index < length) {
25423 var source = sources[index];
25424 if (source) {
25425 assigner(object, source, index, customizer);
25426 }
25427 }
25428 return object;
25429 });
25430}
25431
25432module.exports = createAssigner;
25433
25434},{"./_baseRest":207,"./_isIterateeCall":264}],232:[function(require,module,exports){
25435var isArrayLike = require('./isArrayLike');
25436
25437/**
25438 * Creates a `baseEach` or `baseEachRight` function.
25439 *
25440 * @private
25441 * @param {Function} eachFunc The function to iterate over a collection.
25442 * @param {boolean} [fromRight] Specify iterating from right to left.
25443 * @returns {Function} Returns the new base function.
25444 */
25445function createBaseEach(eachFunc, fromRight) {
25446 return function(collection, iteratee) {
25447 if (collection == null) {
25448 return collection;
25449 }
25450 if (!isArrayLike(collection)) {
25451 return eachFunc(collection, iteratee);
25452 }
25453 var length = collection.length,
25454 index = fromRight ? length : -1,
25455 iterable = Object(collection);
25456
25457 while ((fromRight ? index-- : ++index < length)) {
25458 if (iteratee(iterable[index], index, iterable) === false) {
25459 break;
25460 }
25461 }
25462 return collection;
25463 };
25464}
25465
25466module.exports = createBaseEach;
25467
25468},{"./isArrayLike":324}],233:[function(require,module,exports){
25469/**
25470 * Creates a base function for methods like `_.forIn` and `_.forOwn`.
25471 *
25472 * @private
25473 * @param {boolean} [fromRight] Specify iterating from right to left.
25474 * @returns {Function} Returns the new base function.
25475 */
25476function createBaseFor(fromRight) {
25477 return function(object, iteratee, keysFunc) {
25478 var index = -1,
25479 iterable = Object(object),
25480 props = keysFunc(object),
25481 length = props.length;
25482
25483 while (length--) {
25484 var key = props[fromRight ? length : ++index];
25485 if (iteratee(iterable[key], key, iterable) === false) {
25486 break;
25487 }
25488 }
25489 return object;
25490 };
25491}
25492
25493module.exports = createBaseFor;
25494
25495},{}],234:[function(require,module,exports){
25496var baseRepeat = require('./_baseRepeat'),
25497 baseToString = require('./_baseToString'),
25498 castSlice = require('./_castSlice'),
25499 hasUnicode = require('./_hasUnicode'),
25500 stringSize = require('./_stringSize'),
25501 stringToArray = require('./_stringToArray');
25502
25503/* Built-in method references for those with the same name as other `lodash` methods. */
25504var nativeCeil = Math.ceil;
25505
25506/**
25507 * Creates the padding for `string` based on `length`. The `chars` string
25508 * is truncated if the number of characters exceeds `length`.
25509 *
25510 * @private
25511 * @param {number} length The padding length.
25512 * @param {string} [chars=' '] The string used as padding.
25513 * @returns {string} Returns the padding for `string`.
25514 */
25515function createPadding(length, chars) {
25516 chars = chars === undefined ? ' ' : baseToString(chars);
25517
25518 var charsLength = chars.length;
25519 if (charsLength < 2) {
25520 return charsLength ? baseRepeat(chars, length) : chars;
25521 }
25522 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
25523 return hasUnicode(chars)
25524 ? castSlice(stringToArray(result), 0, length).join('')
25525 : result.slice(0, length);
25526}
25527
25528module.exports = createPadding;
25529
25530},{"./_baseRepeat":206,"./_baseToString":212,"./_castSlice":218,"./_hasUnicode":253,"./_stringSize":302,"./_stringToArray":303}],235:[function(require,module,exports){
25531var getNative = require('./_getNative');
25532
25533var defineProperty = (function() {
25534 try {
25535 var func = getNative(Object, 'defineProperty');
25536 func({}, '', {});
25537 return func;
25538 } catch (e) {}
25539}());
25540
25541module.exports = defineProperty;
25542
25543},{"./_getNative":245}],236:[function(require,module,exports){
25544var SetCache = require('./_SetCache'),
25545 arraySome = require('./_arraySome'),
25546 cacheHas = require('./_cacheHas');
25547
25548/** Used to compose bitmasks for value comparisons. */
25549var COMPARE_PARTIAL_FLAG = 1,
25550 COMPARE_UNORDERED_FLAG = 2;
25551
25552/**
25553 * A specialized version of `baseIsEqualDeep` for arrays with support for
25554 * partial deep comparisons.
25555 *
25556 * @private
25557 * @param {Array} array The array to compare.
25558 * @param {Array} other The other array to compare.
25559 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
25560 * @param {Function} customizer The function to customize comparisons.
25561 * @param {Function} equalFunc The function to determine equivalents of values.
25562 * @param {Object} stack Tracks traversed `array` and `other` objects.
25563 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
25564 */
25565function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
25566 var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
25567 arrLength = array.length,
25568 othLength = other.length;
25569
25570 if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
25571 return false;
25572 }
25573 // Assume cyclic values are equal.
25574 var stacked = stack.get(array);
25575 if (stacked && stack.get(other)) {
25576 return stacked == other;
25577 }
25578 var index = -1,
25579 result = true,
25580 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
25581
25582 stack.set(array, other);
25583 stack.set(other, array);
25584
25585 // Ignore non-index properties.
25586 while (++index < arrLength) {
25587 var arrValue = array[index],
25588 othValue = other[index];
25589
25590 if (customizer) {
25591 var compared = isPartial
25592 ? customizer(othValue, arrValue, index, other, array, stack)
25593 : customizer(arrValue, othValue, index, array, other, stack);
25594 }
25595 if (compared !== undefined) {
25596 if (compared) {
25597 continue;
25598 }
25599 result = false;
25600 break;
25601 }
25602 // Recursively compare arrays (susceptible to call stack limits).
25603 if (seen) {
25604 if (!arraySome(other, function(othValue, othIndex) {
25605 if (!cacheHas(seen, othIndex) &&
25606 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
25607 return seen.push(othIndex);
25608 }
25609 })) {
25610 result = false;
25611 break;
25612 }
25613 } else if (!(
25614 arrValue === othValue ||
25615 equalFunc(arrValue, othValue, bitmask, customizer, stack)
25616 )) {
25617 result = false;
25618 break;
25619 }
25620 }
25621 stack['delete'](array);
25622 stack['delete'](other);
25623 return result;
25624}
25625
25626module.exports = equalArrays;
25627
25628},{"./_SetCache":154,"./_arraySome":166,"./_cacheHas":215}],237:[function(require,module,exports){
25629var Symbol = require('./_Symbol'),
25630 Uint8Array = require('./_Uint8Array'),
25631 eq = require('./eq'),
25632 equalArrays = require('./_equalArrays'),
25633 mapToArray = require('./_mapToArray'),
25634 setToArray = require('./_setToArray');
25635
25636/** Used to compose bitmasks for value comparisons. */
25637var COMPARE_PARTIAL_FLAG = 1,
25638 COMPARE_UNORDERED_FLAG = 2;
25639
25640/** `Object#toString` result references. */
25641var boolTag = '[object Boolean]',
25642 dateTag = '[object Date]',
25643 errorTag = '[object Error]',
25644 mapTag = '[object Map]',
25645 numberTag = '[object Number]',
25646 regexpTag = '[object RegExp]',
25647 setTag = '[object Set]',
25648 stringTag = '[object String]',
25649 symbolTag = '[object Symbol]';
25650
25651var arrayBufferTag = '[object ArrayBuffer]',
25652 dataViewTag = '[object DataView]';
25653
25654/** Used to convert symbols to primitives and strings. */
25655var symbolProto = Symbol ? Symbol.prototype : undefined,
25656 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
25657
25658/**
25659 * A specialized version of `baseIsEqualDeep` for comparing objects of
25660 * the same `toStringTag`.
25661 *
25662 * **Note:** This function only supports comparing values with tags of
25663 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
25664 *
25665 * @private
25666 * @param {Object} object The object to compare.
25667 * @param {Object} other The other object to compare.
25668 * @param {string} tag The `toStringTag` of the objects to compare.
25669 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
25670 * @param {Function} customizer The function to customize comparisons.
25671 * @param {Function} equalFunc The function to determine equivalents of values.
25672 * @param {Object} stack Tracks traversed `object` and `other` objects.
25673 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
25674 */
25675function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
25676 switch (tag) {
25677 case dataViewTag:
25678 if ((object.byteLength != other.byteLength) ||
25679 (object.byteOffset != other.byteOffset)) {
25680 return false;
25681 }
25682 object = object.buffer;
25683 other = other.buffer;
25684
25685 case arrayBufferTag:
25686 if ((object.byteLength != other.byteLength) ||
25687 !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
25688 return false;
25689 }
25690 return true;
25691
25692 case boolTag:
25693 case dateTag:
25694 case numberTag:
25695 // Coerce booleans to `1` or `0` and dates to milliseconds.
25696 // Invalid dates are coerced to `NaN`.
25697 return eq(+object, +other);
25698
25699 case errorTag:
25700 return object.name == other.name && object.message == other.message;
25701
25702 case regexpTag:
25703 case stringTag:
25704 // Coerce regexes to strings and treat strings, primitives and objects,
25705 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
25706 // for more details.
25707 return object == (other + '');
25708
25709 case mapTag:
25710 var convert = mapToArray;
25711
25712 case setTag:
25713 var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
25714 convert || (convert = setToArray);
25715
25716 if (object.size != other.size && !isPartial) {
25717 return false;
25718 }
25719 // Assume cyclic values are equal.
25720 var stacked = stack.get(object);
25721 if (stacked) {
25722 return stacked == other;
25723 }
25724 bitmask |= COMPARE_UNORDERED_FLAG;
25725
25726 // Recursively compare objects (susceptible to call stack limits).
25727 stack.set(object, other);
25728 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
25729 stack['delete'](object);
25730 return result;
25731
25732 case symbolTag:
25733 if (symbolValueOf) {
25734 return symbolValueOf.call(object) == symbolValueOf.call(other);
25735 }
25736 }
25737 return false;
25738}
25739
25740module.exports = equalByTag;
25741
25742},{"./_Symbol":156,"./_Uint8Array":157,"./_equalArrays":236,"./_mapToArray":280,"./_setToArray":293,"./eq":313}],238:[function(require,module,exports){
25743var getAllKeys = require('./_getAllKeys');
25744
25745/** Used to compose bitmasks for value comparisons. */
25746var COMPARE_PARTIAL_FLAG = 1;
25747
25748/** Used for built-in method references. */
25749var objectProto = Object.prototype;
25750
25751/** Used to check objects for own properties. */
25752var hasOwnProperty = objectProto.hasOwnProperty;
25753
25754/**
25755 * A specialized version of `baseIsEqualDeep` for objects with support for
25756 * partial deep comparisons.
25757 *
25758 * @private
25759 * @param {Object} object The object to compare.
25760 * @param {Object} other The other object to compare.
25761 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
25762 * @param {Function} customizer The function to customize comparisons.
25763 * @param {Function} equalFunc The function to determine equivalents of values.
25764 * @param {Object} stack Tracks traversed `object` and `other` objects.
25765 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
25766 */
25767function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
25768 var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
25769 objProps = getAllKeys(object),
25770 objLength = objProps.length,
25771 othProps = getAllKeys(other),
25772 othLength = othProps.length;
25773
25774 if (objLength != othLength && !isPartial) {
25775 return false;
25776 }
25777 var index = objLength;
25778 while (index--) {
25779 var key = objProps[index];
25780 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
25781 return false;
25782 }
25783 }
25784 // Assume cyclic values are equal.
25785 var stacked = stack.get(object);
25786 if (stacked && stack.get(other)) {
25787 return stacked == other;
25788 }
25789 var result = true;
25790 stack.set(object, other);
25791 stack.set(other, object);
25792
25793 var skipCtor = isPartial;
25794 while (++index < objLength) {
25795 key = objProps[index];
25796 var objValue = object[key],
25797 othValue = other[key];
25798
25799 if (customizer) {
25800 var compared = isPartial
25801 ? customizer(othValue, objValue, key, other, object, stack)
25802 : customizer(objValue, othValue, key, object, other, stack);
25803 }
25804 // Recursively compare objects (susceptible to call stack limits).
25805 if (!(compared === undefined
25806 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
25807 : compared
25808 )) {
25809 result = false;
25810 break;
25811 }
25812 skipCtor || (skipCtor = key == 'constructor');
25813 }
25814 if (result && !skipCtor) {
25815 var objCtor = object.constructor,
25816 othCtor = other.constructor;
25817
25818 // Non `Object` object instances with different constructors are not equal.
25819 if (objCtor != othCtor &&
25820 ('constructor' in object && 'constructor' in other) &&
25821 !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
25822 typeof othCtor == 'function' && othCtor instanceof othCtor)) {
25823 result = false;
25824 }
25825 }
25826 stack['delete'](object);
25827 stack['delete'](other);
25828 return result;
25829}
25830
25831module.exports = equalObjects;
25832
25833},{"./_getAllKeys":241}],239:[function(require,module,exports){
25834var flatten = require('./flatten'),
25835 overRest = require('./_overRest'),
25836 setToString = require('./_setToString');
25837
25838/**
25839 * A specialized version of `baseRest` which flattens the rest array.
25840 *
25841 * @private
25842 * @param {Function} func The function to apply a rest parameter to.
25843 * @returns {Function} Returns the new function.
25844 */
25845function flatRest(func) {
25846 return setToString(overRest(func, undefined, flatten), func + '');
25847}
25848
25849module.exports = flatRest;
25850
25851},{"./_overRest":289,"./_setToString":294,"./flatten":316}],240:[function(require,module,exports){
25852(function (global){
25853/** Detect free variable `global` from Node.js. */
25854var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
25855
25856module.exports = freeGlobal;
25857
25858}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
25859},{}],241:[function(require,module,exports){
25860var baseGetAllKeys = require('./_baseGetAllKeys'),
25861 getSymbols = require('./_getSymbols'),
25862 keys = require('./keys');
25863
25864/**
25865 * Creates an array of own enumerable property names and symbols of `object`.
25866 *
25867 * @private
25868 * @param {Object} object The object to query.
25869 * @returns {Array} Returns the array of property names and symbols.
25870 */
25871function getAllKeys(object) {
25872 return baseGetAllKeys(object, keys, getSymbols);
25873}
25874
25875module.exports = getAllKeys;
25876
25877},{"./_baseGetAllKeys":183,"./_getSymbols":248,"./keys":341}],242:[function(require,module,exports){
25878var baseGetAllKeys = require('./_baseGetAllKeys'),
25879 getSymbolsIn = require('./_getSymbolsIn'),
25880 keysIn = require('./keysIn');
25881
25882/**
25883 * Creates an array of own and inherited enumerable property names and
25884 * symbols of `object`.
25885 *
25886 * @private
25887 * @param {Object} object The object to query.
25888 * @returns {Array} Returns the array of property names and symbols.
25889 */
25890function getAllKeysIn(object) {
25891 return baseGetAllKeys(object, keysIn, getSymbolsIn);
25892}
25893
25894module.exports = getAllKeysIn;
25895
25896},{"./_baseGetAllKeys":183,"./_getSymbolsIn":249,"./keysIn":342}],243:[function(require,module,exports){
25897var isKeyable = require('./_isKeyable');
25898
25899/**
25900 * Gets the data for `map`.
25901 *
25902 * @private
25903 * @param {Object} map The map to query.
25904 * @param {string} key The reference key.
25905 * @returns {*} Returns the map data.
25906 */
25907function getMapData(map, key) {
25908 var data = map.__data__;
25909 return isKeyable(key)
25910 ? data[typeof key == 'string' ? 'string' : 'hash']
25911 : data.map;
25912}
25913
25914module.exports = getMapData;
25915
25916},{"./_isKeyable":266}],244:[function(require,module,exports){
25917var isStrictComparable = require('./_isStrictComparable'),
25918 keys = require('./keys');
25919
25920/**
25921 * Gets the property names, values, and compare flags of `object`.
25922 *
25923 * @private
25924 * @param {Object} object The object to query.
25925 * @returns {Array} Returns the match data of `object`.
25926 */
25927function getMatchData(object) {
25928 var result = keys(object),
25929 length = result.length;
25930
25931 while (length--) {
25932 var key = result[length],
25933 value = object[key];
25934
25935 result[length] = [key, value, isStrictComparable(value)];
25936 }
25937 return result;
25938}
25939
25940module.exports = getMatchData;
25941
25942},{"./_isStrictComparable":269,"./keys":341}],245:[function(require,module,exports){
25943var baseIsNative = require('./_baseIsNative'),
25944 getValue = require('./_getValue');
25945
25946/**
25947 * Gets the native function at `key` of `object`.
25948 *
25949 * @private
25950 * @param {Object} object The object to query.
25951 * @param {string} key The key of the method to get.
25952 * @returns {*} Returns the function if it's native, else `undefined`.
25953 */
25954function getNative(object, key) {
25955 var value = getValue(object, key);
25956 return baseIsNative(value) ? value : undefined;
25957}
25958
25959module.exports = getNative;
25960
25961},{"./_baseIsNative":193,"./_getValue":251}],246:[function(require,module,exports){
25962var overArg = require('./_overArg');
25963
25964/** Built-in value references. */
25965var getPrototype = overArg(Object.getPrototypeOf, Object);
25966
25967module.exports = getPrototype;
25968
25969},{"./_overArg":288}],247:[function(require,module,exports){
25970var Symbol = require('./_Symbol');
25971
25972/** Used for built-in method references. */
25973var objectProto = Object.prototype;
25974
25975/** Used to check objects for own properties. */
25976var hasOwnProperty = objectProto.hasOwnProperty;
25977
25978/**
25979 * Used to resolve the
25980 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
25981 * of values.
25982 */
25983var nativeObjectToString = objectProto.toString;
25984
25985/** Built-in value references. */
25986var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
25987
25988/**
25989 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
25990 *
25991 * @private
25992 * @param {*} value The value to query.
25993 * @returns {string} Returns the raw `toStringTag`.
25994 */
25995function getRawTag(value) {
25996 var isOwn = hasOwnProperty.call(value, symToStringTag),
25997 tag = value[symToStringTag];
25998
25999 try {
26000 value[symToStringTag] = undefined;
26001 var unmasked = true;
26002 } catch (e) {}
26003
26004 var result = nativeObjectToString.call(value);
26005 if (unmasked) {
26006 if (isOwn) {
26007 value[symToStringTag] = tag;
26008 } else {
26009 delete value[symToStringTag];
26010 }
26011 }
26012 return result;
26013}
26014
26015module.exports = getRawTag;
26016
26017},{"./_Symbol":156}],248:[function(require,module,exports){
26018var arrayFilter = require('./_arrayFilter'),
26019 stubArray = require('./stubArray');
26020
26021/** Used for built-in method references. */
26022var objectProto = Object.prototype;
26023
26024/** Built-in value references. */
26025var propertyIsEnumerable = objectProto.propertyIsEnumerable;
26026
26027/* Built-in method references for those with the same name as other `lodash` methods. */
26028var nativeGetSymbols = Object.getOwnPropertySymbols;
26029
26030/**
26031 * Creates an array of the own enumerable symbols of `object`.
26032 *
26033 * @private
26034 * @param {Object} object The object to query.
26035 * @returns {Array} Returns the array of symbols.
26036 */
26037var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
26038 if (object == null) {
26039 return [];
26040 }
26041 object = Object(object);
26042 return arrayFilter(nativeGetSymbols(object), function(symbol) {
26043 return propertyIsEnumerable.call(object, symbol);
26044 });
26045};
26046
26047module.exports = getSymbols;
26048
26049},{"./_arrayFilter":162,"./stubArray":348}],249:[function(require,module,exports){
26050var arrayPush = require('./_arrayPush'),
26051 getPrototype = require('./_getPrototype'),
26052 getSymbols = require('./_getSymbols'),
26053 stubArray = require('./stubArray');
26054
26055/* Built-in method references for those with the same name as other `lodash` methods. */
26056var nativeGetSymbols = Object.getOwnPropertySymbols;
26057
26058/**
26059 * Creates an array of the own and inherited enumerable symbols of `object`.
26060 *
26061 * @private
26062 * @param {Object} object The object to query.
26063 * @returns {Array} Returns the array of symbols.
26064 */
26065var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
26066 var result = [];
26067 while (object) {
26068 arrayPush(result, getSymbols(object));
26069 object = getPrototype(object);
26070 }
26071 return result;
26072};
26073
26074module.exports = getSymbolsIn;
26075
26076},{"./_arrayPush":165,"./_getPrototype":246,"./_getSymbols":248,"./stubArray":348}],250:[function(require,module,exports){
26077var DataView = require('./_DataView'),
26078 Map = require('./_Map'),
26079 Promise = require('./_Promise'),
26080 Set = require('./_Set'),
26081 WeakMap = require('./_WeakMap'),
26082 baseGetTag = require('./_baseGetTag'),
26083 toSource = require('./_toSource');
26084
26085/** `Object#toString` result references. */
26086var mapTag = '[object Map]',
26087 objectTag = '[object Object]',
26088 promiseTag = '[object Promise]',
26089 setTag = '[object Set]',
26090 weakMapTag = '[object WeakMap]';
26091
26092var dataViewTag = '[object DataView]';
26093
26094/** Used to detect maps, sets, and weakmaps. */
26095var dataViewCtorString = toSource(DataView),
26096 mapCtorString = toSource(Map),
26097 promiseCtorString = toSource(Promise),
26098 setCtorString = toSource(Set),
26099 weakMapCtorString = toSource(WeakMap);
26100
26101/**
26102 * Gets the `toStringTag` of `value`.
26103 *
26104 * @private
26105 * @param {*} value The value to query.
26106 * @returns {string} Returns the `toStringTag`.
26107 */
26108var getTag = baseGetTag;
26109
26110// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
26111if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
26112 (Map && getTag(new Map) != mapTag) ||
26113 (Promise && getTag(Promise.resolve()) != promiseTag) ||
26114 (Set && getTag(new Set) != setTag) ||
26115 (WeakMap && getTag(new WeakMap) != weakMapTag)) {
26116 getTag = function(value) {
26117 var result = baseGetTag(value),
26118 Ctor = result == objectTag ? value.constructor : undefined,
26119 ctorString = Ctor ? toSource(Ctor) : '';
26120
26121 if (ctorString) {
26122 switch (ctorString) {
26123 case dataViewCtorString: return dataViewTag;
26124 case mapCtorString: return mapTag;
26125 case promiseCtorString: return promiseTag;
26126 case setCtorString: return setTag;
26127 case weakMapCtorString: return weakMapTag;
26128 }
26129 }
26130 return result;
26131 };
26132}
26133
26134module.exports = getTag;
26135
26136},{"./_DataView":147,"./_Map":150,"./_Promise":152,"./_Set":153,"./_WeakMap":158,"./_baseGetTag":184,"./_toSource":306}],251:[function(require,module,exports){
26137/**
26138 * Gets the value at `key` of `object`.
26139 *
26140 * @private
26141 * @param {Object} [object] The object to query.
26142 * @param {string} key The key of the property to get.
26143 * @returns {*} Returns the property value.
26144 */
26145function getValue(object, key) {
26146 return object == null ? undefined : object[key];
26147}
26148
26149module.exports = getValue;
26150
26151},{}],252:[function(require,module,exports){
26152var castPath = require('./_castPath'),
26153 isArguments = require('./isArguments'),
26154 isArray = require('./isArray'),
26155 isIndex = require('./_isIndex'),
26156 isLength = require('./isLength'),
26157 toKey = require('./_toKey');
26158
26159/**
26160 * Checks if `path` exists on `object`.
26161 *
26162 * @private
26163 * @param {Object} object The object to query.
26164 * @param {Array|string} path The path to check.
26165 * @param {Function} hasFunc The function to check properties.
26166 * @returns {boolean} Returns `true` if `path` exists, else `false`.
26167 */
26168function hasPath(object, path, hasFunc) {
26169 path = castPath(path, object);
26170
26171 var index = -1,
26172 length = path.length,
26173 result = false;
26174
26175 while (++index < length) {
26176 var key = toKey(path[index]);
26177 if (!(result = object != null && hasFunc(object, key))) {
26178 break;
26179 }
26180 object = object[key];
26181 }
26182 if (result || ++index != length) {
26183 return result;
26184 }
26185 length = object == null ? 0 : object.length;
26186 return !!length && isLength(length) && isIndex(key, length) &&
26187 (isArray(object) || isArguments(object));
26188}
26189
26190module.exports = hasPath;
26191
26192},{"./_castPath":217,"./_isIndex":263,"./_toKey":305,"./isArguments":322,"./isArray":323,"./isLength":329}],253:[function(require,module,exports){
26193/** Used to compose unicode character classes. */
26194var rsAstralRange = '\\ud800-\\udfff',
26195 rsComboMarksRange = '\\u0300-\\u036f',
26196 reComboHalfMarksRange = '\\ufe20-\\ufe2f',
26197 rsComboSymbolsRange = '\\u20d0-\\u20ff',
26198 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
26199 rsVarRange = '\\ufe0e\\ufe0f';
26200
26201/** Used to compose unicode capture groups. */
26202var rsZWJ = '\\u200d';
26203
26204/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
26205var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
26206
26207/**
26208 * Checks if `string` contains Unicode symbols.
26209 *
26210 * @private
26211 * @param {string} string The string to inspect.
26212 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
26213 */
26214function hasUnicode(string) {
26215 return reHasUnicode.test(string);
26216}
26217
26218module.exports = hasUnicode;
26219
26220},{}],254:[function(require,module,exports){
26221var nativeCreate = require('./_nativeCreate');
26222
26223/**
26224 * Removes all key-value entries from the hash.
26225 *
26226 * @private
26227 * @name clear
26228 * @memberOf Hash
26229 */
26230function hashClear() {
26231 this.__data__ = nativeCreate ? nativeCreate(null) : {};
26232 this.size = 0;
26233}
26234
26235module.exports = hashClear;
26236
26237},{"./_nativeCreate":283}],255:[function(require,module,exports){
26238/**
26239 * Removes `key` and its value from the hash.
26240 *
26241 * @private
26242 * @name delete
26243 * @memberOf Hash
26244 * @param {Object} hash The hash to modify.
26245 * @param {string} key The key of the value to remove.
26246 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
26247 */
26248function hashDelete(key) {
26249 var result = this.has(key) && delete this.__data__[key];
26250 this.size -= result ? 1 : 0;
26251 return result;
26252}
26253
26254module.exports = hashDelete;
26255
26256},{}],256:[function(require,module,exports){
26257var nativeCreate = require('./_nativeCreate');
26258
26259/** Used to stand-in for `undefined` hash values. */
26260var HASH_UNDEFINED = '__lodash_hash_undefined__';
26261
26262/** Used for built-in method references. */
26263var objectProto = Object.prototype;
26264
26265/** Used to check objects for own properties. */
26266var hasOwnProperty = objectProto.hasOwnProperty;
26267
26268/**
26269 * Gets the hash value for `key`.
26270 *
26271 * @private
26272 * @name get
26273 * @memberOf Hash
26274 * @param {string} key The key of the value to get.
26275 * @returns {*} Returns the entry value.
26276 */
26277function hashGet(key) {
26278 var data = this.__data__;
26279 if (nativeCreate) {
26280 var result = data[key];
26281 return result === HASH_UNDEFINED ? undefined : result;
26282 }
26283 return hasOwnProperty.call(data, key) ? data[key] : undefined;
26284}
26285
26286module.exports = hashGet;
26287
26288},{"./_nativeCreate":283}],257:[function(require,module,exports){
26289var nativeCreate = require('./_nativeCreate');
26290
26291/** Used for built-in method references. */
26292var objectProto = Object.prototype;
26293
26294/** Used to check objects for own properties. */
26295var hasOwnProperty = objectProto.hasOwnProperty;
26296
26297/**
26298 * Checks if a hash value for `key` exists.
26299 *
26300 * @private
26301 * @name has
26302 * @memberOf Hash
26303 * @param {string} key The key of the entry to check.
26304 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
26305 */
26306function hashHas(key) {
26307 var data = this.__data__;
26308 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
26309}
26310
26311module.exports = hashHas;
26312
26313},{"./_nativeCreate":283}],258:[function(require,module,exports){
26314var nativeCreate = require('./_nativeCreate');
26315
26316/** Used to stand-in for `undefined` hash values. */
26317var HASH_UNDEFINED = '__lodash_hash_undefined__';
26318
26319/**
26320 * Sets the hash `key` to `value`.
26321 *
26322 * @private
26323 * @name set
26324 * @memberOf Hash
26325 * @param {string} key The key of the value to set.
26326 * @param {*} value The value to set.
26327 * @returns {Object} Returns the hash instance.
26328 */
26329function hashSet(key, value) {
26330 var data = this.__data__;
26331 this.size += this.has(key) ? 0 : 1;
26332 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
26333 return this;
26334}
26335
26336module.exports = hashSet;
26337
26338},{"./_nativeCreate":283}],259:[function(require,module,exports){
26339/** Used for built-in method references. */
26340var objectProto = Object.prototype;
26341
26342/** Used to check objects for own properties. */
26343var hasOwnProperty = objectProto.hasOwnProperty;
26344
26345/**
26346 * Initializes an array clone.
26347 *
26348 * @private
26349 * @param {Array} array The array to clone.
26350 * @returns {Array} Returns the initialized clone.
26351 */
26352function initCloneArray(array) {
26353 var length = array.length,
26354 result = new array.constructor(length);
26355
26356 // Add properties assigned by `RegExp#exec`.
26357 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
26358 result.index = array.index;
26359 result.input = array.input;
26360 }
26361 return result;
26362}
26363
26364module.exports = initCloneArray;
26365
26366},{}],260:[function(require,module,exports){
26367var cloneArrayBuffer = require('./_cloneArrayBuffer'),
26368 cloneDataView = require('./_cloneDataView'),
26369 cloneRegExp = require('./_cloneRegExp'),
26370 cloneSymbol = require('./_cloneSymbol'),
26371 cloneTypedArray = require('./_cloneTypedArray');
26372
26373/** `Object#toString` result references. */
26374var boolTag = '[object Boolean]',
26375 dateTag = '[object Date]',
26376 mapTag = '[object Map]',
26377 numberTag = '[object Number]',
26378 regexpTag = '[object RegExp]',
26379 setTag = '[object Set]',
26380 stringTag = '[object String]',
26381 symbolTag = '[object Symbol]';
26382
26383var arrayBufferTag = '[object ArrayBuffer]',
26384 dataViewTag = '[object DataView]',
26385 float32Tag = '[object Float32Array]',
26386 float64Tag = '[object Float64Array]',
26387 int8Tag = '[object Int8Array]',
26388 int16Tag = '[object Int16Array]',
26389 int32Tag = '[object Int32Array]',
26390 uint8Tag = '[object Uint8Array]',
26391 uint8ClampedTag = '[object Uint8ClampedArray]',
26392 uint16Tag = '[object Uint16Array]',
26393 uint32Tag = '[object Uint32Array]';
26394
26395/**
26396 * Initializes an object clone based on its `toStringTag`.
26397 *
26398 * **Note:** This function only supports cloning values with tags of
26399 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
26400 *
26401 * @private
26402 * @param {Object} object The object to clone.
26403 * @param {string} tag The `toStringTag` of the object to clone.
26404 * @param {boolean} [isDeep] Specify a deep clone.
26405 * @returns {Object} Returns the initialized clone.
26406 */
26407function initCloneByTag(object, tag, isDeep) {
26408 var Ctor = object.constructor;
26409 switch (tag) {
26410 case arrayBufferTag:
26411 return cloneArrayBuffer(object);
26412
26413 case boolTag:
26414 case dateTag:
26415 return new Ctor(+object);
26416
26417 case dataViewTag:
26418 return cloneDataView(object, isDeep);
26419
26420 case float32Tag: case float64Tag:
26421 case int8Tag: case int16Tag: case int32Tag:
26422 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
26423 return cloneTypedArray(object, isDeep);
26424
26425 case mapTag:
26426 return new Ctor;
26427
26428 case numberTag:
26429 case stringTag:
26430 return new Ctor(object);
26431
26432 case regexpTag:
26433 return cloneRegExp(object);
26434
26435 case setTag:
26436 return new Ctor;
26437
26438 case symbolTag:
26439 return cloneSymbol(object);
26440 }
26441}
26442
26443module.exports = initCloneByTag;
26444
26445},{"./_cloneArrayBuffer":220,"./_cloneDataView":222,"./_cloneRegExp":223,"./_cloneSymbol":224,"./_cloneTypedArray":225}],261:[function(require,module,exports){
26446var baseCreate = require('./_baseCreate'),
26447 getPrototype = require('./_getPrototype'),
26448 isPrototype = require('./_isPrototype');
26449
26450/**
26451 * Initializes an object clone.
26452 *
26453 * @private
26454 * @param {Object} object The object to clone.
26455 * @returns {Object} Returns the initialized clone.
26456 */
26457function initCloneObject(object) {
26458 return (typeof object.constructor == 'function' && !isPrototype(object))
26459 ? baseCreate(getPrototype(object))
26460 : {};
26461}
26462
26463module.exports = initCloneObject;
26464
26465},{"./_baseCreate":175,"./_getPrototype":246,"./_isPrototype":268}],262:[function(require,module,exports){
26466var Symbol = require('./_Symbol'),
26467 isArguments = require('./isArguments'),
26468 isArray = require('./isArray');
26469
26470/** Built-in value references. */
26471var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
26472
26473/**
26474 * Checks if `value` is a flattenable `arguments` object or array.
26475 *
26476 * @private
26477 * @param {*} value The value to check.
26478 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
26479 */
26480function isFlattenable(value) {
26481 return isArray(value) || isArguments(value) ||
26482 !!(spreadableSymbol && value && value[spreadableSymbol]);
26483}
26484
26485module.exports = isFlattenable;
26486
26487},{"./_Symbol":156,"./isArguments":322,"./isArray":323}],263:[function(require,module,exports){
26488/** Used as references for various `Number` constants. */
26489var MAX_SAFE_INTEGER = 9007199254740991;
26490
26491/** Used to detect unsigned integer values. */
26492var reIsUint = /^(?:0|[1-9]\d*)$/;
26493
26494/**
26495 * Checks if `value` is a valid array-like index.
26496 *
26497 * @private
26498 * @param {*} value The value to check.
26499 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
26500 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
26501 */
26502function isIndex(value, length) {
26503 var type = typeof value;
26504 length = length == null ? MAX_SAFE_INTEGER : length;
26505
26506 return !!length &&
26507 (type == 'number' ||
26508 (type != 'symbol' && reIsUint.test(value))) &&
26509 (value > -1 && value % 1 == 0 && value < length);
26510}
26511
26512module.exports = isIndex;
26513
26514},{}],264:[function(require,module,exports){
26515var eq = require('./eq'),
26516 isArrayLike = require('./isArrayLike'),
26517 isIndex = require('./_isIndex'),
26518 isObject = require('./isObject');
26519
26520/**
26521 * Checks if the given arguments are from an iteratee call.
26522 *
26523 * @private
26524 * @param {*} value The potential iteratee value argument.
26525 * @param {*} index The potential iteratee index or key argument.
26526 * @param {*} object The potential iteratee object argument.
26527 * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
26528 * else `false`.
26529 */
26530function isIterateeCall(value, index, object) {
26531 if (!isObject(object)) {
26532 return false;
26533 }
26534 var type = typeof index;
26535 if (type == 'number'
26536 ? (isArrayLike(object) && isIndex(index, object.length))
26537 : (type == 'string' && index in object)
26538 ) {
26539 return eq(object[index], value);
26540 }
26541 return false;
26542}
26543
26544module.exports = isIterateeCall;
26545
26546},{"./_isIndex":263,"./eq":313,"./isArrayLike":324,"./isObject":333}],265:[function(require,module,exports){
26547var isArray = require('./isArray'),
26548 isSymbol = require('./isSymbol');
26549
26550/** Used to match property names within property paths. */
26551var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
26552 reIsPlainProp = /^\w*$/;
26553
26554/**
26555 * Checks if `value` is a property name and not a property path.
26556 *
26557 * @private
26558 * @param {*} value The value to check.
26559 * @param {Object} [object] The object to query keys on.
26560 * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
26561 */
26562function isKey(value, object) {
26563 if (isArray(value)) {
26564 return false;
26565 }
26566 var type = typeof value;
26567 if (type == 'number' || type == 'symbol' || type == 'boolean' ||
26568 value == null || isSymbol(value)) {
26569 return true;
26570 }
26571 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
26572 (object != null && value in Object(object));
26573}
26574
26575module.exports = isKey;
26576
26577},{"./isArray":323,"./isSymbol":338}],266:[function(require,module,exports){
26578/**
26579 * Checks if `value` is suitable for use as unique object key.
26580 *
26581 * @private
26582 * @param {*} value The value to check.
26583 * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
26584 */
26585function isKeyable(value) {
26586 var type = typeof value;
26587 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
26588 ? (value !== '__proto__')
26589 : (value === null);
26590}
26591
26592module.exports = isKeyable;
26593
26594},{}],267:[function(require,module,exports){
26595var coreJsData = require('./_coreJsData');
26596
26597/** Used to detect methods masquerading as native. */
26598var maskSrcKey = (function() {
26599 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
26600 return uid ? ('Symbol(src)_1.' + uid) : '';
26601}());
26602
26603/**
26604 * Checks if `func` has its source masked.
26605 *
26606 * @private
26607 * @param {Function} func The function to check.
26608 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
26609 */
26610function isMasked(func) {
26611 return !!maskSrcKey && (maskSrcKey in func);
26612}
26613
26614module.exports = isMasked;
26615
26616},{"./_coreJsData":230}],268:[function(require,module,exports){
26617/** Used for built-in method references. */
26618var objectProto = Object.prototype;
26619
26620/**
26621 * Checks if `value` is likely a prototype object.
26622 *
26623 * @private
26624 * @param {*} value The value to check.
26625 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
26626 */
26627function isPrototype(value) {
26628 var Ctor = value && value.constructor,
26629 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
26630
26631 return value === proto;
26632}
26633
26634module.exports = isPrototype;
26635
26636},{}],269:[function(require,module,exports){
26637var isObject = require('./isObject');
26638
26639/**
26640 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
26641 *
26642 * @private
26643 * @param {*} value The value to check.
26644 * @returns {boolean} Returns `true` if `value` if suitable for strict
26645 * equality comparisons, else `false`.
26646 */
26647function isStrictComparable(value) {
26648 return value === value && !isObject(value);
26649}
26650
26651module.exports = isStrictComparable;
26652
26653},{"./isObject":333}],270:[function(require,module,exports){
26654/**
26655 * Removes all key-value entries from the list cache.
26656 *
26657 * @private
26658 * @name clear
26659 * @memberOf ListCache
26660 */
26661function listCacheClear() {
26662 this.__data__ = [];
26663 this.size = 0;
26664}
26665
26666module.exports = listCacheClear;
26667
26668},{}],271:[function(require,module,exports){
26669var assocIndexOf = require('./_assocIndexOf');
26670
26671/** Used for built-in method references. */
26672var arrayProto = Array.prototype;
26673
26674/** Built-in value references. */
26675var splice = arrayProto.splice;
26676
26677/**
26678 * Removes `key` and its value from the list cache.
26679 *
26680 * @private
26681 * @name delete
26682 * @memberOf ListCache
26683 * @param {string} key The key of the value to remove.
26684 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
26685 */
26686function listCacheDelete(key) {
26687 var data = this.__data__,
26688 index = assocIndexOf(data, key);
26689
26690 if (index < 0) {
26691 return false;
26692 }
26693 var lastIndex = data.length - 1;
26694 if (index == lastIndex) {
26695 data.pop();
26696 } else {
26697 splice.call(data, index, 1);
26698 }
26699 --this.size;
26700 return true;
26701}
26702
26703module.exports = listCacheDelete;
26704
26705},{"./_assocIndexOf":170}],272:[function(require,module,exports){
26706var assocIndexOf = require('./_assocIndexOf');
26707
26708/**
26709 * Gets the list cache value for `key`.
26710 *
26711 * @private
26712 * @name get
26713 * @memberOf ListCache
26714 * @param {string} key The key of the value to get.
26715 * @returns {*} Returns the entry value.
26716 */
26717function listCacheGet(key) {
26718 var data = this.__data__,
26719 index = assocIndexOf(data, key);
26720
26721 return index < 0 ? undefined : data[index][1];
26722}
26723
26724module.exports = listCacheGet;
26725
26726},{"./_assocIndexOf":170}],273:[function(require,module,exports){
26727var assocIndexOf = require('./_assocIndexOf');
26728
26729/**
26730 * Checks if a list cache value for `key` exists.
26731 *
26732 * @private
26733 * @name has
26734 * @memberOf ListCache
26735 * @param {string} key The key of the entry to check.
26736 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
26737 */
26738function listCacheHas(key) {
26739 return assocIndexOf(this.__data__, key) > -1;
26740}
26741
26742module.exports = listCacheHas;
26743
26744},{"./_assocIndexOf":170}],274:[function(require,module,exports){
26745var assocIndexOf = require('./_assocIndexOf');
26746
26747/**
26748 * Sets the list cache `key` to `value`.
26749 *
26750 * @private
26751 * @name set
26752 * @memberOf ListCache
26753 * @param {string} key The key of the value to set.
26754 * @param {*} value The value to set.
26755 * @returns {Object} Returns the list cache instance.
26756 */
26757function listCacheSet(key, value) {
26758 var data = this.__data__,
26759 index = assocIndexOf(data, key);
26760
26761 if (index < 0) {
26762 ++this.size;
26763 data.push([key, value]);
26764 } else {
26765 data[index][1] = value;
26766 }
26767 return this;
26768}
26769
26770module.exports = listCacheSet;
26771
26772},{"./_assocIndexOf":170}],275:[function(require,module,exports){
26773var Hash = require('./_Hash'),
26774 ListCache = require('./_ListCache'),
26775 Map = require('./_Map');
26776
26777/**
26778 * Removes all key-value entries from the map.
26779 *
26780 * @private
26781 * @name clear
26782 * @memberOf MapCache
26783 */
26784function mapCacheClear() {
26785 this.size = 0;
26786 this.__data__ = {
26787 'hash': new Hash,
26788 'map': new (Map || ListCache),
26789 'string': new Hash
26790 };
26791}
26792
26793module.exports = mapCacheClear;
26794
26795},{"./_Hash":148,"./_ListCache":149,"./_Map":150}],276:[function(require,module,exports){
26796var getMapData = require('./_getMapData');
26797
26798/**
26799 * Removes `key` and its value from the map.
26800 *
26801 * @private
26802 * @name delete
26803 * @memberOf MapCache
26804 * @param {string} key The key of the value to remove.
26805 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
26806 */
26807function mapCacheDelete(key) {
26808 var result = getMapData(this, key)['delete'](key);
26809 this.size -= result ? 1 : 0;
26810 return result;
26811}
26812
26813module.exports = mapCacheDelete;
26814
26815},{"./_getMapData":243}],277:[function(require,module,exports){
26816var getMapData = require('./_getMapData');
26817
26818/**
26819 * Gets the map value for `key`.
26820 *
26821 * @private
26822 * @name get
26823 * @memberOf MapCache
26824 * @param {string} key The key of the value to get.
26825 * @returns {*} Returns the entry value.
26826 */
26827function mapCacheGet(key) {
26828 return getMapData(this, key).get(key);
26829}
26830
26831module.exports = mapCacheGet;
26832
26833},{"./_getMapData":243}],278:[function(require,module,exports){
26834var getMapData = require('./_getMapData');
26835
26836/**
26837 * Checks if a map value for `key` exists.
26838 *
26839 * @private
26840 * @name has
26841 * @memberOf MapCache
26842 * @param {string} key The key of the entry to check.
26843 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
26844 */
26845function mapCacheHas(key) {
26846 return getMapData(this, key).has(key);
26847}
26848
26849module.exports = mapCacheHas;
26850
26851},{"./_getMapData":243}],279:[function(require,module,exports){
26852var getMapData = require('./_getMapData');
26853
26854/**
26855 * Sets the map `key` to `value`.
26856 *
26857 * @private
26858 * @name set
26859 * @memberOf MapCache
26860 * @param {string} key The key of the value to set.
26861 * @param {*} value The value to set.
26862 * @returns {Object} Returns the map cache instance.
26863 */
26864function mapCacheSet(key, value) {
26865 var data = getMapData(this, key),
26866 size = data.size;
26867
26868 data.set(key, value);
26869 this.size += data.size == size ? 0 : 1;
26870 return this;
26871}
26872
26873module.exports = mapCacheSet;
26874
26875},{"./_getMapData":243}],280:[function(require,module,exports){
26876/**
26877 * Converts `map` to its key-value pairs.
26878 *
26879 * @private
26880 * @param {Object} map The map to convert.
26881 * @returns {Array} Returns the key-value pairs.
26882 */
26883function mapToArray(map) {
26884 var index = -1,
26885 result = Array(map.size);
26886
26887 map.forEach(function(value, key) {
26888 result[++index] = [key, value];
26889 });
26890 return result;
26891}
26892
26893module.exports = mapToArray;
26894
26895},{}],281:[function(require,module,exports){
26896/**
26897 * A specialized version of `matchesProperty` for source values suitable
26898 * for strict equality comparisons, i.e. `===`.
26899 *
26900 * @private
26901 * @param {string} key The key of the property to get.
26902 * @param {*} srcValue The value to match.
26903 * @returns {Function} Returns the new spec function.
26904 */
26905function matchesStrictComparable(key, srcValue) {
26906 return function(object) {
26907 if (object == null) {
26908 return false;
26909 }
26910 return object[key] === srcValue &&
26911 (srcValue !== undefined || (key in Object(object)));
26912 };
26913}
26914
26915module.exports = matchesStrictComparable;
26916
26917},{}],282:[function(require,module,exports){
26918var memoize = require('./memoize');
26919
26920/** Used as the maximum memoize cache size. */
26921var MAX_MEMOIZE_SIZE = 500;
26922
26923/**
26924 * A specialized version of `_.memoize` which clears the memoized function's
26925 * cache when it exceeds `MAX_MEMOIZE_SIZE`.
26926 *
26927 * @private
26928 * @param {Function} func The function to have its output memoized.
26929 * @returns {Function} Returns the new memoized function.
26930 */
26931function memoizeCapped(func) {
26932 var result = memoize(func, function(key) {
26933 if (cache.size === MAX_MEMOIZE_SIZE) {
26934 cache.clear();
26935 }
26936 return key;
26937 });
26938
26939 var cache = result.cache;
26940 return result;
26941}
26942
26943module.exports = memoizeCapped;
26944
26945},{"./memoize":344}],283:[function(require,module,exports){
26946var getNative = require('./_getNative');
26947
26948/* Built-in method references that are verified to be native. */
26949var nativeCreate = getNative(Object, 'create');
26950
26951module.exports = nativeCreate;
26952
26953},{"./_getNative":245}],284:[function(require,module,exports){
26954var overArg = require('./_overArg');
26955
26956/* Built-in method references for those with the same name as other `lodash` methods. */
26957var nativeKeys = overArg(Object.keys, Object);
26958
26959module.exports = nativeKeys;
26960
26961},{"./_overArg":288}],285:[function(require,module,exports){
26962/**
26963 * This function is like
26964 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
26965 * except that it includes inherited enumerable properties.
26966 *
26967 * @private
26968 * @param {Object} object The object to query.
26969 * @returns {Array} Returns the array of property names.
26970 */
26971function nativeKeysIn(object) {
26972 var result = [];
26973 if (object != null) {
26974 for (var key in Object(object)) {
26975 result.push(key);
26976 }
26977 }
26978 return result;
26979}
26980
26981module.exports = nativeKeysIn;
26982
26983},{}],286:[function(require,module,exports){
26984var freeGlobal = require('./_freeGlobal');
26985
26986/** Detect free variable `exports`. */
26987var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
26988
26989/** Detect free variable `module`. */
26990var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
26991
26992/** Detect the popular CommonJS extension `module.exports`. */
26993var moduleExports = freeModule && freeModule.exports === freeExports;
26994
26995/** Detect free variable `process` from Node.js. */
26996var freeProcess = moduleExports && freeGlobal.process;
26997
26998/** Used to access faster Node.js helpers. */
26999var nodeUtil = (function() {
27000 try {
27001 // Use `util.types` for Node.js 10+.
27002 var types = freeModule && freeModule.require && freeModule.require('util').types;
27003
27004 if (types) {
27005 return types;
27006 }
27007
27008 // Legacy `process.binding('util')` for Node.js < 10.
27009 return freeProcess && freeProcess.binding && freeProcess.binding('util');
27010 } catch (e) {}
27011}());
27012
27013module.exports = nodeUtil;
27014
27015},{"./_freeGlobal":240}],287:[function(require,module,exports){
27016/** Used for built-in method references. */
27017var objectProto = Object.prototype;
27018
27019/**
27020 * Used to resolve the
27021 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
27022 * of values.
27023 */
27024var nativeObjectToString = objectProto.toString;
27025
27026/**
27027 * Converts `value` to a string using `Object.prototype.toString`.
27028 *
27029 * @private
27030 * @param {*} value The value to convert.
27031 * @returns {string} Returns the converted string.
27032 */
27033function objectToString(value) {
27034 return nativeObjectToString.call(value);
27035}
27036
27037module.exports = objectToString;
27038
27039},{}],288:[function(require,module,exports){
27040/**
27041 * Creates a unary function that invokes `func` with its argument transformed.
27042 *
27043 * @private
27044 * @param {Function} func The function to wrap.
27045 * @param {Function} transform The argument transform.
27046 * @returns {Function} Returns the new function.
27047 */
27048function overArg(func, transform) {
27049 return function(arg) {
27050 return func(transform(arg));
27051 };
27052}
27053
27054module.exports = overArg;
27055
27056},{}],289:[function(require,module,exports){
27057var apply = require('./_apply');
27058
27059/* Built-in method references for those with the same name as other `lodash` methods. */
27060var nativeMax = Math.max;
27061
27062/**
27063 * A specialized version of `baseRest` which transforms the rest array.
27064 *
27065 * @private
27066 * @param {Function} func The function to apply a rest parameter to.
27067 * @param {number} [start=func.length-1] The start position of the rest parameter.
27068 * @param {Function} transform The rest array transform.
27069 * @returns {Function} Returns the new function.
27070 */
27071function overRest(func, start, transform) {
27072 start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
27073 return function() {
27074 var args = arguments,
27075 index = -1,
27076 length = nativeMax(args.length - start, 0),
27077 array = Array(length);
27078
27079 while (++index < length) {
27080 array[index] = args[start + index];
27081 }
27082 index = -1;
27083 var otherArgs = Array(start + 1);
27084 while (++index < start) {
27085 otherArgs[index] = args[index];
27086 }
27087 otherArgs[start] = transform(array);
27088 return apply(func, this, otherArgs);
27089 };
27090}
27091
27092module.exports = overRest;
27093
27094},{"./_apply":159}],290:[function(require,module,exports){
27095var freeGlobal = require('./_freeGlobal');
27096
27097/** Detect free variable `self`. */
27098var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
27099
27100/** Used as a reference to the global object. */
27101var root = freeGlobal || freeSelf || Function('return this')();
27102
27103module.exports = root;
27104
27105},{"./_freeGlobal":240}],291:[function(require,module,exports){
27106/** Used to stand-in for `undefined` hash values. */
27107var HASH_UNDEFINED = '__lodash_hash_undefined__';
27108
27109/**
27110 * Adds `value` to the array cache.
27111 *
27112 * @private
27113 * @name add
27114 * @memberOf SetCache
27115 * @alias push
27116 * @param {*} value The value to cache.
27117 * @returns {Object} Returns the cache instance.
27118 */
27119function setCacheAdd(value) {
27120 this.__data__.set(value, HASH_UNDEFINED);
27121 return this;
27122}
27123
27124module.exports = setCacheAdd;
27125
27126},{}],292:[function(require,module,exports){
27127/**
27128 * Checks if `value` is in the array cache.
27129 *
27130 * @private
27131 * @name has
27132 * @memberOf SetCache
27133 * @param {*} value The value to search for.
27134 * @returns {number} Returns `true` if `value` is found, else `false`.
27135 */
27136function setCacheHas(value) {
27137 return this.__data__.has(value);
27138}
27139
27140module.exports = setCacheHas;
27141
27142},{}],293:[function(require,module,exports){
27143/**
27144 * Converts `set` to an array of its values.
27145 *
27146 * @private
27147 * @param {Object} set The set to convert.
27148 * @returns {Array} Returns the values.
27149 */
27150function setToArray(set) {
27151 var index = -1,
27152 result = Array(set.size);
27153
27154 set.forEach(function(value) {
27155 result[++index] = value;
27156 });
27157 return result;
27158}
27159
27160module.exports = setToArray;
27161
27162},{}],294:[function(require,module,exports){
27163var baseSetToString = require('./_baseSetToString'),
27164 shortOut = require('./_shortOut');
27165
27166/**
27167 * Sets the `toString` method of `func` to return `string`.
27168 *
27169 * @private
27170 * @param {Function} func The function to modify.
27171 * @param {Function} string The `toString` result.
27172 * @returns {Function} Returns `func`.
27173 */
27174var setToString = shortOut(baseSetToString);
27175
27176module.exports = setToString;
27177
27178},{"./_baseSetToString":209,"./_shortOut":295}],295:[function(require,module,exports){
27179/** Used to detect hot functions by number of calls within a span of milliseconds. */
27180var HOT_COUNT = 800,
27181 HOT_SPAN = 16;
27182
27183/* Built-in method references for those with the same name as other `lodash` methods. */
27184var nativeNow = Date.now;
27185
27186/**
27187 * Creates a function that'll short out and invoke `identity` instead
27188 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
27189 * milliseconds.
27190 *
27191 * @private
27192 * @param {Function} func The function to restrict.
27193 * @returns {Function} Returns the new shortable function.
27194 */
27195function shortOut(func) {
27196 var count = 0,
27197 lastCalled = 0;
27198
27199 return function() {
27200 var stamp = nativeNow(),
27201 remaining = HOT_SPAN - (stamp - lastCalled);
27202
27203 lastCalled = stamp;
27204 if (remaining > 0) {
27205 if (++count >= HOT_COUNT) {
27206 return arguments[0];
27207 }
27208 } else {
27209 count = 0;
27210 }
27211 return func.apply(undefined, arguments);
27212 };
27213}
27214
27215module.exports = shortOut;
27216
27217},{}],296:[function(require,module,exports){
27218var ListCache = require('./_ListCache');
27219
27220/**
27221 * Removes all key-value entries from the stack.
27222 *
27223 * @private
27224 * @name clear
27225 * @memberOf Stack
27226 */
27227function stackClear() {
27228 this.__data__ = new ListCache;
27229 this.size = 0;
27230}
27231
27232module.exports = stackClear;
27233
27234},{"./_ListCache":149}],297:[function(require,module,exports){
27235/**
27236 * Removes `key` and its value from the stack.
27237 *
27238 * @private
27239 * @name delete
27240 * @memberOf Stack
27241 * @param {string} key The key of the value to remove.
27242 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
27243 */
27244function stackDelete(key) {
27245 var data = this.__data__,
27246 result = data['delete'](key);
27247
27248 this.size = data.size;
27249 return result;
27250}
27251
27252module.exports = stackDelete;
27253
27254},{}],298:[function(require,module,exports){
27255/**
27256 * Gets the stack value for `key`.
27257 *
27258 * @private
27259 * @name get
27260 * @memberOf Stack
27261 * @param {string} key The key of the value to get.
27262 * @returns {*} Returns the entry value.
27263 */
27264function stackGet(key) {
27265 return this.__data__.get(key);
27266}
27267
27268module.exports = stackGet;
27269
27270},{}],299:[function(require,module,exports){
27271/**
27272 * Checks if a stack value for `key` exists.
27273 *
27274 * @private
27275 * @name has
27276 * @memberOf Stack
27277 * @param {string} key The key of the entry to check.
27278 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
27279 */
27280function stackHas(key) {
27281 return this.__data__.has(key);
27282}
27283
27284module.exports = stackHas;
27285
27286},{}],300:[function(require,module,exports){
27287var ListCache = require('./_ListCache'),
27288 Map = require('./_Map'),
27289 MapCache = require('./_MapCache');
27290
27291/** Used as the size to enable large array optimizations. */
27292var LARGE_ARRAY_SIZE = 200;
27293
27294/**
27295 * Sets the stack `key` to `value`.
27296 *
27297 * @private
27298 * @name set
27299 * @memberOf Stack
27300 * @param {string} key The key of the value to set.
27301 * @param {*} value The value to set.
27302 * @returns {Object} Returns the stack cache instance.
27303 */
27304function stackSet(key, value) {
27305 var data = this.__data__;
27306 if (data instanceof ListCache) {
27307 var pairs = data.__data__;
27308 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
27309 pairs.push([key, value]);
27310 this.size = ++data.size;
27311 return this;
27312 }
27313 data = this.__data__ = new MapCache(pairs);
27314 }
27315 data.set(key, value);
27316 this.size = data.size;
27317 return this;
27318}
27319
27320module.exports = stackSet;
27321
27322},{"./_ListCache":149,"./_Map":150,"./_MapCache":151}],301:[function(require,module,exports){
27323/**
27324 * A specialized version of `_.indexOf` which performs strict equality
27325 * comparisons of values, i.e. `===`.
27326 *
27327 * @private
27328 * @param {Array} array The array to inspect.
27329 * @param {*} value The value to search for.
27330 * @param {number} fromIndex The index to search from.
27331 * @returns {number} Returns the index of the matched value, else `-1`.
27332 */
27333function strictIndexOf(array, value, fromIndex) {
27334 var index = fromIndex - 1,
27335 length = array.length;
27336
27337 while (++index < length) {
27338 if (array[index] === value) {
27339 return index;
27340 }
27341 }
27342 return -1;
27343}
27344
27345module.exports = strictIndexOf;
27346
27347},{}],302:[function(require,module,exports){
27348var asciiSize = require('./_asciiSize'),
27349 hasUnicode = require('./_hasUnicode'),
27350 unicodeSize = require('./_unicodeSize');
27351
27352/**
27353 * Gets the number of symbols in `string`.
27354 *
27355 * @private
27356 * @param {string} string The string to inspect.
27357 * @returns {number} Returns the string size.
27358 */
27359function stringSize(string) {
27360 return hasUnicode(string)
27361 ? unicodeSize(string)
27362 : asciiSize(string);
27363}
27364
27365module.exports = stringSize;
27366
27367},{"./_asciiSize":167,"./_hasUnicode":253,"./_unicodeSize":307}],303:[function(require,module,exports){
27368var asciiToArray = require('./_asciiToArray'),
27369 hasUnicode = require('./_hasUnicode'),
27370 unicodeToArray = require('./_unicodeToArray');
27371
27372/**
27373 * Converts `string` to an array.
27374 *
27375 * @private
27376 * @param {string} string The string to convert.
27377 * @returns {Array} Returns the converted array.
27378 */
27379function stringToArray(string) {
27380 return hasUnicode(string)
27381 ? unicodeToArray(string)
27382 : asciiToArray(string);
27383}
27384
27385module.exports = stringToArray;
27386
27387},{"./_asciiToArray":168,"./_hasUnicode":253,"./_unicodeToArray":308}],304:[function(require,module,exports){
27388var memoizeCapped = require('./_memoizeCapped');
27389
27390/** Used to match property names within property paths. */
27391var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
27392
27393/** Used to match backslashes in property paths. */
27394var reEscapeChar = /\\(\\)?/g;
27395
27396/**
27397 * Converts `string` to a property path array.
27398 *
27399 * @private
27400 * @param {string} string The string to convert.
27401 * @returns {Array} Returns the property path array.
27402 */
27403var stringToPath = memoizeCapped(function(string) {
27404 var result = [];
27405 if (string.charCodeAt(0) === 46 /* . */) {
27406 result.push('');
27407 }
27408 string.replace(rePropName, function(match, number, quote, subString) {
27409 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
27410 });
27411 return result;
27412});
27413
27414module.exports = stringToPath;
27415
27416},{"./_memoizeCapped":282}],305:[function(require,module,exports){
27417var isSymbol = require('./isSymbol');
27418
27419/** Used as references for various `Number` constants. */
27420var INFINITY = 1 / 0;
27421
27422/**
27423 * Converts `value` to a string key if it's not a string or symbol.
27424 *
27425 * @private
27426 * @param {*} value The value to inspect.
27427 * @returns {string|symbol} Returns the key.
27428 */
27429function toKey(value) {
27430 if (typeof value == 'string' || isSymbol(value)) {
27431 return value;
27432 }
27433 var result = (value + '');
27434 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
27435}
27436
27437module.exports = toKey;
27438
27439},{"./isSymbol":338}],306:[function(require,module,exports){
27440/** Used for built-in method references. */
27441var funcProto = Function.prototype;
27442
27443/** Used to resolve the decompiled source of functions. */
27444var funcToString = funcProto.toString;
27445
27446/**
27447 * Converts `func` to its source code.
27448 *
27449 * @private
27450 * @param {Function} func The function to convert.
27451 * @returns {string} Returns the source code.
27452 */
27453function toSource(func) {
27454 if (func != null) {
27455 try {
27456 return funcToString.call(func);
27457 } catch (e) {}
27458 try {
27459 return (func + '');
27460 } catch (e) {}
27461 }
27462 return '';
27463}
27464
27465module.exports = toSource;
27466
27467},{}],307:[function(require,module,exports){
27468/** Used to compose unicode character classes. */
27469var rsAstralRange = '\\ud800-\\udfff',
27470 rsComboMarksRange = '\\u0300-\\u036f',
27471 reComboHalfMarksRange = '\\ufe20-\\ufe2f',
27472 rsComboSymbolsRange = '\\u20d0-\\u20ff',
27473 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
27474 rsVarRange = '\\ufe0e\\ufe0f';
27475
27476/** Used to compose unicode capture groups. */
27477var rsAstral = '[' + rsAstralRange + ']',
27478 rsCombo = '[' + rsComboRange + ']',
27479 rsFitz = '\\ud83c[\\udffb-\\udfff]',
27480 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
27481 rsNonAstral = '[^' + rsAstralRange + ']',
27482 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
27483 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
27484 rsZWJ = '\\u200d';
27485
27486/** Used to compose unicode regexes. */
27487var reOptMod = rsModifier + '?',
27488 rsOptVar = '[' + rsVarRange + ']?',
27489 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
27490 rsSeq = rsOptVar + reOptMod + rsOptJoin,
27491 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
27492
27493/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
27494var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
27495
27496/**
27497 * Gets the size of a Unicode `string`.
27498 *
27499 * @private
27500 * @param {string} string The string inspect.
27501 * @returns {number} Returns the string size.
27502 */
27503function unicodeSize(string) {
27504 var result = reUnicode.lastIndex = 0;
27505 while (reUnicode.test(string)) {
27506 ++result;
27507 }
27508 return result;
27509}
27510
27511module.exports = unicodeSize;
27512
27513},{}],308:[function(require,module,exports){
27514/** Used to compose unicode character classes. */
27515var rsAstralRange = '\\ud800-\\udfff',
27516 rsComboMarksRange = '\\u0300-\\u036f',
27517 reComboHalfMarksRange = '\\ufe20-\\ufe2f',
27518 rsComboSymbolsRange = '\\u20d0-\\u20ff',
27519 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
27520 rsVarRange = '\\ufe0e\\ufe0f';
27521
27522/** Used to compose unicode capture groups. */
27523var rsAstral = '[' + rsAstralRange + ']',
27524 rsCombo = '[' + rsComboRange + ']',
27525 rsFitz = '\\ud83c[\\udffb-\\udfff]',
27526 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
27527 rsNonAstral = '[^' + rsAstralRange + ']',
27528 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
27529 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
27530 rsZWJ = '\\u200d';
27531
27532/** Used to compose unicode regexes. */
27533var reOptMod = rsModifier + '?',
27534 rsOptVar = '[' + rsVarRange + ']?',
27535 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
27536 rsSeq = rsOptVar + reOptMod + rsOptJoin,
27537 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
27538
27539/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
27540var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
27541
27542/**
27543 * Converts a Unicode `string` to an array.
27544 *
27545 * @private
27546 * @param {string} string The string to convert.
27547 * @returns {Array} Returns the converted array.
27548 */
27549function unicodeToArray(string) {
27550 return string.match(reUnicode) || [];
27551}
27552
27553module.exports = unicodeToArray;
27554
27555},{}],309:[function(require,module,exports){
27556var copyObject = require('./_copyObject'),
27557 createAssigner = require('./_createAssigner'),
27558 keysIn = require('./keysIn');
27559
27560/**
27561 * This method is like `_.assign` except that it iterates over own and
27562 * inherited source properties.
27563 *
27564 * **Note:** This method mutates `object`.
27565 *
27566 * @static
27567 * @memberOf _
27568 * @since 4.0.0
27569 * @alias extend
27570 * @category Object
27571 * @param {Object} object The destination object.
27572 * @param {...Object} [sources] The source objects.
27573 * @returns {Object} Returns `object`.
27574 * @see _.assign
27575 * @example
27576 *
27577 * function Foo() {
27578 * this.a = 1;
27579 * }
27580 *
27581 * function Bar() {
27582 * this.c = 3;
27583 * }
27584 *
27585 * Foo.prototype.b = 2;
27586 * Bar.prototype.d = 4;
27587 *
27588 * _.assignIn({ 'a': 0 }, new Foo, new Bar);
27589 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
27590 */
27591var assignIn = createAssigner(function(object, source) {
27592 copyObject(source, keysIn(source), object);
27593});
27594
27595module.exports = assignIn;
27596
27597},{"./_copyObject":227,"./_createAssigner":231,"./keysIn":342}],310:[function(require,module,exports){
27598var baseClone = require('./_baseClone');
27599
27600/** Used to compose bitmasks for cloning. */
27601var CLONE_SYMBOLS_FLAG = 4;
27602
27603/**
27604 * Creates a shallow clone of `value`.
27605 *
27606 * **Note:** This method is loosely based on the
27607 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
27608 * and supports cloning arrays, array buffers, booleans, date objects, maps,
27609 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
27610 * arrays. The own enumerable properties of `arguments` objects are cloned
27611 * as plain objects. An empty object is returned for uncloneable values such
27612 * as error objects, functions, DOM nodes, and WeakMaps.
27613 *
27614 * @static
27615 * @memberOf _
27616 * @since 0.1.0
27617 * @category Lang
27618 * @param {*} value The value to clone.
27619 * @returns {*} Returns the cloned value.
27620 * @see _.cloneDeep
27621 * @example
27622 *
27623 * var objects = [{ 'a': 1 }, { 'b': 2 }];
27624 *
27625 * var shallow = _.clone(objects);
27626 * console.log(shallow[0] === objects[0]);
27627 * // => true
27628 */
27629function clone(value) {
27630 return baseClone(value, CLONE_SYMBOLS_FLAG);
27631}
27632
27633module.exports = clone;
27634
27635},{"./_baseClone":174}],311:[function(require,module,exports){
27636/**
27637 * Creates a function that returns `value`.
27638 *
27639 * @static
27640 * @memberOf _
27641 * @since 2.4.0
27642 * @category Util
27643 * @param {*} value The value to return from the new function.
27644 * @returns {Function} Returns the new constant function.
27645 * @example
27646 *
27647 * var objects = _.times(2, _.constant({ 'a': 1 }));
27648 *
27649 * console.log(objects);
27650 * // => [{ 'a': 1 }, { 'a': 1 }]
27651 *
27652 * console.log(objects[0] === objects[1]);
27653 * // => true
27654 */
27655function constant(value) {
27656 return function() {
27657 return value;
27658 };
27659}
27660
27661module.exports = constant;
27662
27663},{}],312:[function(require,module,exports){
27664module.exports = require('./forEach');
27665
27666},{"./forEach":317}],313:[function(require,module,exports){
27667/**
27668 * Performs a
27669 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27670 * comparison between two values to determine if they are equivalent.
27671 *
27672 * @static
27673 * @memberOf _
27674 * @since 4.0.0
27675 * @category Lang
27676 * @param {*} value The value to compare.
27677 * @param {*} other The other value to compare.
27678 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
27679 * @example
27680 *
27681 * var object = { 'a': 1 };
27682 * var other = { 'a': 1 };
27683 *
27684 * _.eq(object, object);
27685 * // => true
27686 *
27687 * _.eq(object, other);
27688 * // => false
27689 *
27690 * _.eq('a', 'a');
27691 * // => true
27692 *
27693 * _.eq('a', Object('a'));
27694 * // => false
27695 *
27696 * _.eq(NaN, NaN);
27697 * // => true
27698 */
27699function eq(value, other) {
27700 return value === other || (value !== value && other !== other);
27701}
27702
27703module.exports = eq;
27704
27705},{}],314:[function(require,module,exports){
27706var arrayEvery = require('./_arrayEvery'),
27707 baseEvery = require('./_baseEvery'),
27708 baseIteratee = require('./_baseIteratee'),
27709 isArray = require('./isArray'),
27710 isIterateeCall = require('./_isIterateeCall');
27711
27712/**
27713 * Checks if `predicate` returns truthy for **all** elements of `collection`.
27714 * Iteration is stopped once `predicate` returns falsey. The predicate is
27715 * invoked with three arguments: (value, index|key, collection).
27716 *
27717 * **Note:** This method returns `true` for
27718 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
27719 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
27720 * elements of empty collections.
27721 *
27722 * @static
27723 * @memberOf _
27724 * @since 0.1.0
27725 * @category Collection
27726 * @param {Array|Object} collection The collection to iterate over.
27727 * @param {Function} [predicate=_.identity] The function invoked per iteration.
27728 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
27729 * @returns {boolean} Returns `true` if all elements pass the predicate check,
27730 * else `false`.
27731 * @example
27732 *
27733 * _.every([true, 1, null, 'yes'], Boolean);
27734 * // => false
27735 *
27736 * var users = [
27737 * { 'user': 'barney', 'age': 36, 'active': false },
27738 * { 'user': 'fred', 'age': 40, 'active': false }
27739 * ];
27740 *
27741 * // The `_.matches` iteratee shorthand.
27742 * _.every(users, { 'user': 'barney', 'active': false });
27743 * // => false
27744 *
27745 * // The `_.matchesProperty` iteratee shorthand.
27746 * _.every(users, ['active', false]);
27747 * // => true
27748 *
27749 * // The `_.property` iteratee shorthand.
27750 * _.every(users, 'active');
27751 * // => false
27752 */
27753function every(collection, predicate, guard) {
27754 var func = isArray(collection) ? arrayEvery : baseEvery;
27755 if (guard && isIterateeCall(collection, predicate, guard)) {
27756 predicate = undefined;
27757 }
27758 return func(collection, baseIteratee(predicate, 3));
27759}
27760
27761module.exports = every;
27762
27763},{"./_arrayEvery":161,"./_baseEvery":177,"./_baseIteratee":196,"./_isIterateeCall":264,"./isArray":323}],315:[function(require,module,exports){
27764module.exports = require('./assignIn');
27765
27766},{"./assignIn":309}],316:[function(require,module,exports){
27767var baseFlatten = require('./_baseFlatten');
27768
27769/**
27770 * Flattens `array` a single level deep.
27771 *
27772 * @static
27773 * @memberOf _
27774 * @since 0.1.0
27775 * @category Array
27776 * @param {Array} array The array to flatten.
27777 * @returns {Array} Returns the new flattened array.
27778 * @example
27779 *
27780 * _.flatten([1, [2, [3, [4]], 5]]);
27781 * // => [1, 2, [3, [4]], 5]
27782 */
27783function flatten(array) {
27784 var length = array == null ? 0 : array.length;
27785 return length ? baseFlatten(array, 1) : [];
27786}
27787
27788module.exports = flatten;
27789
27790},{"./_baseFlatten":179}],317:[function(require,module,exports){
27791var arrayEach = require('./_arrayEach'),
27792 baseEach = require('./_baseEach'),
27793 castFunction = require('./_castFunction'),
27794 isArray = require('./isArray');
27795
27796/**
27797 * Iterates over elements of `collection` and invokes `iteratee` for each element.
27798 * The iteratee is invoked with three arguments: (value, index|key, collection).
27799 * Iteratee functions may exit iteration early by explicitly returning `false`.
27800 *
27801 * **Note:** As with other "Collections" methods, objects with a "length"
27802 * property are iterated like arrays. To avoid this behavior use `_.forIn`
27803 * or `_.forOwn` for object iteration.
27804 *
27805 * @static
27806 * @memberOf _
27807 * @since 0.1.0
27808 * @alias each
27809 * @category Collection
27810 * @param {Array|Object} collection The collection to iterate over.
27811 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
27812 * @returns {Array|Object} Returns `collection`.
27813 * @see _.forEachRight
27814 * @example
27815 *
27816 * _.forEach([1, 2], function(value) {
27817 * console.log(value);
27818 * });
27819 * // => Logs `1` then `2`.
27820 *
27821 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
27822 * console.log(key);
27823 * });
27824 * // => Logs 'a' then 'b' (iteration order is not guaranteed).
27825 */
27826function forEach(collection, iteratee) {
27827 var func = isArray(collection) ? arrayEach : baseEach;
27828 return func(collection, castFunction(iteratee));
27829}
27830
27831module.exports = forEach;
27832
27833},{"./_arrayEach":160,"./_baseEach":176,"./_castFunction":216,"./isArray":323}],318:[function(require,module,exports){
27834/**
27835 * The inverse of `_.toPairs`; this method returns an object composed
27836 * from key-value `pairs`.
27837 *
27838 * @static
27839 * @memberOf _
27840 * @since 4.0.0
27841 * @category Array
27842 * @param {Array} pairs The key-value pairs.
27843 * @returns {Object} Returns the new object.
27844 * @example
27845 *
27846 * _.fromPairs([['a', 1], ['b', 2]]);
27847 * // => { 'a': 1, 'b': 2 }
27848 */
27849function fromPairs(pairs) {
27850 var index = -1,
27851 length = pairs == null ? 0 : pairs.length,
27852 result = {};
27853
27854 while (++index < length) {
27855 var pair = pairs[index];
27856 result[pair[0]] = pair[1];
27857 }
27858 return result;
27859}
27860
27861module.exports = fromPairs;
27862
27863},{}],319:[function(require,module,exports){
27864var baseGet = require('./_baseGet');
27865
27866/**
27867 * Gets the value at `path` of `object`. If the resolved value is
27868 * `undefined`, the `defaultValue` is returned in its place.
27869 *
27870 * @static
27871 * @memberOf _
27872 * @since 3.7.0
27873 * @category Object
27874 * @param {Object} object The object to query.
27875 * @param {Array|string} path The path of the property to get.
27876 * @param {*} [defaultValue] The value returned for `undefined` resolved values.
27877 * @returns {*} Returns the resolved value.
27878 * @example
27879 *
27880 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
27881 *
27882 * _.get(object, 'a[0].b.c');
27883 * // => 3
27884 *
27885 * _.get(object, ['a', '0', 'b', 'c']);
27886 * // => 3
27887 *
27888 * _.get(object, 'a.b.c', 'default');
27889 * // => 'default'
27890 */
27891function get(object, path, defaultValue) {
27892 var result = object == null ? undefined : baseGet(object, path);
27893 return result === undefined ? defaultValue : result;
27894}
27895
27896module.exports = get;
27897
27898},{"./_baseGet":182}],320:[function(require,module,exports){
27899var baseHasIn = require('./_baseHasIn'),
27900 hasPath = require('./_hasPath');
27901
27902/**
27903 * Checks if `path` is a direct or inherited property of `object`.
27904 *
27905 * @static
27906 * @memberOf _
27907 * @since 4.0.0
27908 * @category Object
27909 * @param {Object} object The object to query.
27910 * @param {Array|string} path The path to check.
27911 * @returns {boolean} Returns `true` if `path` exists, else `false`.
27912 * @example
27913 *
27914 * var object = _.create({ 'a': _.create({ 'b': 2 }) });
27915 *
27916 * _.hasIn(object, 'a');
27917 * // => true
27918 *
27919 * _.hasIn(object, 'a.b');
27920 * // => true
27921 *
27922 * _.hasIn(object, ['a', 'b']);
27923 * // => true
27924 *
27925 * _.hasIn(object, 'b');
27926 * // => false
27927 */
27928function hasIn(object, path) {
27929 return object != null && hasPath(object, path, baseHasIn);
27930}
27931
27932module.exports = hasIn;
27933
27934},{"./_baseHasIn":185,"./_hasPath":252}],321:[function(require,module,exports){
27935/**
27936 * This method returns the first argument it receives.
27937 *
27938 * @static
27939 * @since 0.1.0
27940 * @memberOf _
27941 * @category Util
27942 * @param {*} value Any value.
27943 * @returns {*} Returns `value`.
27944 * @example
27945 *
27946 * var object = { 'a': 1 };
27947 *
27948 * console.log(_.identity(object) === object);
27949 * // => true
27950 */
27951function identity(value) {
27952 return value;
27953}
27954
27955module.exports = identity;
27956
27957},{}],322:[function(require,module,exports){
27958var baseIsArguments = require('./_baseIsArguments'),
27959 isObjectLike = require('./isObjectLike');
27960
27961/** Used for built-in method references. */
27962var objectProto = Object.prototype;
27963
27964/** Used to check objects for own properties. */
27965var hasOwnProperty = objectProto.hasOwnProperty;
27966
27967/** Built-in value references. */
27968var propertyIsEnumerable = objectProto.propertyIsEnumerable;
27969
27970/**
27971 * Checks if `value` is likely an `arguments` object.
27972 *
27973 * @static
27974 * @memberOf _
27975 * @since 0.1.0
27976 * @category Lang
27977 * @param {*} value The value to check.
27978 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
27979 * else `false`.
27980 * @example
27981 *
27982 * _.isArguments(function() { return arguments; }());
27983 * // => true
27984 *
27985 * _.isArguments([1, 2, 3]);
27986 * // => false
27987 */
27988var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
27989 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
27990 !propertyIsEnumerable.call(value, 'callee');
27991};
27992
27993module.exports = isArguments;
27994
27995},{"./_baseIsArguments":187,"./isObjectLike":334}],323:[function(require,module,exports){
27996/**
27997 * Checks if `value` is classified as an `Array` object.
27998 *
27999 * @static
28000 * @memberOf _
28001 * @since 0.1.0
28002 * @category Lang
28003 * @param {*} value The value to check.
28004 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
28005 * @example
28006 *
28007 * _.isArray([1, 2, 3]);
28008 * // => true
28009 *
28010 * _.isArray(document.body.children);
28011 * // => false
28012 *
28013 * _.isArray('abc');
28014 * // => false
28015 *
28016 * _.isArray(_.noop);
28017 * // => false
28018 */
28019var isArray = Array.isArray;
28020
28021module.exports = isArray;
28022
28023},{}],324:[function(require,module,exports){
28024var isFunction = require('./isFunction'),
28025 isLength = require('./isLength');
28026
28027/**
28028 * Checks if `value` is array-like. A value is considered array-like if it's
28029 * not a function and has a `value.length` that's an integer greater than or
28030 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
28031 *
28032 * @static
28033 * @memberOf _
28034 * @since 4.0.0
28035 * @category Lang
28036 * @param {*} value The value to check.
28037 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
28038 * @example
28039 *
28040 * _.isArrayLike([1, 2, 3]);
28041 * // => true
28042 *
28043 * _.isArrayLike(document.body.children);
28044 * // => true
28045 *
28046 * _.isArrayLike('abc');
28047 * // => true
28048 *
28049 * _.isArrayLike(_.noop);
28050 * // => false
28051 */
28052function isArrayLike(value) {
28053 return value != null && isLength(value.length) && !isFunction(value);
28054}
28055
28056module.exports = isArrayLike;
28057
28058},{"./isFunction":328,"./isLength":329}],325:[function(require,module,exports){
28059var baseGetTag = require('./_baseGetTag'),
28060 isObjectLike = require('./isObjectLike');
28061
28062/** `Object#toString` result references. */
28063var boolTag = '[object Boolean]';
28064
28065/**
28066 * Checks if `value` is classified as a boolean primitive or object.
28067 *
28068 * @static
28069 * @memberOf _
28070 * @since 0.1.0
28071 * @category Lang
28072 * @param {*} value The value to check.
28073 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
28074 * @example
28075 *
28076 * _.isBoolean(false);
28077 * // => true
28078 *
28079 * _.isBoolean(null);
28080 * // => false
28081 */
28082function isBoolean(value) {
28083 return value === true || value === false ||
28084 (isObjectLike(value) && baseGetTag(value) == boolTag);
28085}
28086
28087module.exports = isBoolean;
28088
28089},{"./_baseGetTag":184,"./isObjectLike":334}],326:[function(require,module,exports){
28090var root = require('./_root'),
28091 stubFalse = require('./stubFalse');
28092
28093/** Detect free variable `exports`. */
28094var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
28095
28096/** Detect free variable `module`. */
28097var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
28098
28099/** Detect the popular CommonJS extension `module.exports`. */
28100var moduleExports = freeModule && freeModule.exports === freeExports;
28101
28102/** Built-in value references. */
28103var Buffer = moduleExports ? root.Buffer : undefined;
28104
28105/* Built-in method references for those with the same name as other `lodash` methods. */
28106var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
28107
28108/**
28109 * Checks if `value` is a buffer.
28110 *
28111 * @static
28112 * @memberOf _
28113 * @since 4.3.0
28114 * @category Lang
28115 * @param {*} value The value to check.
28116 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
28117 * @example
28118 *
28119 * _.isBuffer(new Buffer(2));
28120 * // => true
28121 *
28122 * _.isBuffer(new Uint8Array(2));
28123 * // => false
28124 */
28125var isBuffer = nativeIsBuffer || stubFalse;
28126
28127module.exports = isBuffer;
28128
28129},{"./_root":290,"./stubFalse":349}],327:[function(require,module,exports){
28130var root = require('./_root');
28131
28132/* Built-in method references for those with the same name as other `lodash` methods. */
28133var nativeIsFinite = root.isFinite;
28134
28135/**
28136 * Checks if `value` is a finite primitive number.
28137 *
28138 * **Note:** This method is based on
28139 * [`Number.isFinite`](https://mdn.io/Number/isFinite).
28140 *
28141 * @static
28142 * @memberOf _
28143 * @since 0.1.0
28144 * @category Lang
28145 * @param {*} value The value to check.
28146 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
28147 * @example
28148 *
28149 * _.isFinite(3);
28150 * // => true
28151 *
28152 * _.isFinite(Number.MIN_VALUE);
28153 * // => true
28154 *
28155 * _.isFinite(Infinity);
28156 * // => false
28157 *
28158 * _.isFinite('3');
28159 * // => false
28160 */
28161function isFinite(value) {
28162 return typeof value == 'number' && nativeIsFinite(value);
28163}
28164
28165module.exports = isFinite;
28166
28167},{"./_root":290}],328:[function(require,module,exports){
28168var baseGetTag = require('./_baseGetTag'),
28169 isObject = require('./isObject');
28170
28171/** `Object#toString` result references. */
28172var asyncTag = '[object AsyncFunction]',
28173 funcTag = '[object Function]',
28174 genTag = '[object GeneratorFunction]',
28175 proxyTag = '[object Proxy]';
28176
28177/**
28178 * Checks if `value` is classified as a `Function` object.
28179 *
28180 * @static
28181 * @memberOf _
28182 * @since 0.1.0
28183 * @category Lang
28184 * @param {*} value The value to check.
28185 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
28186 * @example
28187 *
28188 * _.isFunction(_);
28189 * // => true
28190 *
28191 * _.isFunction(/abc/);
28192 * // => false
28193 */
28194function isFunction(value) {
28195 if (!isObject(value)) {
28196 return false;
28197 }
28198 // The use of `Object#toString` avoids issues with the `typeof` operator
28199 // in Safari 9 which returns 'object' for typed arrays and other constructors.
28200 var tag = baseGetTag(value);
28201 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
28202}
28203
28204module.exports = isFunction;
28205
28206},{"./_baseGetTag":184,"./isObject":333}],329:[function(require,module,exports){
28207/** Used as references for various `Number` constants. */
28208var MAX_SAFE_INTEGER = 9007199254740991;
28209
28210/**
28211 * Checks if `value` is a valid array-like length.
28212 *
28213 * **Note:** This method is loosely based on
28214 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
28215 *
28216 * @static
28217 * @memberOf _
28218 * @since 4.0.0
28219 * @category Lang
28220 * @param {*} value The value to check.
28221 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
28222 * @example
28223 *
28224 * _.isLength(3);
28225 * // => true
28226 *
28227 * _.isLength(Number.MIN_VALUE);
28228 * // => false
28229 *
28230 * _.isLength(Infinity);
28231 * // => false
28232 *
28233 * _.isLength('3');
28234 * // => false
28235 */
28236function isLength(value) {
28237 return typeof value == 'number' &&
28238 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
28239}
28240
28241module.exports = isLength;
28242
28243},{}],330:[function(require,module,exports){
28244var baseIsMap = require('./_baseIsMap'),
28245 baseUnary = require('./_baseUnary'),
28246 nodeUtil = require('./_nodeUtil');
28247
28248/* Node.js helper references. */
28249var nodeIsMap = nodeUtil && nodeUtil.isMap;
28250
28251/**
28252 * Checks if `value` is classified as a `Map` object.
28253 *
28254 * @static
28255 * @memberOf _
28256 * @since 4.3.0
28257 * @category Lang
28258 * @param {*} value The value to check.
28259 * @returns {boolean} Returns `true` if `value` is a map, else `false`.
28260 * @example
28261 *
28262 * _.isMap(new Map);
28263 * // => true
28264 *
28265 * _.isMap(new WeakMap);
28266 * // => false
28267 */
28268var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
28269
28270module.exports = isMap;
28271
28272},{"./_baseIsMap":190,"./_baseUnary":213,"./_nodeUtil":286}],331:[function(require,module,exports){
28273/**
28274 * Checks if `value` is `null`.
28275 *
28276 * @static
28277 * @memberOf _
28278 * @since 0.1.0
28279 * @category Lang
28280 * @param {*} value The value to check.
28281 * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
28282 * @example
28283 *
28284 * _.isNull(null);
28285 * // => true
28286 *
28287 * _.isNull(void 0);
28288 * // => false
28289 */
28290function isNull(value) {
28291 return value === null;
28292}
28293
28294module.exports = isNull;
28295
28296},{}],332:[function(require,module,exports){
28297var baseGetTag = require('./_baseGetTag'),
28298 isObjectLike = require('./isObjectLike');
28299
28300/** `Object#toString` result references. */
28301var numberTag = '[object Number]';
28302
28303/**
28304 * Checks if `value` is classified as a `Number` primitive or object.
28305 *
28306 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
28307 * classified as numbers, use the `_.isFinite` method.
28308 *
28309 * @static
28310 * @memberOf _
28311 * @since 0.1.0
28312 * @category Lang
28313 * @param {*} value The value to check.
28314 * @returns {boolean} Returns `true` if `value` is a number, else `false`.
28315 * @example
28316 *
28317 * _.isNumber(3);
28318 * // => true
28319 *
28320 * _.isNumber(Number.MIN_VALUE);
28321 * // => true
28322 *
28323 * _.isNumber(Infinity);
28324 * // => true
28325 *
28326 * _.isNumber('3');
28327 * // => false
28328 */
28329function isNumber(value) {
28330 return typeof value == 'number' ||
28331 (isObjectLike(value) && baseGetTag(value) == numberTag);
28332}
28333
28334module.exports = isNumber;
28335
28336},{"./_baseGetTag":184,"./isObjectLike":334}],333:[function(require,module,exports){
28337/**
28338 * Checks if `value` is the
28339 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
28340 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
28341 *
28342 * @static
28343 * @memberOf _
28344 * @since 0.1.0
28345 * @category Lang
28346 * @param {*} value The value to check.
28347 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
28348 * @example
28349 *
28350 * _.isObject({});
28351 * // => true
28352 *
28353 * _.isObject([1, 2, 3]);
28354 * // => true
28355 *
28356 * _.isObject(_.noop);
28357 * // => true
28358 *
28359 * _.isObject(null);
28360 * // => false
28361 */
28362function isObject(value) {
28363 var type = typeof value;
28364 return value != null && (type == 'object' || type == 'function');
28365}
28366
28367module.exports = isObject;
28368
28369},{}],334:[function(require,module,exports){
28370/**
28371 * Checks if `value` is object-like. A value is object-like if it's not `null`
28372 * and has a `typeof` result of "object".
28373 *
28374 * @static
28375 * @memberOf _
28376 * @since 4.0.0
28377 * @category Lang
28378 * @param {*} value The value to check.
28379 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
28380 * @example
28381 *
28382 * _.isObjectLike({});
28383 * // => true
28384 *
28385 * _.isObjectLike([1, 2, 3]);
28386 * // => true
28387 *
28388 * _.isObjectLike(_.noop);
28389 * // => false
28390 *
28391 * _.isObjectLike(null);
28392 * // => false
28393 */
28394function isObjectLike(value) {
28395 return value != null && typeof value == 'object';
28396}
28397
28398module.exports = isObjectLike;
28399
28400},{}],335:[function(require,module,exports){
28401var baseGetTag = require('./_baseGetTag'),
28402 getPrototype = require('./_getPrototype'),
28403 isObjectLike = require('./isObjectLike');
28404
28405/** `Object#toString` result references. */
28406var objectTag = '[object Object]';
28407
28408/** Used for built-in method references. */
28409var funcProto = Function.prototype,
28410 objectProto = Object.prototype;
28411
28412/** Used to resolve the decompiled source of functions. */
28413var funcToString = funcProto.toString;
28414
28415/** Used to check objects for own properties. */
28416var hasOwnProperty = objectProto.hasOwnProperty;
28417
28418/** Used to infer the `Object` constructor. */
28419var objectCtorString = funcToString.call(Object);
28420
28421/**
28422 * Checks if `value` is a plain object, that is, an object created by the
28423 * `Object` constructor or one with a `[[Prototype]]` of `null`.
28424 *
28425 * @static
28426 * @memberOf _
28427 * @since 0.8.0
28428 * @category Lang
28429 * @param {*} value The value to check.
28430 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
28431 * @example
28432 *
28433 * function Foo() {
28434 * this.a = 1;
28435 * }
28436 *
28437 * _.isPlainObject(new Foo);
28438 * // => false
28439 *
28440 * _.isPlainObject([1, 2, 3]);
28441 * // => false
28442 *
28443 * _.isPlainObject({ 'x': 0, 'y': 0 });
28444 * // => true
28445 *
28446 * _.isPlainObject(Object.create(null));
28447 * // => true
28448 */
28449function isPlainObject(value) {
28450 if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
28451 return false;
28452 }
28453 var proto = getPrototype(value);
28454 if (proto === null) {
28455 return true;
28456 }
28457 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
28458 return typeof Ctor == 'function' && Ctor instanceof Ctor &&
28459 funcToString.call(Ctor) == objectCtorString;
28460}
28461
28462module.exports = isPlainObject;
28463
28464},{"./_baseGetTag":184,"./_getPrototype":246,"./isObjectLike":334}],336:[function(require,module,exports){
28465var baseIsSet = require('./_baseIsSet'),
28466 baseUnary = require('./_baseUnary'),
28467 nodeUtil = require('./_nodeUtil');
28468
28469/* Node.js helper references. */
28470var nodeIsSet = nodeUtil && nodeUtil.isSet;
28471
28472/**
28473 * Checks if `value` is classified as a `Set` object.
28474 *
28475 * @static
28476 * @memberOf _
28477 * @since 4.3.0
28478 * @category Lang
28479 * @param {*} value The value to check.
28480 * @returns {boolean} Returns `true` if `value` is a set, else `false`.
28481 * @example
28482 *
28483 * _.isSet(new Set);
28484 * // => true
28485 *
28486 * _.isSet(new WeakSet);
28487 * // => false
28488 */
28489var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
28490
28491module.exports = isSet;
28492
28493},{"./_baseIsSet":194,"./_baseUnary":213,"./_nodeUtil":286}],337:[function(require,module,exports){
28494var baseGetTag = require('./_baseGetTag'),
28495 isArray = require('./isArray'),
28496 isObjectLike = require('./isObjectLike');
28497
28498/** `Object#toString` result references. */
28499var stringTag = '[object String]';
28500
28501/**
28502 * Checks if `value` is classified as a `String` primitive or object.
28503 *
28504 * @static
28505 * @since 0.1.0
28506 * @memberOf _
28507 * @category Lang
28508 * @param {*} value The value to check.
28509 * @returns {boolean} Returns `true` if `value` is a string, else `false`.
28510 * @example
28511 *
28512 * _.isString('abc');
28513 * // => true
28514 *
28515 * _.isString(1);
28516 * // => false
28517 */
28518function isString(value) {
28519 return typeof value == 'string' ||
28520 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
28521}
28522
28523module.exports = isString;
28524
28525},{"./_baseGetTag":184,"./isArray":323,"./isObjectLike":334}],338:[function(require,module,exports){
28526var baseGetTag = require('./_baseGetTag'),
28527 isObjectLike = require('./isObjectLike');
28528
28529/** `Object#toString` result references. */
28530var symbolTag = '[object Symbol]';
28531
28532/**
28533 * Checks if `value` is classified as a `Symbol` primitive or object.
28534 *
28535 * @static
28536 * @memberOf _
28537 * @since 4.0.0
28538 * @category Lang
28539 * @param {*} value The value to check.
28540 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
28541 * @example
28542 *
28543 * _.isSymbol(Symbol.iterator);
28544 * // => true
28545 *
28546 * _.isSymbol('abc');
28547 * // => false
28548 */
28549function isSymbol(value) {
28550 return typeof value == 'symbol' ||
28551 (isObjectLike(value) && baseGetTag(value) == symbolTag);
28552}
28553
28554module.exports = isSymbol;
28555
28556},{"./_baseGetTag":184,"./isObjectLike":334}],339:[function(require,module,exports){
28557var baseIsTypedArray = require('./_baseIsTypedArray'),
28558 baseUnary = require('./_baseUnary'),
28559 nodeUtil = require('./_nodeUtil');
28560
28561/* Node.js helper references. */
28562var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
28563
28564/**
28565 * Checks if `value` is classified as a typed array.
28566 *
28567 * @static
28568 * @memberOf _
28569 * @since 3.0.0
28570 * @category Lang
28571 * @param {*} value The value to check.
28572 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
28573 * @example
28574 *
28575 * _.isTypedArray(new Uint8Array);
28576 * // => true
28577 *
28578 * _.isTypedArray([]);
28579 * // => false
28580 */
28581var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
28582
28583module.exports = isTypedArray;
28584
28585},{"./_baseIsTypedArray":195,"./_baseUnary":213,"./_nodeUtil":286}],340:[function(require,module,exports){
28586/**
28587 * Checks if `value` is `undefined`.
28588 *
28589 * @static
28590 * @since 0.1.0
28591 * @memberOf _
28592 * @category Lang
28593 * @param {*} value The value to check.
28594 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
28595 * @example
28596 *
28597 * _.isUndefined(void 0);
28598 * // => true
28599 *
28600 * _.isUndefined(null);
28601 * // => false
28602 */
28603function isUndefined(value) {
28604 return value === undefined;
28605}
28606
28607module.exports = isUndefined;
28608
28609},{}],341:[function(require,module,exports){
28610var arrayLikeKeys = require('./_arrayLikeKeys'),
28611 baseKeys = require('./_baseKeys'),
28612 isArrayLike = require('./isArrayLike');
28613
28614/**
28615 * Creates an array of the own enumerable property names of `object`.
28616 *
28617 * **Note:** Non-object values are coerced to objects. See the
28618 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
28619 * for more details.
28620 *
28621 * @static
28622 * @since 0.1.0
28623 * @memberOf _
28624 * @category Object
28625 * @param {Object} object The object to query.
28626 * @returns {Array} Returns the array of property names.
28627 * @example
28628 *
28629 * function Foo() {
28630 * this.a = 1;
28631 * this.b = 2;
28632 * }
28633 *
28634 * Foo.prototype.c = 3;
28635 *
28636 * _.keys(new Foo);
28637 * // => ['a', 'b'] (iteration order is not guaranteed)
28638 *
28639 * _.keys('hi');
28640 * // => ['0', '1']
28641 */
28642function keys(object) {
28643 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
28644}
28645
28646module.exports = keys;
28647
28648},{"./_arrayLikeKeys":163,"./_baseKeys":197,"./isArrayLike":324}],342:[function(require,module,exports){
28649var arrayLikeKeys = require('./_arrayLikeKeys'),
28650 baseKeysIn = require('./_baseKeysIn'),
28651 isArrayLike = require('./isArrayLike');
28652
28653/**
28654 * Creates an array of the own and inherited enumerable property names of `object`.
28655 *
28656 * **Note:** Non-object values are coerced to objects.
28657 *
28658 * @static
28659 * @memberOf _
28660 * @since 3.0.0
28661 * @category Object
28662 * @param {Object} object The object to query.
28663 * @returns {Array} Returns the array of property names.
28664 * @example
28665 *
28666 * function Foo() {
28667 * this.a = 1;
28668 * this.b = 2;
28669 * }
28670 *
28671 * Foo.prototype.c = 3;
28672 *
28673 * _.keysIn(new Foo);
28674 * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
28675 */
28676function keysIn(object) {
28677 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
28678}
28679
28680module.exports = keysIn;
28681
28682},{"./_arrayLikeKeys":163,"./_baseKeysIn":198,"./isArrayLike":324}],343:[function(require,module,exports){
28683var arrayMap = require('./_arrayMap'),
28684 baseIteratee = require('./_baseIteratee'),
28685 baseMap = require('./_baseMap'),
28686 isArray = require('./isArray');
28687
28688/**
28689 * Creates an array of values by running each element in `collection` thru
28690 * `iteratee`. The iteratee is invoked with three arguments:
28691 * (value, index|key, collection).
28692 *
28693 * Many lodash methods are guarded to work as iteratees for methods like
28694 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
28695 *
28696 * The guarded methods are:
28697 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
28698 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
28699 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
28700 * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
28701 *
28702 * @static
28703 * @memberOf _
28704 * @since 0.1.0
28705 * @category Collection
28706 * @param {Array|Object} collection The collection to iterate over.
28707 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28708 * @returns {Array} Returns the new mapped array.
28709 * @example
28710 *
28711 * function square(n) {
28712 * return n * n;
28713 * }
28714 *
28715 * _.map([4, 8], square);
28716 * // => [16, 64]
28717 *
28718 * _.map({ 'a': 4, 'b': 8 }, square);
28719 * // => [16, 64] (iteration order is not guaranteed)
28720 *
28721 * var users = [
28722 * { 'user': 'barney' },
28723 * { 'user': 'fred' }
28724 * ];
28725 *
28726 * // The `_.property` iteratee shorthand.
28727 * _.map(users, 'user');
28728 * // => ['barney', 'fred']
28729 */
28730function map(collection, iteratee) {
28731 var func = isArray(collection) ? arrayMap : baseMap;
28732 return func(collection, baseIteratee(iteratee, 3));
28733}
28734
28735module.exports = map;
28736
28737},{"./_arrayMap":164,"./_baseIteratee":196,"./_baseMap":199,"./isArray":323}],344:[function(require,module,exports){
28738var MapCache = require('./_MapCache');
28739
28740/** Error message constants. */
28741var FUNC_ERROR_TEXT = 'Expected a function';
28742
28743/**
28744 * Creates a function that memoizes the result of `func`. If `resolver` is
28745 * provided, it determines the cache key for storing the result based on the
28746 * arguments provided to the memoized function. By default, the first argument
28747 * provided to the memoized function is used as the map cache key. The `func`
28748 * is invoked with the `this` binding of the memoized function.
28749 *
28750 * **Note:** The cache is exposed as the `cache` property on the memoized
28751 * function. Its creation may be customized by replacing the `_.memoize.Cache`
28752 * constructor with one whose instances implement the
28753 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
28754 * method interface of `clear`, `delete`, `get`, `has`, and `set`.
28755 *
28756 * @static
28757 * @memberOf _
28758 * @since 0.1.0
28759 * @category Function
28760 * @param {Function} func The function to have its output memoized.
28761 * @param {Function} [resolver] The function to resolve the cache key.
28762 * @returns {Function} Returns the new memoized function.
28763 * @example
28764 *
28765 * var object = { 'a': 1, 'b': 2 };
28766 * var other = { 'c': 3, 'd': 4 };
28767 *
28768 * var values = _.memoize(_.values);
28769 * values(object);
28770 * // => [1, 2]
28771 *
28772 * values(other);
28773 * // => [3, 4]
28774 *
28775 * object.a = 2;
28776 * values(object);
28777 * // => [1, 2]
28778 *
28779 * // Modify the result cache.
28780 * values.cache.set(object, ['a', 'b']);
28781 * values(object);
28782 * // => ['a', 'b']
28783 *
28784 * // Replace `_.memoize.Cache`.
28785 * _.memoize.Cache = WeakMap;
28786 */
28787function memoize(func, resolver) {
28788 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
28789 throw new TypeError(FUNC_ERROR_TEXT);
28790 }
28791 var memoized = function() {
28792 var args = arguments,
28793 key = resolver ? resolver.apply(this, args) : args[0],
28794 cache = memoized.cache;
28795
28796 if (cache.has(key)) {
28797 return cache.get(key);
28798 }
28799 var result = func.apply(this, args);
28800 memoized.cache = cache.set(key, result) || cache;
28801 return result;
28802 };
28803 memoized.cache = new (memoize.Cache || MapCache);
28804 return memoized;
28805}
28806
28807// Expose `MapCache`.
28808memoize.Cache = MapCache;
28809
28810module.exports = memoize;
28811
28812},{"./_MapCache":151}],345:[function(require,module,exports){
28813var createPadding = require('./_createPadding'),
28814 stringSize = require('./_stringSize'),
28815 toInteger = require('./toInteger'),
28816 toString = require('./toString');
28817
28818/**
28819 * Pads `string` on the right side if it's shorter than `length`. Padding
28820 * characters are truncated if they exceed `length`.
28821 *
28822 * @static
28823 * @memberOf _
28824 * @since 4.0.0
28825 * @category String
28826 * @param {string} [string=''] The string to pad.
28827 * @param {number} [length=0] The padding length.
28828 * @param {string} [chars=' '] The string used as padding.
28829 * @returns {string} Returns the padded string.
28830 * @example
28831 *
28832 * _.padEnd('abc', 6);
28833 * // => 'abc '
28834 *
28835 * _.padEnd('abc', 6, '_-');
28836 * // => 'abc_-_'
28837 *
28838 * _.padEnd('abc', 3);
28839 * // => 'abc'
28840 */
28841function padEnd(string, length, chars) {
28842 string = toString(string);
28843 length = toInteger(length);
28844
28845 var strLength = length ? stringSize(string) : 0;
28846 return (length && strLength < length)
28847 ? (string + createPadding(length - strLength, chars))
28848 : string;
28849}
28850
28851module.exports = padEnd;
28852
28853},{"./_createPadding":234,"./_stringSize":302,"./toInteger":352,"./toString":354}],346:[function(require,module,exports){
28854var basePick = require('./_basePick'),
28855 flatRest = require('./_flatRest');
28856
28857/**
28858 * Creates an object composed of the picked `object` properties.
28859 *
28860 * @static
28861 * @since 0.1.0
28862 * @memberOf _
28863 * @category Object
28864 * @param {Object} object The source object.
28865 * @param {...(string|string[])} [paths] The property paths to pick.
28866 * @returns {Object} Returns the new object.
28867 * @example
28868 *
28869 * var object = { 'a': 1, 'b': '2', 'c': 3 };
28870 *
28871 * _.pick(object, ['a', 'c']);
28872 * // => { 'a': 1, 'c': 3 }
28873 */
28874var pick = flatRest(function(object, paths) {
28875 return object == null ? {} : basePick(object, paths);
28876});
28877
28878module.exports = pick;
28879
28880},{"./_basePick":202,"./_flatRest":239}],347:[function(require,module,exports){
28881var baseProperty = require('./_baseProperty'),
28882 basePropertyDeep = require('./_basePropertyDeep'),
28883 isKey = require('./_isKey'),
28884 toKey = require('./_toKey');
28885
28886/**
28887 * Creates a function that returns the value at `path` of a given object.
28888 *
28889 * @static
28890 * @memberOf _
28891 * @since 2.4.0
28892 * @category Util
28893 * @param {Array|string} path The path of the property to get.
28894 * @returns {Function} Returns the new accessor function.
28895 * @example
28896 *
28897 * var objects = [
28898 * { 'a': { 'b': 2 } },
28899 * { 'a': { 'b': 1 } }
28900 * ];
28901 *
28902 * _.map(objects, _.property('a.b'));
28903 * // => [2, 1]
28904 *
28905 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
28906 * // => [1, 2]
28907 */
28908function property(path) {
28909 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
28910}
28911
28912module.exports = property;
28913
28914},{"./_baseProperty":204,"./_basePropertyDeep":205,"./_isKey":265,"./_toKey":305}],348:[function(require,module,exports){
28915/**
28916 * This method returns a new empty array.
28917 *
28918 * @static
28919 * @memberOf _
28920 * @since 4.13.0
28921 * @category Util
28922 * @returns {Array} Returns the new empty array.
28923 * @example
28924 *
28925 * var arrays = _.times(2, _.stubArray);
28926 *
28927 * console.log(arrays);
28928 * // => [[], []]
28929 *
28930 * console.log(arrays[0] === arrays[1]);
28931 * // => false
28932 */
28933function stubArray() {
28934 return [];
28935}
28936
28937module.exports = stubArray;
28938
28939},{}],349:[function(require,module,exports){
28940/**
28941 * This method returns `false`.
28942 *
28943 * @static
28944 * @memberOf _
28945 * @since 4.13.0
28946 * @category Util
28947 * @returns {boolean} Returns `false`.
28948 * @example
28949 *
28950 * _.times(2, _.stubFalse);
28951 * // => [false, false]
28952 */
28953function stubFalse() {
28954 return false;
28955}
28956
28957module.exports = stubFalse;
28958
28959},{}],350:[function(require,module,exports){
28960var baseTimes = require('./_baseTimes'),
28961 castFunction = require('./_castFunction'),
28962 toInteger = require('./toInteger');
28963
28964/** Used as references for various `Number` constants. */
28965var MAX_SAFE_INTEGER = 9007199254740991;
28966
28967/** Used as references for the maximum length and index of an array. */
28968var MAX_ARRAY_LENGTH = 4294967295;
28969
28970/* Built-in method references for those with the same name as other `lodash` methods. */
28971var nativeMin = Math.min;
28972
28973/**
28974 * Invokes the iteratee `n` times, returning an array of the results of
28975 * each invocation. The iteratee is invoked with one argument; (index).
28976 *
28977 * @static
28978 * @since 0.1.0
28979 * @memberOf _
28980 * @category Util
28981 * @param {number} n The number of times to invoke `iteratee`.
28982 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28983 * @returns {Array} Returns the array of results.
28984 * @example
28985 *
28986 * _.times(3, String);
28987 * // => ['0', '1', '2']
28988 *
28989 * _.times(4, _.constant(0));
28990 * // => [0, 0, 0, 0]
28991 */
28992function times(n, iteratee) {
28993 n = toInteger(n);
28994 if (n < 1 || n > MAX_SAFE_INTEGER) {
28995 return [];
28996 }
28997 var index = MAX_ARRAY_LENGTH,
28998 length = nativeMin(n, MAX_ARRAY_LENGTH);
28999
29000 iteratee = castFunction(iteratee);
29001 n -= MAX_ARRAY_LENGTH;
29002
29003 var result = baseTimes(length, iteratee);
29004 while (++index < n) {
29005 iteratee(index);
29006 }
29007 return result;
29008}
29009
29010module.exports = times;
29011
29012},{"./_baseTimes":211,"./_castFunction":216,"./toInteger":352}],351:[function(require,module,exports){
29013var toNumber = require('./toNumber');
29014
29015/** Used as references for various `Number` constants. */
29016var INFINITY = 1 / 0,
29017 MAX_INTEGER = 1.7976931348623157e+308;
29018
29019/**
29020 * Converts `value` to a finite number.
29021 *
29022 * @static
29023 * @memberOf _
29024 * @since 4.12.0
29025 * @category Lang
29026 * @param {*} value The value to convert.
29027 * @returns {number} Returns the converted number.
29028 * @example
29029 *
29030 * _.toFinite(3.2);
29031 * // => 3.2
29032 *
29033 * _.toFinite(Number.MIN_VALUE);
29034 * // => 5e-324
29035 *
29036 * _.toFinite(Infinity);
29037 * // => 1.7976931348623157e+308
29038 *
29039 * _.toFinite('3.2');
29040 * // => 3.2
29041 */
29042function toFinite(value) {
29043 if (!value) {
29044 return value === 0 ? value : 0;
29045 }
29046 value = toNumber(value);
29047 if (value === INFINITY || value === -INFINITY) {
29048 var sign = (value < 0 ? -1 : 1);
29049 return sign * MAX_INTEGER;
29050 }
29051 return value === value ? value : 0;
29052}
29053
29054module.exports = toFinite;
29055
29056},{"./toNumber":353}],352:[function(require,module,exports){
29057var toFinite = require('./toFinite');
29058
29059/**
29060 * Converts `value` to an integer.
29061 *
29062 * **Note:** This method is loosely based on
29063 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
29064 *
29065 * @static
29066 * @memberOf _
29067 * @since 4.0.0
29068 * @category Lang
29069 * @param {*} value The value to convert.
29070 * @returns {number} Returns the converted integer.
29071 * @example
29072 *
29073 * _.toInteger(3.2);
29074 * // => 3
29075 *
29076 * _.toInteger(Number.MIN_VALUE);
29077 * // => 0
29078 *
29079 * _.toInteger(Infinity);
29080 * // => 1.7976931348623157e+308
29081 *
29082 * _.toInteger('3.2');
29083 * // => 3
29084 */
29085function toInteger(value) {
29086 var result = toFinite(value),
29087 remainder = result % 1;
29088
29089 return result === result ? (remainder ? result - remainder : result) : 0;
29090}
29091
29092module.exports = toInteger;
29093
29094},{"./toFinite":351}],353:[function(require,module,exports){
29095var isObject = require('./isObject'),
29096 isSymbol = require('./isSymbol');
29097
29098/** Used as references for various `Number` constants. */
29099var NAN = 0 / 0;
29100
29101/** Used to match leading and trailing whitespace. */
29102var reTrim = /^\s+|\s+$/g;
29103
29104/** Used to detect bad signed hexadecimal string values. */
29105var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
29106
29107/** Used to detect binary string values. */
29108var reIsBinary = /^0b[01]+$/i;
29109
29110/** Used to detect octal string values. */
29111var reIsOctal = /^0o[0-7]+$/i;
29112
29113/** Built-in method references without a dependency on `root`. */
29114var freeParseInt = parseInt;
29115
29116/**
29117 * Converts `value` to a number.
29118 *
29119 * @static
29120 * @memberOf _
29121 * @since 4.0.0
29122 * @category Lang
29123 * @param {*} value The value to process.
29124 * @returns {number} Returns the number.
29125 * @example
29126 *
29127 * _.toNumber(3.2);
29128 * // => 3.2
29129 *
29130 * _.toNumber(Number.MIN_VALUE);
29131 * // => 5e-324
29132 *
29133 * _.toNumber(Infinity);
29134 * // => Infinity
29135 *
29136 * _.toNumber('3.2');
29137 * // => 3.2
29138 */
29139function toNumber(value) {
29140 if (typeof value == 'number') {
29141 return value;
29142 }
29143 if (isSymbol(value)) {
29144 return NAN;
29145 }
29146 if (isObject(value)) {
29147 var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
29148 value = isObject(other) ? (other + '') : other;
29149 }
29150 if (typeof value != 'string') {
29151 return value === 0 ? value : +value;
29152 }
29153 value = value.replace(reTrim, '');
29154 var isBinary = reIsBinary.test(value);
29155 return (isBinary || reIsOctal.test(value))
29156 ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
29157 : (reIsBadHex.test(value) ? NAN : +value);
29158}
29159
29160module.exports = toNumber;
29161
29162},{"./isObject":333,"./isSymbol":338}],354:[function(require,module,exports){
29163var baseToString = require('./_baseToString');
29164
29165/**
29166 * Converts `value` to a string. An empty string is returned for `null`
29167 * and `undefined` values. The sign of `-0` is preserved.
29168 *
29169 * @static
29170 * @memberOf _
29171 * @since 4.0.0
29172 * @category Lang
29173 * @param {*} value The value to convert.
29174 * @returns {string} Returns the converted string.
29175 * @example
29176 *
29177 * _.toString(null);
29178 * // => ''
29179 *
29180 * _.toString(-0);
29181 * // => '-0'
29182 *
29183 * _.toString([1, 2, 3]);
29184 * // => '1,2,3'
29185 */
29186function toString(value) {
29187 return value == null ? '' : baseToString(value);
29188}
29189
29190module.exports = toString;
29191
29192},{"./_baseToString":212}],355:[function(require,module,exports){
29193var baseToString = require('./_baseToString'),
29194 castSlice = require('./_castSlice'),
29195 charsEndIndex = require('./_charsEndIndex'),
29196 stringToArray = require('./_stringToArray'),
29197 toString = require('./toString');
29198
29199/** Used to match leading and trailing whitespace. */
29200var reTrimEnd = /\s+$/;
29201
29202/**
29203 * Removes trailing whitespace or specified characters from `string`.
29204 *
29205 * @static
29206 * @memberOf _
29207 * @since 4.0.0
29208 * @category String
29209 * @param {string} [string=''] The string to trim.
29210 * @param {string} [chars=whitespace] The characters to trim.
29211 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29212 * @returns {string} Returns the trimmed string.
29213 * @example
29214 *
29215 * _.trimEnd(' abc ');
29216 * // => ' abc'
29217 *
29218 * _.trimEnd('-_-abc-_-', '_-');
29219 * // => '-_-abc'
29220 */
29221function trimEnd(string, chars, guard) {
29222 string = toString(string);
29223 if (string && (guard || chars === undefined)) {
29224 return string.replace(reTrimEnd, '');
29225 }
29226 if (!string || !(chars = baseToString(chars))) {
29227 return string;
29228 }
29229 var strSymbols = stringToArray(string),
29230 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
29231
29232 return castSlice(strSymbols, 0, end).join('');
29233}
29234
29235module.exports = trimEnd;
29236
29237},{"./_baseToString":212,"./_castSlice":218,"./_charsEndIndex":219,"./_stringToArray":303,"./toString":354}],356:[function(require,module,exports){
29238var baseValues = require('./_baseValues'),
29239 keys = require('./keys');
29240
29241/**
29242 * Creates an array of the own enumerable string keyed property values of `object`.
29243 *
29244 * **Note:** Non-object values are coerced to objects.
29245 *
29246 * @static
29247 * @since 0.1.0
29248 * @memberOf _
29249 * @category Object
29250 * @param {Object} object The object to query.
29251 * @returns {Array} Returns the array of property values.
29252 * @example
29253 *
29254 * function Foo() {
29255 * this.a = 1;
29256 * this.b = 2;
29257 * }
29258 *
29259 * Foo.prototype.c = 3;
29260 *
29261 * _.values(new Foo);
29262 * // => [1, 2] (iteration order is not guaranteed)
29263 *
29264 * _.values('hi');
29265 * // => ['h', 'i']
29266 */
29267function values(object) {
29268 return object == null ? [] : baseValues(object, keys(object));
29269}
29270
29271module.exports = values;
29272
29273},{"./_baseValues":214,"./keys":341}],357:[function(require,module,exports){
29274/*
29275 Copyright 2013 Daniel Wirtz <dcode@dcode.io>
29276 Copyright 2009 The Closure Library Authors. All Rights Reserved.
29277
29278 Licensed under the Apache License, Version 2.0 (the "License");
29279 you may not use this file except in compliance with the License.
29280 You may obtain a copy of the License at
29281
29282 http://www.apache.org/licenses/LICENSE-2.0
29283
29284 Unless required by applicable law or agreed to in writing, software
29285 distributed under the License is distributed on an "AS-IS" BASIS,
29286 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29287 See the License for the specific language governing permissions and
29288 limitations under the License.
29289 */
29290
29291/**
29292 * @license Long.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
29293 * Released under the Apache License, Version 2.0
29294 * see: https://github.com/dcodeIO/Long.js for details
29295 */
29296(function(global, factory) {
29297
29298 /* AMD */ if (typeof define === 'function' && define["amd"])
29299 define([], factory);
29300 /* CommonJS */ else if (typeof require === 'function' && typeof module === "object" && module && module["exports"])
29301 module["exports"] = factory();
29302 /* Global */ else
29303 (global["dcodeIO"] = global["dcodeIO"] || {})["Long"] = factory();
29304
29305})(this, function() {
29306 "use strict";
29307
29308 /**
29309 * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.
29310 * See the from* functions below for more convenient ways of constructing Longs.
29311 * @exports Long
29312 * @class A Long class for representing a 64 bit two's-complement integer value.
29313 * @param {number} low The low (signed) 32 bits of the long
29314 * @param {number} high The high (signed) 32 bits of the long
29315 * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
29316 * @constructor
29317 */
29318 function Long(low, high, unsigned) {
29319
29320 /**
29321 * The low 32 bits as a signed value.
29322 * @type {number}
29323 * @expose
29324 */
29325 this.low = low|0;
29326
29327 /**
29328 * The high 32 bits as a signed value.
29329 * @type {number}
29330 * @expose
29331 */
29332 this.high = high|0;
29333
29334 /**
29335 * Whether unsigned or not.
29336 * @type {boolean}
29337 * @expose
29338 */
29339 this.unsigned = !!unsigned;
29340 }
29341
29342 // The internal representation of a long is the two given signed, 32-bit values.
29343 // We use 32-bit pieces because these are the size of integers on which
29344 // Javascript performs bit-operations. For operations like addition and
29345 // multiplication, we split each number into 16 bit pieces, which can easily be
29346 // multiplied within Javascript's floating-point representation without overflow
29347 // or change in sign.
29348 //
29349 // In the algorithms below, we frequently reduce the negative case to the
29350 // positive case by negating the input(s) and then post-processing the result.
29351 // Note that we must ALWAYS check specially whether those values are MIN_VALUE
29352 // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as
29353 // a positive number, it overflows back into a negative). Not handling this
29354 // case would often result in infinite recursion.
29355 //
29356 // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*
29357 // methods on which they depend.
29358
29359 /**
29360 * An indicator used to reliably determine if an object is a Long or not.
29361 * @type {boolean}
29362 * @const
29363 * @expose
29364 * @private
29365 */
29366 Long.__isLong__;
29367
29368 Object.defineProperty(Long.prototype, "__isLong__", {
29369 value: true,
29370 enumerable: false,
29371 configurable: false
29372 });
29373
29374 /**
29375 * Tests if the specified object is a Long.
29376 * @param {*} obj Object
29377 * @returns {boolean}
29378 * @expose
29379 */
29380 Long.isLong = function isLong(obj) {
29381 return (obj && obj["__isLong__"]) === true;
29382 };
29383
29384 /**
29385 * A cache of the Long representations of small integer values.
29386 * @type {!Object}
29387 * @inner
29388 */
29389 var INT_CACHE = {};
29390
29391 /**
29392 * A cache of the Long representations of small unsigned integer values.
29393 * @type {!Object}
29394 * @inner
29395 */
29396 var UINT_CACHE = {};
29397
29398 /**
29399 * Returns a Long representing the given 32 bit integer value.
29400 * @param {number} value The 32 bit integer in question
29401 * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
29402 * @returns {!Long} The corresponding Long value
29403 * @expose
29404 */
29405 Long.fromInt = function fromInt(value, unsigned) {
29406 var obj, cachedObj;
29407 if (!unsigned) {
29408 value = value | 0;
29409 if (-128 <= value && value < 128) {
29410 cachedObj = INT_CACHE[value];
29411 if (cachedObj)
29412 return cachedObj;
29413 }
29414 obj = new Long(value, value < 0 ? -1 : 0, false);
29415 if (-128 <= value && value < 128)
29416 INT_CACHE[value] = obj;
29417 return obj;
29418 } else {
29419 value = value >>> 0;
29420 if (0 <= value && value < 256) {
29421 cachedObj = UINT_CACHE[value];
29422 if (cachedObj)
29423 return cachedObj;
29424 }
29425 obj = new Long(value, (value | 0) < 0 ? -1 : 0, true);
29426 if (0 <= value && value < 256)
29427 UINT_CACHE[value] = obj;
29428 return obj;
29429 }
29430 };
29431
29432 /**
29433 * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
29434 * @param {number} value The number in question
29435 * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
29436 * @returns {!Long} The corresponding Long value
29437 * @expose
29438 */
29439 Long.fromNumber = function fromNumber(value, unsigned) {
29440 unsigned = !!unsigned;
29441 if (isNaN(value) || !isFinite(value))
29442 return Long.ZERO;
29443 if (!unsigned && value <= -TWO_PWR_63_DBL)
29444 return Long.MIN_VALUE;
29445 if (!unsigned && value + 1 >= TWO_PWR_63_DBL)
29446 return Long.MAX_VALUE;
29447 if (unsigned && value >= TWO_PWR_64_DBL)
29448 return Long.MAX_UNSIGNED_VALUE;
29449 if (value < 0)
29450 return Long.fromNumber(-value, unsigned).negate();
29451 return new Long((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);
29452 };
29453
29454 /**
29455 * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is
29456 * assumed to use 32 bits.
29457 * @param {number} lowBits The low 32 bits
29458 * @param {number} highBits The high 32 bits
29459 * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
29460 * @returns {!Long} The corresponding Long value
29461 * @expose
29462 */
29463 Long.fromBits = function fromBits(lowBits, highBits, unsigned) {
29464 return new Long(lowBits, highBits, unsigned);
29465 };
29466
29467 /**
29468 * Returns a Long representation of the given string, written using the specified radix.
29469 * @param {string} str The textual representation of the Long
29470 * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
29471 * @param {number=} radix The radix in which the text is written (2-36), defaults to 10
29472 * @returns {!Long} The corresponding Long value
29473 * @expose
29474 */
29475 Long.fromString = function fromString(str, unsigned, radix) {
29476 if (str.length === 0)
29477 throw Error('number format error: empty string');
29478 if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
29479 return Long.ZERO;
29480 if (typeof unsigned === 'number') // For goog.math.long compatibility
29481 radix = unsigned,
29482 unsigned = false;
29483 radix = radix || 10;
29484 if (radix < 2 || 36 < radix)
29485 throw Error('radix out of range: ' + radix);
29486
29487 var p;
29488 if ((p = str.indexOf('-')) > 0)
29489 throw Error('number format error: interior "-" character: ' + str);
29490 else if (p === 0)
29491 return Long.fromString(str.substring(1), unsigned, radix).negate();
29492
29493 // Do several (8) digits each time through the loop, so as to
29494 // minimize the calls to the very expensive emulated div.
29495 var radixToPower = Long.fromNumber(Math.pow(radix, 8));
29496
29497 var result = Long.ZERO;
29498 for (var i = 0; i < str.length; i += 8) {
29499 var size = Math.min(8, str.length - i);
29500 var value = parseInt(str.substring(i, i + size), radix);
29501 if (size < 8) {
29502 var power = Long.fromNumber(Math.pow(radix, size));
29503 result = result.multiply(power).add(Long.fromNumber(value));
29504 } else {
29505 result = result.multiply(radixToPower);
29506 result = result.add(Long.fromNumber(value));
29507 }
29508 }
29509 result.unsigned = unsigned;
29510 return result;
29511 };
29512
29513 /**
29514 * Converts the specified value to a Long.
29515 * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
29516 * @returns {!Long}
29517 * @expose
29518 */
29519 Long.fromValue = function fromValue(val) {
29520 if (val /* is compatible */ instanceof Long)
29521 return val;
29522 if (typeof val === 'number')
29523 return Long.fromNumber(val);
29524 if (typeof val === 'string')
29525 return Long.fromString(val);
29526 // Throws for non-objects, converts non-instanceof Long:
29527 return new Long(val.low, val.high, val.unsigned);
29528 };
29529
29530 // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be
29531 // no runtime penalty for these.
29532
29533 /**
29534 * @type {number}
29535 * @const
29536 * @inner
29537 */
29538 var TWO_PWR_16_DBL = 1 << 16;
29539
29540 /**
29541 * @type {number}
29542 * @const
29543 * @inner
29544 */
29545 var TWO_PWR_24_DBL = 1 << 24;
29546
29547 /**
29548 * @type {number}
29549 * @const
29550 * @inner
29551 */
29552 var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
29553
29554 /**
29555 * @type {number}
29556 * @const
29557 * @inner
29558 */
29559 var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
29560
29561 /**
29562 * @type {number}
29563 * @const
29564 * @inner
29565 */
29566 var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
29567
29568 /**
29569 * @type {!Long}
29570 * @const
29571 * @inner
29572 */
29573 var TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL);
29574
29575 /**
29576 * Signed zero.
29577 * @type {!Long}
29578 * @expose
29579 */
29580 Long.ZERO = Long.fromInt(0);
29581
29582 /**
29583 * Unsigned zero.
29584 * @type {!Long}
29585 * @expose
29586 */
29587 Long.UZERO = Long.fromInt(0, true);
29588
29589 /**
29590 * Signed one.
29591 * @type {!Long}
29592 * @expose
29593 */
29594 Long.ONE = Long.fromInt(1);
29595
29596 /**
29597 * Unsigned one.
29598 * @type {!Long}
29599 * @expose
29600 */
29601 Long.UONE = Long.fromInt(1, true);
29602
29603 /**
29604 * Signed negative one.
29605 * @type {!Long}
29606 * @expose
29607 */
29608 Long.NEG_ONE = Long.fromInt(-1);
29609
29610 /**
29611 * Maximum signed value.
29612 * @type {!Long}
29613 * @expose
29614 */
29615 Long.MAX_VALUE = Long.fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);
29616
29617 /**
29618 * Maximum unsigned value.
29619 * @type {!Long}
29620 * @expose
29621 */
29622 Long.MAX_UNSIGNED_VALUE = Long.fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);
29623
29624 /**
29625 * Minimum signed value.
29626 * @type {!Long}
29627 * @expose
29628 */
29629 Long.MIN_VALUE = Long.fromBits(0, 0x80000000|0, false);
29630
29631 /**
29632 * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.
29633 * @returns {number}
29634 * @expose
29635 */
29636 Long.prototype.toInt = function toInt() {
29637 return this.unsigned ? this.low >>> 0 : this.low;
29638 };
29639
29640 /**
29641 * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).
29642 * @returns {number}
29643 * @expose
29644 */
29645 Long.prototype.toNumber = function toNumber() {
29646 if (this.unsigned) {
29647 return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);
29648 }
29649 return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
29650 };
29651
29652 /**
29653 * Converts the Long to a string written in the specified radix.
29654 * @param {number=} radix Radix (2-36), defaults to 10
29655 * @returns {string}
29656 * @override
29657 * @throws {RangeError} If `radix` is out of range
29658 * @expose
29659 */
29660 Long.prototype.toString = function toString(radix) {
29661 radix = radix || 10;
29662 if (radix < 2 || 36 < radix)
29663 throw RangeError('radix out of range: ' + radix);
29664 if (this.isZero())
29665 return '0';
29666 var rem;
29667 if (this.isNegative()) { // Unsigned Longs are never negative
29668 if (this.equals(Long.MIN_VALUE)) {
29669 // We need to change the Long value before it can be negated, so we remove
29670 // the bottom-most digit in this base and then recurse to do the rest.
29671 var radixLong = Long.fromNumber(radix);
29672 var div = this.divide(radixLong);
29673 rem = div.multiply(radixLong).subtract(this);
29674 return div.toString(radix) + rem.toInt().toString(radix);
29675 } else
29676 return '-' + this.negate().toString(radix);
29677 }
29678
29679 // Do several (6) digits each time through the loop, so as to
29680 // minimize the calls to the very expensive emulated div.
29681 var radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned);
29682 rem = this;
29683 var result = '';
29684 while (true) {
29685 var remDiv = rem.divide(radixToPower),
29686 intval = rem.subtract(remDiv.multiply(radixToPower)).toInt() >>> 0,
29687 digits = intval.toString(radix);
29688 rem = remDiv;
29689 if (rem.isZero())
29690 return digits + result;
29691 else {
29692 while (digits.length < 6)
29693 digits = '0' + digits;
29694 result = '' + digits + result;
29695 }
29696 }
29697 };
29698
29699 /**
29700 * Gets the high 32 bits as a signed integer.
29701 * @returns {number} Signed high bits
29702 * @expose
29703 */
29704 Long.prototype.getHighBits = function getHighBits() {
29705 return this.high;
29706 };
29707
29708 /**
29709 * Gets the high 32 bits as an unsigned integer.
29710 * @returns {number} Unsigned high bits
29711 * @expose
29712 */
29713 Long.prototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
29714 return this.high >>> 0;
29715 };
29716
29717 /**
29718 * Gets the low 32 bits as a signed integer.
29719 * @returns {number} Signed low bits
29720 * @expose
29721 */
29722 Long.prototype.getLowBits = function getLowBits() {
29723 return this.low;
29724 };
29725
29726 /**
29727 * Gets the low 32 bits as an unsigned integer.
29728 * @returns {number} Unsigned low bits
29729 * @expose
29730 */
29731 Long.prototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
29732 return this.low >>> 0;
29733 };
29734
29735 /**
29736 * Gets the number of bits needed to represent the absolute value of this Long.
29737 * @returns {number}
29738 * @expose
29739 */
29740 Long.prototype.getNumBitsAbs = function getNumBitsAbs() {
29741 if (this.isNegative()) // Unsigned Longs are never negative
29742 return this.equals(Long.MIN_VALUE) ? 64 : this.negate().getNumBitsAbs();
29743 var val = this.high != 0 ? this.high : this.low;
29744 for (var bit = 31; bit > 0; bit--)
29745 if ((val & (1 << bit)) != 0)
29746 break;
29747 return this.high != 0 ? bit + 33 : bit + 1;
29748 };
29749
29750 /**
29751 * Tests if this Long's value equals zero.
29752 * @returns {boolean}
29753 * @expose
29754 */
29755 Long.prototype.isZero = function isZero() {
29756 return this.high === 0 && this.low === 0;
29757 };
29758
29759 /**
29760 * Tests if this Long's value is negative.
29761 * @returns {boolean}
29762 * @expose
29763 */
29764 Long.prototype.isNegative = function isNegative() {
29765 return !this.unsigned && this.high < 0;
29766 };
29767
29768 /**
29769 * Tests if this Long's value is positive.
29770 * @returns {boolean}
29771 * @expose
29772 */
29773 Long.prototype.isPositive = function isPositive() {
29774 return this.unsigned || this.high >= 0;
29775 };
29776
29777 /**
29778 * Tests if this Long's value is odd.
29779 * @returns {boolean}
29780 * @expose
29781 */
29782 Long.prototype.isOdd = function isOdd() {
29783 return (this.low & 1) === 1;
29784 };
29785
29786 /**
29787 * Tests if this Long's value is even.
29788 * @returns {boolean}
29789 * @expose
29790 */
29791 Long.prototype.isEven = function isEven() {
29792 return (this.low & 1) === 0;
29793 };
29794
29795 /**
29796 * Tests if this Long's value equals the specified's.
29797 * @param {!Long|number|string} other Other value
29798 * @returns {boolean}
29799 * @expose
29800 */
29801 Long.prototype.equals = function equals(other) {
29802 if (!Long.isLong(other))
29803 other = Long.fromValue(other);
29804 if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)
29805 return false;
29806 return this.high === other.high && this.low === other.low;
29807 };
29808
29809 /**
29810 * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.
29811 * @function
29812 * @param {!Long|number|string} other Other value
29813 * @returns {boolean}
29814 * @expose
29815 */
29816 Long.eq = Long.prototype.equals;
29817
29818 /**
29819 * Tests if this Long's value differs from the specified's.
29820 * @param {!Long|number|string} other Other value
29821 * @returns {boolean}
29822 * @expose
29823 */
29824 Long.prototype.notEquals = function notEquals(other) {
29825 return !this.equals(/* validates */ other);
29826 };
29827
29828 /**
29829 * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.
29830 * @function
29831 * @param {!Long|number|string} other Other value
29832 * @returns {boolean}
29833 * @expose
29834 */
29835 Long.neq = Long.prototype.notEquals;
29836
29837 /**
29838 * Tests if this Long's value is less than the specified's.
29839 * @param {!Long|number|string} other Other value
29840 * @returns {boolean}
29841 * @expose
29842 */
29843 Long.prototype.lessThan = function lessThan(other) {
29844 return this.compare(/* validates */ other) < 0;
29845 };
29846
29847 /**
29848 * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.
29849 * @function
29850 * @param {!Long|number|string} other Other value
29851 * @returns {boolean}
29852 * @expose
29853 */
29854 Long.prototype.lt = Long.prototype.lessThan;
29855
29856 /**
29857 * Tests if this Long's value is less than or equal the specified's.
29858 * @param {!Long|number|string} other Other value
29859 * @returns {boolean}
29860 * @expose
29861 */
29862 Long.prototype.lessThanOrEqual = function lessThanOrEqual(other) {
29863 return this.compare(/* validates */ other) <= 0;
29864 };
29865
29866 /**
29867 * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.
29868 * @function
29869 * @param {!Long|number|string} other Other value
29870 * @returns {boolean}
29871 * @expose
29872 */
29873 Long.prototype.lte = Long.prototype.lessThanOrEqual;
29874
29875 /**
29876 * Tests if this Long's value is greater than the specified's.
29877 * @param {!Long|number|string} other Other value
29878 * @returns {boolean}
29879 * @expose
29880 */
29881 Long.prototype.greaterThan = function greaterThan(other) {
29882 return this.compare(/* validates */ other) > 0;
29883 };
29884
29885 /**
29886 * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.
29887 * @function
29888 * @param {!Long|number|string} other Other value
29889 * @returns {boolean}
29890 * @expose
29891 */
29892 Long.prototype.gt = Long.prototype.greaterThan;
29893
29894 /**
29895 * Tests if this Long's value is greater than or equal the specified's.
29896 * @param {!Long|number|string} other Other value
29897 * @returns {boolean}
29898 * @expose
29899 */
29900 Long.prototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
29901 return this.compare(/* validates */ other) >= 0;
29902 };
29903
29904 /**
29905 * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.
29906 * @function
29907 * @param {!Long|number|string} other Other value
29908 * @returns {boolean}
29909 * @expose
29910 */
29911 Long.prototype.gte = Long.prototype.greaterThanOrEqual;
29912
29913 /**
29914 * Compares this Long's value with the specified's.
29915 * @param {!Long|number|string} other Other value
29916 * @returns {number} 0 if they are the same, 1 if the this is greater and -1
29917 * if the given one is greater
29918 * @expose
29919 */
29920 Long.prototype.compare = function compare(other) {
29921 if (!Long.isLong(other))
29922 other = Long.fromValue(other);
29923 if (this.equals(other))
29924 return 0;
29925 var thisNeg = this.isNegative(),
29926 otherNeg = other.isNegative();
29927 if (thisNeg && !otherNeg)
29928 return -1;
29929 if (!thisNeg && otherNeg)
29930 return 1;
29931 // At this point the sign bits are the same
29932 if (!this.unsigned)
29933 return this.subtract(other).isNegative() ? -1 : 1;
29934 // Both are positive if at least one is unsigned
29935 return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;
29936 };
29937
29938 /**
29939 * Negates this Long's value.
29940 * @returns {!Long} Negated Long
29941 * @expose
29942 */
29943 Long.prototype.negate = function negate() {
29944 if (!this.unsigned && this.equals(Long.MIN_VALUE))
29945 return Long.MIN_VALUE;
29946 return this.not().add(Long.ONE);
29947 };
29948
29949 /**
29950 * Negates this Long's value. This is an alias of {@link Long#negate}.
29951 * @function
29952 * @returns {!Long} Negated Long
29953 * @expose
29954 */
29955 Long.prototype.neg = Long.prototype.negate;
29956
29957 /**
29958 * Returns the sum of this and the specified Long.
29959 * @param {!Long|number|string} addend Addend
29960 * @returns {!Long} Sum
29961 * @expose
29962 */
29963 Long.prototype.add = function add(addend) {
29964 if (!Long.isLong(addend))
29965 addend = Long.fromValue(addend);
29966
29967 // Divide each number into 4 chunks of 16 bits, and then sum the chunks.
29968
29969 var a48 = this.high >>> 16;
29970 var a32 = this.high & 0xFFFF;
29971 var a16 = this.low >>> 16;
29972 var a00 = this.low & 0xFFFF;
29973
29974 var b48 = addend.high >>> 16;
29975 var b32 = addend.high & 0xFFFF;
29976 var b16 = addend.low >>> 16;
29977 var b00 = addend.low & 0xFFFF;
29978
29979 var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
29980 c00 += a00 + b00;
29981 c16 += c00 >>> 16;
29982 c00 &= 0xFFFF;
29983 c16 += a16 + b16;
29984 c32 += c16 >>> 16;
29985 c16 &= 0xFFFF;
29986 c32 += a32 + b32;
29987 c48 += c32 >>> 16;
29988 c32 &= 0xFFFF;
29989 c48 += a48 + b48;
29990 c48 &= 0xFFFF;
29991 return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
29992 };
29993
29994 /**
29995 * Returns the difference of this and the specified Long.
29996 * @param {!Long|number|string} subtrahend Subtrahend
29997 * @returns {!Long} Difference
29998 * @expose
29999 */
30000 Long.prototype.subtract = function subtract(subtrahend) {
30001 if (!Long.isLong(subtrahend))
30002 subtrahend = Long.fromValue(subtrahend);
30003 return this.add(subtrahend.negate());
30004 };
30005
30006 /**
30007 * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.
30008 * @function
30009 * @param {!Long|number|string} subtrahend Subtrahend
30010 * @returns {!Long} Difference
30011 * @expose
30012 */
30013 Long.prototype.sub = Long.prototype.subtract;
30014
30015 /**
30016 * Returns the product of this and the specified Long.
30017 * @param {!Long|number|string} multiplier Multiplier
30018 * @returns {!Long} Product
30019 * @expose
30020 */
30021 Long.prototype.multiply = function multiply(multiplier) {
30022 if (this.isZero())
30023 return Long.ZERO;
30024 if (!Long.isLong(multiplier))
30025 multiplier = Long.fromValue(multiplier);
30026 if (multiplier.isZero())
30027 return Long.ZERO;
30028 if (this.equals(Long.MIN_VALUE))
30029 return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO;
30030 if (multiplier.equals(Long.MIN_VALUE))
30031 return this.isOdd() ? Long.MIN_VALUE : Long.ZERO;
30032
30033 if (this.isNegative()) {
30034 if (multiplier.isNegative())
30035 return this.negate().multiply(multiplier.negate());
30036 else
30037 return this.negate().multiply(multiplier).negate();
30038 } else if (multiplier.isNegative())
30039 return this.multiply(multiplier.negate()).negate();
30040
30041 // If both longs are small, use float multiplication
30042 if (this.lessThan(TWO_PWR_24) && multiplier.lessThan(TWO_PWR_24))
30043 return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
30044
30045 // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.
30046 // We can skip products that would overflow.
30047
30048 var a48 = this.high >>> 16;
30049 var a32 = this.high & 0xFFFF;
30050 var a16 = this.low >>> 16;
30051 var a00 = this.low & 0xFFFF;
30052
30053 var b48 = multiplier.high >>> 16;
30054 var b32 = multiplier.high & 0xFFFF;
30055 var b16 = multiplier.low >>> 16;
30056 var b00 = multiplier.low & 0xFFFF;
30057
30058 var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
30059 c00 += a00 * b00;
30060 c16 += c00 >>> 16;
30061 c00 &= 0xFFFF;
30062 c16 += a16 * b00;
30063 c32 += c16 >>> 16;
30064 c16 &= 0xFFFF;
30065 c16 += a00 * b16;
30066 c32 += c16 >>> 16;
30067 c16 &= 0xFFFF;
30068 c32 += a32 * b00;
30069 c48 += c32 >>> 16;
30070 c32 &= 0xFFFF;
30071 c32 += a16 * b16;
30072 c48 += c32 >>> 16;
30073 c32 &= 0xFFFF;
30074 c32 += a00 * b32;
30075 c48 += c32 >>> 16;
30076 c32 &= 0xFFFF;
30077 c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
30078 c48 &= 0xFFFF;
30079 return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
30080 };
30081
30082 /**
30083 * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.
30084 * @function
30085 * @param {!Long|number|string} multiplier Multiplier
30086 * @returns {!Long} Product
30087 * @expose
30088 */
30089 Long.prototype.mul = Long.prototype.multiply;
30090
30091 /**
30092 * Returns this Long divided by the specified.
30093 * @param {!Long|number|string} divisor Divisor
30094 * @returns {!Long} Quotient
30095 * @expose
30096 */
30097 Long.prototype.divide = function divide(divisor) {
30098 if (!Long.isLong(divisor))
30099 divisor = Long.fromValue(divisor);
30100 if (divisor.isZero())
30101 throw(new Error('division by zero'));
30102 if (this.isZero())
30103 return this.unsigned ? Long.UZERO : Long.ZERO;
30104 var approx, rem, res;
30105 if (this.equals(Long.MIN_VALUE)) {
30106 if (divisor.equals(Long.ONE) || divisor.equals(Long.NEG_ONE))
30107 return Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
30108 else if (divisor.equals(Long.MIN_VALUE))
30109 return Long.ONE;
30110 else {
30111 // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.
30112 var halfThis = this.shiftRight(1);
30113 approx = halfThis.divide(divisor).shiftLeft(1);
30114 if (approx.equals(Long.ZERO)) {
30115 return divisor.isNegative() ? Long.ONE : Long.NEG_ONE;
30116 } else {
30117 rem = this.subtract(divisor.multiply(approx));
30118 res = approx.add(rem.divide(divisor));
30119 return res;
30120 }
30121 }
30122 } else if (divisor.equals(Long.MIN_VALUE))
30123 return this.unsigned ? Long.UZERO : Long.ZERO;
30124 if (this.isNegative()) {
30125 if (divisor.isNegative())
30126 return this.negate().divide(divisor.negate());
30127 return this.negate().divide(divisor).negate();
30128 } else if (divisor.isNegative())
30129 return this.divide(divisor.negate()).negate();
30130
30131 // Repeat the following until the remainder is less than other: find a
30132 // floating-point that approximates remainder / other *from below*, add this
30133 // into the result, and subtract it from the remainder. It is critical that
30134 // the approximate value is less than or equal to the real value so that the
30135 // remainder never becomes negative.
30136 res = Long.ZERO;
30137 rem = this;
30138 while (rem.greaterThanOrEqual(divisor)) {
30139 // Approximate the result of division. This may be a little greater or
30140 // smaller than the actual value.
30141 approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
30142
30143 // We will tweak the approximate result by changing it in the 48-th digit or
30144 // the smallest non-fractional digit, whichever is larger.
30145 var log2 = Math.ceil(Math.log(approx) / Math.LN2),
30146 delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48),
30147
30148 // Decrease the approximation until it is smaller than the remainder. Note
30149 // that if it is too large, the product overflows and is negative.
30150 approxRes = Long.fromNumber(approx),
30151 approxRem = approxRes.multiply(divisor);
30152 while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
30153 approx -= delta;
30154 approxRes = Long.fromNumber(approx, this.unsigned);
30155 approxRem = approxRes.multiply(divisor);
30156 }
30157
30158 // We know the answer can't be zero... and actually, zero would cause
30159 // infinite recursion since we would make no progress.
30160 if (approxRes.isZero())
30161 approxRes = Long.ONE;
30162
30163 res = res.add(approxRes);
30164 rem = rem.subtract(approxRem);
30165 }
30166 return res;
30167 };
30168
30169 /**
30170 * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.
30171 * @function
30172 * @param {!Long|number|string} divisor Divisor
30173 * @returns {!Long} Quotient
30174 * @expose
30175 */
30176 Long.prototype.div = Long.prototype.divide;
30177
30178 /**
30179 * Returns this Long modulo the specified.
30180 * @param {!Long|number|string} divisor Divisor
30181 * @returns {!Long} Remainder
30182 * @expose
30183 */
30184 Long.prototype.modulo = function modulo(divisor) {
30185 if (!Long.isLong(divisor))
30186 divisor = Long.fromValue(divisor);
30187 return this.subtract(this.divide(divisor).multiply(divisor));
30188 };
30189
30190 /**
30191 * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.
30192 * @function
30193 * @param {!Long|number|string} divisor Divisor
30194 * @returns {!Long} Remainder
30195 * @expose
30196 */
30197 Long.prototype.mod = Long.prototype.modulo;
30198
30199 /**
30200 * Returns the bitwise NOT of this Long.
30201 * @returns {!Long}
30202 * @expose
30203 */
30204 Long.prototype.not = function not() {
30205 return Long.fromBits(~this.low, ~this.high, this.unsigned);
30206 };
30207
30208 /**
30209 * Returns the bitwise AND of this Long and the specified.
30210 * @param {!Long|number|string} other Other Long
30211 * @returns {!Long}
30212 * @expose
30213 */
30214 Long.prototype.and = function and(other) {
30215 if (!Long.isLong(other))
30216 other = Long.fromValue(other);
30217 return Long.fromBits(this.low & other.low, this.high & other.high, this.unsigned);
30218 };
30219
30220 /**
30221 * Returns the bitwise OR of this Long and the specified.
30222 * @param {!Long|number|string} other Other Long
30223 * @returns {!Long}
30224 * @expose
30225 */
30226 Long.prototype.or = function or(other) {
30227 if (!Long.isLong(other))
30228 other = Long.fromValue(other);
30229 return Long.fromBits(this.low | other.low, this.high | other.high, this.unsigned);
30230 };
30231
30232 /**
30233 * Returns the bitwise XOR of this Long and the given one.
30234 * @param {!Long|number|string} other Other Long
30235 * @returns {!Long}
30236 * @expose
30237 */
30238 Long.prototype.xor = function xor(other) {
30239 if (!Long.isLong(other))
30240 other = Long.fromValue(other);
30241 return Long.fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
30242 };
30243
30244 /**
30245 * Returns this Long with bits shifted to the left by the given amount.
30246 * @param {number|!Long} numBits Number of bits
30247 * @returns {!Long} Shifted Long
30248 * @expose
30249 */
30250 Long.prototype.shiftLeft = function shiftLeft(numBits) {
30251 if (Long.isLong(numBits))
30252 numBits = numBits.toInt();
30253 if ((numBits &= 63) === 0)
30254 return this;
30255 else if (numBits < 32)
30256 return Long.fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);
30257 else
30258 return Long.fromBits(0, this.low << (numBits - 32), this.unsigned);
30259 };
30260
30261 /**
30262 * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.
30263 * @function
30264 * @param {number|!Long} numBits Number of bits
30265 * @returns {!Long} Shifted Long
30266 * @expose
30267 */
30268 Long.prototype.shl = Long.prototype.shiftLeft;
30269
30270 /**
30271 * Returns this Long with bits arithmetically shifted to the right by the given amount.
30272 * @param {number|!Long} numBits Number of bits
30273 * @returns {!Long} Shifted Long
30274 * @expose
30275 */
30276 Long.prototype.shiftRight = function shiftRight(numBits) {
30277 if (Long.isLong(numBits))
30278 numBits = numBits.toInt();
30279 if ((numBits &= 63) === 0)
30280 return this;
30281 else if (numBits < 32)
30282 return Long.fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);
30283 else
30284 return Long.fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);
30285 };
30286
30287 /**
30288 * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.
30289 * @function
30290 * @param {number|!Long} numBits Number of bits
30291 * @returns {!Long} Shifted Long
30292 * @expose
30293 */
30294 Long.prototype.shr = Long.prototype.shiftRight;
30295
30296 /**
30297 * Returns this Long with bits logically shifted to the right by the given amount.
30298 * @param {number|!Long} numBits Number of bits
30299 * @returns {!Long} Shifted Long
30300 * @expose
30301 */
30302 Long.prototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
30303 if (Long.isLong(numBits))
30304 numBits = numBits.toInt();
30305 numBits &= 63;
30306 if (numBits === 0)
30307 return this;
30308 else {
30309 var high = this.high;
30310 if (numBits < 32) {
30311 var low = this.low;
30312 return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);
30313 } else if (numBits === 32)
30314 return Long.fromBits(high, 0, this.unsigned);
30315 else
30316 return Long.fromBits(high >>> (numBits - 32), 0, this.unsigned);
30317 }
30318 };
30319
30320 /**
30321 * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.
30322 * @function
30323 * @param {number|!Long} numBits Number of bits
30324 * @returns {!Long} Shifted Long
30325 * @expose
30326 */
30327 Long.prototype.shru = Long.prototype.shiftRightUnsigned;
30328
30329 /**
30330 * Converts this Long to signed.
30331 * @returns {!Long} Signed long
30332 * @expose
30333 */
30334 Long.prototype.toSigned = function toSigned() {
30335 if (!this.unsigned)
30336 return this;
30337 return new Long(this.low, this.high, false);
30338 };
30339
30340 /**
30341 * Converts this Long to unsigned.
30342 * @returns {!Long} Unsigned long
30343 * @expose
30344 */
30345 Long.prototype.toUnsigned = function toUnsigned() {
30346 if (this.unsigned)
30347 return this;
30348 return new Long(this.low, this.high, true);
30349 };
30350
30351 return Long;
30352});
30353
30354},{}],358:[function(require,module,exports){
30355'use strict'
30356var inherits = require('inherits')
30357var HashBase = require('hash-base')
30358var Buffer = require('safe-buffer').Buffer
30359
30360var ARRAY16 = new Array(16)
30361
30362function MD5 () {
30363 HashBase.call(this, 64)
30364
30365 // state
30366 this._a = 0x67452301
30367 this._b = 0xefcdab89
30368 this._c = 0x98badcfe
30369 this._d = 0x10325476
30370}
30371
30372inherits(MD5, HashBase)
30373
30374MD5.prototype._update = function () {
30375 var M = ARRAY16
30376 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
30377
30378 var a = this._a
30379 var b = this._b
30380 var c = this._c
30381 var d = this._d
30382
30383 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
30384 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
30385 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
30386 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
30387 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
30388 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
30389 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
30390 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
30391 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
30392 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
30393 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
30394 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
30395 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
30396 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
30397 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
30398 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
30399
30400 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
30401 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
30402 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
30403 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
30404 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
30405 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
30406 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
30407 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
30408 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
30409 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
30410 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
30411 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
30412 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
30413 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
30414 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
30415 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
30416
30417 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
30418 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
30419 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
30420 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
30421 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
30422 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
30423 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
30424 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
30425 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
30426 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
30427 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
30428 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
30429 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
30430 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
30431 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
30432 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
30433
30434 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
30435 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
30436 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
30437 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
30438 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
30439 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
30440 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
30441 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
30442 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
30443 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
30444 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
30445 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
30446 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
30447 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
30448 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
30449 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
30450
30451 this._a = (this._a + a) | 0
30452 this._b = (this._b + b) | 0
30453 this._c = (this._c + c) | 0
30454 this._d = (this._d + d) | 0
30455}
30456
30457MD5.prototype._digest = function () {
30458 // create padding and handle blocks
30459 this._block[this._blockOffset++] = 0x80
30460 if (this._blockOffset > 56) {
30461 this._block.fill(0, this._blockOffset, 64)
30462 this._update()
30463 this._blockOffset = 0
30464 }
30465
30466 this._block.fill(0, this._blockOffset, 56)
30467 this._block.writeUInt32LE(this._length[0], 56)
30468 this._block.writeUInt32LE(this._length[1], 60)
30469 this._update()
30470
30471 // produce result
30472 var buffer = Buffer.allocUnsafe(16)
30473 buffer.writeInt32LE(this._a, 0)
30474 buffer.writeInt32LE(this._b, 4)
30475 buffer.writeInt32LE(this._c, 8)
30476 buffer.writeInt32LE(this._d, 12)
30477 return buffer
30478}
30479
30480function rotl (x, n) {
30481 return (x << n) | (x >>> (32 - n))
30482}
30483
30484function fnF (a, b, c, d, m, k, s) {
30485 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
30486}
30487
30488function fnG (a, b, c, d, m, k, s) {
30489 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
30490}
30491
30492function fnH (a, b, c, d, m, k, s) {
30493 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
30494}
30495
30496function fnI (a, b, c, d, m, k, s) {
30497 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
30498}
30499
30500module.exports = MD5
30501
30502},{"hash-base":104,"inherits":119,"safe-buffer":398}],359:[function(require,module,exports){
30503var bn = require('bn.js');
30504var brorand = require('brorand');
30505
30506function MillerRabin(rand) {
30507 this.rand = rand || new brorand.Rand();
30508}
30509module.exports = MillerRabin;
30510
30511MillerRabin.create = function create(rand) {
30512 return new MillerRabin(rand);
30513};
30514
30515MillerRabin.prototype._randbelow = function _randbelow(n) {
30516 var len = n.bitLength();
30517 var min_bytes = Math.ceil(len / 8);
30518
30519 // Generage random bytes until a number less than n is found.
30520 // This ensures that 0..n-1 have an equal probability of being selected.
30521 do
30522 var a = new bn(this.rand.generate(min_bytes));
30523 while (a.cmp(n) >= 0);
30524
30525 return a;
30526};
30527
30528MillerRabin.prototype._randrange = function _randrange(start, stop) {
30529 // Generate a random number greater than or equal to start and less than stop.
30530 var size = stop.sub(start);
30531 return start.add(this._randbelow(size));
30532};
30533
30534MillerRabin.prototype.test = function test(n, k, cb) {
30535 var len = n.bitLength();
30536 var red = bn.mont(n);
30537 var rone = new bn(1).toRed(red);
30538
30539 if (!k)
30540 k = Math.max(1, (len / 48) | 0);
30541
30542 // Find d and s, (n - 1) = (2 ^ s) * d;
30543 var n1 = n.subn(1);
30544 for (var s = 0; !n1.testn(s); s++) {}
30545 var d = n.shrn(s);
30546
30547 var rn1 = n1.toRed(red);
30548
30549 var prime = true;
30550 for (; k > 0; k--) {
30551 var a = this._randrange(new bn(2), n1);
30552 if (cb)
30553 cb(a);
30554
30555 var x = a.toRed(red).redPow(d);
30556 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
30557 continue;
30558
30559 for (var i = 1; i < s; i++) {
30560 x = x.redSqr();
30561
30562 if (x.cmp(rone) === 0)
30563 return false;
30564 if (x.cmp(rn1) === 0)
30565 break;
30566 }
30567
30568 if (i === s)
30569 return false;
30570 }
30571
30572 return prime;
30573};
30574
30575MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
30576 var len = n.bitLength();
30577 var red = bn.mont(n);
30578 var rone = new bn(1).toRed(red);
30579
30580 if (!k)
30581 k = Math.max(1, (len / 48) | 0);
30582
30583 // Find d and s, (n - 1) = (2 ^ s) * d;
30584 var n1 = n.subn(1);
30585 for (var s = 0; !n1.testn(s); s++) {}
30586 var d = n.shrn(s);
30587
30588 var rn1 = n1.toRed(red);
30589
30590 for (; k > 0; k--) {
30591 var a = this._randrange(new bn(2), n1);
30592
30593 var g = n.gcd(a);
30594 if (g.cmpn(1) !== 0)
30595 return g;
30596
30597 var x = a.toRed(red).redPow(d);
30598 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
30599 continue;
30600
30601 for (var i = 1; i < s; i++) {
30602 x = x.redSqr();
30603
30604 if (x.cmp(rone) === 0)
30605 return x.fromRed().subn(1).gcd(n);
30606 if (x.cmp(rn1) === 0)
30607 break;
30608 }
30609
30610 if (i === s) {
30611 x = x.redSqr();
30612 return x.fromRed().subn(1).gcd(n);
30613 }
30614 }
30615
30616 return false;
30617};
30618
30619},{"bn.js":18,"brorand":19}],360:[function(require,module,exports){
30620module.exports = assert;
30621
30622function assert(val, msg) {
30623 if (!val)
30624 throw new Error(msg || 'Assertion failed');
30625}
30626
30627assert.equal = function assertEqual(l, r, msg) {
30628 if (l != r)
30629 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
30630};
30631
30632},{}],361:[function(require,module,exports){
30633'use strict';
30634
30635var utils = exports;
30636
30637function toArray(msg, enc) {
30638 if (Array.isArray(msg))
30639 return msg.slice();
30640 if (!msg)
30641 return [];
30642 var res = [];
30643 if (typeof msg !== 'string') {
30644 for (var i = 0; i < msg.length; i++)
30645 res[i] = msg[i] | 0;
30646 return res;
30647 }
30648 if (enc === 'hex') {
30649 msg = msg.replace(/[^a-z0-9]+/ig, '');
30650 if (msg.length % 2 !== 0)
30651 msg = '0' + msg;
30652 for (var i = 0; i < msg.length; i += 2)
30653 res.push(parseInt(msg[i] + msg[i + 1], 16));
30654 } else {
30655 for (var i = 0; i < msg.length; i++) {
30656 var c = msg.charCodeAt(i);
30657 var hi = c >> 8;
30658 var lo = c & 0xff;
30659 if (hi)
30660 res.push(hi, lo);
30661 else
30662 res.push(lo);
30663 }
30664 }
30665 return res;
30666}
30667utils.toArray = toArray;
30668
30669function zero2(word) {
30670 if (word.length === 1)
30671 return '0' + word;
30672 else
30673 return word;
30674}
30675utils.zero2 = zero2;
30676
30677function toHex(msg) {
30678 var res = '';
30679 for (var i = 0; i < msg.length; i++)
30680 res += zero2(msg[i].toString(16));
30681 return res;
30682}
30683utils.toHex = toHex;
30684
30685utils.encode = function encode(arr, enc) {
30686 if (enc === 'hex')
30687 return toHex(arr);
30688 else
30689 return arr;
30690};
30691
30692},{}],362:[function(require,module,exports){
30693module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
30694"2.16.840.1.101.3.4.1.2": "aes-128-cbc",
30695"2.16.840.1.101.3.4.1.3": "aes-128-ofb",
30696"2.16.840.1.101.3.4.1.4": "aes-128-cfb",
30697"2.16.840.1.101.3.4.1.21": "aes-192-ecb",
30698"2.16.840.1.101.3.4.1.22": "aes-192-cbc",
30699"2.16.840.1.101.3.4.1.23": "aes-192-ofb",
30700"2.16.840.1.101.3.4.1.24": "aes-192-cfb",
30701"2.16.840.1.101.3.4.1.41": "aes-256-ecb",
30702"2.16.840.1.101.3.4.1.42": "aes-256-cbc",
30703"2.16.840.1.101.3.4.1.43": "aes-256-ofb",
30704"2.16.840.1.101.3.4.1.44": "aes-256-cfb"
30705}
30706},{}],363:[function(require,module,exports){
30707// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
30708// Fedor, you are amazing.
30709'use strict'
30710
30711var asn1 = require('asn1.js')
30712
30713exports.certificate = require('./certificate')
30714
30715var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
30716 this.seq().obj(
30717 this.key('version').int(),
30718 this.key('modulus').int(),
30719 this.key('publicExponent').int(),
30720 this.key('privateExponent').int(),
30721 this.key('prime1').int(),
30722 this.key('prime2').int(),
30723 this.key('exponent1').int(),
30724 this.key('exponent2').int(),
30725 this.key('coefficient').int()
30726 )
30727})
30728exports.RSAPrivateKey = RSAPrivateKey
30729
30730var RSAPublicKey = asn1.define('RSAPublicKey', function () {
30731 this.seq().obj(
30732 this.key('modulus').int(),
30733 this.key('publicExponent').int()
30734 )
30735})
30736exports.RSAPublicKey = RSAPublicKey
30737
30738var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
30739 this.seq().obj(
30740 this.key('algorithm').use(AlgorithmIdentifier),
30741 this.key('subjectPublicKey').bitstr()
30742 )
30743})
30744exports.PublicKey = PublicKey
30745
30746var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
30747 this.seq().obj(
30748 this.key('algorithm').objid(),
30749 this.key('none').null_().optional(),
30750 this.key('curve').objid().optional(),
30751 this.key('params').seq().obj(
30752 this.key('p').int(),
30753 this.key('q').int(),
30754 this.key('g').int()
30755 ).optional()
30756 )
30757})
30758
30759var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
30760 this.seq().obj(
30761 this.key('version').int(),
30762 this.key('algorithm').use(AlgorithmIdentifier),
30763 this.key('subjectPrivateKey').octstr()
30764 )
30765})
30766exports.PrivateKey = PrivateKeyInfo
30767var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
30768 this.seq().obj(
30769 this.key('algorithm').seq().obj(
30770 this.key('id').objid(),
30771 this.key('decrypt').seq().obj(
30772 this.key('kde').seq().obj(
30773 this.key('id').objid(),
30774 this.key('kdeparams').seq().obj(
30775 this.key('salt').octstr(),
30776 this.key('iters').int()
30777 )
30778 ),
30779 this.key('cipher').seq().obj(
30780 this.key('algo').objid(),
30781 this.key('iv').octstr()
30782 )
30783 )
30784 ),
30785 this.key('subjectPrivateKey').octstr()
30786 )
30787})
30788
30789exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
30790
30791var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
30792 this.seq().obj(
30793 this.key('version').int(),
30794 this.key('p').int(),
30795 this.key('q').int(),
30796 this.key('g').int(),
30797 this.key('pub_key').int(),
30798 this.key('priv_key').int()
30799 )
30800})
30801exports.DSAPrivateKey = DSAPrivateKey
30802
30803exports.DSAparam = asn1.define('DSAparam', function () {
30804 this.int()
30805})
30806
30807var ECPrivateKey = asn1.define('ECPrivateKey', function () {
30808 this.seq().obj(
30809 this.key('version').int(),
30810 this.key('privateKey').octstr(),
30811 this.key('parameters').optional().explicit(0).use(ECParameters),
30812 this.key('publicKey').optional().explicit(1).bitstr()
30813 )
30814})
30815exports.ECPrivateKey = ECPrivateKey
30816
30817var ECParameters = asn1.define('ECParameters', function () {
30818 this.choice({
30819 namedCurve: this.objid()
30820 })
30821})
30822
30823exports.signature = asn1.define('signature', function () {
30824 this.seq().obj(
30825 this.key('r').int(),
30826 this.key('s').int()
30827 )
30828})
30829
30830},{"./certificate":364,"asn1.js":1}],364:[function(require,module,exports){
30831// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
30832// thanks to @Rantanen
30833
30834'use strict'
30835
30836var asn = require('asn1.js')
30837
30838var Time = asn.define('Time', function () {
30839 this.choice({
30840 utcTime: this.utctime(),
30841 generalTime: this.gentime()
30842 })
30843})
30844
30845var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
30846 this.seq().obj(
30847 this.key('type').objid(),
30848 this.key('value').any()
30849 )
30850})
30851
30852var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
30853 this.seq().obj(
30854 this.key('algorithm').objid(),
30855 this.key('parameters').optional()
30856 )
30857})
30858
30859var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
30860 this.seq().obj(
30861 this.key('algorithm').use(AlgorithmIdentifier),
30862 this.key('subjectPublicKey').bitstr()
30863 )
30864})
30865
30866var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
30867 this.setof(AttributeTypeValue)
30868})
30869
30870var RDNSequence = asn.define('RDNSequence', function () {
30871 this.seqof(RelativeDistinguishedName)
30872})
30873
30874var Name = asn.define('Name', function () {
30875 this.choice({
30876 rdnSequence: this.use(RDNSequence)
30877 })
30878})
30879
30880var Validity = asn.define('Validity', function () {
30881 this.seq().obj(
30882 this.key('notBefore').use(Time),
30883 this.key('notAfter').use(Time)
30884 )
30885})
30886
30887var Extension = asn.define('Extension', function () {
30888 this.seq().obj(
30889 this.key('extnID').objid(),
30890 this.key('critical').bool().def(false),
30891 this.key('extnValue').octstr()
30892 )
30893})
30894
30895var TBSCertificate = asn.define('TBSCertificate', function () {
30896 this.seq().obj(
30897 this.key('version').explicit(0).int(),
30898 this.key('serialNumber').int(),
30899 this.key('signature').use(AlgorithmIdentifier),
30900 this.key('issuer').use(Name),
30901 this.key('validity').use(Validity),
30902 this.key('subject').use(Name),
30903 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
30904 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
30905 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
30906 this.key('extensions').explicit(3).seqof(Extension).optional()
30907 )
30908})
30909
30910var X509Certificate = asn.define('X509Certificate', function () {
30911 this.seq().obj(
30912 this.key('tbsCertificate').use(TBSCertificate),
30913 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
30914 this.key('signatureValue').bitstr()
30915 )
30916})
30917
30918module.exports = X509Certificate
30919
30920},{"asn1.js":1}],365:[function(require,module,exports){
30921(function (Buffer){
30922// adapted from https://github.com/apatil/pemstrip
30923var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m
30924var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----/m
30925var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m
30926var evp = require('evp_bytestokey')
30927var ciphers = require('browserify-aes')
30928module.exports = function (okey, password) {
30929 var key = okey.toString()
30930 var match = key.match(findProc)
30931 var decrypted
30932 if (!match) {
30933 var match2 = key.match(fullRegex)
30934 decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64')
30935 } else {
30936 var suite = 'aes' + match[1]
30937 var iv = new Buffer(match[2], 'hex')
30938 var cipherText = new Buffer(match[3].replace(/[\r\n]/g, ''), 'base64')
30939 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
30940 var out = []
30941 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
30942 out.push(cipher.update(cipherText))
30943 out.push(cipher.final())
30944 decrypted = Buffer.concat(out)
30945 }
30946 var tag = key.match(startRegex)[1]
30947 return {
30948 tag: tag,
30949 data: decrypted
30950 }
30951}
30952
30953}).call(this,require("buffer").Buffer)
30954},{"browserify-aes":23,"buffer":50,"evp_bytestokey":103}],366:[function(require,module,exports){
30955(function (Buffer){
30956var asn1 = require('./asn1')
30957var aesid = require('./aesid.json')
30958var fixProc = require('./fixProc')
30959var ciphers = require('browserify-aes')
30960var compat = require('pbkdf2')
30961module.exports = parseKeys
30962
30963function parseKeys (buffer) {
30964 var password
30965 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
30966 password = buffer.passphrase
30967 buffer = buffer.key
30968 }
30969 if (typeof buffer === 'string') {
30970 buffer = new Buffer(buffer)
30971 }
30972
30973 var stripped = fixProc(buffer, password)
30974
30975 var type = stripped.tag
30976 var data = stripped.data
30977 var subtype, ndata
30978 switch (type) {
30979 case 'CERTIFICATE':
30980 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
30981 // falls through
30982 case 'PUBLIC KEY':
30983 if (!ndata) {
30984 ndata = asn1.PublicKey.decode(data, 'der')
30985 }
30986 subtype = ndata.algorithm.algorithm.join('.')
30987 switch (subtype) {
30988 case '1.2.840.113549.1.1.1':
30989 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
30990 case '1.2.840.10045.2.1':
30991 ndata.subjectPrivateKey = ndata.subjectPublicKey
30992 return {
30993 type: 'ec',
30994 data: ndata
30995 }
30996 case '1.2.840.10040.4.1':
30997 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
30998 return {
30999 type: 'dsa',
31000 data: ndata.algorithm.params
31001 }
31002 default: throw new Error('unknown key id ' + subtype)
31003 }
31004 throw new Error('unknown key type ' + type)
31005 case 'ENCRYPTED PRIVATE KEY':
31006 data = asn1.EncryptedPrivateKey.decode(data, 'der')
31007 data = decrypt(data, password)
31008 // falls through
31009 case 'PRIVATE KEY':
31010 ndata = asn1.PrivateKey.decode(data, 'der')
31011 subtype = ndata.algorithm.algorithm.join('.')
31012 switch (subtype) {
31013 case '1.2.840.113549.1.1.1':
31014 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
31015 case '1.2.840.10045.2.1':
31016 return {
31017 curve: ndata.algorithm.curve,
31018 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
31019 }
31020 case '1.2.840.10040.4.1':
31021 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
31022 return {
31023 type: 'dsa',
31024 params: ndata.algorithm.params
31025 }
31026 default: throw new Error('unknown key id ' + subtype)
31027 }
31028 throw new Error('unknown key type ' + type)
31029 case 'RSA PUBLIC KEY':
31030 return asn1.RSAPublicKey.decode(data, 'der')
31031 case 'RSA PRIVATE KEY':
31032 return asn1.RSAPrivateKey.decode(data, 'der')
31033 case 'DSA PRIVATE KEY':
31034 return {
31035 type: 'dsa',
31036 params: asn1.DSAPrivateKey.decode(data, 'der')
31037 }
31038 case 'EC PRIVATE KEY':
31039 data = asn1.ECPrivateKey.decode(data, 'der')
31040 return {
31041 curve: data.parameters.value,
31042 privateKey: data.privateKey
31043 }
31044 default: throw new Error('unknown key type ' + type)
31045 }
31046}
31047parseKeys.signature = asn1.signature
31048function decrypt (data, password) {
31049 var salt = data.algorithm.decrypt.kde.kdeparams.salt
31050 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
31051 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
31052 var iv = data.algorithm.decrypt.cipher.iv
31053 var cipherText = data.subjectPrivateKey
31054 var keylen = parseInt(algo.split('-')[1], 10) / 8
31055 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
31056 var cipher = ciphers.createDecipheriv(algo, key, iv)
31057 var out = []
31058 out.push(cipher.update(cipherText))
31059 out.push(cipher.final())
31060 return Buffer.concat(out)
31061}
31062
31063}).call(this,require("buffer").Buffer)
31064},{"./aesid.json":362,"./asn1":363,"./fixProc":365,"browserify-aes":23,"buffer":50,"pbkdf2":368}],367:[function(require,module,exports){
31065(function (process){
31066// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
31067// backported and transplited with Babel, with backwards-compat fixes
31068
31069// Copyright Joyent, Inc. and other Node contributors.
31070//
31071// Permission is hereby granted, free of charge, to any person obtaining a
31072// copy of this software and associated documentation files (the
31073// "Software"), to deal in the Software without restriction, including
31074// without limitation the rights to use, copy, modify, merge, publish,
31075// distribute, sublicense, and/or sell copies of the Software, and to permit
31076// persons to whom the Software is furnished to do so, subject to the
31077// following conditions:
31078//
31079// The above copyright notice and this permission notice shall be included
31080// in all copies or substantial portions of the Software.
31081//
31082// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
31083// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31084// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
31085// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
31086// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
31087// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
31088// USE OR OTHER DEALINGS IN THE SOFTWARE.
31089
31090// resolves . and .. elements in a path array with directory names there
31091// must be no slashes, empty elements, or device names (c:\) in the array
31092// (so also no leading and trailing slashes - it does not distinguish
31093// relative and absolute paths)
31094function normalizeArray(parts, allowAboveRoot) {
31095 // if the path tries to go above the root, `up` ends up > 0
31096 var up = 0;
31097 for (var i = parts.length - 1; i >= 0; i--) {
31098 var last = parts[i];
31099 if (last === '.') {
31100 parts.splice(i, 1);
31101 } else if (last === '..') {
31102 parts.splice(i, 1);
31103 up++;
31104 } else if (up) {
31105 parts.splice(i, 1);
31106 up--;
31107 }
31108 }
31109
31110 // if the path is allowed to go above the root, restore leading ..s
31111 if (allowAboveRoot) {
31112 for (; up--; up) {
31113 parts.unshift('..');
31114 }
31115 }
31116
31117 return parts;
31118}
31119
31120// path.resolve([from ...], to)
31121// posix version
31122exports.resolve = function() {
31123 var resolvedPath = '',
31124 resolvedAbsolute = false;
31125
31126 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
31127 var path = (i >= 0) ? arguments[i] : process.cwd();
31128
31129 // Skip empty and invalid entries
31130 if (typeof path !== 'string') {
31131 throw new TypeError('Arguments to path.resolve must be strings');
31132 } else if (!path) {
31133 continue;
31134 }
31135
31136 resolvedPath = path + '/' + resolvedPath;
31137 resolvedAbsolute = path.charAt(0) === '/';
31138 }
31139
31140 // At this point the path should be resolved to a full absolute path, but
31141 // handle relative paths to be safe (might happen when process.cwd() fails)
31142
31143 // Normalize the path
31144 resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
31145 return !!p;
31146 }), !resolvedAbsolute).join('/');
31147
31148 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
31149};
31150
31151// path.normalize(path)
31152// posix version
31153exports.normalize = function(path) {
31154 var isAbsolute = exports.isAbsolute(path),
31155 trailingSlash = substr(path, -1) === '/';
31156
31157 // Normalize the path
31158 path = normalizeArray(filter(path.split('/'), function(p) {
31159 return !!p;
31160 }), !isAbsolute).join('/');
31161
31162 if (!path && !isAbsolute) {
31163 path = '.';
31164 }
31165 if (path && trailingSlash) {
31166 path += '/';
31167 }
31168
31169 return (isAbsolute ? '/' : '') + path;
31170};
31171
31172// posix version
31173exports.isAbsolute = function(path) {
31174 return path.charAt(0) === '/';
31175};
31176
31177// posix version
31178exports.join = function() {
31179 var paths = Array.prototype.slice.call(arguments, 0);
31180 return exports.normalize(filter(paths, function(p, index) {
31181 if (typeof p !== 'string') {
31182 throw new TypeError('Arguments to path.join must be strings');
31183 }
31184 return p;
31185 }).join('/'));
31186};
31187
31188
31189// path.relative(from, to)
31190// posix version
31191exports.relative = function(from, to) {
31192 from = exports.resolve(from).substr(1);
31193 to = exports.resolve(to).substr(1);
31194
31195 function trim(arr) {
31196 var start = 0;
31197 for (; start < arr.length; start++) {
31198 if (arr[start] !== '') break;
31199 }
31200
31201 var end = arr.length - 1;
31202 for (; end >= 0; end--) {
31203 if (arr[end] !== '') break;
31204 }
31205
31206 if (start > end) return [];
31207 return arr.slice(start, end - start + 1);
31208 }
31209
31210 var fromParts = trim(from.split('/'));
31211 var toParts = trim(to.split('/'));
31212
31213 var length = Math.min(fromParts.length, toParts.length);
31214 var samePartsLength = length;
31215 for (var i = 0; i < length; i++) {
31216 if (fromParts[i] !== toParts[i]) {
31217 samePartsLength = i;
31218 break;
31219 }
31220 }
31221
31222 var outputParts = [];
31223 for (var i = samePartsLength; i < fromParts.length; i++) {
31224 outputParts.push('..');
31225 }
31226
31227 outputParts = outputParts.concat(toParts.slice(samePartsLength));
31228
31229 return outputParts.join('/');
31230};
31231
31232exports.sep = '/';
31233exports.delimiter = ':';
31234
31235exports.dirname = function (path) {
31236 if (typeof path !== 'string') path = path + '';
31237 if (path.length === 0) return '.';
31238 var code = path.charCodeAt(0);
31239 var hasRoot = code === 47 /*/*/;
31240 var end = -1;
31241 var matchedSlash = true;
31242 for (var i = path.length - 1; i >= 1; --i) {
31243 code = path.charCodeAt(i);
31244 if (code === 47 /*/*/) {
31245 if (!matchedSlash) {
31246 end = i;
31247 break;
31248 }
31249 } else {
31250 // We saw the first non-path separator
31251 matchedSlash = false;
31252 }
31253 }
31254
31255 if (end === -1) return hasRoot ? '/' : '.';
31256 if (hasRoot && end === 1) {
31257 // return '//';
31258 // Backwards-compat fix:
31259 return '/';
31260 }
31261 return path.slice(0, end);
31262};
31263
31264function basename(path) {
31265 if (typeof path !== 'string') path = path + '';
31266
31267 var start = 0;
31268 var end = -1;
31269 var matchedSlash = true;
31270 var i;
31271
31272 for (i = path.length - 1; i >= 0; --i) {
31273 if (path.charCodeAt(i) === 47 /*/*/) {
31274 // If we reached a path separator that was not part of a set of path
31275 // separators at the end of the string, stop now
31276 if (!matchedSlash) {
31277 start = i + 1;
31278 break;
31279 }
31280 } else if (end === -1) {
31281 // We saw the first non-path separator, mark this as the end of our
31282 // path component
31283 matchedSlash = false;
31284 end = i + 1;
31285 }
31286 }
31287
31288 if (end === -1) return '';
31289 return path.slice(start, end);
31290}
31291
31292// Uses a mixed approach for backwards-compatibility, as ext behavior changed
31293// in new Node.js versions, so only basename() above is backported here
31294exports.basename = function (path, ext) {
31295 var f = basename(path);
31296 if (ext && f.substr(-1 * ext.length) === ext) {
31297 f = f.substr(0, f.length - ext.length);
31298 }
31299 return f;
31300};
31301
31302exports.extname = function (path) {
31303 if (typeof path !== 'string') path = path + '';
31304 var startDot = -1;
31305 var startPart = 0;
31306 var end = -1;
31307 var matchedSlash = true;
31308 // Track the state of characters (if any) we see before our first dot and
31309 // after any path separator we find
31310 var preDotState = 0;
31311 for (var i = path.length - 1; i >= 0; --i) {
31312 var code = path.charCodeAt(i);
31313 if (code === 47 /*/*/) {
31314 // If we reached a path separator that was not part of a set of path
31315 // separators at the end of the string, stop now
31316 if (!matchedSlash) {
31317 startPart = i + 1;
31318 break;
31319 }
31320 continue;
31321 }
31322 if (end === -1) {
31323 // We saw the first non-path separator, mark this as the end of our
31324 // extension
31325 matchedSlash = false;
31326 end = i + 1;
31327 }
31328 if (code === 46 /*.*/) {
31329 // If this is our first dot, mark it as the start of our extension
31330 if (startDot === -1)
31331 startDot = i;
31332 else if (preDotState !== 1)
31333 preDotState = 1;
31334 } else if (startDot !== -1) {
31335 // We saw a non-dot and non-path separator before our dot, so we should
31336 // have a good chance at having a non-empty extension
31337 preDotState = -1;
31338 }
31339 }
31340
31341 if (startDot === -1 || end === -1 ||
31342 // We saw a non-dot character immediately before the dot
31343 preDotState === 0 ||
31344 // The (right-most) trimmed path component is exactly '..'
31345 preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
31346 return '';
31347 }
31348 return path.slice(startDot, end);
31349};
31350
31351function filter (xs, f) {
31352 if (xs.filter) return xs.filter(f);
31353 var res = [];
31354 for (var i = 0; i < xs.length; i++) {
31355 if (f(xs[i], i, xs)) res.push(xs[i]);
31356 }
31357 return res;
31358}
31359
31360// String.prototype.substr - negative index don't work in IE8
31361var substr = 'ab'.substr(-1) === 'b'
31362 ? function (str, start, len) { return str.substr(start, len) }
31363 : function (str, start, len) {
31364 if (start < 0) start = str.length + start;
31365 return str.substr(start, len);
31366 }
31367;
31368
31369}).call(this,require('_process'))
31370},{"_process":374}],368:[function(require,module,exports){
31371exports.pbkdf2 = require('./lib/async')
31372exports.pbkdf2Sync = require('./lib/sync')
31373
31374},{"./lib/async":369,"./lib/sync":372}],369:[function(require,module,exports){
31375(function (process,global){
31376var checkParameters = require('./precondition')
31377var defaultEncoding = require('./default-encoding')
31378var sync = require('./sync')
31379var Buffer = require('safe-buffer').Buffer
31380
31381var ZERO_BUF
31382var subtle = global.crypto && global.crypto.subtle
31383var toBrowser = {
31384 'sha': 'SHA-1',
31385 'sha-1': 'SHA-1',
31386 'sha1': 'SHA-1',
31387 'sha256': 'SHA-256',
31388 'sha-256': 'SHA-256',
31389 'sha384': 'SHA-384',
31390 'sha-384': 'SHA-384',
31391 'sha-512': 'SHA-512',
31392 'sha512': 'SHA-512'
31393}
31394var checks = []
31395function checkNative (algo) {
31396 if (global.process && !global.process.browser) {
31397 return Promise.resolve(false)
31398 }
31399 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
31400 return Promise.resolve(false)
31401 }
31402 if (checks[algo] !== undefined) {
31403 return checks[algo]
31404 }
31405 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
31406 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
31407 .then(function () {
31408 return true
31409 }).catch(function () {
31410 return false
31411 })
31412 checks[algo] = prom
31413 return prom
31414}
31415
31416function browserPbkdf2 (password, salt, iterations, length, algo) {
31417 return subtle.importKey(
31418 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
31419 ).then(function (key) {
31420 return subtle.deriveBits({
31421 name: 'PBKDF2',
31422 salt: salt,
31423 iterations: iterations,
31424 hash: {
31425 name: algo
31426 }
31427 }, key, length << 3)
31428 }).then(function (res) {
31429 return Buffer.from(res)
31430 })
31431}
31432
31433function resolvePromise (promise, callback) {
31434 promise.then(function (out) {
31435 process.nextTick(function () {
31436 callback(null, out)
31437 })
31438 }, function (e) {
31439 process.nextTick(function () {
31440 callback(e)
31441 })
31442 })
31443}
31444module.exports = function (password, salt, iterations, keylen, digest, callback) {
31445 if (typeof digest === 'function') {
31446 callback = digest
31447 digest = undefined
31448 }
31449
31450 digest = digest || 'sha1'
31451 var algo = toBrowser[digest.toLowerCase()]
31452
31453 if (!algo || typeof global.Promise !== 'function') {
31454 return process.nextTick(function () {
31455 var out
31456 try {
31457 out = sync(password, salt, iterations, keylen, digest)
31458 } catch (e) {
31459 return callback(e)
31460 }
31461 callback(null, out)
31462 })
31463 }
31464
31465 checkParameters(password, salt, iterations, keylen)
31466 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
31467 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
31468 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
31469
31470 resolvePromise(checkNative(algo).then(function (resp) {
31471 if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)
31472
31473 return sync(password, salt, iterations, keylen, digest)
31474 }), callback)
31475}
31476
31477}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
31478},{"./default-encoding":370,"./precondition":371,"./sync":372,"_process":374,"safe-buffer":398}],370:[function(require,module,exports){
31479(function (process){
31480var defaultEncoding
31481/* istanbul ignore next */
31482if (process.browser) {
31483 defaultEncoding = 'utf-8'
31484} else {
31485 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
31486
31487 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
31488}
31489module.exports = defaultEncoding
31490
31491}).call(this,require('_process'))
31492},{"_process":374}],371:[function(require,module,exports){
31493(function (Buffer){
31494var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
31495
31496function checkBuffer (buf, name) {
31497 if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {
31498 throw new TypeError(name + ' must be a buffer or string')
31499 }
31500}
31501
31502module.exports = function (password, salt, iterations, keylen) {
31503 checkBuffer(password, 'Password')
31504 checkBuffer(salt, 'Salt')
31505
31506 if (typeof iterations !== 'number') {
31507 throw new TypeError('Iterations not a number')
31508 }
31509
31510 if (iterations < 0) {
31511 throw new TypeError('Bad iterations')
31512 }
31513
31514 if (typeof keylen !== 'number') {
31515 throw new TypeError('Key length not a number')
31516 }
31517
31518 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
31519 throw new TypeError('Bad key length')
31520 }
31521}
31522
31523}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
31524},{"../../is-buffer/index.js":120}],372:[function(require,module,exports){
31525var md5 = require('create-hash/md5')
31526var RIPEMD160 = require('ripemd160')
31527var sha = require('sha.js')
31528
31529var checkParameters = require('./precondition')
31530var defaultEncoding = require('./default-encoding')
31531var Buffer = require('safe-buffer').Buffer
31532var ZEROS = Buffer.alloc(128)
31533var sizes = {
31534 md5: 16,
31535 sha1: 20,
31536 sha224: 28,
31537 sha256: 32,
31538 sha384: 48,
31539 sha512: 64,
31540 rmd160: 20,
31541 ripemd160: 20
31542}
31543
31544function Hmac (alg, key, saltLen) {
31545 var hash = getDigest(alg)
31546 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
31547
31548 if (key.length > blocksize) {
31549 key = hash(key)
31550 } else if (key.length < blocksize) {
31551 key = Buffer.concat([key, ZEROS], blocksize)
31552 }
31553
31554 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
31555 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
31556 for (var i = 0; i < blocksize; i++) {
31557 ipad[i] = key[i] ^ 0x36
31558 opad[i] = key[i] ^ 0x5C
31559 }
31560
31561 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
31562 ipad.copy(ipad1, 0, 0, blocksize)
31563 this.ipad1 = ipad1
31564 this.ipad2 = ipad
31565 this.opad = opad
31566 this.alg = alg
31567 this.blocksize = blocksize
31568 this.hash = hash
31569 this.size = sizes[alg]
31570}
31571
31572Hmac.prototype.run = function (data, ipad) {
31573 data.copy(ipad, this.blocksize)
31574 var h = this.hash(ipad)
31575 h.copy(this.opad, this.blocksize)
31576 return this.hash(this.opad)
31577}
31578
31579function getDigest (alg) {
31580 function shaFunc (data) {
31581 return sha(alg).update(data).digest()
31582 }
31583 function rmd160Func (data) {
31584 return new RIPEMD160().update(data).digest()
31585 }
31586
31587 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func
31588 if (alg === 'md5') return md5
31589 return shaFunc
31590}
31591
31592function pbkdf2 (password, salt, iterations, keylen, digest) {
31593 checkParameters(password, salt, iterations, keylen)
31594
31595 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
31596 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
31597
31598 digest = digest || 'sha1'
31599
31600 var hmac = new Hmac(digest, password, salt.length)
31601
31602 var DK = Buffer.allocUnsafe(keylen)
31603 var block1 = Buffer.allocUnsafe(salt.length + 4)
31604 salt.copy(block1, 0, 0, salt.length)
31605
31606 var destPos = 0
31607 var hLen = sizes[digest]
31608 var l = Math.ceil(keylen / hLen)
31609
31610 for (var i = 1; i <= l; i++) {
31611 block1.writeUInt32BE(i, salt.length)
31612
31613 var T = hmac.run(block1, hmac.ipad1)
31614 var U = T
31615
31616 for (var j = 1; j < iterations; j++) {
31617 U = hmac.run(U, hmac.ipad2)
31618 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
31619 }
31620
31621 T.copy(DK, destPos)
31622 destPos += hLen
31623 }
31624
31625 return DK
31626}
31627
31628module.exports = pbkdf2
31629
31630},{"./default-encoding":370,"./precondition":371,"create-hash/md5":69,"ripemd160":397,"safe-buffer":398,"sha.js":400}],373:[function(require,module,exports){
31631(function (process){
31632'use strict';
31633
31634if (!process.version ||
31635 process.version.indexOf('v0.') === 0 ||
31636 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
31637 module.exports = { nextTick: nextTick };
31638} else {
31639 module.exports = process
31640}
31641
31642function nextTick(fn, arg1, arg2, arg3) {
31643 if (typeof fn !== 'function') {
31644 throw new TypeError('"callback" argument must be a function');
31645 }
31646 var len = arguments.length;
31647 var args, i;
31648 switch (len) {
31649 case 0:
31650 case 1:
31651 return process.nextTick(fn);
31652 case 2:
31653 return process.nextTick(function afterTickOne() {
31654 fn.call(null, arg1);
31655 });
31656 case 3:
31657 return process.nextTick(function afterTickTwo() {
31658 fn.call(null, arg1, arg2);
31659 });
31660 case 4:
31661 return process.nextTick(function afterTickThree() {
31662 fn.call(null, arg1, arg2, arg3);
31663 });
31664 default:
31665 args = new Array(len - 1);
31666 i = 0;
31667 while (i < args.length) {
31668 args[i++] = arguments[i];
31669 }
31670 return process.nextTick(function afterTick() {
31671 fn.apply(null, args);
31672 });
31673 }
31674}
31675
31676
31677}).call(this,require('_process'))
31678},{"_process":374}],374:[function(require,module,exports){
31679// shim for using process in browser
31680var process = module.exports = {};
31681
31682// cached from whatever global is present so that test runners that stub it
31683// don't break things. But we need to wrap it in a try catch in case it is
31684// wrapped in strict mode code which doesn't define any globals. It's inside a
31685// function because try/catches deoptimize in certain engines.
31686
31687var cachedSetTimeout;
31688var cachedClearTimeout;
31689
31690function defaultSetTimout() {
31691 throw new Error('setTimeout has not been defined');
31692}
31693function defaultClearTimeout () {
31694 throw new Error('clearTimeout has not been defined');
31695}
31696(function () {
31697 try {
31698 if (typeof setTimeout === 'function') {
31699 cachedSetTimeout = setTimeout;
31700 } else {
31701 cachedSetTimeout = defaultSetTimout;
31702 }
31703 } catch (e) {
31704 cachedSetTimeout = defaultSetTimout;
31705 }
31706 try {
31707 if (typeof clearTimeout === 'function') {
31708 cachedClearTimeout = clearTimeout;
31709 } else {
31710 cachedClearTimeout = defaultClearTimeout;
31711 }
31712 } catch (e) {
31713 cachedClearTimeout = defaultClearTimeout;
31714 }
31715} ())
31716function runTimeout(fun) {
31717 if (cachedSetTimeout === setTimeout) {
31718 //normal enviroments in sane situations
31719 return setTimeout(fun, 0);
31720 }
31721 // if setTimeout wasn't available but was latter defined
31722 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
31723 cachedSetTimeout = setTimeout;
31724 return setTimeout(fun, 0);
31725 }
31726 try {
31727 // when when somebody has screwed with setTimeout but no I.E. maddness
31728 return cachedSetTimeout(fun, 0);
31729 } catch(e){
31730 try {
31731 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
31732 return cachedSetTimeout.call(null, fun, 0);
31733 } catch(e){
31734 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
31735 return cachedSetTimeout.call(this, fun, 0);
31736 }
31737 }
31738
31739
31740}
31741function runClearTimeout(marker) {
31742 if (cachedClearTimeout === clearTimeout) {
31743 //normal enviroments in sane situations
31744 return clearTimeout(marker);
31745 }
31746 // if clearTimeout wasn't available but was latter defined
31747 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
31748 cachedClearTimeout = clearTimeout;
31749 return clearTimeout(marker);
31750 }
31751 try {
31752 // when when somebody has screwed with setTimeout but no I.E. maddness
31753 return cachedClearTimeout(marker);
31754 } catch (e){
31755 try {
31756 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
31757 return cachedClearTimeout.call(null, marker);
31758 } catch (e){
31759 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
31760 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
31761 return cachedClearTimeout.call(this, marker);
31762 }
31763 }
31764
31765
31766
31767}
31768var queue = [];
31769var draining = false;
31770var currentQueue;
31771var queueIndex = -1;
31772
31773function cleanUpNextTick() {
31774 if (!draining || !currentQueue) {
31775 return;
31776 }
31777 draining = false;
31778 if (currentQueue.length) {
31779 queue = currentQueue.concat(queue);
31780 } else {
31781 queueIndex = -1;
31782 }
31783 if (queue.length) {
31784 drainQueue();
31785 }
31786}
31787
31788function drainQueue() {
31789 if (draining) {
31790 return;
31791 }
31792 var timeout = runTimeout(cleanUpNextTick);
31793 draining = true;
31794
31795 var len = queue.length;
31796 while(len) {
31797 currentQueue = queue;
31798 queue = [];
31799 while (++queueIndex < len) {
31800 if (currentQueue) {
31801 currentQueue[queueIndex].run();
31802 }
31803 }
31804 queueIndex = -1;
31805 len = queue.length;
31806 }
31807 currentQueue = null;
31808 draining = false;
31809 runClearTimeout(timeout);
31810}
31811
31812process.nextTick = function (fun) {
31813 var args = new Array(arguments.length - 1);
31814 if (arguments.length > 1) {
31815 for (var i = 1; i < arguments.length; i++) {
31816 args[i - 1] = arguments[i];
31817 }
31818 }
31819 queue.push(new Item(fun, args));
31820 if (queue.length === 1 && !draining) {
31821 runTimeout(drainQueue);
31822 }
31823};
31824
31825// v8 likes predictible objects
31826function Item(fun, array) {
31827 this.fun = fun;
31828 this.array = array;
31829}
31830Item.prototype.run = function () {
31831 this.fun.apply(null, this.array);
31832};
31833process.title = 'browser';
31834process.browser = true;
31835process.env = {};
31836process.argv = [];
31837process.version = ''; // empty string to avoid regexp issues
31838process.versions = {};
31839
31840function noop() {}
31841
31842process.on = noop;
31843process.addListener = noop;
31844process.once = noop;
31845process.off = noop;
31846process.removeListener = noop;
31847process.removeAllListeners = noop;
31848process.emit = noop;
31849process.prependListener = noop;
31850process.prependOnceListener = noop;
31851
31852process.listeners = function (name) { return [] }
31853
31854process.binding = function (name) {
31855 throw new Error('process.binding is not supported');
31856};
31857
31858process.cwd = function () { return '/' };
31859process.chdir = function (dir) {
31860 throw new Error('process.chdir is not supported');
31861};
31862process.umask = function() { return 0; };
31863
31864},{}],375:[function(require,module,exports){
31865exports.publicEncrypt = require('./publicEncrypt')
31866exports.privateDecrypt = require('./privateDecrypt')
31867
31868exports.privateEncrypt = function privateEncrypt (key, buf) {
31869 return exports.publicEncrypt(key, buf, true)
31870}
31871
31872exports.publicDecrypt = function publicDecrypt (key, buf) {
31873 return exports.privateDecrypt(key, buf, true)
31874}
31875
31876},{"./privateDecrypt":377,"./publicEncrypt":378}],376:[function(require,module,exports){
31877var createHash = require('create-hash')
31878var Buffer = require('safe-buffer').Buffer
31879
31880module.exports = function (seed, len) {
31881 var t = Buffer.alloc(0)
31882 var i = 0
31883 var c
31884 while (t.length < len) {
31885 c = i2ops(i++)
31886 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])
31887 }
31888 return t.slice(0, len)
31889}
31890
31891function i2ops (c) {
31892 var out = Buffer.allocUnsafe(4)
31893 out.writeUInt32BE(c, 0)
31894 return out
31895}
31896
31897},{"create-hash":68,"safe-buffer":398}],377:[function(require,module,exports){
31898var parseKeys = require('parse-asn1')
31899var mgf = require('./mgf')
31900var xor = require('./xor')
31901var BN = require('bn.js')
31902var crt = require('browserify-rsa')
31903var createHash = require('create-hash')
31904var withPublic = require('./withPublic')
31905var Buffer = require('safe-buffer').Buffer
31906
31907module.exports = function privateDecrypt (privateKey, enc, reverse) {
31908 var padding
31909 if (privateKey.padding) {
31910 padding = privateKey.padding
31911 } else if (reverse) {
31912 padding = 1
31913 } else {
31914 padding = 4
31915 }
31916
31917 var key = parseKeys(privateKey)
31918 var k = key.modulus.byteLength()
31919 if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {
31920 throw new Error('decryption error')
31921 }
31922 var msg
31923 if (reverse) {
31924 msg = withPublic(new BN(enc), key)
31925 } else {
31926 msg = crt(enc, key)
31927 }
31928 var zBuffer = Buffer.alloc(k - msg.length)
31929 msg = Buffer.concat([zBuffer, msg], k)
31930 if (padding === 4) {
31931 return oaep(key, msg)
31932 } else if (padding === 1) {
31933 return pkcs1(key, msg, reverse)
31934 } else if (padding === 3) {
31935 return msg
31936 } else {
31937 throw new Error('unknown padding')
31938 }
31939}
31940
31941function oaep (key, msg) {
31942 var k = key.modulus.byteLength()
31943 var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
31944 var hLen = iHash.length
31945 if (msg[0] !== 0) {
31946 throw new Error('decryption error')
31947 }
31948 var maskedSeed = msg.slice(1, hLen + 1)
31949 var maskedDb = msg.slice(hLen + 1)
31950 var seed = xor(maskedSeed, mgf(maskedDb, hLen))
31951 var db = xor(maskedDb, mgf(seed, k - hLen - 1))
31952 if (compare(iHash, db.slice(0, hLen))) {
31953 throw new Error('decryption error')
31954 }
31955 var i = hLen
31956 while (db[i] === 0) {
31957 i++
31958 }
31959 if (db[i++] !== 1) {
31960 throw new Error('decryption error')
31961 }
31962 return db.slice(i)
31963}
31964
31965function pkcs1 (key, msg, reverse) {
31966 var p1 = msg.slice(0, 2)
31967 var i = 2
31968 var status = 0
31969 while (msg[i++] !== 0) {
31970 if (i >= msg.length) {
31971 status++
31972 break
31973 }
31974 }
31975 var ps = msg.slice(2, i - 1)
31976
31977 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {
31978 status++
31979 }
31980 if (ps.length < 8) {
31981 status++
31982 }
31983 if (status) {
31984 throw new Error('decryption error')
31985 }
31986 return msg.slice(i)
31987}
31988function compare (a, b) {
31989 a = Buffer.from(a)
31990 b = Buffer.from(b)
31991 var dif = 0
31992 var len = a.length
31993 if (a.length !== b.length) {
31994 dif++
31995 len = Math.min(a.length, b.length)
31996 }
31997 var i = -1
31998 while (++i < len) {
31999 dif += (a[i] ^ b[i])
32000 }
32001 return dif
32002}
32003
32004},{"./mgf":376,"./withPublic":379,"./xor":380,"bn.js":18,"browserify-rsa":41,"create-hash":68,"parse-asn1":366,"safe-buffer":398}],378:[function(require,module,exports){
32005var parseKeys = require('parse-asn1')
32006var randomBytes = require('randombytes')
32007var createHash = require('create-hash')
32008var mgf = require('./mgf')
32009var xor = require('./xor')
32010var BN = require('bn.js')
32011var withPublic = require('./withPublic')
32012var crt = require('browserify-rsa')
32013var Buffer = require('safe-buffer').Buffer
32014
32015module.exports = function publicEncrypt (publicKey, msg, reverse) {
32016 var padding
32017 if (publicKey.padding) {
32018 padding = publicKey.padding
32019 } else if (reverse) {
32020 padding = 1
32021 } else {
32022 padding = 4
32023 }
32024 var key = parseKeys(publicKey)
32025 var paddedMsg
32026 if (padding === 4) {
32027 paddedMsg = oaep(key, msg)
32028 } else if (padding === 1) {
32029 paddedMsg = pkcs1(key, msg, reverse)
32030 } else if (padding === 3) {
32031 paddedMsg = new BN(msg)
32032 if (paddedMsg.cmp(key.modulus) >= 0) {
32033 throw new Error('data too long for modulus')
32034 }
32035 } else {
32036 throw new Error('unknown padding')
32037 }
32038 if (reverse) {
32039 return crt(paddedMsg, key)
32040 } else {
32041 return withPublic(paddedMsg, key)
32042 }
32043}
32044
32045function oaep (key, msg) {
32046 var k = key.modulus.byteLength()
32047 var mLen = msg.length
32048 var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
32049 var hLen = iHash.length
32050 var hLen2 = 2 * hLen
32051 if (mLen > k - hLen2 - 2) {
32052 throw new Error('message too long')
32053 }
32054 var ps = Buffer.alloc(k - mLen - hLen2 - 2)
32055 var dblen = k - hLen - 1
32056 var seed = randomBytes(hLen)
32057 var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))
32058 var maskedSeed = xor(seed, mgf(maskedDb, hLen))
32059 return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))
32060}
32061function pkcs1 (key, msg, reverse) {
32062 var mLen = msg.length
32063 var k = key.modulus.byteLength()
32064 if (mLen > k - 11) {
32065 throw new Error('message too long')
32066 }
32067 var ps
32068 if (reverse) {
32069 ps = Buffer.alloc(k - mLen - 3, 0xff)
32070 } else {
32071 ps = nonZero(k - mLen - 3)
32072 }
32073 return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))
32074}
32075function nonZero (len) {
32076 var out = Buffer.allocUnsafe(len)
32077 var i = 0
32078 var cache = randomBytes(len * 2)
32079 var cur = 0
32080 var num
32081 while (i < len) {
32082 if (cur === cache.length) {
32083 cache = randomBytes(len * 2)
32084 cur = 0
32085 }
32086 num = cache[cur++]
32087 if (num) {
32088 out[i++] = num
32089 }
32090 }
32091 return out
32092}
32093
32094},{"./mgf":376,"./withPublic":379,"./xor":380,"bn.js":18,"browserify-rsa":41,"create-hash":68,"parse-asn1":366,"randombytes":381,"safe-buffer":398}],379:[function(require,module,exports){
32095var BN = require('bn.js')
32096var Buffer = require('safe-buffer').Buffer
32097
32098function withPublic (paddedMsg, key) {
32099 return Buffer.from(paddedMsg
32100 .toRed(BN.mont(key.modulus))
32101 .redPow(new BN(key.publicExponent))
32102 .fromRed()
32103 .toArray())
32104}
32105
32106module.exports = withPublic
32107
32108},{"bn.js":18,"safe-buffer":398}],380:[function(require,module,exports){
32109module.exports = function xor (a, b) {
32110 var len = a.length
32111 var i = -1
32112 while (++i < len) {
32113 a[i] ^= b[i]
32114 }
32115 return a
32116}
32117
32118},{}],381:[function(require,module,exports){
32119(function (process,global){
32120'use strict'
32121
32122function oldBrowser () {
32123 throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
32124}
32125
32126var Buffer = require('safe-buffer').Buffer
32127var crypto = global.crypto || global.msCrypto
32128
32129if (crypto && crypto.getRandomValues) {
32130 module.exports = randomBytes
32131} else {
32132 module.exports = oldBrowser
32133}
32134
32135function randomBytes (size, cb) {
32136 // phantomjs needs to throw
32137 if (size > 65536) throw new Error('requested too many random bytes')
32138 // in case browserify isn't using the Uint8Array version
32139 var rawBytes = new global.Uint8Array(size)
32140
32141 // This will not work in older browsers.
32142 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
32143 if (size > 0) { // getRandomValues fails on IE if size == 0
32144 crypto.getRandomValues(rawBytes)
32145 }
32146
32147 // XXX: phantomjs doesn't like a buffer being passed here
32148 var bytes = Buffer.from(rawBytes.buffer)
32149
32150 if (typeof cb === 'function') {
32151 return process.nextTick(function () {
32152 cb(null, bytes)
32153 })
32154 }
32155
32156 return bytes
32157}
32158
32159}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32160},{"_process":374,"safe-buffer":398}],382:[function(require,module,exports){
32161(function (process,global){
32162'use strict'
32163
32164function oldBrowser () {
32165 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
32166}
32167var safeBuffer = require('safe-buffer')
32168var randombytes = require('randombytes')
32169var Buffer = safeBuffer.Buffer
32170var kBufferMaxLength = safeBuffer.kMaxLength
32171var crypto = global.crypto || global.msCrypto
32172var kMaxUint32 = Math.pow(2, 32) - 1
32173function assertOffset (offset, length) {
32174 if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare
32175 throw new TypeError('offset must be a number')
32176 }
32177
32178 if (offset > kMaxUint32 || offset < 0) {
32179 throw new TypeError('offset must be a uint32')
32180 }
32181
32182 if (offset > kBufferMaxLength || offset > length) {
32183 throw new RangeError('offset out of range')
32184 }
32185}
32186
32187function assertSize (size, offset, length) {
32188 if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare
32189 throw new TypeError('size must be a number')
32190 }
32191
32192 if (size > kMaxUint32 || size < 0) {
32193 throw new TypeError('size must be a uint32')
32194 }
32195
32196 if (size + offset > length || size > kBufferMaxLength) {
32197 throw new RangeError('buffer too small')
32198 }
32199}
32200if ((crypto && crypto.getRandomValues) || !process.browser) {
32201 exports.randomFill = randomFill
32202 exports.randomFillSync = randomFillSync
32203} else {
32204 exports.randomFill = oldBrowser
32205 exports.randomFillSync = oldBrowser
32206}
32207function randomFill (buf, offset, size, cb) {
32208 if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
32209 throw new TypeError('"buf" argument must be a Buffer or Uint8Array')
32210 }
32211
32212 if (typeof offset === 'function') {
32213 cb = offset
32214 offset = 0
32215 size = buf.length
32216 } else if (typeof size === 'function') {
32217 cb = size
32218 size = buf.length - offset
32219 } else if (typeof cb !== 'function') {
32220 throw new TypeError('"cb" argument must be a function')
32221 }
32222 assertOffset(offset, buf.length)
32223 assertSize(size, offset, buf.length)
32224 return actualFill(buf, offset, size, cb)
32225}
32226
32227function actualFill (buf, offset, size, cb) {
32228 if (process.browser) {
32229 var ourBuf = buf.buffer
32230 var uint = new Uint8Array(ourBuf, offset, size)
32231 crypto.getRandomValues(uint)
32232 if (cb) {
32233 process.nextTick(function () {
32234 cb(null, buf)
32235 })
32236 return
32237 }
32238 return buf
32239 }
32240 if (cb) {
32241 randombytes(size, function (err, bytes) {
32242 if (err) {
32243 return cb(err)
32244 }
32245 bytes.copy(buf, offset)
32246 cb(null, buf)
32247 })
32248 return
32249 }
32250 var bytes = randombytes(size)
32251 bytes.copy(buf, offset)
32252 return buf
32253}
32254function randomFillSync (buf, offset, size) {
32255 if (typeof offset === 'undefined') {
32256 offset = 0
32257 }
32258 if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
32259 throw new TypeError('"buf" argument must be a Buffer or Uint8Array')
32260 }
32261
32262 assertOffset(offset, buf.length)
32263
32264 if (size === undefined) size = buf.length - offset
32265
32266 assertSize(size, offset, buf.length)
32267
32268 return actualFill(buf, offset, size)
32269}
32270
32271}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32272},{"_process":374,"randombytes":381,"safe-buffer":398}],383:[function(require,module,exports){
32273module.exports = require('./lib/_stream_duplex.js');
32274
32275},{"./lib/_stream_duplex.js":384}],384:[function(require,module,exports){
32276// Copyright Joyent, Inc. and other Node contributors.
32277//
32278// Permission is hereby granted, free of charge, to any person obtaining a
32279// copy of this software and associated documentation files (the
32280// "Software"), to deal in the Software without restriction, including
32281// without limitation the rights to use, copy, modify, merge, publish,
32282// distribute, sublicense, and/or sell copies of the Software, and to permit
32283// persons to whom the Software is furnished to do so, subject to the
32284// following conditions:
32285//
32286// The above copyright notice and this permission notice shall be included
32287// in all copies or substantial portions of the Software.
32288//
32289// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32290// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32291// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32292// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32293// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32294// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32295// USE OR OTHER DEALINGS IN THE SOFTWARE.
32296
32297// a duplex stream is just a stream that is both readable and writable.
32298// Since JS doesn't have multiple prototypal inheritance, this class
32299// prototypally inherits from Readable, and then parasitically from
32300// Writable.
32301
32302'use strict';
32303
32304/*<replacement>*/
32305
32306var pna = require('process-nextick-args');
32307/*</replacement>*/
32308
32309/*<replacement>*/
32310var objectKeys = Object.keys || function (obj) {
32311 var keys = [];
32312 for (var key in obj) {
32313 keys.push(key);
32314 }return keys;
32315};
32316/*</replacement>*/
32317
32318module.exports = Duplex;
32319
32320/*<replacement>*/
32321var util = require('core-util-is');
32322util.inherits = require('inherits');
32323/*</replacement>*/
32324
32325var Readable = require('./_stream_readable');
32326var Writable = require('./_stream_writable');
32327
32328util.inherits(Duplex, Readable);
32329
32330{
32331 // avoid scope creep, the keys array can then be collected
32332 var keys = objectKeys(Writable.prototype);
32333 for (var v = 0; v < keys.length; v++) {
32334 var method = keys[v];
32335 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
32336 }
32337}
32338
32339function Duplex(options) {
32340 if (!(this instanceof Duplex)) return new Duplex(options);
32341
32342 Readable.call(this, options);
32343 Writable.call(this, options);
32344
32345 if (options && options.readable === false) this.readable = false;
32346
32347 if (options && options.writable === false) this.writable = false;
32348
32349 this.allowHalfOpen = true;
32350 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
32351
32352 this.once('end', onend);
32353}
32354
32355Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
32356 // making it explicit this property is not enumerable
32357 // because otherwise some prototype manipulation in
32358 // userland will fail
32359 enumerable: false,
32360 get: function () {
32361 return this._writableState.highWaterMark;
32362 }
32363});
32364
32365// the no-half-open enforcer
32366function onend() {
32367 // if we allow half-open state, or if the writable side ended,
32368 // then we're ok.
32369 if (this.allowHalfOpen || this._writableState.ended) return;
32370
32371 // no more data can be written.
32372 // But allow more writes to happen in this tick.
32373 pna.nextTick(onEndNT, this);
32374}
32375
32376function onEndNT(self) {
32377 self.end();
32378}
32379
32380Object.defineProperty(Duplex.prototype, 'destroyed', {
32381 get: function () {
32382 if (this._readableState === undefined || this._writableState === undefined) {
32383 return false;
32384 }
32385 return this._readableState.destroyed && this._writableState.destroyed;
32386 },
32387 set: function (value) {
32388 // we ignore the value if the stream
32389 // has not been initialized yet
32390 if (this._readableState === undefined || this._writableState === undefined) {
32391 return;
32392 }
32393
32394 // backward compatibility, the user is explicitly
32395 // managing destroyed
32396 this._readableState.destroyed = value;
32397 this._writableState.destroyed = value;
32398 }
32399});
32400
32401Duplex.prototype._destroy = function (err, cb) {
32402 this.push(null);
32403 this.end();
32404
32405 pna.nextTick(cb, err);
32406};
32407},{"./_stream_readable":386,"./_stream_writable":388,"core-util-is":52,"inherits":119,"process-nextick-args":373}],385:[function(require,module,exports){
32408// Copyright Joyent, Inc. and other Node contributors.
32409//
32410// Permission is hereby granted, free of charge, to any person obtaining a
32411// copy of this software and associated documentation files (the
32412// "Software"), to deal in the Software without restriction, including
32413// without limitation the rights to use, copy, modify, merge, publish,
32414// distribute, sublicense, and/or sell copies of the Software, and to permit
32415// persons to whom the Software is furnished to do so, subject to the
32416// following conditions:
32417//
32418// The above copyright notice and this permission notice shall be included
32419// in all copies or substantial portions of the Software.
32420//
32421// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32422// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32423// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32424// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32425// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32426// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32427// USE OR OTHER DEALINGS IN THE SOFTWARE.
32428
32429// a passthrough stream.
32430// basically just the most minimal sort of Transform stream.
32431// Every written chunk gets output as-is.
32432
32433'use strict';
32434
32435module.exports = PassThrough;
32436
32437var Transform = require('./_stream_transform');
32438
32439/*<replacement>*/
32440var util = require('core-util-is');
32441util.inherits = require('inherits');
32442/*</replacement>*/
32443
32444util.inherits(PassThrough, Transform);
32445
32446function PassThrough(options) {
32447 if (!(this instanceof PassThrough)) return new PassThrough(options);
32448
32449 Transform.call(this, options);
32450}
32451
32452PassThrough.prototype._transform = function (chunk, encoding, cb) {
32453 cb(null, chunk);
32454};
32455},{"./_stream_transform":387,"core-util-is":52,"inherits":119}],386:[function(require,module,exports){
32456(function (process,global){
32457// Copyright Joyent, Inc. and other Node contributors.
32458//
32459// Permission is hereby granted, free of charge, to any person obtaining a
32460// copy of this software and associated documentation files (the
32461// "Software"), to deal in the Software without restriction, including
32462// without limitation the rights to use, copy, modify, merge, publish,
32463// distribute, sublicense, and/or sell copies of the Software, and to permit
32464// persons to whom the Software is furnished to do so, subject to the
32465// following conditions:
32466//
32467// The above copyright notice and this permission notice shall be included
32468// in all copies or substantial portions of the Software.
32469//
32470// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32471// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32472// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32473// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32474// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32475// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32476// USE OR OTHER DEALINGS IN THE SOFTWARE.
32477
32478'use strict';
32479
32480/*<replacement>*/
32481
32482var pna = require('process-nextick-args');
32483/*</replacement>*/
32484
32485module.exports = Readable;
32486
32487/*<replacement>*/
32488var isArray = require('isarray');
32489/*</replacement>*/
32490
32491/*<replacement>*/
32492var Duplex;
32493/*</replacement>*/
32494
32495Readable.ReadableState = ReadableState;
32496
32497/*<replacement>*/
32498var EE = require('events').EventEmitter;
32499
32500var EElistenerCount = function (emitter, type) {
32501 return emitter.listeners(type).length;
32502};
32503/*</replacement>*/
32504
32505/*<replacement>*/
32506var Stream = require('./internal/streams/stream');
32507/*</replacement>*/
32508
32509/*<replacement>*/
32510
32511var Buffer = require('safe-buffer').Buffer;
32512var OurUint8Array = global.Uint8Array || function () {};
32513function _uint8ArrayToBuffer(chunk) {
32514 return Buffer.from(chunk);
32515}
32516function _isUint8Array(obj) {
32517 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
32518}
32519
32520/*</replacement>*/
32521
32522/*<replacement>*/
32523var util = require('core-util-is');
32524util.inherits = require('inherits');
32525/*</replacement>*/
32526
32527/*<replacement>*/
32528var debugUtil = require('util');
32529var debug = void 0;
32530if (debugUtil && debugUtil.debuglog) {
32531 debug = debugUtil.debuglog('stream');
32532} else {
32533 debug = function () {};
32534}
32535/*</replacement>*/
32536
32537var BufferList = require('./internal/streams/BufferList');
32538var destroyImpl = require('./internal/streams/destroy');
32539var StringDecoder;
32540
32541util.inherits(Readable, Stream);
32542
32543var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
32544
32545function prependListener(emitter, event, fn) {
32546 // Sadly this is not cacheable as some libraries bundle their own
32547 // event emitter implementation with them.
32548 if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
32549
32550 // This is a hack to make sure that our error handler is attached before any
32551 // userland ones. NEVER DO THIS. This is here only because this code needs
32552 // to continue to work with older versions of Node.js that do not include
32553 // the prependListener() method. The goal is to eventually remove this hack.
32554 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
32555}
32556
32557function ReadableState(options, stream) {
32558 Duplex = Duplex || require('./_stream_duplex');
32559
32560 options = options || {};
32561
32562 // Duplex streams are both readable and writable, but share
32563 // the same options object.
32564 // However, some cases require setting options to different
32565 // values for the readable and the writable sides of the duplex stream.
32566 // These options can be provided separately as readableXXX and writableXXX.
32567 var isDuplex = stream instanceof Duplex;
32568
32569 // object stream flag. Used to make read(n) ignore n and to
32570 // make all the buffer merging and length checks go away
32571 this.objectMode = !!options.objectMode;
32572
32573 if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
32574
32575 // the point at which it stops calling _read() to fill the buffer
32576 // Note: 0 is a valid value, means "don't call _read preemptively ever"
32577 var hwm = options.highWaterMark;
32578 var readableHwm = options.readableHighWaterMark;
32579 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
32580
32581 if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
32582
32583 // cast to ints.
32584 this.highWaterMark = Math.floor(this.highWaterMark);
32585
32586 // A linked list is used to store data chunks instead of an array because the
32587 // linked list can remove elements from the beginning faster than
32588 // array.shift()
32589 this.buffer = new BufferList();
32590 this.length = 0;
32591 this.pipes = null;
32592 this.pipesCount = 0;
32593 this.flowing = null;
32594 this.ended = false;
32595 this.endEmitted = false;
32596 this.reading = false;
32597
32598 // a flag to be able to tell if the event 'readable'/'data' is emitted
32599 // immediately, or on a later tick. We set this to true at first, because
32600 // any actions that shouldn't happen until "later" should generally also
32601 // not happen before the first read call.
32602 this.sync = true;
32603
32604 // whenever we return null, then we set a flag to say
32605 // that we're awaiting a 'readable' event emission.
32606 this.needReadable = false;
32607 this.emittedReadable = false;
32608 this.readableListening = false;
32609 this.resumeScheduled = false;
32610
32611 // has it been destroyed
32612 this.destroyed = false;
32613
32614 // Crypto is kind of old and crusty. Historically, its default string
32615 // encoding is 'binary' so we have to make this configurable.
32616 // Everything else in the universe uses 'utf8', though.
32617 this.defaultEncoding = options.defaultEncoding || 'utf8';
32618
32619 // the number of writers that are awaiting a drain event in .pipe()s
32620 this.awaitDrain = 0;
32621
32622 // if true, a maybeReadMore has been scheduled
32623 this.readingMore = false;
32624
32625 this.decoder = null;
32626 this.encoding = null;
32627 if (options.encoding) {
32628 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
32629 this.decoder = new StringDecoder(options.encoding);
32630 this.encoding = options.encoding;
32631 }
32632}
32633
32634function Readable(options) {
32635 Duplex = Duplex || require('./_stream_duplex');
32636
32637 if (!(this instanceof Readable)) return new Readable(options);
32638
32639 this._readableState = new ReadableState(options, this);
32640
32641 // legacy
32642 this.readable = true;
32643
32644 if (options) {
32645 if (typeof options.read === 'function') this._read = options.read;
32646
32647 if (typeof options.destroy === 'function') this._destroy = options.destroy;
32648 }
32649
32650 Stream.call(this);
32651}
32652
32653Object.defineProperty(Readable.prototype, 'destroyed', {
32654 get: function () {
32655 if (this._readableState === undefined) {
32656 return false;
32657 }
32658 return this._readableState.destroyed;
32659 },
32660 set: function (value) {
32661 // we ignore the value if the stream
32662 // has not been initialized yet
32663 if (!this._readableState) {
32664 return;
32665 }
32666
32667 // backward compatibility, the user is explicitly
32668 // managing destroyed
32669 this._readableState.destroyed = value;
32670 }
32671});
32672
32673Readable.prototype.destroy = destroyImpl.destroy;
32674Readable.prototype._undestroy = destroyImpl.undestroy;
32675Readable.prototype._destroy = function (err, cb) {
32676 this.push(null);
32677 cb(err);
32678};
32679
32680// Manually shove something into the read() buffer.
32681// This returns true if the highWaterMark has not been hit yet,
32682// similar to how Writable.write() returns true if you should
32683// write() some more.
32684Readable.prototype.push = function (chunk, encoding) {
32685 var state = this._readableState;
32686 var skipChunkCheck;
32687
32688 if (!state.objectMode) {
32689 if (typeof chunk === 'string') {
32690 encoding = encoding || state.defaultEncoding;
32691 if (encoding !== state.encoding) {
32692 chunk = Buffer.from(chunk, encoding);
32693 encoding = '';
32694 }
32695 skipChunkCheck = true;
32696 }
32697 } else {
32698 skipChunkCheck = true;
32699 }
32700
32701 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
32702};
32703
32704// Unshift should *always* be something directly out of read()
32705Readable.prototype.unshift = function (chunk) {
32706 return readableAddChunk(this, chunk, null, true, false);
32707};
32708
32709function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
32710 var state = stream._readableState;
32711 if (chunk === null) {
32712 state.reading = false;
32713 onEofChunk(stream, state);
32714 } else {
32715 var er;
32716 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
32717 if (er) {
32718 stream.emit('error', er);
32719 } else if (state.objectMode || chunk && chunk.length > 0) {
32720 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
32721 chunk = _uint8ArrayToBuffer(chunk);
32722 }
32723
32724 if (addToFront) {
32725 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
32726 } else if (state.ended) {
32727 stream.emit('error', new Error('stream.push() after EOF'));
32728 } else {
32729 state.reading = false;
32730 if (state.decoder && !encoding) {
32731 chunk = state.decoder.write(chunk);
32732 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
32733 } else {
32734 addChunk(stream, state, chunk, false);
32735 }
32736 }
32737 } else if (!addToFront) {
32738 state.reading = false;
32739 }
32740 }
32741
32742 return needMoreData(state);
32743}
32744
32745function addChunk(stream, state, chunk, addToFront) {
32746 if (state.flowing && state.length === 0 && !state.sync) {
32747 stream.emit('data', chunk);
32748 stream.read(0);
32749 } else {
32750 // update the buffer info.
32751 state.length += state.objectMode ? 1 : chunk.length;
32752 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
32753
32754 if (state.needReadable) emitReadable(stream);
32755 }
32756 maybeReadMore(stream, state);
32757}
32758
32759function chunkInvalid(state, chunk) {
32760 var er;
32761 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
32762 er = new TypeError('Invalid non-string/buffer chunk');
32763 }
32764 return er;
32765}
32766
32767// if it's past the high water mark, we can push in some more.
32768// Also, if we have no data yet, we can stand some
32769// more bytes. This is to work around cases where hwm=0,
32770// such as the repl. Also, if the push() triggered a
32771// readable event, and the user called read(largeNumber) such that
32772// needReadable was set, then we ought to push more, so that another
32773// 'readable' event will be triggered.
32774function needMoreData(state) {
32775 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
32776}
32777
32778Readable.prototype.isPaused = function () {
32779 return this._readableState.flowing === false;
32780};
32781
32782// backwards compatibility.
32783Readable.prototype.setEncoding = function (enc) {
32784 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
32785 this._readableState.decoder = new StringDecoder(enc);
32786 this._readableState.encoding = enc;
32787 return this;
32788};
32789
32790// Don't raise the hwm > 8MB
32791var MAX_HWM = 0x800000;
32792function computeNewHighWaterMark(n) {
32793 if (n >= MAX_HWM) {
32794 n = MAX_HWM;
32795 } else {
32796 // Get the next highest power of 2 to prevent increasing hwm excessively in
32797 // tiny amounts
32798 n--;
32799 n |= n >>> 1;
32800 n |= n >>> 2;
32801 n |= n >>> 4;
32802 n |= n >>> 8;
32803 n |= n >>> 16;
32804 n++;
32805 }
32806 return n;
32807}
32808
32809// This function is designed to be inlinable, so please take care when making
32810// changes to the function body.
32811function howMuchToRead(n, state) {
32812 if (n <= 0 || state.length === 0 && state.ended) return 0;
32813 if (state.objectMode) return 1;
32814 if (n !== n) {
32815 // Only flow one buffer at a time
32816 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
32817 }
32818 // If we're asking for more than the current hwm, then raise the hwm.
32819 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
32820 if (n <= state.length) return n;
32821 // Don't have enough
32822 if (!state.ended) {
32823 state.needReadable = true;
32824 return 0;
32825 }
32826 return state.length;
32827}
32828
32829// you can override either this method, or the async _read(n) below.
32830Readable.prototype.read = function (n) {
32831 debug('read', n);
32832 n = parseInt(n, 10);
32833 var state = this._readableState;
32834 var nOrig = n;
32835
32836 if (n !== 0) state.emittedReadable = false;
32837
32838 // if we're doing read(0) to trigger a readable event, but we
32839 // already have a bunch of data in the buffer, then just trigger
32840 // the 'readable' event and move on.
32841 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
32842 debug('read: emitReadable', state.length, state.ended);
32843 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
32844 return null;
32845 }
32846
32847 n = howMuchToRead(n, state);
32848
32849 // if we've ended, and we're now clear, then finish it up.
32850 if (n === 0 && state.ended) {
32851 if (state.length === 0) endReadable(this);
32852 return null;
32853 }
32854
32855 // All the actual chunk generation logic needs to be
32856 // *below* the call to _read. The reason is that in certain
32857 // synthetic stream cases, such as passthrough streams, _read
32858 // may be a completely synchronous operation which may change
32859 // the state of the read buffer, providing enough data when
32860 // before there was *not* enough.
32861 //
32862 // So, the steps are:
32863 // 1. Figure out what the state of things will be after we do
32864 // a read from the buffer.
32865 //
32866 // 2. If that resulting state will trigger a _read, then call _read.
32867 // Note that this may be asynchronous, or synchronous. Yes, it is
32868 // deeply ugly to write APIs this way, but that still doesn't mean
32869 // that the Readable class should behave improperly, as streams are
32870 // designed to be sync/async agnostic.
32871 // Take note if the _read call is sync or async (ie, if the read call
32872 // has returned yet), so that we know whether or not it's safe to emit
32873 // 'readable' etc.
32874 //
32875 // 3. Actually pull the requested chunks out of the buffer and return.
32876
32877 // if we need a readable event, then we need to do some reading.
32878 var doRead = state.needReadable;
32879 debug('need readable', doRead);
32880
32881 // if we currently have less than the highWaterMark, then also read some
32882 if (state.length === 0 || state.length - n < state.highWaterMark) {
32883 doRead = true;
32884 debug('length less than watermark', doRead);
32885 }
32886
32887 // however, if we've ended, then there's no point, and if we're already
32888 // reading, then it's unnecessary.
32889 if (state.ended || state.reading) {
32890 doRead = false;
32891 debug('reading or ended', doRead);
32892 } else if (doRead) {
32893 debug('do read');
32894 state.reading = true;
32895 state.sync = true;
32896 // if the length is currently zero, then we *need* a readable event.
32897 if (state.length === 0) state.needReadable = true;
32898 // call internal read method
32899 this._read(state.highWaterMark);
32900 state.sync = false;
32901 // If _read pushed data synchronously, then `reading` will be false,
32902 // and we need to re-evaluate how much data we can return to the user.
32903 if (!state.reading) n = howMuchToRead(nOrig, state);
32904 }
32905
32906 var ret;
32907 if (n > 0) ret = fromList(n, state);else ret = null;
32908
32909 if (ret === null) {
32910 state.needReadable = true;
32911 n = 0;
32912 } else {
32913 state.length -= n;
32914 }
32915
32916 if (state.length === 0) {
32917 // If we have nothing in the buffer, then we want to know
32918 // as soon as we *do* get something into the buffer.
32919 if (!state.ended) state.needReadable = true;
32920
32921 // If we tried to read() past the EOF, then emit end on the next tick.
32922 if (nOrig !== n && state.ended) endReadable(this);
32923 }
32924
32925 if (ret !== null) this.emit('data', ret);
32926
32927 return ret;
32928};
32929
32930function onEofChunk(stream, state) {
32931 if (state.ended) return;
32932 if (state.decoder) {
32933 var chunk = state.decoder.end();
32934 if (chunk && chunk.length) {
32935 state.buffer.push(chunk);
32936 state.length += state.objectMode ? 1 : chunk.length;
32937 }
32938 }
32939 state.ended = true;
32940
32941 // emit 'readable' now to make sure it gets picked up.
32942 emitReadable(stream);
32943}
32944
32945// Don't emit readable right away in sync mode, because this can trigger
32946// another read() call => stack overflow. This way, it might trigger
32947// a nextTick recursion warning, but that's not so bad.
32948function emitReadable(stream) {
32949 var state = stream._readableState;
32950 state.needReadable = false;
32951 if (!state.emittedReadable) {
32952 debug('emitReadable', state.flowing);
32953 state.emittedReadable = true;
32954 if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
32955 }
32956}
32957
32958function emitReadable_(stream) {
32959 debug('emit readable');
32960 stream.emit('readable');
32961 flow(stream);
32962}
32963
32964// at this point, the user has presumably seen the 'readable' event,
32965// and called read() to consume some data. that may have triggered
32966// in turn another _read(n) call, in which case reading = true if
32967// it's in progress.
32968// However, if we're not ended, or reading, and the length < hwm,
32969// then go ahead and try to read some more preemptively.
32970function maybeReadMore(stream, state) {
32971 if (!state.readingMore) {
32972 state.readingMore = true;
32973 pna.nextTick(maybeReadMore_, stream, state);
32974 }
32975}
32976
32977function maybeReadMore_(stream, state) {
32978 var len = state.length;
32979 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
32980 debug('maybeReadMore read 0');
32981 stream.read(0);
32982 if (len === state.length)
32983 // didn't get any data, stop spinning.
32984 break;else len = state.length;
32985 }
32986 state.readingMore = false;
32987}
32988
32989// abstract method. to be overridden in specific implementation classes.
32990// call cb(er, data) where data is <= n in length.
32991// for virtual (non-string, non-buffer) streams, "length" is somewhat
32992// arbitrary, and perhaps not very meaningful.
32993Readable.prototype._read = function (n) {
32994 this.emit('error', new Error('_read() is not implemented'));
32995};
32996
32997Readable.prototype.pipe = function (dest, pipeOpts) {
32998 var src = this;
32999 var state = this._readableState;
33000
33001 switch (state.pipesCount) {
33002 case 0:
33003 state.pipes = dest;
33004 break;
33005 case 1:
33006 state.pipes = [state.pipes, dest];
33007 break;
33008 default:
33009 state.pipes.push(dest);
33010 break;
33011 }
33012 state.pipesCount += 1;
33013 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
33014
33015 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
33016
33017 var endFn = doEnd ? onend : unpipe;
33018 if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
33019
33020 dest.on('unpipe', onunpipe);
33021 function onunpipe(readable, unpipeInfo) {
33022 debug('onunpipe');
33023 if (readable === src) {
33024 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
33025 unpipeInfo.hasUnpiped = true;
33026 cleanup();
33027 }
33028 }
33029 }
33030
33031 function onend() {
33032 debug('onend');
33033 dest.end();
33034 }
33035
33036 // when the dest drains, it reduces the awaitDrain counter
33037 // on the source. This would be more elegant with a .once()
33038 // handler in flow(), but adding and removing repeatedly is
33039 // too slow.
33040 var ondrain = pipeOnDrain(src);
33041 dest.on('drain', ondrain);
33042
33043 var cleanedUp = false;
33044 function cleanup() {
33045 debug('cleanup');
33046 // cleanup event handlers once the pipe is broken
33047 dest.removeListener('close', onclose);
33048 dest.removeListener('finish', onfinish);
33049 dest.removeListener('drain', ondrain);
33050 dest.removeListener('error', onerror);
33051 dest.removeListener('unpipe', onunpipe);
33052 src.removeListener('end', onend);
33053 src.removeListener('end', unpipe);
33054 src.removeListener('data', ondata);
33055
33056 cleanedUp = true;
33057
33058 // if the reader is waiting for a drain event from this
33059 // specific writer, then it would cause it to never start
33060 // flowing again.
33061 // So, if this is awaiting a drain, then we just call it now.
33062 // If we don't know, then assume that we are waiting for one.
33063 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
33064 }
33065
33066 // If the user pushes more data while we're writing to dest then we'll end up
33067 // in ondata again. However, we only want to increase awaitDrain once because
33068 // dest will only emit one 'drain' event for the multiple writes.
33069 // => Introduce a guard on increasing awaitDrain.
33070 var increasedAwaitDrain = false;
33071 src.on('data', ondata);
33072 function ondata(chunk) {
33073 debug('ondata');
33074 increasedAwaitDrain = false;
33075 var ret = dest.write(chunk);
33076 if (false === ret && !increasedAwaitDrain) {
33077 // If the user unpiped during `dest.write()`, it is possible
33078 // to get stuck in a permanently paused state if that write
33079 // also returned false.
33080 // => Check whether `dest` is still a piping destination.
33081 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
33082 debug('false write response, pause', src._readableState.awaitDrain);
33083 src._readableState.awaitDrain++;
33084 increasedAwaitDrain = true;
33085 }
33086 src.pause();
33087 }
33088 }
33089
33090 // if the dest has an error, then stop piping into it.
33091 // however, don't suppress the throwing behavior for this.
33092 function onerror(er) {
33093 debug('onerror', er);
33094 unpipe();
33095 dest.removeListener('error', onerror);
33096 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
33097 }
33098
33099 // Make sure our error handler is attached before userland ones.
33100 prependListener(dest, 'error', onerror);
33101
33102 // Both close and finish should trigger unpipe, but only once.
33103 function onclose() {
33104 dest.removeListener('finish', onfinish);
33105 unpipe();
33106 }
33107 dest.once('close', onclose);
33108 function onfinish() {
33109 debug('onfinish');
33110 dest.removeListener('close', onclose);
33111 unpipe();
33112 }
33113 dest.once('finish', onfinish);
33114
33115 function unpipe() {
33116 debug('unpipe');
33117 src.unpipe(dest);
33118 }
33119
33120 // tell the dest that it's being piped to
33121 dest.emit('pipe', src);
33122
33123 // start the flow if it hasn't been started already.
33124 if (!state.flowing) {
33125 debug('pipe resume');
33126 src.resume();
33127 }
33128
33129 return dest;
33130};
33131
33132function pipeOnDrain(src) {
33133 return function () {
33134 var state = src._readableState;
33135 debug('pipeOnDrain', state.awaitDrain);
33136 if (state.awaitDrain) state.awaitDrain--;
33137 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
33138 state.flowing = true;
33139 flow(src);
33140 }
33141 };
33142}
33143
33144Readable.prototype.unpipe = function (dest) {
33145 var state = this._readableState;
33146 var unpipeInfo = { hasUnpiped: false };
33147
33148 // if we're not piping anywhere, then do nothing.
33149 if (state.pipesCount === 0) return this;
33150
33151 // just one destination. most common case.
33152 if (state.pipesCount === 1) {
33153 // passed in one, but it's not the right one.
33154 if (dest && dest !== state.pipes) return this;
33155
33156 if (!dest) dest = state.pipes;
33157
33158 // got a match.
33159 state.pipes = null;
33160 state.pipesCount = 0;
33161 state.flowing = false;
33162 if (dest) dest.emit('unpipe', this, unpipeInfo);
33163 return this;
33164 }
33165
33166 // slow case. multiple pipe destinations.
33167
33168 if (!dest) {
33169 // remove all.
33170 var dests = state.pipes;
33171 var len = state.pipesCount;
33172 state.pipes = null;
33173 state.pipesCount = 0;
33174 state.flowing = false;
33175
33176 for (var i = 0; i < len; i++) {
33177 dests[i].emit('unpipe', this, unpipeInfo);
33178 }return this;
33179 }
33180
33181 // try to find the right one.
33182 var index = indexOf(state.pipes, dest);
33183 if (index === -1) return this;
33184
33185 state.pipes.splice(index, 1);
33186 state.pipesCount -= 1;
33187 if (state.pipesCount === 1) state.pipes = state.pipes[0];
33188
33189 dest.emit('unpipe', this, unpipeInfo);
33190
33191 return this;
33192};
33193
33194// set up data events if they are asked for
33195// Ensure readable listeners eventually get something
33196Readable.prototype.on = function (ev, fn) {
33197 var res = Stream.prototype.on.call(this, ev, fn);
33198
33199 if (ev === 'data') {
33200 // Start flowing on next tick if stream isn't explicitly paused
33201 if (this._readableState.flowing !== false) this.resume();
33202 } else if (ev === 'readable') {
33203 var state = this._readableState;
33204 if (!state.endEmitted && !state.readableListening) {
33205 state.readableListening = state.needReadable = true;
33206 state.emittedReadable = false;
33207 if (!state.reading) {
33208 pna.nextTick(nReadingNextTick, this);
33209 } else if (state.length) {
33210 emitReadable(this);
33211 }
33212 }
33213 }
33214
33215 return res;
33216};
33217Readable.prototype.addListener = Readable.prototype.on;
33218
33219function nReadingNextTick(self) {
33220 debug('readable nexttick read 0');
33221 self.read(0);
33222}
33223
33224// pause() and resume() are remnants of the legacy readable stream API
33225// If the user uses them, then switch into old mode.
33226Readable.prototype.resume = function () {
33227 var state = this._readableState;
33228 if (!state.flowing) {
33229 debug('resume');
33230 state.flowing = true;
33231 resume(this, state);
33232 }
33233 return this;
33234};
33235
33236function resume(stream, state) {
33237 if (!state.resumeScheduled) {
33238 state.resumeScheduled = true;
33239 pna.nextTick(resume_, stream, state);
33240 }
33241}
33242
33243function resume_(stream, state) {
33244 if (!state.reading) {
33245 debug('resume read 0');
33246 stream.read(0);
33247 }
33248
33249 state.resumeScheduled = false;
33250 state.awaitDrain = 0;
33251 stream.emit('resume');
33252 flow(stream);
33253 if (state.flowing && !state.reading) stream.read(0);
33254}
33255
33256Readable.prototype.pause = function () {
33257 debug('call pause flowing=%j', this._readableState.flowing);
33258 if (false !== this._readableState.flowing) {
33259 debug('pause');
33260 this._readableState.flowing = false;
33261 this.emit('pause');
33262 }
33263 return this;
33264};
33265
33266function flow(stream) {
33267 var state = stream._readableState;
33268 debug('flow', state.flowing);
33269 while (state.flowing && stream.read() !== null) {}
33270}
33271
33272// wrap an old-style stream as the async data source.
33273// This is *not* part of the readable stream interface.
33274// It is an ugly unfortunate mess of history.
33275Readable.prototype.wrap = function (stream) {
33276 var _this = this;
33277
33278 var state = this._readableState;
33279 var paused = false;
33280
33281 stream.on('end', function () {
33282 debug('wrapped end');
33283 if (state.decoder && !state.ended) {
33284 var chunk = state.decoder.end();
33285 if (chunk && chunk.length) _this.push(chunk);
33286 }
33287
33288 _this.push(null);
33289 });
33290
33291 stream.on('data', function (chunk) {
33292 debug('wrapped data');
33293 if (state.decoder) chunk = state.decoder.write(chunk);
33294
33295 // don't skip over falsy values in objectMode
33296 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
33297
33298 var ret = _this.push(chunk);
33299 if (!ret) {
33300 paused = true;
33301 stream.pause();
33302 }
33303 });
33304
33305 // proxy all the other methods.
33306 // important when wrapping filters and duplexes.
33307 for (var i in stream) {
33308 if (this[i] === undefined && typeof stream[i] === 'function') {
33309 this[i] = function (method) {
33310 return function () {
33311 return stream[method].apply(stream, arguments);
33312 };
33313 }(i);
33314 }
33315 }
33316
33317 // proxy certain important events.
33318 for (var n = 0; n < kProxyEvents.length; n++) {
33319 stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
33320 }
33321
33322 // when we try to consume some more bytes, simply unpause the
33323 // underlying stream.
33324 this._read = function (n) {
33325 debug('wrapped _read', n);
33326 if (paused) {
33327 paused = false;
33328 stream.resume();
33329 }
33330 };
33331
33332 return this;
33333};
33334
33335Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
33336 // making it explicit this property is not enumerable
33337 // because otherwise some prototype manipulation in
33338 // userland will fail
33339 enumerable: false,
33340 get: function () {
33341 return this._readableState.highWaterMark;
33342 }
33343});
33344
33345// exposed for testing purposes only.
33346Readable._fromList = fromList;
33347
33348// Pluck off n bytes from an array of buffers.
33349// Length is the combined lengths of all the buffers in the list.
33350// This function is designed to be inlinable, so please take care when making
33351// changes to the function body.
33352function fromList(n, state) {
33353 // nothing buffered
33354 if (state.length === 0) return null;
33355
33356 var ret;
33357 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
33358 // read it all, truncate the list
33359 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
33360 state.buffer.clear();
33361 } else {
33362 // read part of list
33363 ret = fromListPartial(n, state.buffer, state.decoder);
33364 }
33365
33366 return ret;
33367}
33368
33369// Extracts only enough buffered data to satisfy the amount requested.
33370// This function is designed to be inlinable, so please take care when making
33371// changes to the function body.
33372function fromListPartial(n, list, hasStrings) {
33373 var ret;
33374 if (n < list.head.data.length) {
33375 // slice is the same for buffers and strings
33376 ret = list.head.data.slice(0, n);
33377 list.head.data = list.head.data.slice(n);
33378 } else if (n === list.head.data.length) {
33379 // first chunk is a perfect match
33380 ret = list.shift();
33381 } else {
33382 // result spans more than one buffer
33383 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
33384 }
33385 return ret;
33386}
33387
33388// Copies a specified amount of characters from the list of buffered data
33389// chunks.
33390// This function is designed to be inlinable, so please take care when making
33391// changes to the function body.
33392function copyFromBufferString(n, list) {
33393 var p = list.head;
33394 var c = 1;
33395 var ret = p.data;
33396 n -= ret.length;
33397 while (p = p.next) {
33398 var str = p.data;
33399 var nb = n > str.length ? str.length : n;
33400 if (nb === str.length) ret += str;else ret += str.slice(0, n);
33401 n -= nb;
33402 if (n === 0) {
33403 if (nb === str.length) {
33404 ++c;
33405 if (p.next) list.head = p.next;else list.head = list.tail = null;
33406 } else {
33407 list.head = p;
33408 p.data = str.slice(nb);
33409 }
33410 break;
33411 }
33412 ++c;
33413 }
33414 list.length -= c;
33415 return ret;
33416}
33417
33418// Copies a specified amount of bytes from the list of buffered data chunks.
33419// This function is designed to be inlinable, so please take care when making
33420// changes to the function body.
33421function copyFromBuffer(n, list) {
33422 var ret = Buffer.allocUnsafe(n);
33423 var p = list.head;
33424 var c = 1;
33425 p.data.copy(ret);
33426 n -= p.data.length;
33427 while (p = p.next) {
33428 var buf = p.data;
33429 var nb = n > buf.length ? buf.length : n;
33430 buf.copy(ret, ret.length - n, 0, nb);
33431 n -= nb;
33432 if (n === 0) {
33433 if (nb === buf.length) {
33434 ++c;
33435 if (p.next) list.head = p.next;else list.head = list.tail = null;
33436 } else {
33437 list.head = p;
33438 p.data = buf.slice(nb);
33439 }
33440 break;
33441 }
33442 ++c;
33443 }
33444 list.length -= c;
33445 return ret;
33446}
33447
33448function endReadable(stream) {
33449 var state = stream._readableState;
33450
33451 // If we get here before consuming all the bytes, then that is a
33452 // bug in node. Should never happen.
33453 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
33454
33455 if (!state.endEmitted) {
33456 state.ended = true;
33457 pna.nextTick(endReadableNT, state, stream);
33458 }
33459}
33460
33461function endReadableNT(state, stream) {
33462 // Check that we didn't get one last unshift.
33463 if (!state.endEmitted && state.length === 0) {
33464 state.endEmitted = true;
33465 stream.readable = false;
33466 stream.emit('end');
33467 }
33468}
33469
33470function indexOf(xs, x) {
33471 for (var i = 0, l = xs.length; i < l; i++) {
33472 if (xs[i] === x) return i;
33473 }
33474 return -1;
33475}
33476}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33477},{"./_stream_duplex":384,"./internal/streams/BufferList":389,"./internal/streams/destroy":390,"./internal/streams/stream":391,"_process":374,"core-util-is":52,"events":102,"inherits":119,"isarray":121,"process-nextick-args":373,"safe-buffer":398,"string_decoder/":392,"util":20}],387:[function(require,module,exports){
33478// Copyright Joyent, Inc. and other Node contributors.
33479//
33480// Permission is hereby granted, free of charge, to any person obtaining a
33481// copy of this software and associated documentation files (the
33482// "Software"), to deal in the Software without restriction, including
33483// without limitation the rights to use, copy, modify, merge, publish,
33484// distribute, sublicense, and/or sell copies of the Software, and to permit
33485// persons to whom the Software is furnished to do so, subject to the
33486// following conditions:
33487//
33488// The above copyright notice and this permission notice shall be included
33489// in all copies or substantial portions of the Software.
33490//
33491// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
33492// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33493// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
33494// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
33495// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
33496// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
33497// USE OR OTHER DEALINGS IN THE SOFTWARE.
33498
33499// a transform stream is a readable/writable stream where you do
33500// something with the data. Sometimes it's called a "filter",
33501// but that's not a great name for it, since that implies a thing where
33502// some bits pass through, and others are simply ignored. (That would
33503// be a valid example of a transform, of course.)
33504//
33505// While the output is causally related to the input, it's not a
33506// necessarily symmetric or synchronous transformation. For example,
33507// a zlib stream might take multiple plain-text writes(), and then
33508// emit a single compressed chunk some time in the future.
33509//
33510// Here's how this works:
33511//
33512// The Transform stream has all the aspects of the readable and writable
33513// stream classes. When you write(chunk), that calls _write(chunk,cb)
33514// internally, and returns false if there's a lot of pending writes
33515// buffered up. When you call read(), that calls _read(n) until
33516// there's enough pending readable data buffered up.
33517//
33518// In a transform stream, the written data is placed in a buffer. When
33519// _read(n) is called, it transforms the queued up data, calling the
33520// buffered _write cb's as it consumes chunks. If consuming a single
33521// written chunk would result in multiple output chunks, then the first
33522// outputted bit calls the readcb, and subsequent chunks just go into
33523// the read buffer, and will cause it to emit 'readable' if necessary.
33524//
33525// This way, back-pressure is actually determined by the reading side,
33526// since _read has to be called to start processing a new chunk. However,
33527// a pathological inflate type of transform can cause excessive buffering
33528// here. For example, imagine a stream where every byte of input is
33529// interpreted as an integer from 0-255, and then results in that many
33530// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
33531// 1kb of data being output. In this case, you could write a very small
33532// amount of input, and end up with a very large amount of output. In
33533// such a pathological inflating mechanism, there'd be no way to tell
33534// the system to stop doing the transform. A single 4MB write could
33535// cause the system to run out of memory.
33536//
33537// However, even in such a pathological case, only a single written chunk
33538// would be consumed, and then the rest would wait (un-transformed) until
33539// the results of the previous transformed chunk were consumed.
33540
33541'use strict';
33542
33543module.exports = Transform;
33544
33545var Duplex = require('./_stream_duplex');
33546
33547/*<replacement>*/
33548var util = require('core-util-is');
33549util.inherits = require('inherits');
33550/*</replacement>*/
33551
33552util.inherits(Transform, Duplex);
33553
33554function afterTransform(er, data) {
33555 var ts = this._transformState;
33556 ts.transforming = false;
33557
33558 var cb = ts.writecb;
33559
33560 if (!cb) {
33561 return this.emit('error', new Error('write callback called multiple times'));
33562 }
33563
33564 ts.writechunk = null;
33565 ts.writecb = null;
33566
33567 if (data != null) // single equals check for both `null` and `undefined`
33568 this.push(data);
33569
33570 cb(er);
33571
33572 var rs = this._readableState;
33573 rs.reading = false;
33574 if (rs.needReadable || rs.length < rs.highWaterMark) {
33575 this._read(rs.highWaterMark);
33576 }
33577}
33578
33579function Transform(options) {
33580 if (!(this instanceof Transform)) return new Transform(options);
33581
33582 Duplex.call(this, options);
33583
33584 this._transformState = {
33585 afterTransform: afterTransform.bind(this),
33586 needTransform: false,
33587 transforming: false,
33588 writecb: null,
33589 writechunk: null,
33590 writeencoding: null
33591 };
33592
33593 // start out asking for a readable event once data is transformed.
33594 this._readableState.needReadable = true;
33595
33596 // we have implemented the _read method, and done the other things
33597 // that Readable wants before the first _read call, so unset the
33598 // sync guard flag.
33599 this._readableState.sync = false;
33600
33601 if (options) {
33602 if (typeof options.transform === 'function') this._transform = options.transform;
33603
33604 if (typeof options.flush === 'function') this._flush = options.flush;
33605 }
33606
33607 // When the writable side finishes, then flush out anything remaining.
33608 this.on('prefinish', prefinish);
33609}
33610
33611function prefinish() {
33612 var _this = this;
33613
33614 if (typeof this._flush === 'function') {
33615 this._flush(function (er, data) {
33616 done(_this, er, data);
33617 });
33618 } else {
33619 done(this, null, null);
33620 }
33621}
33622
33623Transform.prototype.push = function (chunk, encoding) {
33624 this._transformState.needTransform = false;
33625 return Duplex.prototype.push.call(this, chunk, encoding);
33626};
33627
33628// This is the part where you do stuff!
33629// override this function in implementation classes.
33630// 'chunk' is an input chunk.
33631//
33632// Call `push(newChunk)` to pass along transformed output
33633// to the readable side. You may call 'push' zero or more times.
33634//
33635// Call `cb(err)` when you are done with this chunk. If you pass
33636// an error, then that'll put the hurt on the whole operation. If you
33637// never call cb(), then you'll never get another chunk.
33638Transform.prototype._transform = function (chunk, encoding, cb) {
33639 throw new Error('_transform() is not implemented');
33640};
33641
33642Transform.prototype._write = function (chunk, encoding, cb) {
33643 var ts = this._transformState;
33644 ts.writecb = cb;
33645 ts.writechunk = chunk;
33646 ts.writeencoding = encoding;
33647 if (!ts.transforming) {
33648 var rs = this._readableState;
33649 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
33650 }
33651};
33652
33653// Doesn't matter what the args are here.
33654// _transform does all the work.
33655// That we got here means that the readable side wants more data.
33656Transform.prototype._read = function (n) {
33657 var ts = this._transformState;
33658
33659 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
33660 ts.transforming = true;
33661 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
33662 } else {
33663 // mark that we need a transform, so that any data that comes in
33664 // will get processed, now that we've asked for it.
33665 ts.needTransform = true;
33666 }
33667};
33668
33669Transform.prototype._destroy = function (err, cb) {
33670 var _this2 = this;
33671
33672 Duplex.prototype._destroy.call(this, err, function (err2) {
33673 cb(err2);
33674 _this2.emit('close');
33675 });
33676};
33677
33678function done(stream, er, data) {
33679 if (er) return stream.emit('error', er);
33680
33681 if (data != null) // single equals check for both `null` and `undefined`
33682 stream.push(data);
33683
33684 // if there's nothing in the write buffer, then that means
33685 // that nothing more will ever be provided
33686 if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
33687
33688 if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
33689
33690 return stream.push(null);
33691}
33692},{"./_stream_duplex":384,"core-util-is":52,"inherits":119}],388:[function(require,module,exports){
33693(function (process,global,setImmediate){
33694// Copyright Joyent, Inc. and other Node contributors.
33695//
33696// Permission is hereby granted, free of charge, to any person obtaining a
33697// copy of this software and associated documentation files (the
33698// "Software"), to deal in the Software without restriction, including
33699// without limitation the rights to use, copy, modify, merge, publish,
33700// distribute, sublicense, and/or sell copies of the Software, and to permit
33701// persons to whom the Software is furnished to do so, subject to the
33702// following conditions:
33703//
33704// The above copyright notice and this permission notice shall be included
33705// in all copies or substantial portions of the Software.
33706//
33707// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
33708// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33709// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
33710// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
33711// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
33712// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
33713// USE OR OTHER DEALINGS IN THE SOFTWARE.
33714
33715// A bit simpler than readable streams.
33716// Implement an async ._write(chunk, encoding, cb), and it'll handle all
33717// the drain event emission and buffering.
33718
33719'use strict';
33720
33721/*<replacement>*/
33722
33723var pna = require('process-nextick-args');
33724/*</replacement>*/
33725
33726module.exports = Writable;
33727
33728/* <replacement> */
33729function WriteReq(chunk, encoding, cb) {
33730 this.chunk = chunk;
33731 this.encoding = encoding;
33732 this.callback = cb;
33733 this.next = null;
33734}
33735
33736// It seems a linked list but it is not
33737// there will be only 2 of these for each stream
33738function CorkedRequest(state) {
33739 var _this = this;
33740
33741 this.next = null;
33742 this.entry = null;
33743 this.finish = function () {
33744 onCorkedFinish(_this, state);
33745 };
33746}
33747/* </replacement> */
33748
33749/*<replacement>*/
33750var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
33751/*</replacement>*/
33752
33753/*<replacement>*/
33754var Duplex;
33755/*</replacement>*/
33756
33757Writable.WritableState = WritableState;
33758
33759/*<replacement>*/
33760var util = require('core-util-is');
33761util.inherits = require('inherits');
33762/*</replacement>*/
33763
33764/*<replacement>*/
33765var internalUtil = {
33766 deprecate: require('util-deprecate')
33767};
33768/*</replacement>*/
33769
33770/*<replacement>*/
33771var Stream = require('./internal/streams/stream');
33772/*</replacement>*/
33773
33774/*<replacement>*/
33775
33776var Buffer = require('safe-buffer').Buffer;
33777var OurUint8Array = global.Uint8Array || function () {};
33778function _uint8ArrayToBuffer(chunk) {
33779 return Buffer.from(chunk);
33780}
33781function _isUint8Array(obj) {
33782 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
33783}
33784
33785/*</replacement>*/
33786
33787var destroyImpl = require('./internal/streams/destroy');
33788
33789util.inherits(Writable, Stream);
33790
33791function nop() {}
33792
33793function WritableState(options, stream) {
33794 Duplex = Duplex || require('./_stream_duplex');
33795
33796 options = options || {};
33797
33798 // Duplex streams are both readable and writable, but share
33799 // the same options object.
33800 // However, some cases require setting options to different
33801 // values for the readable and the writable sides of the duplex stream.
33802 // These options can be provided separately as readableXXX and writableXXX.
33803 var isDuplex = stream instanceof Duplex;
33804
33805 // object stream flag to indicate whether or not this stream
33806 // contains buffers or objects.
33807 this.objectMode = !!options.objectMode;
33808
33809 if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
33810
33811 // the point at which write() starts returning false
33812 // Note: 0 is a valid value, means that we always return false if
33813 // the entire buffer is not flushed immediately on write()
33814 var hwm = options.highWaterMark;
33815 var writableHwm = options.writableHighWaterMark;
33816 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
33817
33818 if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
33819
33820 // cast to ints.
33821 this.highWaterMark = Math.floor(this.highWaterMark);
33822
33823 // if _final has been called
33824 this.finalCalled = false;
33825
33826 // drain event flag.
33827 this.needDrain = false;
33828 // at the start of calling end()
33829 this.ending = false;
33830 // when end() has been called, and returned
33831 this.ended = false;
33832 // when 'finish' is emitted
33833 this.finished = false;
33834
33835 // has it been destroyed
33836 this.destroyed = false;
33837
33838 // should we decode strings into buffers before passing to _write?
33839 // this is here so that some node-core streams can optimize string
33840 // handling at a lower level.
33841 var noDecode = options.decodeStrings === false;
33842 this.decodeStrings = !noDecode;
33843
33844 // Crypto is kind of old and crusty. Historically, its default string
33845 // encoding is 'binary' so we have to make this configurable.
33846 // Everything else in the universe uses 'utf8', though.
33847 this.defaultEncoding = options.defaultEncoding || 'utf8';
33848
33849 // not an actual buffer we keep track of, but a measurement
33850 // of how much we're waiting to get pushed to some underlying
33851 // socket or file.
33852 this.length = 0;
33853
33854 // a flag to see when we're in the middle of a write.
33855 this.writing = false;
33856
33857 // when true all writes will be buffered until .uncork() call
33858 this.corked = 0;
33859
33860 // a flag to be able to tell if the onwrite cb is called immediately,
33861 // or on a later tick. We set this to true at first, because any
33862 // actions that shouldn't happen until "later" should generally also
33863 // not happen before the first write call.
33864 this.sync = true;
33865
33866 // a flag to know if we're processing previously buffered items, which
33867 // may call the _write() callback in the same tick, so that we don't
33868 // end up in an overlapped onwrite situation.
33869 this.bufferProcessing = false;
33870
33871 // the callback that's passed to _write(chunk,cb)
33872 this.onwrite = function (er) {
33873 onwrite(stream, er);
33874 };
33875
33876 // the callback that the user supplies to write(chunk,encoding,cb)
33877 this.writecb = null;
33878
33879 // the amount that is being written when _write is called.
33880 this.writelen = 0;
33881
33882 this.bufferedRequest = null;
33883 this.lastBufferedRequest = null;
33884
33885 // number of pending user-supplied write callbacks
33886 // this must be 0 before 'finish' can be emitted
33887 this.pendingcb = 0;
33888
33889 // emit prefinish if the only thing we're waiting for is _write cbs
33890 // This is relevant for synchronous Transform streams
33891 this.prefinished = false;
33892
33893 // True if the error was already emitted and should not be thrown again
33894 this.errorEmitted = false;
33895
33896 // count buffered requests
33897 this.bufferedRequestCount = 0;
33898
33899 // allocate the first CorkedRequest, there is always
33900 // one allocated and free to use, and we maintain at most two
33901 this.corkedRequestsFree = new CorkedRequest(this);
33902}
33903
33904WritableState.prototype.getBuffer = function getBuffer() {
33905 var current = this.bufferedRequest;
33906 var out = [];
33907 while (current) {
33908 out.push(current);
33909 current = current.next;
33910 }
33911 return out;
33912};
33913
33914(function () {
33915 try {
33916 Object.defineProperty(WritableState.prototype, 'buffer', {
33917 get: internalUtil.deprecate(function () {
33918 return this.getBuffer();
33919 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
33920 });
33921 } catch (_) {}
33922})();
33923
33924// Test _writableState for inheritance to account for Duplex streams,
33925// whose prototype chain only points to Readable.
33926var realHasInstance;
33927if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
33928 realHasInstance = Function.prototype[Symbol.hasInstance];
33929 Object.defineProperty(Writable, Symbol.hasInstance, {
33930 value: function (object) {
33931 if (realHasInstance.call(this, object)) return true;
33932 if (this !== Writable) return false;
33933
33934 return object && object._writableState instanceof WritableState;
33935 }
33936 });
33937} else {
33938 realHasInstance = function (object) {
33939 return object instanceof this;
33940 };
33941}
33942
33943function Writable(options) {
33944 Duplex = Duplex || require('./_stream_duplex');
33945
33946 // Writable ctor is applied to Duplexes, too.
33947 // `realHasInstance` is necessary because using plain `instanceof`
33948 // would return false, as no `_writableState` property is attached.
33949
33950 // Trying to use the custom `instanceof` for Writable here will also break the
33951 // Node.js LazyTransform implementation, which has a non-trivial getter for
33952 // `_writableState` that would lead to infinite recursion.
33953 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
33954 return new Writable(options);
33955 }
33956
33957 this._writableState = new WritableState(options, this);
33958
33959 // legacy.
33960 this.writable = true;
33961
33962 if (options) {
33963 if (typeof options.write === 'function') this._write = options.write;
33964
33965 if (typeof options.writev === 'function') this._writev = options.writev;
33966
33967 if (typeof options.destroy === 'function') this._destroy = options.destroy;
33968
33969 if (typeof options.final === 'function') this._final = options.final;
33970 }
33971
33972 Stream.call(this);
33973}
33974
33975// Otherwise people can pipe Writable streams, which is just wrong.
33976Writable.prototype.pipe = function () {
33977 this.emit('error', new Error('Cannot pipe, not readable'));
33978};
33979
33980function writeAfterEnd(stream, cb) {
33981 var er = new Error('write after end');
33982 // TODO: defer error events consistently everywhere, not just the cb
33983 stream.emit('error', er);
33984 pna.nextTick(cb, er);
33985}
33986
33987// Checks that a user-supplied chunk is valid, especially for the particular
33988// mode the stream is in. Currently this means that `null` is never accepted
33989// and undefined/non-string values are only allowed in object mode.
33990function validChunk(stream, state, chunk, cb) {
33991 var valid = true;
33992 var er = false;
33993
33994 if (chunk === null) {
33995 er = new TypeError('May not write null values to stream');
33996 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
33997 er = new TypeError('Invalid non-string/buffer chunk');
33998 }
33999 if (er) {
34000 stream.emit('error', er);
34001 pna.nextTick(cb, er);
34002 valid = false;
34003 }
34004 return valid;
34005}
34006
34007Writable.prototype.write = function (chunk, encoding, cb) {
34008 var state = this._writableState;
34009 var ret = false;
34010 var isBuf = !state.objectMode && _isUint8Array(chunk);
34011
34012 if (isBuf && !Buffer.isBuffer(chunk)) {
34013 chunk = _uint8ArrayToBuffer(chunk);
34014 }
34015
34016 if (typeof encoding === 'function') {
34017 cb = encoding;
34018 encoding = null;
34019 }
34020
34021 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
34022
34023 if (typeof cb !== 'function') cb = nop;
34024
34025 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
34026 state.pendingcb++;
34027 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
34028 }
34029
34030 return ret;
34031};
34032
34033Writable.prototype.cork = function () {
34034 var state = this._writableState;
34035
34036 state.corked++;
34037};
34038
34039Writable.prototype.uncork = function () {
34040 var state = this._writableState;
34041
34042 if (state.corked) {
34043 state.corked--;
34044
34045 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
34046 }
34047};
34048
34049Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
34050 // node::ParseEncoding() requires lower case.
34051 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
34052 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
34053 this._writableState.defaultEncoding = encoding;
34054 return this;
34055};
34056
34057function decodeChunk(state, chunk, encoding) {
34058 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
34059 chunk = Buffer.from(chunk, encoding);
34060 }
34061 return chunk;
34062}
34063
34064Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
34065 // making it explicit this property is not enumerable
34066 // because otherwise some prototype manipulation in
34067 // userland will fail
34068 enumerable: false,
34069 get: function () {
34070 return this._writableState.highWaterMark;
34071 }
34072});
34073
34074// if we're already writing something, then just put this
34075// in the queue, and wait our turn. Otherwise, call _write
34076// If we return false, then we need a drain event, so set that flag.
34077function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
34078 if (!isBuf) {
34079 var newChunk = decodeChunk(state, chunk, encoding);
34080 if (chunk !== newChunk) {
34081 isBuf = true;
34082 encoding = 'buffer';
34083 chunk = newChunk;
34084 }
34085 }
34086 var len = state.objectMode ? 1 : chunk.length;
34087
34088 state.length += len;
34089
34090 var ret = state.length < state.highWaterMark;
34091 // we must ensure that previous needDrain will not be reset to false.
34092 if (!ret) state.needDrain = true;
34093
34094 if (state.writing || state.corked) {
34095 var last = state.lastBufferedRequest;
34096 state.lastBufferedRequest = {
34097 chunk: chunk,
34098 encoding: encoding,
34099 isBuf: isBuf,
34100 callback: cb,
34101 next: null
34102 };
34103 if (last) {
34104 last.next = state.lastBufferedRequest;
34105 } else {
34106 state.bufferedRequest = state.lastBufferedRequest;
34107 }
34108 state.bufferedRequestCount += 1;
34109 } else {
34110 doWrite(stream, state, false, len, chunk, encoding, cb);
34111 }
34112
34113 return ret;
34114}
34115
34116function doWrite(stream, state, writev, len, chunk, encoding, cb) {
34117 state.writelen = len;
34118 state.writecb = cb;
34119 state.writing = true;
34120 state.sync = true;
34121 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
34122 state.sync = false;
34123}
34124
34125function onwriteError(stream, state, sync, er, cb) {
34126 --state.pendingcb;
34127
34128 if (sync) {
34129 // defer the callback if we are being called synchronously
34130 // to avoid piling up things on the stack
34131 pna.nextTick(cb, er);
34132 // this can emit finish, and it will always happen
34133 // after error
34134 pna.nextTick(finishMaybe, stream, state);
34135 stream._writableState.errorEmitted = true;
34136 stream.emit('error', er);
34137 } else {
34138 // the caller expect this to happen before if
34139 // it is async
34140 cb(er);
34141 stream._writableState.errorEmitted = true;
34142 stream.emit('error', er);
34143 // this can emit finish, but finish must
34144 // always follow error
34145 finishMaybe(stream, state);
34146 }
34147}
34148
34149function onwriteStateUpdate(state) {
34150 state.writing = false;
34151 state.writecb = null;
34152 state.length -= state.writelen;
34153 state.writelen = 0;
34154}
34155
34156function onwrite(stream, er) {
34157 var state = stream._writableState;
34158 var sync = state.sync;
34159 var cb = state.writecb;
34160
34161 onwriteStateUpdate(state);
34162
34163 if (er) onwriteError(stream, state, sync, er, cb);else {
34164 // Check if we're actually ready to finish, but don't emit yet
34165 var finished = needFinish(state);
34166
34167 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
34168 clearBuffer(stream, state);
34169 }
34170
34171 if (sync) {
34172 /*<replacement>*/
34173 asyncWrite(afterWrite, stream, state, finished, cb);
34174 /*</replacement>*/
34175 } else {
34176 afterWrite(stream, state, finished, cb);
34177 }
34178 }
34179}
34180
34181function afterWrite(stream, state, finished, cb) {
34182 if (!finished) onwriteDrain(stream, state);
34183 state.pendingcb--;
34184 cb();
34185 finishMaybe(stream, state);
34186}
34187
34188// Must force callback to be called on nextTick, so that we don't
34189// emit 'drain' before the write() consumer gets the 'false' return
34190// value, and has a chance to attach a 'drain' listener.
34191function onwriteDrain(stream, state) {
34192 if (state.length === 0 && state.needDrain) {
34193 state.needDrain = false;
34194 stream.emit('drain');
34195 }
34196}
34197
34198// if there's something in the buffer waiting, then process it
34199function clearBuffer(stream, state) {
34200 state.bufferProcessing = true;
34201 var entry = state.bufferedRequest;
34202
34203 if (stream._writev && entry && entry.next) {
34204 // Fast case, write everything using _writev()
34205 var l = state.bufferedRequestCount;
34206 var buffer = new Array(l);
34207 var holder = state.corkedRequestsFree;
34208 holder.entry = entry;
34209
34210 var count = 0;
34211 var allBuffers = true;
34212 while (entry) {
34213 buffer[count] = entry;
34214 if (!entry.isBuf) allBuffers = false;
34215 entry = entry.next;
34216 count += 1;
34217 }
34218 buffer.allBuffers = allBuffers;
34219
34220 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
34221
34222 // doWrite is almost always async, defer these to save a bit of time
34223 // as the hot path ends with doWrite
34224 state.pendingcb++;
34225 state.lastBufferedRequest = null;
34226 if (holder.next) {
34227 state.corkedRequestsFree = holder.next;
34228 holder.next = null;
34229 } else {
34230 state.corkedRequestsFree = new CorkedRequest(state);
34231 }
34232 state.bufferedRequestCount = 0;
34233 } else {
34234 // Slow case, write chunks one-by-one
34235 while (entry) {
34236 var chunk = entry.chunk;
34237 var encoding = entry.encoding;
34238 var cb = entry.callback;
34239 var len = state.objectMode ? 1 : chunk.length;
34240
34241 doWrite(stream, state, false, len, chunk, encoding, cb);
34242 entry = entry.next;
34243 state.bufferedRequestCount--;
34244 // if we didn't call the onwrite immediately, then
34245 // it means that we need to wait until it does.
34246 // also, that means that the chunk and cb are currently
34247 // being processed, so move the buffer counter past them.
34248 if (state.writing) {
34249 break;
34250 }
34251 }
34252
34253 if (entry === null) state.lastBufferedRequest = null;
34254 }
34255
34256 state.bufferedRequest = entry;
34257 state.bufferProcessing = false;
34258}
34259
34260Writable.prototype._write = function (chunk, encoding, cb) {
34261 cb(new Error('_write() is not implemented'));
34262};
34263
34264Writable.prototype._writev = null;
34265
34266Writable.prototype.end = function (chunk, encoding, cb) {
34267 var state = this._writableState;
34268
34269 if (typeof chunk === 'function') {
34270 cb = chunk;
34271 chunk = null;
34272 encoding = null;
34273 } else if (typeof encoding === 'function') {
34274 cb = encoding;
34275 encoding = null;
34276 }
34277
34278 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
34279
34280 // .end() fully uncorks
34281 if (state.corked) {
34282 state.corked = 1;
34283 this.uncork();
34284 }
34285
34286 // ignore unnecessary end() calls.
34287 if (!state.ending && !state.finished) endWritable(this, state, cb);
34288};
34289
34290function needFinish(state) {
34291 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
34292}
34293function callFinal(stream, state) {
34294 stream._final(function (err) {
34295 state.pendingcb--;
34296 if (err) {
34297 stream.emit('error', err);
34298 }
34299 state.prefinished = true;
34300 stream.emit('prefinish');
34301 finishMaybe(stream, state);
34302 });
34303}
34304function prefinish(stream, state) {
34305 if (!state.prefinished && !state.finalCalled) {
34306 if (typeof stream._final === 'function') {
34307 state.pendingcb++;
34308 state.finalCalled = true;
34309 pna.nextTick(callFinal, stream, state);
34310 } else {
34311 state.prefinished = true;
34312 stream.emit('prefinish');
34313 }
34314 }
34315}
34316
34317function finishMaybe(stream, state) {
34318 var need = needFinish(state);
34319 if (need) {
34320 prefinish(stream, state);
34321 if (state.pendingcb === 0) {
34322 state.finished = true;
34323 stream.emit('finish');
34324 }
34325 }
34326 return need;
34327}
34328
34329function endWritable(stream, state, cb) {
34330 state.ending = true;
34331 finishMaybe(stream, state);
34332 if (cb) {
34333 if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
34334 }
34335 state.ended = true;
34336 stream.writable = false;
34337}
34338
34339function onCorkedFinish(corkReq, state, err) {
34340 var entry = corkReq.entry;
34341 corkReq.entry = null;
34342 while (entry) {
34343 var cb = entry.callback;
34344 state.pendingcb--;
34345 cb(err);
34346 entry = entry.next;
34347 }
34348 if (state.corkedRequestsFree) {
34349 state.corkedRequestsFree.next = corkReq;
34350 } else {
34351 state.corkedRequestsFree = corkReq;
34352 }
34353}
34354
34355Object.defineProperty(Writable.prototype, 'destroyed', {
34356 get: function () {
34357 if (this._writableState === undefined) {
34358 return false;
34359 }
34360 return this._writableState.destroyed;
34361 },
34362 set: function (value) {
34363 // we ignore the value if the stream
34364 // has not been initialized yet
34365 if (!this._writableState) {
34366 return;
34367 }
34368
34369 // backward compatibility, the user is explicitly
34370 // managing destroyed
34371 this._writableState.destroyed = value;
34372 }
34373});
34374
34375Writable.prototype.destroy = destroyImpl.destroy;
34376Writable.prototype._undestroy = destroyImpl.undestroy;
34377Writable.prototype._destroy = function (err, cb) {
34378 this.end();
34379 cb(err);
34380};
34381}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
34382},{"./_stream_duplex":384,"./internal/streams/destroy":390,"./internal/streams/stream":391,"_process":374,"core-util-is":52,"inherits":119,"process-nextick-args":373,"safe-buffer":398,"timers":439,"util-deprecate":441}],389:[function(require,module,exports){
34383'use strict';
34384
34385function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34386
34387var Buffer = require('safe-buffer').Buffer;
34388var util = require('util');
34389
34390function copyBuffer(src, target, offset) {
34391 src.copy(target, offset);
34392}
34393
34394module.exports = function () {
34395 function BufferList() {
34396 _classCallCheck(this, BufferList);
34397
34398 this.head = null;
34399 this.tail = null;
34400 this.length = 0;
34401 }
34402
34403 BufferList.prototype.push = function push(v) {
34404 var entry = { data: v, next: null };
34405 if (this.length > 0) this.tail.next = entry;else this.head = entry;
34406 this.tail = entry;
34407 ++this.length;
34408 };
34409
34410 BufferList.prototype.unshift = function unshift(v) {
34411 var entry = { data: v, next: this.head };
34412 if (this.length === 0) this.tail = entry;
34413 this.head = entry;
34414 ++this.length;
34415 };
34416
34417 BufferList.prototype.shift = function shift() {
34418 if (this.length === 0) return;
34419 var ret = this.head.data;
34420 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
34421 --this.length;
34422 return ret;
34423 };
34424
34425 BufferList.prototype.clear = function clear() {
34426 this.head = this.tail = null;
34427 this.length = 0;
34428 };
34429
34430 BufferList.prototype.join = function join(s) {
34431 if (this.length === 0) return '';
34432 var p = this.head;
34433 var ret = '' + p.data;
34434 while (p = p.next) {
34435 ret += s + p.data;
34436 }return ret;
34437 };
34438
34439 BufferList.prototype.concat = function concat(n) {
34440 if (this.length === 0) return Buffer.alloc(0);
34441 if (this.length === 1) return this.head.data;
34442 var ret = Buffer.allocUnsafe(n >>> 0);
34443 var p = this.head;
34444 var i = 0;
34445 while (p) {
34446 copyBuffer(p.data, ret, i);
34447 i += p.data.length;
34448 p = p.next;
34449 }
34450 return ret;
34451 };
34452
34453 return BufferList;
34454}();
34455
34456if (util && util.inspect && util.inspect.custom) {
34457 module.exports.prototype[util.inspect.custom] = function () {
34458 var obj = util.inspect({ length: this.length });
34459 return this.constructor.name + ' ' + obj;
34460 };
34461}
34462},{"safe-buffer":398,"util":20}],390:[function(require,module,exports){
34463'use strict';
34464
34465/*<replacement>*/
34466
34467var pna = require('process-nextick-args');
34468/*</replacement>*/
34469
34470// undocumented cb() API, needed for core, not for public API
34471function destroy(err, cb) {
34472 var _this = this;
34473
34474 var readableDestroyed = this._readableState && this._readableState.destroyed;
34475 var writableDestroyed = this._writableState && this._writableState.destroyed;
34476
34477 if (readableDestroyed || writableDestroyed) {
34478 if (cb) {
34479 cb(err);
34480 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
34481 pna.nextTick(emitErrorNT, this, err);
34482 }
34483 return this;
34484 }
34485
34486 // we set destroyed to true before firing error callbacks in order
34487 // to make it re-entrance safe in case destroy() is called within callbacks
34488
34489 if (this._readableState) {
34490 this._readableState.destroyed = true;
34491 }
34492
34493 // if this is a duplex stream mark the writable part as destroyed as well
34494 if (this._writableState) {
34495 this._writableState.destroyed = true;
34496 }
34497
34498 this._destroy(err || null, function (err) {
34499 if (!cb && err) {
34500 pna.nextTick(emitErrorNT, _this, err);
34501 if (_this._writableState) {
34502 _this._writableState.errorEmitted = true;
34503 }
34504 } else if (cb) {
34505 cb(err);
34506 }
34507 });
34508
34509 return this;
34510}
34511
34512function undestroy() {
34513 if (this._readableState) {
34514 this._readableState.destroyed = false;
34515 this._readableState.reading = false;
34516 this._readableState.ended = false;
34517 this._readableState.endEmitted = false;
34518 }
34519
34520 if (this._writableState) {
34521 this._writableState.destroyed = false;
34522 this._writableState.ended = false;
34523 this._writableState.ending = false;
34524 this._writableState.finished = false;
34525 this._writableState.errorEmitted = false;
34526 }
34527}
34528
34529function emitErrorNT(self, err) {
34530 self.emit('error', err);
34531}
34532
34533module.exports = {
34534 destroy: destroy,
34535 undestroy: undestroy
34536};
34537},{"process-nextick-args":373}],391:[function(require,module,exports){
34538module.exports = require('events').EventEmitter;
34539
34540},{"events":102}],392:[function(require,module,exports){
34541// Copyright Joyent, Inc. and other Node contributors.
34542//
34543// Permission is hereby granted, free of charge, to any person obtaining a
34544// copy of this software and associated documentation files (the
34545// "Software"), to deal in the Software without restriction, including
34546// without limitation the rights to use, copy, modify, merge, publish,
34547// distribute, sublicense, and/or sell copies of the Software, and to permit
34548// persons to whom the Software is furnished to do so, subject to the
34549// following conditions:
34550//
34551// The above copyright notice and this permission notice shall be included
34552// in all copies or substantial portions of the Software.
34553//
34554// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
34555// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34556// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
34557// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
34558// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
34559// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
34560// USE OR OTHER DEALINGS IN THE SOFTWARE.
34561
34562'use strict';
34563
34564/*<replacement>*/
34565
34566var Buffer = require('safe-buffer').Buffer;
34567/*</replacement>*/
34568
34569var isEncoding = Buffer.isEncoding || function (encoding) {
34570 encoding = '' + encoding;
34571 switch (encoding && encoding.toLowerCase()) {
34572 case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
34573 return true;
34574 default:
34575 return false;
34576 }
34577};
34578
34579function _normalizeEncoding(enc) {
34580 if (!enc) return 'utf8';
34581 var retried;
34582 while (true) {
34583 switch (enc) {
34584 case 'utf8':
34585 case 'utf-8':
34586 return 'utf8';
34587 case 'ucs2':
34588 case 'ucs-2':
34589 case 'utf16le':
34590 case 'utf-16le':
34591 return 'utf16le';
34592 case 'latin1':
34593 case 'binary':
34594 return 'latin1';
34595 case 'base64':
34596 case 'ascii':
34597 case 'hex':
34598 return enc;
34599 default:
34600 if (retried) return; // undefined
34601 enc = ('' + enc).toLowerCase();
34602 retried = true;
34603 }
34604 }
34605};
34606
34607// Do not cache `Buffer.isEncoding` when checking encoding names as some
34608// modules monkey-patch it to support additional encodings
34609function normalizeEncoding(enc) {
34610 var nenc = _normalizeEncoding(enc);
34611 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
34612 return nenc || enc;
34613}
34614
34615// StringDecoder provides an interface for efficiently splitting a series of
34616// buffers into a series of JS strings without breaking apart multi-byte
34617// characters.
34618exports.StringDecoder = StringDecoder;
34619function StringDecoder(encoding) {
34620 this.encoding = normalizeEncoding(encoding);
34621 var nb;
34622 switch (this.encoding) {
34623 case 'utf16le':
34624 this.text = utf16Text;
34625 this.end = utf16End;
34626 nb = 4;
34627 break;
34628 case 'utf8':
34629 this.fillLast = utf8FillLast;
34630 nb = 4;
34631 break;
34632 case 'base64':
34633 this.text = base64Text;
34634 this.end = base64End;
34635 nb = 3;
34636 break;
34637 default:
34638 this.write = simpleWrite;
34639 this.end = simpleEnd;
34640 return;
34641 }
34642 this.lastNeed = 0;
34643 this.lastTotal = 0;
34644 this.lastChar = Buffer.allocUnsafe(nb);
34645}
34646
34647StringDecoder.prototype.write = function (buf) {
34648 if (buf.length === 0) return '';
34649 var r;
34650 var i;
34651 if (this.lastNeed) {
34652 r = this.fillLast(buf);
34653 if (r === undefined) return '';
34654 i = this.lastNeed;
34655 this.lastNeed = 0;
34656 } else {
34657 i = 0;
34658 }
34659 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
34660 return r || '';
34661};
34662
34663StringDecoder.prototype.end = utf8End;
34664
34665// Returns only complete characters in a Buffer
34666StringDecoder.prototype.text = utf8Text;
34667
34668// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
34669StringDecoder.prototype.fillLast = function (buf) {
34670 if (this.lastNeed <= buf.length) {
34671 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
34672 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
34673 }
34674 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
34675 this.lastNeed -= buf.length;
34676};
34677
34678// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
34679// continuation byte. If an invalid byte is detected, -2 is returned.
34680function utf8CheckByte(byte) {
34681 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
34682 return byte >> 6 === 0x02 ? -1 : -2;
34683}
34684
34685// Checks at most 3 bytes at the end of a Buffer in order to detect an
34686// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
34687// needed to complete the UTF-8 character (if applicable) are returned.
34688function utf8CheckIncomplete(self, buf, i) {
34689 var j = buf.length - 1;
34690 if (j < i) return 0;
34691 var nb = utf8CheckByte(buf[j]);
34692 if (nb >= 0) {
34693 if (nb > 0) self.lastNeed = nb - 1;
34694 return nb;
34695 }
34696 if (--j < i || nb === -2) return 0;
34697 nb = utf8CheckByte(buf[j]);
34698 if (nb >= 0) {
34699 if (nb > 0) self.lastNeed = nb - 2;
34700 return nb;
34701 }
34702 if (--j < i || nb === -2) return 0;
34703 nb = utf8CheckByte(buf[j]);
34704 if (nb >= 0) {
34705 if (nb > 0) {
34706 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
34707 }
34708 return nb;
34709 }
34710 return 0;
34711}
34712
34713// Validates as many continuation bytes for a multi-byte UTF-8 character as
34714// needed or are available. If we see a non-continuation byte where we expect
34715// one, we "replace" the validated continuation bytes we've seen so far with
34716// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
34717// behavior. The continuation byte check is included three times in the case
34718// where all of the continuation bytes for a character exist in the same buffer.
34719// It is also done this way as a slight performance increase instead of using a
34720// loop.
34721function utf8CheckExtraBytes(self, buf, p) {
34722 if ((buf[0] & 0xC0) !== 0x80) {
34723 self.lastNeed = 0;
34724 return '\ufffd';
34725 }
34726 if (self.lastNeed > 1 && buf.length > 1) {
34727 if ((buf[1] & 0xC0) !== 0x80) {
34728 self.lastNeed = 1;
34729 return '\ufffd';
34730 }
34731 if (self.lastNeed > 2 && buf.length > 2) {
34732 if ((buf[2] & 0xC0) !== 0x80) {
34733 self.lastNeed = 2;
34734 return '\ufffd';
34735 }
34736 }
34737 }
34738}
34739
34740// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
34741function utf8FillLast(buf) {
34742 var p = this.lastTotal - this.lastNeed;
34743 var r = utf8CheckExtraBytes(this, buf, p);
34744 if (r !== undefined) return r;
34745 if (this.lastNeed <= buf.length) {
34746 buf.copy(this.lastChar, p, 0, this.lastNeed);
34747 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
34748 }
34749 buf.copy(this.lastChar, p, 0, buf.length);
34750 this.lastNeed -= buf.length;
34751}
34752
34753// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
34754// partial character, the character's bytes are buffered until the required
34755// number of bytes are available.
34756function utf8Text(buf, i) {
34757 var total = utf8CheckIncomplete(this, buf, i);
34758 if (!this.lastNeed) return buf.toString('utf8', i);
34759 this.lastTotal = total;
34760 var end = buf.length - (total - this.lastNeed);
34761 buf.copy(this.lastChar, 0, end);
34762 return buf.toString('utf8', i, end);
34763}
34764
34765// For UTF-8, a replacement character is added when ending on a partial
34766// character.
34767function utf8End(buf) {
34768 var r = buf && buf.length ? this.write(buf) : '';
34769 if (this.lastNeed) return r + '\ufffd';
34770 return r;
34771}
34772
34773// UTF-16LE typically needs two bytes per character, but even if we have an even
34774// number of bytes available, we need to check if we end on a leading/high
34775// surrogate. In that case, we need to wait for the next two bytes in order to
34776// decode the last character properly.
34777function utf16Text(buf, i) {
34778 if ((buf.length - i) % 2 === 0) {
34779 var r = buf.toString('utf16le', i);
34780 if (r) {
34781 var c = r.charCodeAt(r.length - 1);
34782 if (c >= 0xD800 && c <= 0xDBFF) {
34783 this.lastNeed = 2;
34784 this.lastTotal = 4;
34785 this.lastChar[0] = buf[buf.length - 2];
34786 this.lastChar[1] = buf[buf.length - 1];
34787 return r.slice(0, -1);
34788 }
34789 }
34790 return r;
34791 }
34792 this.lastNeed = 1;
34793 this.lastTotal = 2;
34794 this.lastChar[0] = buf[buf.length - 1];
34795 return buf.toString('utf16le', i, buf.length - 1);
34796}
34797
34798// For UTF-16LE we do not explicitly append special replacement characters if we
34799// end on a partial character, we simply let v8 handle that.
34800function utf16End(buf) {
34801 var r = buf && buf.length ? this.write(buf) : '';
34802 if (this.lastNeed) {
34803 var end = this.lastTotal - this.lastNeed;
34804 return r + this.lastChar.toString('utf16le', 0, end);
34805 }
34806 return r;
34807}
34808
34809function base64Text(buf, i) {
34810 var n = (buf.length - i) % 3;
34811 if (n === 0) return buf.toString('base64', i);
34812 this.lastNeed = 3 - n;
34813 this.lastTotal = 3;
34814 if (n === 1) {
34815 this.lastChar[0] = buf[buf.length - 1];
34816 } else {
34817 this.lastChar[0] = buf[buf.length - 2];
34818 this.lastChar[1] = buf[buf.length - 1];
34819 }
34820 return buf.toString('base64', i, buf.length - n);
34821}
34822
34823function base64End(buf) {
34824 var r = buf && buf.length ? this.write(buf) : '';
34825 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
34826 return r;
34827}
34828
34829// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
34830function simpleWrite(buf) {
34831 return buf.toString(this.encoding);
34832}
34833
34834function simpleEnd(buf) {
34835 return buf && buf.length ? this.write(buf) : '';
34836}
34837},{"safe-buffer":398}],393:[function(require,module,exports){
34838module.exports = require('./readable').PassThrough
34839
34840},{"./readable":394}],394:[function(require,module,exports){
34841exports = module.exports = require('./lib/_stream_readable.js');
34842exports.Stream = exports;
34843exports.Readable = exports;
34844exports.Writable = require('./lib/_stream_writable.js');
34845exports.Duplex = require('./lib/_stream_duplex.js');
34846exports.Transform = require('./lib/_stream_transform.js');
34847exports.PassThrough = require('./lib/_stream_passthrough.js');
34848
34849},{"./lib/_stream_duplex.js":384,"./lib/_stream_passthrough.js":385,"./lib/_stream_readable.js":386,"./lib/_stream_transform.js":387,"./lib/_stream_writable.js":388}],395:[function(require,module,exports){
34850module.exports = require('./readable').Transform
34851
34852},{"./readable":394}],396:[function(require,module,exports){
34853module.exports = require('./lib/_stream_writable.js');
34854
34855},{"./lib/_stream_writable.js":388}],397:[function(require,module,exports){
34856'use strict'
34857var Buffer = require('buffer').Buffer
34858var inherits = require('inherits')
34859var HashBase = require('hash-base')
34860
34861var ARRAY16 = new Array(16)
34862
34863var zl = [
34864 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
34865 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
34866 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
34867 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
34868 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
34869]
34870
34871var zr = [
34872 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
34873 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
34874 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
34875 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34876 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
34877]
34878
34879var sl = [
34880 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
34881 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
34882 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
34883 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
34884 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
34885]
34886
34887var sr = [
34888 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
34889 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
34890 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
34891 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
34892 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
34893]
34894
34895var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]
34896var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]
34897
34898function RIPEMD160 () {
34899 HashBase.call(this, 64)
34900
34901 // state
34902 this._a = 0x67452301
34903 this._b = 0xefcdab89
34904 this._c = 0x98badcfe
34905 this._d = 0x10325476
34906 this._e = 0xc3d2e1f0
34907}
34908
34909inherits(RIPEMD160, HashBase)
34910
34911RIPEMD160.prototype._update = function () {
34912 var words = ARRAY16
34913 for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)
34914
34915 var al = this._a | 0
34916 var bl = this._b | 0
34917 var cl = this._c | 0
34918 var dl = this._d | 0
34919 var el = this._e | 0
34920
34921 var ar = this._a | 0
34922 var br = this._b | 0
34923 var cr = this._c | 0
34924 var dr = this._d | 0
34925 var er = this._e | 0
34926
34927 // computation
34928 for (var i = 0; i < 80; i += 1) {
34929 var tl
34930 var tr
34931 if (i < 16) {
34932 tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])
34933 tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])
34934 } else if (i < 32) {
34935 tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])
34936 tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])
34937 } else if (i < 48) {
34938 tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])
34939 tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])
34940 } else if (i < 64) {
34941 tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])
34942 tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])
34943 } else { // if (i<80) {
34944 tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])
34945 tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])
34946 }
34947
34948 al = el
34949 el = dl
34950 dl = rotl(cl, 10)
34951 cl = bl
34952 bl = tl
34953
34954 ar = er
34955 er = dr
34956 dr = rotl(cr, 10)
34957 cr = br
34958 br = tr
34959 }
34960
34961 // update state
34962 var t = (this._b + cl + dr) | 0
34963 this._b = (this._c + dl + er) | 0
34964 this._c = (this._d + el + ar) | 0
34965 this._d = (this._e + al + br) | 0
34966 this._e = (this._a + bl + cr) | 0
34967 this._a = t
34968}
34969
34970RIPEMD160.prototype._digest = function () {
34971 // create padding and handle blocks
34972 this._block[this._blockOffset++] = 0x80
34973 if (this._blockOffset > 56) {
34974 this._block.fill(0, this._blockOffset, 64)
34975 this._update()
34976 this._blockOffset = 0
34977 }
34978
34979 this._block.fill(0, this._blockOffset, 56)
34980 this._block.writeUInt32LE(this._length[0], 56)
34981 this._block.writeUInt32LE(this._length[1], 60)
34982 this._update()
34983
34984 // produce result
34985 var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)
34986 buffer.writeInt32LE(this._a, 0)
34987 buffer.writeInt32LE(this._b, 4)
34988 buffer.writeInt32LE(this._c, 8)
34989 buffer.writeInt32LE(this._d, 12)
34990 buffer.writeInt32LE(this._e, 16)
34991 return buffer
34992}
34993
34994function rotl (x, n) {
34995 return (x << n) | (x >>> (32 - n))
34996}
34997
34998function fn1 (a, b, c, d, e, m, k, s) {
34999 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
35000}
35001
35002function fn2 (a, b, c, d, e, m, k, s) {
35003 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
35004}
35005
35006function fn3 (a, b, c, d, e, m, k, s) {
35007 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
35008}
35009
35010function fn4 (a, b, c, d, e, m, k, s) {
35011 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
35012}
35013
35014function fn5 (a, b, c, d, e, m, k, s) {
35015 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
35016}
35017
35018module.exports = RIPEMD160
35019
35020},{"buffer":50,"hash-base":104,"inherits":119}],398:[function(require,module,exports){
35021/* eslint-disable node/no-deprecated-api */
35022var buffer = require('buffer')
35023var Buffer = buffer.Buffer
35024
35025// alternative to using Object.keys for old browsers
35026function copyProps (src, dst) {
35027 for (var key in src) {
35028 dst[key] = src[key]
35029 }
35030}
35031if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
35032 module.exports = buffer
35033} else {
35034 // Copy properties from require('buffer')
35035 copyProps(buffer, exports)
35036 exports.Buffer = SafeBuffer
35037}
35038
35039function SafeBuffer (arg, encodingOrOffset, length) {
35040 return Buffer(arg, encodingOrOffset, length)
35041}
35042
35043// Copy static methods from Buffer
35044copyProps(Buffer, SafeBuffer)
35045
35046SafeBuffer.from = function (arg, encodingOrOffset, length) {
35047 if (typeof arg === 'number') {
35048 throw new TypeError('Argument must not be a number')
35049 }
35050 return Buffer(arg, encodingOrOffset, length)
35051}
35052
35053SafeBuffer.alloc = function (size, fill, encoding) {
35054 if (typeof size !== 'number') {
35055 throw new TypeError('Argument must be a number')
35056 }
35057 var buf = Buffer(size)
35058 if (fill !== undefined) {
35059 if (typeof encoding === 'string') {
35060 buf.fill(fill, encoding)
35061 } else {
35062 buf.fill(fill)
35063 }
35064 } else {
35065 buf.fill(0)
35066 }
35067 return buf
35068}
35069
35070SafeBuffer.allocUnsafe = function (size) {
35071 if (typeof size !== 'number') {
35072 throw new TypeError('Argument must be a number')
35073 }
35074 return Buffer(size)
35075}
35076
35077SafeBuffer.allocUnsafeSlow = function (size) {
35078 if (typeof size !== 'number') {
35079 throw new TypeError('Argument must be a number')
35080 }
35081 return buffer.SlowBuffer(size)
35082}
35083
35084},{"buffer":50}],399:[function(require,module,exports){
35085var Buffer = require('safe-buffer').Buffer
35086
35087// prototype class for hash functions
35088function Hash (blockSize, finalSize) {
35089 this._block = Buffer.alloc(blockSize)
35090 this._finalSize = finalSize
35091 this._blockSize = blockSize
35092 this._len = 0
35093}
35094
35095Hash.prototype.update = function (data, enc) {
35096 if (typeof data === 'string') {
35097 enc = enc || 'utf8'
35098 data = Buffer.from(data, enc)
35099 }
35100
35101 var block = this._block
35102 var blockSize = this._blockSize
35103 var length = data.length
35104 var accum = this._len
35105
35106 for (var offset = 0; offset < length;) {
35107 var assigned = accum % blockSize
35108 var remainder = Math.min(length - offset, blockSize - assigned)
35109
35110 for (var i = 0; i < remainder; i++) {
35111 block[assigned + i] = data[offset + i]
35112 }
35113
35114 accum += remainder
35115 offset += remainder
35116
35117 if ((accum % blockSize) === 0) {
35118 this._update(block)
35119 }
35120 }
35121
35122 this._len += length
35123 return this
35124}
35125
35126Hash.prototype.digest = function (enc) {
35127 var rem = this._len % this._blockSize
35128
35129 this._block[rem] = 0x80
35130
35131 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
35132 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
35133 this._block.fill(0, rem + 1)
35134
35135 if (rem >= this._finalSize) {
35136 this._update(this._block)
35137 this._block.fill(0)
35138 }
35139
35140 var bits = this._len * 8
35141
35142 // uint32
35143 if (bits <= 0xffffffff) {
35144 this._block.writeUInt32BE(bits, this._blockSize - 4)
35145
35146 // uint64
35147 } else {
35148 var lowBits = (bits & 0xffffffff) >>> 0
35149 var highBits = (bits - lowBits) / 0x100000000
35150
35151 this._block.writeUInt32BE(highBits, this._blockSize - 8)
35152 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
35153 }
35154
35155 this._update(this._block)
35156 var hash = this._hash()
35157
35158 return enc ? hash.toString(enc) : hash
35159}
35160
35161Hash.prototype._update = function () {
35162 throw new Error('_update must be implemented by subclass')
35163}
35164
35165module.exports = Hash
35166
35167},{"safe-buffer":398}],400:[function(require,module,exports){
35168var exports = module.exports = function SHA (algorithm) {
35169 algorithm = algorithm.toLowerCase()
35170
35171 var Algorithm = exports[algorithm]
35172 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
35173
35174 return new Algorithm()
35175}
35176
35177exports.sha = require('./sha')
35178exports.sha1 = require('./sha1')
35179exports.sha224 = require('./sha224')
35180exports.sha256 = require('./sha256')
35181exports.sha384 = require('./sha384')
35182exports.sha512 = require('./sha512')
35183
35184},{"./sha":401,"./sha1":402,"./sha224":403,"./sha256":404,"./sha384":405,"./sha512":406}],401:[function(require,module,exports){
35185/*
35186 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
35187 * in FIPS PUB 180-1
35188 * This source code is derived from sha1.js of the same repository.
35189 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
35190 * operation was added.
35191 */
35192
35193var inherits = require('inherits')
35194var Hash = require('./hash')
35195var Buffer = require('safe-buffer').Buffer
35196
35197var K = [
35198 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35199]
35200
35201var W = new Array(80)
35202
35203function Sha () {
35204 this.init()
35205 this._w = W
35206
35207 Hash.call(this, 64, 56)
35208}
35209
35210inherits(Sha, Hash)
35211
35212Sha.prototype.init = function () {
35213 this._a = 0x67452301
35214 this._b = 0xefcdab89
35215 this._c = 0x98badcfe
35216 this._d = 0x10325476
35217 this._e = 0xc3d2e1f0
35218
35219 return this
35220}
35221
35222function rotl5 (num) {
35223 return (num << 5) | (num >>> 27)
35224}
35225
35226function rotl30 (num) {
35227 return (num << 30) | (num >>> 2)
35228}
35229
35230function ft (s, b, c, d) {
35231 if (s === 0) return (b & c) | ((~b) & d)
35232 if (s === 2) return (b & c) | (b & d) | (c & d)
35233 return b ^ c ^ d
35234}
35235
35236Sha.prototype._update = function (M) {
35237 var W = this._w
35238
35239 var a = this._a | 0
35240 var b = this._b | 0
35241 var c = this._c | 0
35242 var d = this._d | 0
35243 var e = this._e | 0
35244
35245 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35246 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
35247
35248 for (var j = 0; j < 80; ++j) {
35249 var s = ~~(j / 20)
35250 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35251
35252 e = d
35253 d = c
35254 c = rotl30(b)
35255 b = a
35256 a = t
35257 }
35258
35259 this._a = (a + this._a) | 0
35260 this._b = (b + this._b) | 0
35261 this._c = (c + this._c) | 0
35262 this._d = (d + this._d) | 0
35263 this._e = (e + this._e) | 0
35264}
35265
35266Sha.prototype._hash = function () {
35267 var H = Buffer.allocUnsafe(20)
35268
35269 H.writeInt32BE(this._a | 0, 0)
35270 H.writeInt32BE(this._b | 0, 4)
35271 H.writeInt32BE(this._c | 0, 8)
35272 H.writeInt32BE(this._d | 0, 12)
35273 H.writeInt32BE(this._e | 0, 16)
35274
35275 return H
35276}
35277
35278module.exports = Sha
35279
35280},{"./hash":399,"inherits":119,"safe-buffer":398}],402:[function(require,module,exports){
35281/*
35282 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
35283 * in FIPS PUB 180-1
35284 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
35285 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35286 * Distributed under the BSD License
35287 * See http://pajhome.org.uk/crypt/md5 for details.
35288 */
35289
35290var inherits = require('inherits')
35291var Hash = require('./hash')
35292var Buffer = require('safe-buffer').Buffer
35293
35294var K = [
35295 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35296]
35297
35298var W = new Array(80)
35299
35300function Sha1 () {
35301 this.init()
35302 this._w = W
35303
35304 Hash.call(this, 64, 56)
35305}
35306
35307inherits(Sha1, Hash)
35308
35309Sha1.prototype.init = function () {
35310 this._a = 0x67452301
35311 this._b = 0xefcdab89
35312 this._c = 0x98badcfe
35313 this._d = 0x10325476
35314 this._e = 0xc3d2e1f0
35315
35316 return this
35317}
35318
35319function rotl1 (num) {
35320 return (num << 1) | (num >>> 31)
35321}
35322
35323function rotl5 (num) {
35324 return (num << 5) | (num >>> 27)
35325}
35326
35327function rotl30 (num) {
35328 return (num << 30) | (num >>> 2)
35329}
35330
35331function ft (s, b, c, d) {
35332 if (s === 0) return (b & c) | ((~b) & d)
35333 if (s === 2) return (b & c) | (b & d) | (c & d)
35334 return b ^ c ^ d
35335}
35336
35337Sha1.prototype._update = function (M) {
35338 var W = this._w
35339
35340 var a = this._a | 0
35341 var b = this._b | 0
35342 var c = this._c | 0
35343 var d = this._d | 0
35344 var e = this._e | 0
35345
35346 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35347 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
35348
35349 for (var j = 0; j < 80; ++j) {
35350 var s = ~~(j / 20)
35351 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35352
35353 e = d
35354 d = c
35355 c = rotl30(b)
35356 b = a
35357 a = t
35358 }
35359
35360 this._a = (a + this._a) | 0
35361 this._b = (b + this._b) | 0
35362 this._c = (c + this._c) | 0
35363 this._d = (d + this._d) | 0
35364 this._e = (e + this._e) | 0
35365}
35366
35367Sha1.prototype._hash = function () {
35368 var H = Buffer.allocUnsafe(20)
35369
35370 H.writeInt32BE(this._a | 0, 0)
35371 H.writeInt32BE(this._b | 0, 4)
35372 H.writeInt32BE(this._c | 0, 8)
35373 H.writeInt32BE(this._d | 0, 12)
35374 H.writeInt32BE(this._e | 0, 16)
35375
35376 return H
35377}
35378
35379module.exports = Sha1
35380
35381},{"./hash":399,"inherits":119,"safe-buffer":398}],403:[function(require,module,exports){
35382/**
35383 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35384 * in FIPS 180-2
35385 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35386 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35387 *
35388 */
35389
35390var inherits = require('inherits')
35391var Sha256 = require('./sha256')
35392var Hash = require('./hash')
35393var Buffer = require('safe-buffer').Buffer
35394
35395var W = new Array(64)
35396
35397function Sha224 () {
35398 this.init()
35399
35400 this._w = W // new Array(64)
35401
35402 Hash.call(this, 64, 56)
35403}
35404
35405inherits(Sha224, Sha256)
35406
35407Sha224.prototype.init = function () {
35408 this._a = 0xc1059ed8
35409 this._b = 0x367cd507
35410 this._c = 0x3070dd17
35411 this._d = 0xf70e5939
35412 this._e = 0xffc00b31
35413 this._f = 0x68581511
35414 this._g = 0x64f98fa7
35415 this._h = 0xbefa4fa4
35416
35417 return this
35418}
35419
35420Sha224.prototype._hash = function () {
35421 var H = Buffer.allocUnsafe(28)
35422
35423 H.writeInt32BE(this._a, 0)
35424 H.writeInt32BE(this._b, 4)
35425 H.writeInt32BE(this._c, 8)
35426 H.writeInt32BE(this._d, 12)
35427 H.writeInt32BE(this._e, 16)
35428 H.writeInt32BE(this._f, 20)
35429 H.writeInt32BE(this._g, 24)
35430
35431 return H
35432}
35433
35434module.exports = Sha224
35435
35436},{"./hash":399,"./sha256":404,"inherits":119,"safe-buffer":398}],404:[function(require,module,exports){
35437/**
35438 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35439 * in FIPS 180-2
35440 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35441 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35442 *
35443 */
35444
35445var inherits = require('inherits')
35446var Hash = require('./hash')
35447var Buffer = require('safe-buffer').Buffer
35448
35449var K = [
35450 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
35451 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
35452 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
35453 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
35454 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
35455 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
35456 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
35457 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
35458 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
35459 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
35460 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
35461 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
35462 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
35463 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
35464 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
35465 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
35466]
35467
35468var W = new Array(64)
35469
35470function Sha256 () {
35471 this.init()
35472
35473 this._w = W // new Array(64)
35474
35475 Hash.call(this, 64, 56)
35476}
35477
35478inherits(Sha256, Hash)
35479
35480Sha256.prototype.init = function () {
35481 this._a = 0x6a09e667
35482 this._b = 0xbb67ae85
35483 this._c = 0x3c6ef372
35484 this._d = 0xa54ff53a
35485 this._e = 0x510e527f
35486 this._f = 0x9b05688c
35487 this._g = 0x1f83d9ab
35488 this._h = 0x5be0cd19
35489
35490 return this
35491}
35492
35493function ch (x, y, z) {
35494 return z ^ (x & (y ^ z))
35495}
35496
35497function maj (x, y, z) {
35498 return (x & y) | (z & (x | y))
35499}
35500
35501function sigma0 (x) {
35502 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
35503}
35504
35505function sigma1 (x) {
35506 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
35507}
35508
35509function gamma0 (x) {
35510 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
35511}
35512
35513function gamma1 (x) {
35514 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
35515}
35516
35517Sha256.prototype._update = function (M) {
35518 var W = this._w
35519
35520 var a = this._a | 0
35521 var b = this._b | 0
35522 var c = this._c | 0
35523 var d = this._d | 0
35524 var e = this._e | 0
35525 var f = this._f | 0
35526 var g = this._g | 0
35527 var h = this._h | 0
35528
35529 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35530 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
35531
35532 for (var j = 0; j < 64; ++j) {
35533 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
35534 var T2 = (sigma0(a) + maj(a, b, c)) | 0
35535
35536 h = g
35537 g = f
35538 f = e
35539 e = (d + T1) | 0
35540 d = c
35541 c = b
35542 b = a
35543 a = (T1 + T2) | 0
35544 }
35545
35546 this._a = (a + this._a) | 0
35547 this._b = (b + this._b) | 0
35548 this._c = (c + this._c) | 0
35549 this._d = (d + this._d) | 0
35550 this._e = (e + this._e) | 0
35551 this._f = (f + this._f) | 0
35552 this._g = (g + this._g) | 0
35553 this._h = (h + this._h) | 0
35554}
35555
35556Sha256.prototype._hash = function () {
35557 var H = Buffer.allocUnsafe(32)
35558
35559 H.writeInt32BE(this._a, 0)
35560 H.writeInt32BE(this._b, 4)
35561 H.writeInt32BE(this._c, 8)
35562 H.writeInt32BE(this._d, 12)
35563 H.writeInt32BE(this._e, 16)
35564 H.writeInt32BE(this._f, 20)
35565 H.writeInt32BE(this._g, 24)
35566 H.writeInt32BE(this._h, 28)
35567
35568 return H
35569}
35570
35571module.exports = Sha256
35572
35573},{"./hash":399,"inherits":119,"safe-buffer":398}],405:[function(require,module,exports){
35574var inherits = require('inherits')
35575var SHA512 = require('./sha512')
35576var Hash = require('./hash')
35577var Buffer = require('safe-buffer').Buffer
35578
35579var W = new Array(160)
35580
35581function Sha384 () {
35582 this.init()
35583 this._w = W
35584
35585 Hash.call(this, 128, 112)
35586}
35587
35588inherits(Sha384, SHA512)
35589
35590Sha384.prototype.init = function () {
35591 this._ah = 0xcbbb9d5d
35592 this._bh = 0x629a292a
35593 this._ch = 0x9159015a
35594 this._dh = 0x152fecd8
35595 this._eh = 0x67332667
35596 this._fh = 0x8eb44a87
35597 this._gh = 0xdb0c2e0d
35598 this._hh = 0x47b5481d
35599
35600 this._al = 0xc1059ed8
35601 this._bl = 0x367cd507
35602 this._cl = 0x3070dd17
35603 this._dl = 0xf70e5939
35604 this._el = 0xffc00b31
35605 this._fl = 0x68581511
35606 this._gl = 0x64f98fa7
35607 this._hl = 0xbefa4fa4
35608
35609 return this
35610}
35611
35612Sha384.prototype._hash = function () {
35613 var H = Buffer.allocUnsafe(48)
35614
35615 function writeInt64BE (h, l, offset) {
35616 H.writeInt32BE(h, offset)
35617 H.writeInt32BE(l, offset + 4)
35618 }
35619
35620 writeInt64BE(this._ah, this._al, 0)
35621 writeInt64BE(this._bh, this._bl, 8)
35622 writeInt64BE(this._ch, this._cl, 16)
35623 writeInt64BE(this._dh, this._dl, 24)
35624 writeInt64BE(this._eh, this._el, 32)
35625 writeInt64BE(this._fh, this._fl, 40)
35626
35627 return H
35628}
35629
35630module.exports = Sha384
35631
35632},{"./hash":399,"./sha512":406,"inherits":119,"safe-buffer":398}],406:[function(require,module,exports){
35633var inherits = require('inherits')
35634var Hash = require('./hash')
35635var Buffer = require('safe-buffer').Buffer
35636
35637var K = [
35638 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35639 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35640 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35641 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35642 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35643 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35644 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35645 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35646 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35647 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35648 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35649 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35650 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35651 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35652 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35653 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35654 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35655 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35656 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35657 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35658 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35659 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35660 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35661 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35662 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35663 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35664 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35665 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35666 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35667 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35668 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35669 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35670 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35671 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35672 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35673 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
35674 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
35675 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
35676 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
35677 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
35678]
35679
35680var W = new Array(160)
35681
35682function Sha512 () {
35683 this.init()
35684 this._w = W
35685
35686 Hash.call(this, 128, 112)
35687}
35688
35689inherits(Sha512, Hash)
35690
35691Sha512.prototype.init = function () {
35692 this._ah = 0x6a09e667
35693 this._bh = 0xbb67ae85
35694 this._ch = 0x3c6ef372
35695 this._dh = 0xa54ff53a
35696 this._eh = 0x510e527f
35697 this._fh = 0x9b05688c
35698 this._gh = 0x1f83d9ab
35699 this._hh = 0x5be0cd19
35700
35701 this._al = 0xf3bcc908
35702 this._bl = 0x84caa73b
35703 this._cl = 0xfe94f82b
35704 this._dl = 0x5f1d36f1
35705 this._el = 0xade682d1
35706 this._fl = 0x2b3e6c1f
35707 this._gl = 0xfb41bd6b
35708 this._hl = 0x137e2179
35709
35710 return this
35711}
35712
35713function Ch (x, y, z) {
35714 return z ^ (x & (y ^ z))
35715}
35716
35717function maj (x, y, z) {
35718 return (x & y) | (z & (x | y))
35719}
35720
35721function sigma0 (x, xl) {
35722 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
35723}
35724
35725function sigma1 (x, xl) {
35726 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
35727}
35728
35729function Gamma0 (x, xl) {
35730 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
35731}
35732
35733function Gamma0l (x, xl) {
35734 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
35735}
35736
35737function Gamma1 (x, xl) {
35738 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
35739}
35740
35741function Gamma1l (x, xl) {
35742 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
35743}
35744
35745function getCarry (a, b) {
35746 return (a >>> 0) < (b >>> 0) ? 1 : 0
35747}
35748
35749Sha512.prototype._update = function (M) {
35750 var W = this._w
35751
35752 var ah = this._ah | 0
35753 var bh = this._bh | 0
35754 var ch = this._ch | 0
35755 var dh = this._dh | 0
35756 var eh = this._eh | 0
35757 var fh = this._fh | 0
35758 var gh = this._gh | 0
35759 var hh = this._hh | 0
35760
35761 var al = this._al | 0
35762 var bl = this._bl | 0
35763 var cl = this._cl | 0
35764 var dl = this._dl | 0
35765 var el = this._el | 0
35766 var fl = this._fl | 0
35767 var gl = this._gl | 0
35768 var hl = this._hl | 0
35769
35770 for (var i = 0; i < 32; i += 2) {
35771 W[i] = M.readInt32BE(i * 4)
35772 W[i + 1] = M.readInt32BE(i * 4 + 4)
35773 }
35774 for (; i < 160; i += 2) {
35775 var xh = W[i - 15 * 2]
35776 var xl = W[i - 15 * 2 + 1]
35777 var gamma0 = Gamma0(xh, xl)
35778 var gamma0l = Gamma0l(xl, xh)
35779
35780 xh = W[i - 2 * 2]
35781 xl = W[i - 2 * 2 + 1]
35782 var gamma1 = Gamma1(xh, xl)
35783 var gamma1l = Gamma1l(xl, xh)
35784
35785 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
35786 var Wi7h = W[i - 7 * 2]
35787 var Wi7l = W[i - 7 * 2 + 1]
35788
35789 var Wi16h = W[i - 16 * 2]
35790 var Wi16l = W[i - 16 * 2 + 1]
35791
35792 var Wil = (gamma0l + Wi7l) | 0
35793 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
35794 Wil = (Wil + gamma1l) | 0
35795 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
35796 Wil = (Wil + Wi16l) | 0
35797 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
35798
35799 W[i] = Wih
35800 W[i + 1] = Wil
35801 }
35802
35803 for (var j = 0; j < 160; j += 2) {
35804 Wih = W[j]
35805 Wil = W[j + 1]
35806
35807 var majh = maj(ah, bh, ch)
35808 var majl = maj(al, bl, cl)
35809
35810 var sigma0h = sigma0(ah, al)
35811 var sigma0l = sigma0(al, ah)
35812 var sigma1h = sigma1(eh, el)
35813 var sigma1l = sigma1(el, eh)
35814
35815 // t1 = h + sigma1 + ch + K[j] + W[j]
35816 var Kih = K[j]
35817 var Kil = K[j + 1]
35818
35819 var chh = Ch(eh, fh, gh)
35820 var chl = Ch(el, fl, gl)
35821
35822 var t1l = (hl + sigma1l) | 0
35823 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
35824 t1l = (t1l + chl) | 0
35825 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
35826 t1l = (t1l + Kil) | 0
35827 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
35828 t1l = (t1l + Wil) | 0
35829 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
35830
35831 // t2 = sigma0 + maj
35832 var t2l = (sigma0l + majl) | 0
35833 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
35834
35835 hh = gh
35836 hl = gl
35837 gh = fh
35838 gl = fl
35839 fh = eh
35840 fl = el
35841 el = (dl + t1l) | 0
35842 eh = (dh + t1h + getCarry(el, dl)) | 0
35843 dh = ch
35844 dl = cl
35845 ch = bh
35846 cl = bl
35847 bh = ah
35848 bl = al
35849 al = (t1l + t2l) | 0
35850 ah = (t1h + t2h + getCarry(al, t1l)) | 0
35851 }
35852
35853 this._al = (this._al + al) | 0
35854 this._bl = (this._bl + bl) | 0
35855 this._cl = (this._cl + cl) | 0
35856 this._dl = (this._dl + dl) | 0
35857 this._el = (this._el + el) | 0
35858 this._fl = (this._fl + fl) | 0
35859 this._gl = (this._gl + gl) | 0
35860 this._hl = (this._hl + hl) | 0
35861
35862 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
35863 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
35864 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
35865 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
35866 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
35867 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
35868 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
35869 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
35870}
35871
35872Sha512.prototype._hash = function () {
35873 var H = Buffer.allocUnsafe(64)
35874
35875 function writeInt64BE (h, l, offset) {
35876 H.writeInt32BE(h, offset)
35877 H.writeInt32BE(l, offset + 4)
35878 }
35879
35880 writeInt64BE(this._ah, this._al, 0)
35881 writeInt64BE(this._bh, this._bl, 8)
35882 writeInt64BE(this._ch, this._cl, 16)
35883 writeInt64BE(this._dh, this._dl, 24)
35884 writeInt64BE(this._eh, this._el, 32)
35885 writeInt64BE(this._fh, this._fl, 40)
35886 writeInt64BE(this._gh, this._gl, 48)
35887 writeInt64BE(this._hh, this._hl, 56)
35888
35889 return H
35890}
35891
35892module.exports = Sha512
35893
35894},{"./hash":399,"inherits":119,"safe-buffer":398}],407:[function(require,module,exports){
35895"use strict";
35896
35897var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
35898
35899var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
35900
35901var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
35902
35903Object.defineProperty(exports, "__esModule", {
35904 value: true
35905});
35906
35907var BigNumber = _interopRequire(require("bignumber.js"));
35908
35909var isString = _interopRequire(require("lodash/isString"));
35910
35911var Keypair = require("./keypair").Keypair;
35912
35913var StrKey = require("./strkey").StrKey;
35914
35915/**
35916 * Create a new Account object.
35917 *
35918 * `Account` represents a single account in Stellar network and its sequence number.
35919 * Account tracks the sequence number as it is used by {@link TransactionBuilder}.
35920 * See [Accounts](https://stellar.org/developers/learn/concepts/accounts.html) for more information about how
35921 * accounts work in Stellar.
35922 * @constructor
35923 * @param {string} accountId ID of the account (ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`)
35924 * @param {string} sequence current sequence number of the account
35925 */
35926
35927var Account = exports.Account = (function () {
35928 function Account(accountId, sequence) {
35929 _classCallCheck(this, Account);
35930
35931 if (!StrKey.isValidEd25519PublicKey(accountId)) {
35932 throw new Error("accountId is invalid");
35933 }
35934 if (!isString(sequence)) {
35935 throw new Error("sequence must be of type string");
35936 }
35937 this._accountId = accountId;
35938 this.sequence = new BigNumber(sequence);
35939 }
35940
35941 _createClass(Account, {
35942 accountId: {
35943
35944 /**
35945 * Returns Stellar account ID, ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`
35946 * @returns {string}
35947 */
35948
35949 value: function accountId() {
35950 return this._accountId;
35951 }
35952 },
35953 sequenceNumber: {
35954
35955 /**
35956 * @returns {string}
35957 */
35958
35959 value: function sequenceNumber() {
35960 return this.sequence.toString();
35961 }
35962 },
35963 incrementSequenceNumber: {
35964
35965 /**
35966 * Increments sequence number in this object by one.
35967 */
35968
35969 value: function incrementSequenceNumber() {
35970 this.sequence = this.sequence.add(1);
35971 }
35972 }
35973 });
35974
35975 return Account;
35976})();
35977},{"./keypair":413,"./strkey":431,"bignumber.js":17,"lodash/isString":337}],408:[function(require,module,exports){
35978"use strict";
35979
35980var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
35981
35982var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
35983
35984var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
35985
35986Object.defineProperty(exports, "__esModule", {
35987 value: true
35988});
35989
35990var xdr = _interopRequire(require("./generated/stellar-xdr_generated"));
35991
35992var Keypair = require("./keypair").Keypair;
35993
35994var StrKey = require("./strkey").StrKey;
35995
35996var clone = _interopRequire(require("lodash/clone"));
35997
35998var padEnd = _interopRequire(require("lodash/padEnd"));
35999
36000var trimEnd = _interopRequire(require("lodash/trimEnd"));
36001
36002/**
36003 * Asset class represents an asset, either the native asset (`XLM`)
36004 * or an asset code / issuer account ID pair.
36005 *
36006 * An asset code describes an asset code and issuer pair. In the case of the native
36007 * asset XLM, the issuer will be null.
36008 *
36009 * @constructor
36010 * @param {string} code - The asset code.
36011 * @param {string} issuer - The account ID of the issuer.
36012 */
36013
36014var Asset = exports.Asset = (function () {
36015 function Asset(code, issuer) {
36016 _classCallCheck(this, Asset);
36017
36018 if (!/^[a-zA-Z0-9]{1,12}$/.test(code)) {
36019 throw new Error("Asset code is invalid (maximum alphanumeric, 12 characters at max)");
36020 }
36021 if (String(code).toLowerCase() !== "xlm" && !issuer) {
36022 throw new Error("Issuer cannot be null");
36023 }
36024 if (issuer && !StrKey.isValidEd25519PublicKey(issuer)) {
36025 throw new Error("Issuer is invalid");
36026 }
36027
36028 this.code = code;
36029 this.issuer = issuer;
36030 }
36031
36032 _createClass(Asset, {
36033 toXDRObject: {
36034
36035 /**
36036 * Returns the xdr object for this asset.
36037 * @returns {xdr.Asset}
36038 */
36039
36040 value: function toXDRObject() {
36041 if (this.isNative()) {
36042 return xdr.Asset.assetTypeNative();
36043 }
36044
36045 var xdrType = undefined,
36046 xdrTypeString = undefined;
36047 if (this.code.length <= 4) {
36048 xdrType = xdr.AssetAlphaNum4;
36049 xdrTypeString = "assetTypeCreditAlphanum4";
36050 } else {
36051 xdrType = xdr.AssetAlphaNum12;
36052 xdrTypeString = "assetTypeCreditAlphanum12";
36053 }
36054
36055 // pad code with null bytes if necessary
36056 var padLength = this.code.length <= 4 ? 4 : 12;
36057 var paddedCode = padEnd(this.code, padLength, "\u0000");
36058
36059 var assetType = new xdrType({
36060 assetCode: paddedCode,
36061 issuer: Keypair.fromPublicKey(this.issuer).xdrAccountId()
36062 });
36063
36064 return new xdr.Asset(xdrTypeString, assetType);
36065 }
36066 },
36067 getCode: {
36068
36069 /**
36070 * Return the asset code
36071 * @returns {string}
36072 */
36073
36074 value: function getCode() {
36075 return clone(this.code);
36076 }
36077 },
36078 getIssuer: {
36079
36080 /**
36081 * Return the asset issuer
36082 * @returns {string}
36083 */
36084
36085 value: function getIssuer() {
36086 return clone(this.issuer);
36087 }
36088 },
36089 getAssetType: {
36090
36091 /**
36092 * Return the asset type. Can be one of following types:
36093 *
36094 * * `native`
36095 * * `credit_alphanum4`
36096 * * `credit_alphanum12`
36097 *
36098 * @see [Assets concept](https://www.stellar.org/developers/learn/concepts/assets.html)
36099 * @returns {string}
36100 */
36101
36102 value: function getAssetType() {
36103 if (this.isNative()) {
36104 return "native";
36105 }
36106 if (this.code.length >= 1 && this.code.length <= 4) {
36107 return "credit_alphanum4";
36108 }
36109 if (this.code.length >= 5 && this.code.length <= 12) {
36110 return "credit_alphanum12";
36111 }
36112 }
36113 },
36114 isNative: {
36115
36116 /**
36117 * Returns true if this asset object is the native asset.
36118 * @returns {boolean}
36119 */
36120
36121 value: function isNative() {
36122 return !this.issuer;
36123 }
36124 },
36125 equals: {
36126
36127 /**
36128 * Returns true if this asset equals the given asset.
36129 * @param {Asset} asset Asset to compare
36130 * @returns {boolean}
36131 */
36132
36133 value: function equals(asset) {
36134 return this.code == asset.getCode() && this.issuer == asset.getIssuer();
36135 }
36136 }
36137 }, {
36138 native: {
36139
36140 /**
36141 * Returns an asset object for the native asset.
36142 * @Return {Asset}
36143 */
36144
36145 value: function native() {
36146 return new Asset("XLM");
36147 }
36148 },
36149 fromOperation: {
36150
36151 /**
36152 * Returns an asset object from its XDR object representation.
36153 * @param {xdr.Asset} assetXdr - The asset xdr object.
36154 * @returns {Asset}
36155 */
36156
36157 value: function fromOperation(assetXdr) {
36158 var anum = undefined,
36159 code = undefined,
36160 issuer = undefined;
36161 switch (assetXdr["switch"]()) {
36162 case xdr.AssetType.assetTypeNative():
36163 return this.native();
36164 case xdr.AssetType.assetTypeCreditAlphanum4():
36165 anum = assetXdr.alphaNum4();
36166 /* falls through */
36167 case xdr.AssetType.assetTypeCreditAlphanum12():
36168 anum = anum || assetXdr.alphaNum12();
36169 issuer = StrKey.encodeEd25519PublicKey(anum.issuer().ed25519());
36170 code = trimEnd(anum.assetCode(), "\u0000");
36171 return new this(code, issuer);
36172 default:
36173 throw new Error("Invalid asset type: " + assetXdr["switch"]().name);
36174 }
36175 }
36176 }
36177 });
36178
36179 return Asset;
36180})();
36181},{"./generated/stellar-xdr_generated":410,"./keypair":413,"./strkey":431,"lodash/clone":310,"lodash/padEnd":345,"lodash/trimEnd":355}],409:[function(require,module,exports){
36182(function (Buffer){
36183"use strict";
36184
36185var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
36186
36187exports.decodeBase58Check = decodeBase58Check;
36188Object.defineProperty(exports, "__esModule", {
36189 value: true
36190});
36191
36192var bs58 = _interopRequire(require("./vendor/bs58"));
36193
36194var isUndefined = _interopRequire(require("lodash/isUndefined"));
36195
36196var hash = require("./hashing").hash;
36197
36198var verifyChecksum = require("./util/checksum").verifyChecksum;
36199
36200var versionBytes = {
36201 accountId: 0, // decimal 0
36202 none: 1, // decimal 1
36203 seed: 33 };
36204
36205function decodeBase58Check(versionByteName, encoded) {
36206 var decoded = bs58.decode(encoded);
36207 var versionByte = decoded[0];
36208 var payload = decoded.slice(0, decoded.length - 4);
36209 var data = payload.slice(1);
36210 var checksum = decoded.slice(decoded.length - 4);
36211
36212 var expectedVersion = versionBytes[versionByteName];
36213
36214 if (isUndefined(expectedVersion)) {
36215 throw new Error("" + versionByteName + " is not a valid version byte name. expected one of \"accountId\", \"seed\", or \"none\"");
36216 }
36217
36218 if (versionByte !== expectedVersion) {
36219 throw new Error("invalid version byte. expected " + expectedVersion + ", got " + versionByte);
36220 }
36221
36222 var expectedChecksum = calculateChecksum(payload);
36223
36224 if (!verifyChecksum(expectedChecksum, checksum)) {
36225 throw new Error("invalid checksum");
36226 }
36227
36228 if (versionByteName === "accountId" && decoded.length !== 37) {
36229 throw new Error("Decoded address length is invalid. Expected 37, got " + decoded.length);
36230 }
36231
36232 return Buffer.from(data);
36233}
36234
36235function calculateChecksum(payload) {
36236 var inner = hash(payload);
36237 var outer = hash(inner);
36238 return outer.slice(0, 4);
36239}
36240// decimal 33
36241}).call(this,require("buffer").Buffer)
36242},{"./hashing":411,"./util/checksum":434,"./vendor/bs58":436,"buffer":50,"lodash/isUndefined":340}],410:[function(require,module,exports){
36243"use strict";var _interopRequireWildcard=function(obj){return obj && obj.__esModule?obj:{"default":obj};};var XDR=_interopRequireWildcard(require("js-xdr"));var types=XDR.config(function(xdr){xdr.typedef("Value", xdr.varOpaque());xdr.struct("ScpBallot", [["counter", xdr.lookup("Uint32")], ["value", xdr.lookup("Value")]]);xdr["enum"]("ScpStatementType", {scpStPrepare:0, scpStConfirm:1, scpStExternalize:2, scpStNominate:3});xdr.struct("ScpNomination", [["quorumSetHash", xdr.lookup("Hash")], ["votes", xdr.varArray(xdr.lookup("Value"), 2147483647)], ["accepted", xdr.varArray(xdr.lookup("Value"), 2147483647)]]);xdr.struct("ScpStatementPrepare", [["quorumSetHash", xdr.lookup("Hash")], ["ballot", xdr.lookup("ScpBallot")], ["prepared", xdr.option(xdr.lookup("ScpBallot"))], ["preparedPrime", xdr.option(xdr.lookup("ScpBallot"))], ["nC", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")]]);xdr.struct("ScpStatementConfirm", [["ballot", xdr.lookup("ScpBallot")], ["nPrepared", xdr.lookup("Uint32")], ["nCommit", xdr.lookup("Uint32")], ["nH", xdr.lookup("Uint32")], ["quorumSetHash", xdr.lookup("Hash")]]);xdr.struct("ScpStatementExternalize", [["commit", xdr.lookup("ScpBallot")], ["nH", xdr.lookup("Uint32")], ["commitQuorumSetHash", xdr.lookup("Hash")]]);xdr.union("ScpStatementPledges", {switchOn:xdr.lookup("ScpStatementType"), switchName:"type", switches:[["scpStPrepare", "prepare"], ["scpStConfirm", "confirm"], ["scpStExternalize", "externalize"], ["scpStNominate", "nominate"]], arms:{prepare:xdr.lookup("ScpStatementPrepare"), confirm:xdr.lookup("ScpStatementConfirm"), externalize:xdr.lookup("ScpStatementExternalize"), nominate:xdr.lookup("ScpNomination")}});xdr.struct("ScpStatement", [["nodeId", xdr.lookup("NodeId")], ["slotIndex", xdr.lookup("Uint64")], ["pledges", xdr.lookup("ScpStatementPledges")]]);xdr.struct("ScpEnvelope", [["statement", xdr.lookup("ScpStatement")], ["signature", xdr.lookup("Signature")]]);xdr.struct("ScpQuorumSet", [["threshold", xdr.lookup("Uint32")], ["validators", xdr.varArray(xdr.lookup("PublicKey"), 2147483647)], ["innerSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)]]);xdr.typedef("AccountId", xdr.lookup("PublicKey"));xdr.typedef("Thresholds", xdr.opaque(4));xdr.typedef("String32", xdr.string(32));xdr.typedef("String64", xdr.string(64));xdr.typedef("SequenceNumber", xdr.lookup("Int64"));xdr.typedef("DataValue", xdr.varOpaque(64));xdr["enum"]("AssetType", {assetTypeNative:0, assetTypeCreditAlphanum4:1, assetTypeCreditAlphanum12:2});xdr.struct("AssetAlphaNum4", [["assetCode", xdr.opaque(4)], ["issuer", xdr.lookup("AccountId")]]);xdr.struct("AssetAlphaNum12", [["assetCode", xdr.opaque(12)], ["issuer", xdr.lookup("AccountId")]]);xdr.union("Asset", {switchOn:xdr.lookup("AssetType"), switchName:"type", switches:[["assetTypeNative", xdr["void"]()], ["assetTypeCreditAlphanum4", "alphaNum4"], ["assetTypeCreditAlphanum12", "alphaNum12"]], arms:{alphaNum4:xdr.lookup("AssetAlphaNum4"), alphaNum12:xdr.lookup("AssetAlphaNum12")}});xdr.struct("Price", [["n", xdr.lookup("Int32")], ["d", xdr.lookup("Int32")]]);xdr.struct("Liabilities", [["buying", xdr.lookup("Int64")], ["selling", xdr.lookup("Int64")]]);xdr["enum"]("ThresholdIndices", {thresholdMasterWeight:0, thresholdLow:1, thresholdMed:2, thresholdHigh:3});xdr["enum"]("LedgerEntryType", {account:0, trustline:1, offer:2, datum:3});xdr.struct("Signer", [["key", xdr.lookup("SignerKey")], ["weight", xdr.lookup("Uint32")]]);xdr["enum"]("AccountFlags", {authRequiredFlag:1, authRevocableFlag:2, authImmutableFlag:4});xdr["const"]("MASK_ACCOUNT_FLAGS", 7);xdr.union("AccountEntryV1Ext", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("AccountEntryV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("AccountEntryV1Ext")]]);xdr.union("AccountEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()], [1, "v1"]], arms:{v1:xdr.lookup("AccountEntryV1")}});xdr.struct("AccountEntry", [["accountId", xdr.lookup("AccountId")], ["balance", xdr.lookup("Int64")], ["seqNum", xdr.lookup("SequenceNumber")], ["numSubEntries", xdr.lookup("Uint32")], ["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["flags", xdr.lookup("Uint32")], ["homeDomain", xdr.lookup("String32")], ["thresholds", xdr.lookup("Thresholds")], ["signers", xdr.varArray(xdr.lookup("Signer"), 20)], ["ext", xdr.lookup("AccountEntryExt")]]);xdr["enum"]("TrustLineFlags", {authorizedFlag:1});xdr["const"]("MASK_TRUSTLINE_FLAGS", 1);xdr.union("TrustLineEntryV1Ext", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("TrustLineEntryV1", [["liabilities", xdr.lookup("Liabilities")], ["ext", xdr.lookup("TrustLineEntryV1Ext")]]);xdr.union("TrustLineEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()], [1, "v1"]], arms:{v1:xdr.lookup("TrustLineEntryV1")}});xdr.struct("TrustLineEntry", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["balance", xdr.lookup("Int64")], ["limit", xdr.lookup("Int64")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("TrustLineEntryExt")]]);xdr["enum"]("OfferEntryFlags", {passiveFlag:1});xdr["const"]("MASK_OFFERENTRY_FLAGS", 1);xdr.union("OfferEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("OfferEntry", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Uint64")], ["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["flags", xdr.lookup("Uint32")], ["ext", xdr.lookup("OfferEntryExt")]]);xdr.union("DataEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("DataEntry", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")], ["dataValue", xdr.lookup("DataValue")], ["ext", xdr.lookup("DataEntryExt")]]);xdr.union("LedgerEntryData", {switchOn:xdr.lookup("LedgerEntryType"), switchName:"type", switches:[["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["datum", "data"]], arms:{account:xdr.lookup("AccountEntry"), trustLine:xdr.lookup("TrustLineEntry"), offer:xdr.lookup("OfferEntry"), data:xdr.lookup("DataEntry")}});xdr.union("LedgerEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("LedgerEntry", [["lastModifiedLedgerSeq", xdr.lookup("Uint32")], ["data", xdr.lookup("LedgerEntryData")], ["ext", xdr.lookup("LedgerEntryExt")]]);xdr["enum"]("EnvelopeType", {envelopeTypeScp:1, envelopeTypeTx:2, envelopeTypeAuth:3});xdr.typedef("UpgradeType", xdr.varOpaque(128));xdr.union("StellarValueExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("StellarValue", [["txSetHash", xdr.lookup("Hash")], ["closeTime", xdr.lookup("Uint64")], ["upgrades", xdr.varArray(xdr.lookup("UpgradeType"), 6)], ["ext", xdr.lookup("StellarValueExt")]]);xdr.union("LedgerHeaderExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("LedgerHeader", [["ledgerVersion", xdr.lookup("Uint32")], ["previousLedgerHash", xdr.lookup("Hash")], ["scpValue", xdr.lookup("StellarValue")], ["txSetResultHash", xdr.lookup("Hash")], ["bucketListHash", xdr.lookup("Hash")], ["ledgerSeq", xdr.lookup("Uint32")], ["totalCoins", xdr.lookup("Int64")], ["feePool", xdr.lookup("Int64")], ["inflationSeq", xdr.lookup("Uint32")], ["idPool", xdr.lookup("Uint64")], ["baseFee", xdr.lookup("Uint32")], ["baseReserve", xdr.lookup("Uint32")], ["maxTxSetSize", xdr.lookup("Uint32")], ["skipList", xdr.array(xdr.lookup("Hash"), 4)], ["ext", xdr.lookup("LedgerHeaderExt")]]);xdr["enum"]("LedgerUpgradeType", {ledgerUpgradeVersion:1, ledgerUpgradeBaseFee:2, ledgerUpgradeMaxTxSetSize:3, ledgerUpgradeBaseReserve:4});xdr.union("LedgerUpgrade", {switchOn:xdr.lookup("LedgerUpgradeType"), switchName:"type", switches:[["ledgerUpgradeVersion", "newLedgerVersion"], ["ledgerUpgradeBaseFee", "newBaseFee"], ["ledgerUpgradeMaxTxSetSize", "newMaxTxSetSize"], ["ledgerUpgradeBaseReserve", "newBaseReserve"]], arms:{newLedgerVersion:xdr.lookup("Uint32"), newBaseFee:xdr.lookup("Uint32"), newMaxTxSetSize:xdr.lookup("Uint32"), newBaseReserve:xdr.lookup("Uint32")}});xdr.struct("LedgerKeyAccount", [["accountId", xdr.lookup("AccountId")]]);xdr.struct("LedgerKeyTrustLine", [["accountId", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")]]);xdr.struct("LedgerKeyOffer", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Uint64")]]);xdr.struct("LedgerKeyData", [["accountId", xdr.lookup("AccountId")], ["dataName", xdr.lookup("String64")]]);xdr.union("LedgerKey", {switchOn:xdr.lookup("LedgerEntryType"), switchName:"type", switches:[["account", "account"], ["trustline", "trustLine"], ["offer", "offer"], ["datum", "data"]], arms:{account:xdr.lookup("LedgerKeyAccount"), trustLine:xdr.lookup("LedgerKeyTrustLine"), offer:xdr.lookup("LedgerKeyOffer"), data:xdr.lookup("LedgerKeyData")}});xdr["enum"]("BucketEntryType", {liveentry:0, deadentry:1});xdr.union("BucketEntry", {switchOn:xdr.lookup("BucketEntryType"), switchName:"type", switches:[["liveentry", "liveEntry"], ["deadentry", "deadEntry"]], arms:{liveEntry:xdr.lookup("LedgerEntry"), deadEntry:xdr.lookup("LedgerKey")}});xdr.struct("TransactionSet", [["previousLedgerHash", xdr.lookup("Hash")], ["txes", xdr.varArray(xdr.lookup("TransactionEnvelope"), 2147483647)]]);xdr.struct("TransactionResultPair", [["transactionHash", xdr.lookup("Hash")], ["result", xdr.lookup("TransactionResult")]]);xdr.struct("TransactionResultSet", [["results", xdr.varArray(xdr.lookup("TransactionResultPair"), 2147483647)]]);xdr.union("TransactionHistoryEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("TransactionHistoryEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txSet", xdr.lookup("TransactionSet")], ["ext", xdr.lookup("TransactionHistoryEntryExt")]]);xdr.union("TransactionHistoryResultEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("TransactionHistoryResultEntry", [["ledgerSeq", xdr.lookup("Uint32")], ["txResultSet", xdr.lookup("TransactionResultSet")], ["ext", xdr.lookup("TransactionHistoryResultEntryExt")]]);xdr.union("LedgerHeaderHistoryEntryExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("LedgerHeaderHistoryEntry", [["hash", xdr.lookup("Hash")], ["header", xdr.lookup("LedgerHeader")], ["ext", xdr.lookup("LedgerHeaderHistoryEntryExt")]]);xdr.struct("LedgerScpMessages", [["ledgerSeq", xdr.lookup("Uint32")], ["messages", xdr.varArray(xdr.lookup("ScpEnvelope"), 2147483647)]]);xdr.struct("ScpHistoryEntryV0", [["quorumSets", xdr.varArray(xdr.lookup("ScpQuorumSet"), 2147483647)], ["ledgerMessages", xdr.lookup("LedgerScpMessages")]]);xdr.union("ScpHistoryEntry", {switchOn:xdr.int(), switchName:"v", switches:[[0, "v0"]], arms:{v0:xdr.lookup("ScpHistoryEntryV0")}});xdr["enum"]("LedgerEntryChangeType", {ledgerEntryCreated:0, ledgerEntryUpdated:1, ledgerEntryRemoved:2, ledgerEntryState:3});xdr.union("LedgerEntryChange", {switchOn:xdr.lookup("LedgerEntryChangeType"), switchName:"type", switches:[["ledgerEntryCreated", "created"], ["ledgerEntryUpdated", "updated"], ["ledgerEntryRemoved", "removed"], ["ledgerEntryState", "state"]], arms:{created:xdr.lookup("LedgerEntry"), updated:xdr.lookup("LedgerEntry"), removed:xdr.lookup("LedgerKey"), state:xdr.lookup("LedgerEntry")}});xdr.typedef("LedgerEntryChanges", xdr.varArray(xdr.lookup("LedgerEntryChange"), 2147483647));xdr.struct("OperationMeta", [["changes", xdr.lookup("LedgerEntryChanges")]]);xdr.struct("TransactionMetaV1", [["txChanges", xdr.lookup("LedgerEntryChanges")], ["operations", xdr.varArray(xdr.lookup("OperationMeta"), 2147483647)]]);xdr.union("TransactionMeta", {switchOn:xdr.int(), switchName:"v", switches:[[0, "operations"], [1, "v1"]], arms:{operations:xdr.varArray(xdr.lookup("OperationMeta"), 2147483647), v1:xdr.lookup("TransactionMetaV1")}});xdr["enum"]("ErrorCode", {errMisc:0, errDatum:1, errConf:2, errAuth:3, errLoad:4});xdr.struct("Error", [["code", xdr.lookup("ErrorCode")], ["msg", xdr.string(100)]]);xdr.struct("AuthCert", [["pubkey", xdr.lookup("Curve25519Public")], ["expiration", xdr.lookup("Uint64")], ["sig", xdr.lookup("Signature")]]);xdr.struct("Hello", [["ledgerVersion", xdr.lookup("Uint32")], ["overlayVersion", xdr.lookup("Uint32")], ["overlayMinVersion", xdr.lookup("Uint32")], ["networkId", xdr.lookup("Hash")], ["versionStr", xdr.string(100)], ["listeningPort", xdr.int()], ["peerId", xdr.lookup("NodeId")], ["cert", xdr.lookup("AuthCert")], ["nonce", xdr.lookup("Uint256")]]);xdr.struct("Auth", [["unused", xdr.int()]]);xdr["enum"]("IpAddrType", {iPv4:0, iPv6:1});xdr.union("PeerAddressIp", {switchOn:xdr.lookup("IpAddrType"), switchName:"type", switches:[["iPv4", "ipv4"], ["iPv6", "ipv6"]], arms:{ipv4:xdr.opaque(4), ipv6:xdr.opaque(16)}});xdr.struct("PeerAddress", [["ip", xdr.lookup("PeerAddressIp")], ["port", xdr.lookup("Uint32")], ["numFailures", xdr.lookup("Uint32")]]);xdr["enum"]("MessageType", {errorMsg:0, auth:2, dontHave:3, getPeer:4, peer:5, getTxSet:6, txSet:7, transaction:8, getScpQuorumset:9, scpQuorumset:10, scpMessage:11, getScpState:12, hello:13});xdr.struct("DontHave", [["type", xdr.lookup("MessageType")], ["reqHash", xdr.lookup("Uint256")]]);xdr.union("StellarMessage", {switchOn:xdr.lookup("MessageType"), switchName:"type", switches:[["errorMsg", "error"], ["hello", "hello"], ["auth", "auth"], ["dontHave", "dontHave"], ["getPeer", xdr["void"]()], ["peer", "peers"], ["getTxSet", "txSetHash"], ["txSet", "txSet"], ["transaction", "transaction"], ["getScpQuorumset", "qSetHash"], ["scpQuorumset", "qSet"], ["scpMessage", "envelope"], ["getScpState", "getScpLedgerSeq"]], arms:{error:xdr.lookup("Error"), hello:xdr.lookup("Hello"), auth:xdr.lookup("Auth"), dontHave:xdr.lookup("DontHave"), peers:xdr.varArray(xdr.lookup("PeerAddress"), 100), txSetHash:xdr.lookup("Uint256"), txSet:xdr.lookup("TransactionSet"), transaction:xdr.lookup("TransactionEnvelope"), qSetHash:xdr.lookup("Uint256"), qSet:xdr.lookup("ScpQuorumSet"), envelope:xdr.lookup("StellarMessage"), getScpLedgerSeq:xdr.lookup("Uint32")}});xdr.struct("AuthenticatedMessageV0", [["sequence", xdr.lookup("Uint64")], ["message", xdr.lookup("StellarMessage")], ["mac", xdr.lookup("HmacSha256Mac")]]);xdr.union("AuthenticatedMessage", {switchOn:xdr.lookup("Uint32"), switchName:"v", switches:[[0, "v0"]], arms:{v0:xdr.lookup("AuthenticatedMessageV0")}});xdr.struct("DecoratedSignature", [["hint", xdr.lookup("SignatureHint")], ["signature", xdr.lookup("Signature")]]);xdr["enum"]("OperationType", {createAccount:0, payment:1, pathPayment:2, manageOffer:3, createPassiveOffer:4, setOption:5, changeTrust:6, allowTrust:7, accountMerge:8, inflation:9, manageDatum:10, bumpSequence:11});xdr.struct("CreateAccountOp", [["destination", xdr.lookup("AccountId")], ["startingBalance", xdr.lookup("Int64")]]);xdr.struct("PaymentOp", [["destination", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]);xdr.struct("PathPaymentOp", [["sendAsset", xdr.lookup("Asset")], ["sendMax", xdr.lookup("Int64")], ["destination", xdr.lookup("AccountId")], ["destAsset", xdr.lookup("Asset")], ["destAmount", xdr.lookup("Int64")], ["path", xdr.varArray(xdr.lookup("Asset"), 5)]]);xdr.struct("ManageOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")], ["offerId", xdr.lookup("Uint64")]]);xdr.struct("CreatePassiveOfferOp", [["selling", xdr.lookup("Asset")], ["buying", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")], ["price", xdr.lookup("Price")]]);xdr.struct("SetOptionsOp", [["inflationDest", xdr.option(xdr.lookup("AccountId"))], ["clearFlags", xdr.option(xdr.lookup("Uint32"))], ["setFlags", xdr.option(xdr.lookup("Uint32"))], ["masterWeight", xdr.option(xdr.lookup("Uint32"))], ["lowThreshold", xdr.option(xdr.lookup("Uint32"))], ["medThreshold", xdr.option(xdr.lookup("Uint32"))], ["highThreshold", xdr.option(xdr.lookup("Uint32"))], ["homeDomain", xdr.option(xdr.lookup("String32"))], ["signer", xdr.option(xdr.lookup("Signer"))]]);xdr.struct("ChangeTrustOp", [["line", xdr.lookup("Asset")], ["limit", xdr.lookup("Int64")]]);xdr.union("AllowTrustOpAsset", {switchOn:xdr.lookup("AssetType"), switchName:"type", switches:[["assetTypeCreditAlphanum4", "assetCode4"], ["assetTypeCreditAlphanum12", "assetCode12"]], arms:{assetCode4:xdr.opaque(4), assetCode12:xdr.opaque(12)}});xdr.struct("AllowTrustOp", [["trustor", xdr.lookup("AccountId")], ["asset", xdr.lookup("AllowTrustOpAsset")], ["authorize", xdr.bool()]]);xdr.struct("ManageDataOp", [["dataName", xdr.lookup("String64")], ["dataValue", xdr.option(xdr.lookup("DataValue"))]]);xdr.struct("BumpSequenceOp", [["bumpTo", xdr.lookup("SequenceNumber")]]);xdr.union("OperationBody", {switchOn:xdr.lookup("OperationType"), switchName:"type", switches:[["createAccount", "createAccountOp"], ["payment", "paymentOp"], ["pathPayment", "pathPaymentOp"], ["manageOffer", "manageOfferOp"], ["createPassiveOffer", "createPassiveOfferOp"], ["setOption", "setOptionsOp"], ["changeTrust", "changeTrustOp"], ["allowTrust", "allowTrustOp"], ["accountMerge", "destination"], ["inflation", xdr["void"]()], ["manageDatum", "manageDataOp"], ["bumpSequence", "bumpSequenceOp"]], arms:{createAccountOp:xdr.lookup("CreateAccountOp"), paymentOp:xdr.lookup("PaymentOp"), pathPaymentOp:xdr.lookup("PathPaymentOp"), manageOfferOp:xdr.lookup("ManageOfferOp"), createPassiveOfferOp:xdr.lookup("CreatePassiveOfferOp"), setOptionsOp:xdr.lookup("SetOptionsOp"), changeTrustOp:xdr.lookup("ChangeTrustOp"), allowTrustOp:xdr.lookup("AllowTrustOp"), destination:xdr.lookup("AccountId"), manageDataOp:xdr.lookup("ManageDataOp"), bumpSequenceOp:xdr.lookup("BumpSequenceOp")}});xdr.struct("Operation", [["sourceAccount", xdr.option(xdr.lookup("AccountId"))], ["body", xdr.lookup("OperationBody")]]);xdr["enum"]("MemoType", {memoNone:0, memoText:1, memoId:2, memoHash:3, memoReturn:4});xdr.union("Memo", {switchOn:xdr.lookup("MemoType"), switchName:"type", switches:[["memoNone", xdr["void"]()], ["memoText", "text"], ["memoId", "id"], ["memoHash", "hash"], ["memoReturn", "retHash"]], arms:{text:xdr.string(28), id:xdr.lookup("Uint64"), hash:xdr.lookup("Hash"), retHash:xdr.lookup("Hash")}});xdr.struct("TimeBounds", [["minTime", xdr.lookup("Uint64")], ["maxTime", xdr.lookup("Uint64")]]);xdr.union("TransactionExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("Transaction", [["sourceAccount", xdr.lookup("AccountId")], ["fee", xdr.lookup("Uint32")], ["seqNum", xdr.lookup("SequenceNumber")], ["timeBounds", xdr.option(xdr.lookup("TimeBounds"))], ["memo", xdr.lookup("Memo")], ["operations", xdr.varArray(xdr.lookup("Operation"), 100)], ["ext", xdr.lookup("TransactionExt")]]);xdr.union("TransactionSignaturePayloadTaggedTransaction", {switchOn:xdr.lookup("EnvelopeType"), switchName:"type", switches:[["envelopeTypeTx", "tx"]], arms:{tx:xdr.lookup("Transaction")}});xdr.struct("TransactionSignaturePayload", [["networkId", xdr.lookup("Hash")], ["taggedTransaction", xdr.lookup("TransactionSignaturePayloadTaggedTransaction")]]);xdr.struct("TransactionEnvelope", [["tx", xdr.lookup("Transaction")], ["signatures", xdr.varArray(xdr.lookup("DecoratedSignature"), 20)]]);xdr.struct("ClaimOfferAtom", [["sellerId", xdr.lookup("AccountId")], ["offerId", xdr.lookup("Uint64")], ["assetSold", xdr.lookup("Asset")], ["amountSold", xdr.lookup("Int64")], ["assetBought", xdr.lookup("Asset")], ["amountBought", xdr.lookup("Int64")]]);xdr["enum"]("CreateAccountResultCode", {createAccountSuccess:0, createAccountMalformed:-1, createAccountUnderfunded:-2, createAccountLowReserve:-3, createAccountAlreadyExist:-4});xdr.union("CreateAccountResult", {switchOn:xdr.lookup("CreateAccountResultCode"), switchName:"code", switches:[["createAccountSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("PaymentResultCode", {paymentSuccess:0, paymentMalformed:-1, paymentUnderfunded:-2, paymentSrcNoTrust:-3, paymentSrcNotAuthorized:-4, paymentNoDestination:-5, paymentNoTrust:-6, paymentNotAuthorized:-7, paymentLineFull:-8, paymentNoIssuer:-9});xdr.union("PaymentResult", {switchOn:xdr.lookup("PaymentResultCode"), switchName:"code", switches:[["paymentSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("PathPaymentResultCode", {pathPaymentSuccess:0, pathPaymentMalformed:-1, pathPaymentUnderfunded:-2, pathPaymentSrcNoTrust:-3, pathPaymentSrcNotAuthorized:-4, pathPaymentNoDestination:-5, pathPaymentNoTrust:-6, pathPaymentNotAuthorized:-7, pathPaymentLineFull:-8, pathPaymentNoIssuer:-9, pathPaymentTooFewOffer:-10, pathPaymentOfferCrossSelf:-11, pathPaymentOverSendmax:-12});xdr.struct("SimplePaymentResult", [["destination", xdr.lookup("AccountId")], ["asset", xdr.lookup("Asset")], ["amount", xdr.lookup("Int64")]]);xdr.struct("PathPaymentResultSuccess", [["offers", xdr.varArray(xdr.lookup("ClaimOfferAtom"), 2147483647)], ["last", xdr.lookup("SimplePaymentResult")]]);xdr.union("PathPaymentResult", {switchOn:xdr.lookup("PathPaymentResultCode"), switchName:"code", switches:[["pathPaymentSuccess", "success"], ["pathPaymentNoIssuer", "noIssuer"]], arms:{success:xdr.lookup("PathPaymentResultSuccess"), noIssuer:xdr.lookup("Asset")}, defaultArm:xdr["void"]()});xdr["enum"]("ManageOfferResultCode", {manageOfferSuccess:0, manageOfferMalformed:-1, manageOfferSellNoTrust:-2, manageOfferBuyNoTrust:-3, manageOfferSellNotAuthorized:-4, manageOfferBuyNotAuthorized:-5, manageOfferLineFull:-6, manageOfferUnderfunded:-7, manageOfferCrossSelf:-8, manageOfferSellNoIssuer:-9, manageOfferBuyNoIssuer:-10, manageOfferNotFound:-11, manageOfferLowReserve:-12});xdr["enum"]("ManageOfferEffect", {manageOfferCreated:0, manageOfferUpdated:1, manageOfferDeleted:2});xdr.union("ManageOfferSuccessResultOffer", {switchOn:xdr.lookup("ManageOfferEffect"), switchName:"effect", switches:[["manageOfferCreated", "offer"], ["manageOfferUpdated", "offer"]], arms:{offer:xdr.lookup("OfferEntry")}, defaultArm:xdr["void"]()});xdr.struct("ManageOfferSuccessResult", [["offersClaimed", xdr.varArray(xdr.lookup("ClaimOfferAtom"), 2147483647)], ["offer", xdr.lookup("ManageOfferSuccessResultOffer")]]);xdr.union("ManageOfferResult", {switchOn:xdr.lookup("ManageOfferResultCode"), switchName:"code", switches:[["manageOfferSuccess", "success"]], arms:{success:xdr.lookup("ManageOfferSuccessResult")}, defaultArm:xdr["void"]()});xdr["enum"]("SetOptionsResultCode", {setOptionsSuccess:0, setOptionsLowReserve:-1, setOptionsTooManySigner:-2, setOptionsBadFlag:-3, setOptionsInvalidInflation:-4, setOptionsCantChange:-5, setOptionsUnknownFlag:-6, setOptionsThresholdOutOfRange:-7, setOptionsBadSigner:-8, setOptionsInvalidHomeDomain:-9});xdr.union("SetOptionsResult", {switchOn:xdr.lookup("SetOptionsResultCode"), switchName:"code", switches:[["setOptionsSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("ChangeTrustResultCode", {changeTrustSuccess:0, changeTrustMalformed:-1, changeTrustNoIssuer:-2, changeTrustInvalidLimit:-3, changeTrustLowReserve:-4, changeTrustSelfNotAllowed:-5});xdr.union("ChangeTrustResult", {switchOn:xdr.lookup("ChangeTrustResultCode"), switchName:"code", switches:[["changeTrustSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("AllowTrustResultCode", {allowTrustSuccess:0, allowTrustMalformed:-1, allowTrustNoTrustLine:-2, allowTrustTrustNotRequired:-3, allowTrustCantRevoke:-4, allowTrustSelfNotAllowed:-5});xdr.union("AllowTrustResult", {switchOn:xdr.lookup("AllowTrustResultCode"), switchName:"code", switches:[["allowTrustSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("AccountMergeResultCode", {accountMergeSuccess:0, accountMergeMalformed:-1, accountMergeNoAccount:-2, accountMergeImmutableSet:-3, accountMergeHasSubEntry:-4, accountMergeSeqnumTooFar:-5, accountMergeDestFull:-6});xdr.union("AccountMergeResult", {switchOn:xdr.lookup("AccountMergeResultCode"), switchName:"code", switches:[["accountMergeSuccess", "sourceAccountBalance"]], arms:{sourceAccountBalance:xdr.lookup("Int64")}, defaultArm:xdr["void"]()});xdr["enum"]("InflationResultCode", {inflationSuccess:0, inflationNotTime:-1});xdr.struct("InflationPayout", [["destination", xdr.lookup("AccountId")], ["amount", xdr.lookup("Int64")]]);xdr.union("InflationResult", {switchOn:xdr.lookup("InflationResultCode"), switchName:"code", switches:[["inflationSuccess", "payouts"]], arms:{payouts:xdr.varArray(xdr.lookup("InflationPayout"), 2147483647)}, defaultArm:xdr["void"]()});xdr["enum"]("ManageDataResultCode", {manageDataSuccess:0, manageDataNotSupportedYet:-1, manageDataNameNotFound:-2, manageDataLowReserve:-3, manageDataInvalidName:-4});xdr.union("ManageDataResult", {switchOn:xdr.lookup("ManageDataResultCode"), switchName:"code", switches:[["manageDataSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("BumpSequenceResultCode", {bumpSequenceSuccess:0, bumpSequenceBadSeq:-1});xdr.union("BumpSequenceResult", {switchOn:xdr.lookup("BumpSequenceResultCode"), switchName:"code", switches:[["bumpSequenceSuccess", xdr["void"]()]], arms:{}, defaultArm:xdr["void"]()});xdr["enum"]("OperationResultCode", {opInner:0, opBadAuth:-1, opNoAccount:-2, opNotSupported:-3});xdr.union("OperationResultTr", {switchOn:xdr.lookup("OperationType"), switchName:"type", switches:[["createAccount", "createAccountResult"], ["payment", "paymentResult"], ["pathPayment", "pathPaymentResult"], ["manageOffer", "manageOfferResult"], ["createPassiveOffer", "createPassiveOfferResult"], ["setOption", "setOptionsResult"], ["changeTrust", "changeTrustResult"], ["allowTrust", "allowTrustResult"], ["accountMerge", "accountMergeResult"], ["inflation", "inflationResult"], ["manageDatum", "manageDataResult"], ["bumpSequence", "bumpSeqResult"]], arms:{createAccountResult:xdr.lookup("CreateAccountResult"), paymentResult:xdr.lookup("PaymentResult"), pathPaymentResult:xdr.lookup("PathPaymentResult"), manageOfferResult:xdr.lookup("ManageOfferResult"), createPassiveOfferResult:xdr.lookup("ManageOfferResult"), setOptionsResult:xdr.lookup("SetOptionsResult"), changeTrustResult:xdr.lookup("ChangeTrustResult"), allowTrustResult:xdr.lookup("AllowTrustResult"), accountMergeResult:xdr.lookup("AccountMergeResult"), inflationResult:xdr.lookup("InflationResult"), manageDataResult:xdr.lookup("ManageDataResult"), bumpSeqResult:xdr.lookup("BumpSequenceResult")}});xdr.union("OperationResult", {switchOn:xdr.lookup("OperationResultCode"), switchName:"code", switches:[["opInner", "tr"]], arms:{tr:xdr.lookup("OperationResultTr")}, defaultArm:xdr["void"]()});xdr["enum"]("TransactionResultCode", {txSuccess:0, txFailed:-1, txTooEarly:-2, txTooLate:-3, txMissingOperation:-4, txBadSeq:-5, txBadAuth:-6, txInsufficientBalance:-7, txNoAccount:-8, txInsufficientFee:-9, txBadAuthExtra:-10, txInternalError:-11});xdr.union("TransactionResultResult", {switchOn:xdr.lookup("TransactionResultCode"), switchName:"code", switches:[["txSuccess", "results"], ["txFailed", "results"]], arms:{results:xdr.varArray(xdr.lookup("OperationResult"), 2147483647)}, defaultArm:xdr["void"]()});xdr.union("TransactionResultExt", {switchOn:xdr.int(), switchName:"v", switches:[[0, xdr["void"]()]], arms:{}});xdr.struct("TransactionResult", [["feeCharged", xdr.lookup("Int64")], ["result", xdr.lookup("TransactionResultResult")], ["ext", xdr.lookup("TransactionResultExt")]]);xdr.typedef("Hash", xdr.opaque(32));xdr.typedef("Uint256", xdr.opaque(32));xdr.typedef("Uint32", xdr.uint());xdr.typedef("Int32", xdr.int());xdr.typedef("Uint64", xdr.uhyper());xdr.typedef("Int64", xdr.hyper());xdr["enum"]("CryptoKeyType", {keyTypeEd25519:0, keyTypePreAuthTx:1, keyTypeHashX:2});xdr["enum"]("PublicKeyType", {publicKeyTypeEd25519:0});xdr["enum"]("SignerKeyType", {signerKeyTypeEd25519:0, signerKeyTypePreAuthTx:1, signerKeyTypeHashX:2});xdr.union("PublicKey", {switchOn:xdr.lookup("PublicKeyType"), switchName:"type", switches:[["publicKeyTypeEd25519", "ed25519"]], arms:{ed25519:xdr.lookup("Uint256")}});xdr.union("SignerKey", {switchOn:xdr.lookup("SignerKeyType"), switchName:"type", switches:[["signerKeyTypeEd25519", "ed25519"], ["signerKeyTypePreAuthTx", "preAuthTx"], ["signerKeyTypeHashX", "hashX"]], arms:{ed25519:xdr.lookup("Uint256"), preAuthTx:xdr.lookup("Uint256"), hashX:xdr.lookup("Uint256")}});xdr.typedef("Signature", xdr.varOpaque(64));xdr.typedef("SignatureHint", xdr.opaque(4));xdr.typedef("NodeId", xdr.lookup("PublicKey"));xdr.struct("Curve25519Secret", [["key", xdr.opaque(32)]]);xdr.struct("Curve25519Public", [["key", xdr.opaque(32)]]);xdr.struct("HmacSha256Key", [["key", xdr.opaque(32)]]);xdr.struct("HmacSha256Mac", [["mac", xdr.opaque(32)]]);});module.exports = types;
36244},{"js-xdr":131}],411:[function(require,module,exports){
36245"use strict";
36246
36247exports.hash = hash;
36248Object.defineProperty(exports, "__esModule", {
36249 value: true
36250});
36251
36252var sha256 = require("sha.js").sha256;
36253
36254function hash(data) {
36255 var hasher = new sha256();
36256 hasher.update(data, "utf8");
36257 return hasher.digest();
36258}
36259},{"sha.js":400}],412:[function(require,module,exports){
36260"use strict";
36261
36262var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
36263
36264var _defaults = function (obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; };
36265
36266var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
36267
36268Object.defineProperty(exports, "__esModule", {
36269 value: true
36270});
36271
36272var xdr = _interopRequire(require("./generated/stellar-xdr_generated"));
36273
36274exports.xdr = xdr;
36275exports.hash = require("./hashing").hash;
36276
36277var _signing = require("./signing");
36278
36279exports.sign = _signing.sign;
36280exports.verify = _signing.verify;
36281exports.FastSigning = _signing.FastSigning;
36282exports.Keypair = require("./keypair").Keypair;
36283
36284var _jsXdr = require("js-xdr");
36285
36286exports.UnsignedHyper = _jsXdr.UnsignedHyper;
36287exports.Hyper = _jsXdr.Hyper;
36288exports.Transaction = require("./transaction").Transaction;
36289
36290var _transaction_builder = require("./transaction_builder");
36291
36292exports.TransactionBuilder = _transaction_builder.TransactionBuilder;
36293exports.TimeoutInfinite = _transaction_builder.TimeoutInfinite;
36294exports.Asset = require("./asset").Asset;
36295
36296var _operation = require("./operation");
36297
36298exports.Operation = _operation.Operation;
36299exports.AuthRequiredFlag = _operation.AuthRequiredFlag;
36300exports.AuthRevocableFlag = _operation.AuthRevocableFlag;
36301exports.AuthImmutableFlag = _operation.AuthImmutableFlag;
36302
36303_defaults(exports, _interopRequireWildcard(require("./memo")));
36304
36305exports.Account = require("./account").Account;
36306
36307var _network = require("./network");
36308
36309exports.Network = _network.Network;
36310exports.Networks = _network.Networks;
36311exports.StrKey = require("./strkey").StrKey;
36312exports["default"] = module.exports;
36313},{"./account":407,"./asset":408,"./generated/stellar-xdr_generated":410,"./hashing":411,"./keypair":413,"./memo":414,"./network":415,"./operation":416,"./signing":430,"./strkey":431,"./transaction":432,"./transaction_builder":433,"js-xdr":131}],413:[function(require,module,exports){
36314(function (Buffer){
36315"use strict";
36316
36317var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
36318
36319var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
36320
36321var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
36322
36323var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
36324
36325Object.defineProperty(exports, "__esModule", {
36326 value: true
36327});
36328
36329var Network = require("./network").Network;
36330
36331var _signing = require("./signing");
36332
36333var sign = _signing.sign;
36334var verify = _signing.verify;
36335
36336var base58 = _interopRequireWildcard(require("./base58"));
36337
36338var StrKey = require("./strkey").StrKey;
36339
36340var xdr = _interopRequire(require("./generated/stellar-xdr_generated"));
36341
36342var nacl = _interopRequire(require("tweetnacl"));
36343
36344/**
36345 * `Keypair` represents public (and secret) keys of the account.
36346 *
36347 * Currently `Keypair` only supports ed25519 but in a future this class can be abstraction layer for other
36348 * public-key signature systems.
36349 *
36350 * Use more convenient methods to create `Keypair` object:
36351 * * `{@link Keypair.fromPublicKey}`
36352 * * `{@link Keypair.fromSecret}`
36353 * * `{@link Keypair.random}`
36354 *
36355 * @constructor
36356 * @param {object} keys At least one of keys must be provided.
36357 * @param {string} keys.type Public-key signature system name. (currently only `ed25519` keys are supported)
36358 * @param {Buffer} [keys.publicKey] Raw public key
36359 * @param {Buffer} [keys.secretKey] Raw secret key (32-byte secret seed in ed25519`)
36360 */
36361
36362var Keypair = exports.Keypair = (function () {
36363 function Keypair(keys) {
36364 _classCallCheck(this, Keypair);
36365
36366 if (keys.type != "ed25519") {
36367 throw new Error("Invalid keys type");
36368 }
36369
36370 this.type = keys.type;
36371
36372 if (keys.secretKey) {
36373 keys.secretKey = Buffer.from(keys.secretKey);
36374
36375 if (keys.secretKey.length != 32) {
36376 throw new Error("secretKey length is invalid");
36377 }
36378
36379 var secretKeyUint8 = new Uint8Array(keys.secretKey);
36380 var naclKeys = nacl.sign.keyPair.fromSeed(secretKeyUint8);
36381
36382 this._secretSeed = keys.secretKey;
36383 this._secretKey = Buffer.from(naclKeys.secretKey);
36384 this._publicKey = Buffer.from(naclKeys.publicKey);
36385
36386 if (keys.publicKey && !this._publicKey.equals(Buffer.from(keys.publicKey))) {
36387 throw new Error("secretKey does not match publicKey");
36388 }
36389 } else {
36390 this._publicKey = Buffer.from(keys.publicKey);
36391
36392 if (this._publicKey.length != 32) {
36393 throw new Error("publicKey length is invalid");
36394 }
36395 }
36396 }
36397
36398 _createClass(Keypair, {
36399 xdrAccountId: {
36400 value: function xdrAccountId() {
36401 return new xdr.AccountId.publicKeyTypeEd25519(this._publicKey);
36402 }
36403 },
36404 xdrPublicKey: {
36405 value: function xdrPublicKey() {
36406 return new xdr.PublicKey.publicKeyTypeEd25519(this._publicKey);
36407 }
36408 },
36409 rawPublicKey: {
36410
36411 /**
36412 * Returns raw public key
36413 * @returns {Buffer}
36414 */
36415
36416 value: function rawPublicKey() {
36417 return this._publicKey;
36418 }
36419 },
36420 signatureHint: {
36421 value: function signatureHint() {
36422 var a = this.xdrAccountId().toXDR();
36423
36424 return a.slice(a.length - 4);
36425 }
36426 },
36427 publicKey: {
36428
36429 /**
36430 * Returns public key associated with this `Keypair` object.
36431 * @returns {string}
36432 */
36433
36434 value: function publicKey() {
36435 return StrKey.encodeEd25519PublicKey(this._publicKey);
36436 }
36437 },
36438 secret: {
36439
36440 /**
36441 * Returns secret key associated with this `Keypair` object
36442 * @returns {string}
36443 */
36444
36445 value: function secret() {
36446 if (!this._secretSeed) {
36447 throw new Error("no secret key available");
36448 }
36449
36450 if (this.type == "ed25519") {
36451 return StrKey.encodeEd25519SecretSeed(this._secretSeed);
36452 }
36453
36454 throw new Error("Invalid Keypair type");
36455 }
36456 },
36457 rawSecretKey: {
36458
36459 /**
36460 * Returns raw secret key.
36461 * @returns {Buffer}
36462 */
36463
36464 value: function rawSecretKey() {
36465 return this._secretSeed;
36466 }
36467 },
36468 canSign: {
36469
36470 /**
36471 * Returns `true` if this `Keypair` object contains secret key and can sign.
36472 * @returns {boolean}
36473 */
36474
36475 value: function canSign() {
36476 return !!this._secretKey;
36477 }
36478 },
36479 sign: {
36480
36481 /**
36482 * Signs data.
36483 * @param {Buffer} data Data to sign
36484 * @returns {Buffer}
36485 */
36486
36487 value: (function (_sign) {
36488 var _signWrapper = function sign(_x) {
36489 return _sign.apply(this, arguments);
36490 };
36491
36492 _signWrapper.toString = function () {
36493 return _sign.toString();
36494 };
36495
36496 return _signWrapper;
36497 })(function (data) {
36498 if (!this.canSign()) {
36499 throw new Error("cannot sign: no secret key available");
36500 }
36501
36502 return sign(data, this._secretKey);
36503 })
36504 },
36505 verify: {
36506
36507 /**
36508 * Verifies if `signature` for `data` is valid.
36509 * @param {Buffer} data Signed data
36510 * @param {Buffer} signature Signature
36511 * @returns {boolean}
36512 */
36513
36514 value: (function (_verify) {
36515 var _verifyWrapper = function verify(_x2, _x3) {
36516 return _verify.apply(this, arguments);
36517 };
36518
36519 _verifyWrapper.toString = function () {
36520 return _verify.toString();
36521 };
36522
36523 return _verifyWrapper;
36524 })(function (data, signature) {
36525 return verify(data, signature, this._publicKey);
36526 })
36527 },
36528 signDecorated: {
36529 value: function signDecorated(data) {
36530 var signature = this.sign(data);
36531 var hint = this.signatureHint();
36532
36533 return new xdr.DecoratedSignature({ hint: hint, signature: signature });
36534 }
36535 }
36536 }, {
36537 fromSecret: {
36538
36539 /**
36540 * Creates a new `Keypair` instance from secret. This can either be secret key or secret seed depending
36541 * on underlying public-key signature system. Currently `Keypair` only supports ed25519.
36542 * @param {string} secret secret key (ex. `SDAKFNYEIAORZKKCYRILFQKLLOCNPL5SWJ3YY5NM3ZH6GJSZGXHZEPQS`)
36543 * @returns {Keypair}
36544 */
36545
36546 value: function fromSecret(secret) {
36547 var rawSecret = StrKey.decodeEd25519SecretSeed(secret);
36548 return this.fromRawEd25519Seed(rawSecret);
36549 }
36550 },
36551 fromBase58Seed: {
36552
36553 /**
36554 * Base58 address encoding is **DEPRECATED**! Use this method only for transition to strkey encoding.
36555 * @param {string} seed Base58 secret seed
36556 * @deprecated Use {@link Keypair.fromSecret}
36557 * @returns {Keypair}
36558 */
36559
36560 value: function fromBase58Seed(seed) {
36561 var rawSeed = base58.decodeBase58Check("seed", seed);
36562 return this.fromRawEd25519Seed(rawSeed);
36563 }
36564 },
36565 fromRawEd25519Seed: {
36566
36567 /**
36568 * Creates a new `Keypair` object from ed25519 secret key seed raw bytes.
36569 *
36570 * @param {Buffer} rawSeed Raw 32-byte ed25519 secret key seed
36571 * @returns {Keypair}
36572 */
36573
36574 value: function fromRawEd25519Seed(rawSeed) {
36575 return new this({ type: "ed25519", secretKey: rawSeed });
36576 }
36577 },
36578 master: {
36579
36580 /**
36581 * Returns `Keypair` object representing network master key.
36582 * @returns {Keypair}
36583 */
36584
36585 value: function master() {
36586 if (Network.current() === null) {
36587 throw new Error("No network selected. Use `Network.use`, `Network.usePublicNetwork` or `Network.useTestNetwork` helper methods to select network.");
36588 }
36589 return this.fromRawEd25519Seed(Network.current().networkId());
36590 }
36591 },
36592 fromPublicKey: {
36593
36594 /**
36595 * Creates a new `Keypair` object from public key.
36596 * @param {string} publicKey public key (ex. `GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA`)
36597 * @returns {Keypair}
36598 */
36599
36600 value: function fromPublicKey(publicKey) {
36601 publicKey = StrKey.decodeEd25519PublicKey(publicKey);
36602 if (publicKey.length !== 32) {
36603 throw new Error("Invalid Stellar public key");
36604 }
36605 return new this({ type: "ed25519", publicKey: publicKey });
36606 }
36607 },
36608 random: {
36609
36610 /**
36611 * Create a random `Keypair` object.
36612 * @returns {Keypair}
36613 */
36614
36615 value: function random() {
36616 var secret = nacl.randomBytes(32);
36617 return this.fromRawEd25519Seed(secret);
36618 }
36619 }
36620 });
36621
36622 return Keypair;
36623})();
36624}).call(this,require("buffer").Buffer)
36625},{"./base58":409,"./generated/stellar-xdr_generated":410,"./network":415,"./signing":430,"./strkey":431,"buffer":50,"tweetnacl":440}],414:[function(require,module,exports){
36626(function (Buffer){
36627"use strict";
36628
36629var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
36630
36631var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
36632
36633var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
36634
36635Object.defineProperty(exports, "__esModule", {
36636 value: true
36637});
36638
36639var xdr = _interopRequire(require("./generated/stellar-xdr_generated"));
36640
36641var isUndefined = _interopRequire(require("lodash/isUndefined"));
36642
36643var isNull = _interopRequire(require("lodash/isNull"));
36644
36645var isString = _interopRequire(require("lodash/isString"));
36646
36647var clone = _interopRequire(require("lodash/clone"));
36648
36649var UnsignedHyper = require("js-xdr").UnsignedHyper;
36650
36651var BigNumber = _interopRequire(require("bignumber.js"));
36652
36653/**
36654 * Type of {@link Memo}.
36655 */
36656var MemoNone = "none";
36657exports.MemoNone = MemoNone;
36658/**
36659 * Type of {@link Memo}.
36660 */
36661var MemoID = "id";
36662exports.MemoID = MemoID;
36663/**
36664 * Type of {@link Memo}.
36665 */
36666var MemoText = "text";
36667exports.MemoText = MemoText;
36668/**
36669 * Type of {@link Memo}.
36670 */
36671var MemoHash = "hash";
36672exports.MemoHash = MemoHash;
36673/**
36674 * Type of {@link Memo}.
36675 */
36676var MemoReturn = "return";
36677
36678exports.MemoReturn = MemoReturn;
36679/**
36680 * `Memo` represents memos attached to transactions.
36681 *
36682 * @param {string} type - `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn`
36683 * @param {*} value - `string` for `MemoID`, `MemoText`, buffer of hex string for `MemoHash` or `MemoReturn`
36684 * @see [Transactions concept](https://www.stellar.org/developers/learn/concepts/transactions.html)
36685 * @class Memo
36686 */
36687
36688var Memo = exports.Memo = (function () {
36689 function Memo(type) {
36690 var value = arguments[1] === undefined ? null : arguments[1];
36691
36692 _classCallCheck(this, Memo);
36693
36694 this._type = type;
36695 this._value = value;
36696
36697 switch (this._type) {
36698 case MemoNone:
36699 break;
36700 case MemoID:
36701 Memo._validateIdValue(value);
36702 break;
36703 case MemoText:
36704 Memo._validateTextValue(value);
36705 break;
36706 case MemoHash:
36707 case MemoReturn:
36708 Memo._validateHashValue(value);
36709 // We want MemoHash and MemoReturn to have Buffer as a value
36710 if (isString(value)) {
36711 this._value = Buffer.from(value, "hex");
36712 }
36713 break;
36714 default:
36715 throw new Error("Invalid memo type");
36716 }
36717 }
36718
36719 _createClass(Memo, {
36720 type: {
36721
36722 /**
36723 * Contains memo type: `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn`
36724 */
36725
36726 get: function () {
36727 return clone(this._type);
36728 },
36729 set: function (type) {
36730 throw new Error("Memo is immutable");
36731 }
36732 },
36733 value: {
36734
36735 /**
36736 * Contains memo value:
36737 * * `null` for `MemoNone`,
36738 * * `string` for `MemoID`,
36739 * * `Buffer` for `MemoText` after decoding using `fromXDRObject`, original value otherwise,
36740 * * `Buffer` for `MemoHash`, `MemoReturn`.
36741 */
36742
36743 get: function () {
36744 switch (this._type) {
36745 case MemoNone:
36746 return null;
36747 case MemoID:
36748 case MemoText:
36749 return clone(this._value);
36750 case MemoHash:
36751 case MemoReturn:
36752 return Buffer.from(this._value);
36753 default:
36754 throw new Error("Invalid memo type");
36755 }
36756 },
36757 set: function (value) {
36758 throw new Error("Memo is immutable");
36759 }
36760 },
36761 toXDRObject: {
36762
36763 /**
36764 * Returns XDR memo object.
36765 * @returns {xdr.Memo}
36766 */
36767
36768 value: function toXDRObject() {
36769 switch (this._type) {
36770 case MemoNone:
36771 return xdr.Memo.memoNone();
36772 case MemoID:
36773 return xdr.Memo.memoId(UnsignedHyper.fromString(this._value));
36774 case MemoText:
36775 return xdr.Memo.memoText(this._value);
36776 case MemoHash:
36777 return xdr.Memo.memoHash(this._value);
36778 case MemoReturn:
36779 return xdr.Memo.memoReturn(this._value);
36780 }
36781 }
36782 }
36783 }, {
36784 _validateIdValue: {
36785 value: function _validateIdValue(value) {
36786 var error = new Error("Expects a int64 as a string. Got " + value);
36787
36788 if (!isString(value)) {
36789 throw error;
36790 }
36791
36792 var number = undefined;
36793 try {
36794 number = new BigNumber(value);
36795 } catch (e) {
36796 throw error;
36797 }
36798
36799 // Infinity
36800 if (!number.isFinite()) {
36801 throw error;
36802 }
36803
36804 // NaN
36805 if (number.isNaN()) {
36806 throw error;
36807 }
36808 }
36809 },
36810 _validateTextValue: {
36811 value: function _validateTextValue(value) {
36812 if (!xdr.Memo.armTypeForArm("text").isValid(value)) {
36813 throw new Error("Expects string, array or buffer, max 28 bytes");
36814 }
36815 }
36816 },
36817 _validateHashValue: {
36818 value: function _validateHashValue(value) {
36819 var error = new Error("Expects a 32 byte hash value or hex encoded string. Got " + value);
36820
36821 if (value === null || isUndefined(value)) {
36822 throw error;
36823 }
36824
36825 var valueBuffer = undefined;
36826 if (isString(value)) {
36827 if (!/^[0-9A-Fa-f]{64}$/g.test(value)) {
36828 throw error;
36829 }
36830 valueBuffer = Buffer.from(value, "hex");
36831 } else if (Buffer.isBuffer(value)) {
36832 valueBuffer = Buffer.from(value);
36833 } else {
36834 throw error;
36835 }
36836
36837 if (!valueBuffer.length || valueBuffer.length != 32) {
36838 throw error;
36839 }
36840 }
36841 },
36842 none: {
36843
36844 /**
36845 * Returns an empty memo (`MemoNone`).
36846 * @returns {Memo}
36847 */
36848
36849 value: function none() {
36850 return new Memo(MemoNone);
36851 }
36852 },
36853 text: {
36854
36855 /**
36856 * Creates and returns a `MemoText` memo.
36857 * @param {string} text - memo text
36858 * @returns {Memo}
36859 */
36860
36861 value: (function (_text) {
36862 var _textWrapper = function text(_x) {
36863 return _text.apply(this, arguments);
36864 };
36865
36866 _textWrapper.toString = function () {
36867 return _text.toString();
36868 };
36869
36870 return _textWrapper;
36871 })(function (text) {
36872 return new Memo(MemoText, text);
36873 })
36874 },
36875 id: {
36876
36877 /**
36878 * Creates and returns a `MemoID` memo.
36879 * @param {string} id - 64-bit number represented as a string
36880 * @returns {Memo}
36881 */
36882
36883 value: (function (_id) {
36884 var _idWrapper = function id(_x2) {
36885 return _id.apply(this, arguments);
36886 };
36887
36888 _idWrapper.toString = function () {
36889 return _id.toString();
36890 };
36891
36892 return _idWrapper;
36893 })(function (id) {
36894 return new Memo(MemoID, id);
36895 })
36896 },
36897 hash: {
36898
36899 /**
36900 * Creates and returns a `MemoHash` memo.
36901 * @param {array|string} hash - 32 byte hash or hex encoded string
36902 * @returns {Memo}
36903 */
36904
36905 value: (function (_hash) {
36906 var _hashWrapper = function hash(_x3) {
36907 return _hash.apply(this, arguments);
36908 };
36909
36910 _hashWrapper.toString = function () {
36911 return _hash.toString();
36912 };
36913
36914 return _hashWrapper;
36915 })(function (hash) {
36916 return new Memo(MemoHash, hash);
36917 })
36918 },
36919 "return": {
36920
36921 /**
36922 * Creates and returns a `MemoReturn` memo.
36923 * @param {array|string} hash - 32 byte hash or hex encoded string
36924 * @returns {Memo}
36925 */
36926
36927 value: function _return(hash) {
36928 return new Memo(MemoReturn, hash);
36929 }
36930 },
36931 fromXDRObject: {
36932
36933 /**
36934 * Returns {@link Memo} from XDR memo object.
36935 * @param {xdr.Memo}
36936 * @returns {Memo}
36937 */
36938
36939 value: function fromXDRObject(object) {
36940 switch (object.arm()) {
36941 case "id":
36942 return Memo.id(object.value().toString());
36943 case "text":
36944 return Memo.text(object.value());
36945 case "hash":
36946 return Memo.hash(object.value());
36947 case "retHash":
36948 return Memo["return"](object.value());
36949 }
36950
36951 if (typeof object.value() === "undefined") {
36952 return Memo.none();
36953 }
36954
36955 throw new Error("Unknown type");
36956 }
36957 }
36958 });
36959
36960 return Memo;
36961})();
36962}).call(this,require("buffer").Buffer)
36963},{"./generated/stellar-xdr_generated":410,"bignumber.js":17,"buffer":50,"js-xdr":131,"lodash/clone":310,"lodash/isNull":331,"lodash/isString":337,"lodash/isUndefined":340}],415:[function(require,module,exports){
36964"use strict";
36965
36966var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
36967
36968var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
36969
36970Object.defineProperty(exports, "__esModule", {
36971 value: true
36972});
36973
36974var hash = require("./hashing").hash;
36975
36976/**
36977 * Contains passphrases for common networks:
36978 * * `Networks.PUBLIC`: `Public Global Stellar Network ; September 2015`
36979 * * `Networks.TESTNET`: `Test SDF Network ; September 2015`
36980 * @type {{PUBLIC: string, TESTNET: string}}
36981 */
36982var Networks = {
36983 PUBLIC: "Public Global Stellar Network ; September 2015",
36984 TESTNET: "Test SDF Network ; September 2015"
36985};
36986
36987exports.Networks = Networks;
36988var current = null;
36989
36990/**
36991 * The Network class provides helper methods to get the passphrase or id for different
36992 * stellar networks. It also provides the {@link Network.current} class method that returns the network
36993 * that will be used by this process for the purposes of generating signatures.
36994 *
36995 * You should select network your app will use before adding the first signature. You can use the `use`,
36996 * `usePublicNetwork` and `useTestNetwork` helper methods.
36997 *
36998 * Creates a new `Network` object.
36999 * @constructor
37000 * @param {string} networkPassphrase Network passphrase
37001 */
37002
37003var Network = exports.Network = (function () {
37004 function Network(networkPassphrase) {
37005 _classCallCheck(this, Network);
37006
37007 this._networkPassphrase = networkPassphrase;
37008 }
37009
37010 _createClass(Network, {
37011 networkPassphrase: {
37012
37013 /**
37014 * Returns network passphrase.
37015 * @returns {string}
37016 */
37017
37018 value: function networkPassphrase() {
37019 return this._networkPassphrase;
37020 }
37021 },
37022 networkId: {
37023
37024 /**
37025 * Returns Network ID. Network ID is SHA-256 hash of network passphrase.
37026 * @returns {string}
37027 */
37028
37029 value: function networkId() {
37030 return hash(this.networkPassphrase());
37031 }
37032 }
37033 }, {
37034 usePublicNetwork: {
37035
37036 /**
37037 * Use Stellar Public Network
37038 */
37039
37040 value: function usePublicNetwork() {
37041 this.use(new Network(Networks.PUBLIC));
37042 }
37043 },
37044 useTestNetwork: {
37045
37046 /**
37047 * Use test network.
37048 */
37049
37050 value: function useTestNetwork() {
37051 this.use(new Network(Networks.TESTNET));
37052 }
37053 },
37054 use: {
37055
37056 /**
37057 * Use network defined by Network object.
37058 * @param {Network} network Network to use
37059 */
37060
37061 value: function use(network) {
37062 current = network;
37063 }
37064 },
37065 current: {
37066
37067 /**
37068 * Returns currently selected network.
37069 * @returns {Network}
37070 */
37071
37072 value: (function (_current) {
37073 var _currentWrapper = function current() {
37074 return _current.apply(this, arguments);
37075 };
37076
37077 _currentWrapper.toString = function () {
37078 return _current.toString();
37079 };
37080
37081 return _currentWrapper;
37082 })(function () {
37083 return current;
37084 })
37085 }
37086 });
37087
37088 return Network;
37089})();
37090},{"./hashing":411}],416:[function(require,module,exports){
37091"use strict";
37092
37093var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
37094
37095var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37096
37097var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
37098
37099var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
37100
37101Object.defineProperty(exports, "__esModule", {
37102 value: true
37103});
37104
37105var xdr = _interopRequire(require("./generated/stellar-xdr_generated"));
37106
37107var Keypair = require("./keypair").Keypair;
37108
37109var hash = require("./hashing").hash;
37110
37111var StrKey = require("./strkey").StrKey;
37112
37113var Hyper = require("js-xdr").Hyper;
37114
37115var Asset = require("./asset").Asset;
37116
37117var BigNumber = _interopRequire(require("bignumber.js"));
37118
37119var best_r = require("./util/continued_fraction").best_r;
37120
37121var trimEnd = _interopRequire(require("lodash/trimEnd"));
37122
37123var isUndefined = _interopRequire(require("lodash/isUndefined"));
37124
37125var isString = _interopRequire(require("lodash/isString"));
37126
37127var isNumber = _interopRequire(require("lodash/isNumber"));
37128
37129var isFinite = _interopRequire(require("lodash/isFinite"));
37130
37131var ops = _interopRequireWildcard(require("./operations/index"));
37132
37133var ONE = 10000000;
37134var MAX_INT64 = "9223372036854775807";
37135
37136/**
37137 * When set using `{@link Operation.setOptions}` option, requires the issuing account to
37138 * give other accounts permission before they can hold the issuing account’s credit.
37139 * @constant
37140 * @see [Account flags](https://www.stellar.org/developers/guides/concepts/accounts.html#flags)
37141 */
37142var AuthRequiredFlag = 1 << 0;
37143exports.AuthRequiredFlag = AuthRequiredFlag;
37144/**
37145 * When set using `{@link Operation.setOptions}` option, allows the issuing account to
37146 * revoke its credit held by other accounts.
37147 * @constant
37148 * @see [Account flags](https://www.stellar.org/developers/guides/concepts/accounts.html#flags)
37149 */
37150var AuthRevocableFlag = 1 << 1;
37151exports.AuthRevocableFlag = AuthRevocableFlag;
37152/**
37153 * When set using `{@link Operation.setOptions}` option, then none of the authorization flags
37154 * can be set and the account can never be deleted.
37155 * @constant
37156 * @see [Account flags](https://www.stellar.org/developers/guides/concepts/accounts.html#flags)
37157 */
37158var AuthImmutableFlag = 1 << 2;
37159
37160exports.AuthImmutableFlag = AuthImmutableFlag;
37161/**
37162 * `Operation` class represents [operations](https://www.stellar.org/developers/learn/concepts/operations.html) in Stellar network.
37163 * Use one of static methods to create operations:
37164 * * `{@link Operation.createAccount}`
37165 * * `{@link Operation.payment}`
37166 * * `{@link Operation.pathPayment}`
37167 * * `{@link Operation.manageOffer}`
37168 * * `{@link Operation.createPassiveOffer}`
37169 * * `{@link Operation.setOptions}`
37170 * * `{@link Operation.changeTrust}`
37171 * * `{@link Operation.allowTrust}`
37172 * * `{@link Operation.accountMerge}`
37173 * * `{@link Operation.inflation}`
37174 * * `{@link Operation.manageData}`
37175 * * `{@link Operation.bumpSequence}`
37176 *
37177 * @class Operation
37178 */
37179
37180var Operation = exports.Operation = (function () {
37181 function Operation() {
37182 _classCallCheck(this, Operation);
37183 }
37184
37185 _createClass(Operation, null, {
37186 setSourceAccount: {
37187 value: function setSourceAccount(opAttributes, opts) {
37188 if (opts.source) {
37189 if (!StrKey.isValidEd25519PublicKey(opts.source)) {
37190 throw new Error("Source address is invalid");
37191 }
37192 opAttributes.sourceAccount = Keypair.fromPublicKey(opts.source).xdrAccountId();
37193 }
37194 }
37195 },
37196 fromXDRObject: {
37197
37198 /**
37199 * Converts the XDR Operation object to the opts object used to create the XDR
37200 * operation.
37201 * @param {xdr.Operation} operation - An XDR Operation.
37202 * @return {Operation}
37203 */
37204
37205 value: function fromXDRObject(operation) {
37206 function accountIdtoAddress(accountId) {
37207 return StrKey.encodeEd25519PublicKey(accountId.ed25519());
37208 }
37209
37210 var result = {};
37211 if (operation.sourceAccount()) {
37212 result.source = accountIdtoAddress(operation.sourceAccount());
37213 }
37214
37215 var attrs = operation.body().value();
37216 switch (operation.body()["switch"]().name) {
37217 case "createAccount":
37218 result.type = "createAccount";
37219 result.destination = accountIdtoAddress(attrs.destination());
37220 result.startingBalance = this._fromXDRAmount(attrs.startingBalance());
37221 break;
37222 case "payment":
37223 result.type = "payment";
37224 result.destination = accountIdtoAddress(attrs.destination());
37225 result.asset = Asset.fromOperation(attrs.asset());
37226 result.amount = this._fromXDRAmount(attrs.amount());
37227 break;
37228 case "pathPayment":
37229 result.type = "pathPayment";
37230 result.sendAsset = Asset.fromOperation(attrs.sendAsset());
37231 result.sendMax = this._fromXDRAmount(attrs.sendMax());
37232 result.destination = accountIdtoAddress(attrs.destination());
37233 result.destAsset = Asset.fromOperation(attrs.destAsset());
37234 result.destAmount = this._fromXDRAmount(attrs.destAmount());
37235 var path = attrs.path();
37236 result.path = [];
37237 for (var i in path) {
37238 result.path.push(Asset.fromOperation(path[i]));
37239 }
37240 break;
37241 case "changeTrust":
37242 result.type = "changeTrust";
37243 result.line = Asset.fromOperation(attrs.line());
37244 result.limit = this._fromXDRAmount(attrs.limit());
37245 break;
37246 case "allowTrust":
37247 result.type = "allowTrust";
37248 result.trustor = accountIdtoAddress(attrs.trustor());
37249 result.assetCode = attrs.asset().value().toString();
37250 result.assetCode = trimEnd(result.assetCode, "\u0000");
37251 result.authorize = attrs.authorize();
37252 break;
37253 case "setOption":
37254 result.type = "setOptions";
37255 if (attrs.inflationDest()) {
37256 result.inflationDest = accountIdtoAddress(attrs.inflationDest());
37257 }
37258
37259 result.clearFlags = attrs.clearFlags();
37260 result.setFlags = attrs.setFlags();
37261 result.masterWeight = attrs.masterWeight();
37262 result.lowThreshold = attrs.lowThreshold();
37263 result.medThreshold = attrs.medThreshold();
37264 result.highThreshold = attrs.highThreshold();
37265 // home_domain is checked by iscntrl in stellar-core
37266 result.homeDomain = attrs.homeDomain() !== undefined ? attrs.homeDomain().toString("ascii") : undefined;
37267
37268 if (attrs.signer()) {
37269 var signer = {};
37270 var arm = attrs.signer().key().arm();
37271 if (arm == "ed25519") {
37272 signer.ed25519PublicKey = accountIdtoAddress(attrs.signer().key());
37273 } else if (arm == "preAuthTx") {
37274 signer.preAuthTx = attrs.signer().key().preAuthTx();
37275 } else if (arm == "hashX") {
37276 signer.sha256Hash = attrs.signer().key().hashX();
37277 }
37278
37279 signer.weight = attrs.signer().weight();
37280 result.signer = signer;
37281 }
37282 break;
37283 case "manageOffer":
37284 result.type = "manageOffer";
37285 result.selling = Asset.fromOperation(attrs.selling());
37286 result.buying = Asset.fromOperation(attrs.buying());
37287 result.amount = this._fromXDRAmount(attrs.amount());
37288 result.price = this._fromXDRPrice(attrs.price());
37289 result.offerId = attrs.offerId().toString();
37290 break;
37291 case "createPassiveOffer":
37292 result.type = "createPassiveOffer";
37293 result.selling = Asset.fromOperation(attrs.selling());
37294 result.buying = Asset.fromOperation(attrs.buying());
37295 result.amount = this._fromXDRAmount(attrs.amount());
37296 result.price = this._fromXDRPrice(attrs.price());
37297 break;
37298 case "accountMerge":
37299 result.type = "accountMerge";
37300 result.destination = accountIdtoAddress(attrs);
37301 break;
37302 case "manageDatum":
37303 result.type = "manageData";
37304 // manage_data.name is checked by iscntrl in stellar-core
37305 result.name = attrs.dataName().toString("ascii");
37306 result.value = attrs.dataValue();
37307 break;
37308 case "inflation":
37309 result.type = "inflation";
37310 break;
37311 case "bumpSequence":
37312 result.type = "bumpSequence";
37313 result.bumpTo = attrs.bumpTo().toString();
37314 break;
37315 default:
37316 throw new Error("Unknown operation");
37317 }
37318 return result;
37319 }
37320 },
37321 isValidAmount: {
37322 value: function isValidAmount(value) {
37323 var allowZero = arguments[1] === undefined ? false : arguments[1];
37324
37325 if (!isString(value)) {
37326 return false;
37327 }
37328
37329 var amount = undefined;
37330 try {
37331 amount = new BigNumber(value);
37332 } catch (e) {
37333 return false;
37334 }
37335
37336 switch (true) {
37337 // == 0
37338 case !allowZero && amount.isZero():
37339 // < 0
37340 case amount.isNegative():
37341 // > Max value
37342 case amount.times(ONE).greaterThan(new BigNumber(MAX_INT64).toString()):
37343 // Decimal places (max 7)
37344 case amount.decimalPlaces() > 7:
37345 // NaN or Infinity
37346 case amount.isNaN() || !amount.isFinite():
37347 return false;
37348 default:
37349 return true;
37350 }
37351 }
37352 },
37353 constructAmountRequirementsError: {
37354 value: function constructAmountRequirementsError(arg) {
37355 return "" + arg + " argument must be of type String, represent a positive number and have at most 7 digits after the decimal";
37356 }
37357 },
37358 _checkUnsignedIntValue: {
37359
37360 /**
37361 * Returns value converted to uint32 value or undefined.
37362 * If `value` is not `Number`, `String` or `Undefined` then throws an error.
37363 * Used in {@link Operation.setOptions}.
37364 * @private
37365 * @param {string} name Name of the property (used in error message only)
37366 * @param {*} value Value to check
37367 * @param {function(value, name)} isValidFunction Function to check other constraints (the argument will be a `Number`)
37368 * @returns {undefined|Number}
37369 * @private
37370 */
37371
37372 value: function _checkUnsignedIntValue(name, value) {
37373 var isValidFunction = arguments[2] === undefined ? null : arguments[2];
37374
37375 if (isUndefined(value)) {
37376 return undefined;
37377 }
37378
37379 if (isString(value)) {
37380 value = parseFloat(value);
37381 }
37382
37383 switch (true) {
37384 case !isNumber(value) || !isFinite(value) || value % 1 !== 0:
37385 throw new Error("" + name + " value is invalid");
37386 case value < 0:
37387 throw new Error("" + name + " value must be unsigned");
37388 case !isValidFunction || isValidFunction && isValidFunction(value, name):
37389 return value;
37390 default:
37391 throw new Error("" + name + " value is invalid");
37392 }
37393 }
37394 },
37395 _toXDRAmount: {
37396
37397 /**
37398 * @private
37399 */
37400
37401 value: function _toXDRAmount(value) {
37402 var amount = new BigNumber(value).mul(ONE);
37403 return Hyper.fromString(amount.toString());
37404 }
37405 },
37406 _fromXDRAmount: {
37407
37408 /**
37409 * @private
37410 */
37411
37412 value: function _fromXDRAmount(value) {
37413 return new BigNumber(value).div(ONE).toString();
37414 }
37415 },
37416 _fromXDRPrice: {
37417
37418 /**
37419 * @private
37420 */
37421
37422 value: function _fromXDRPrice(price) {
37423 var n = new BigNumber(price.n());
37424 return n.div(new BigNumber(price.d())).toString();
37425 }
37426 },
37427 _toXDRPrice: {
37428
37429 /**
37430 * @private
37431 */
37432
37433 value: function _toXDRPrice(price) {
37434 var xdrObject = undefined;
37435 if (price.n && price.d) {
37436 xdrObject = new xdr.Price(price);
37437 } else {
37438 price = new BigNumber(price);
37439 var approx = best_r(price);
37440 xdrObject = new xdr.Price({
37441 n: parseInt(approx[0]),
37442 d: parseInt(approx[1])
37443 });
37444 }
37445
37446 if (xdrObject.n() < 0 || xdrObject.d() < 0) {
37447 throw new Error("price must be positive");
37448 }
37449
37450 return xdrObject;
37451 }
37452 }
37453 });
37454
37455 return Operation;
37456})();
37457
37458// Attach all imported operations as static methods on the Operation class
37459Operation.accountMerge = ops.accountMerge;
37460Operation.allowTrust = ops.allowTrust;
37461Operation.bumpSequence = ops.bumpSequence;
37462Operation.changeTrust = ops.changeTrust;
37463Operation.createAccount = ops.createAccount;
37464Operation.createPassiveOffer = ops.createPassiveOffer;
37465Operation.inflation = ops.inflation;
37466Operation.manageData = ops.manageData;
37467Operation.manageOffer = ops.manageOffer;
37468Operation.pathPayment = ops.pathPayment;
37469Operation.payment = ops.payment;
37470Operation.setOptions = ops.setOptions;
37471},{"./asset":408,"./generated/stellar-xdr_generated":410,"./hashing":411,"./keypair":413,"./operations/index":423,"./strkey":431,"./util/continued_fraction":435,"bignumber.js":17,"js-xdr":131,"lodash/isFinite":327,"lodash/isNumber":332,"lodash/isString":337,"lodash/isUndefined":340,"lodash/trimEnd":355}],417:[function(require,module,exports){
37472"use strict";
37473
37474var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37475
37476Object.defineProperty(exports, "__esModule", {
37477 value: true
37478});
37479
37480var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37481
37482var Keypair = require("../keypair").Keypair;
37483
37484var StrKey = require("../strkey").StrKey;
37485
37486/**
37487 * Transfers native balance to destination account.
37488 * @function
37489 * @alias Operation.accountMerge
37490 * @param {object} opts
37491 * @param {string} opts.destination - Destination to merge the source account into.
37492 * @param {string} [opts.source] - The source account (defaults to transaction source).
37493 * @returns {xdr.AccountMergeOp}
37494 */
37495var accountMerge = function accountMerge(opts) {
37496 var opAttributes = {};
37497 if (!StrKey.isValidEd25519PublicKey(opts.destination)) {
37498 throw new Error("destination is invalid");
37499 }
37500 opAttributes.body = xdr.OperationBody.accountMerge(Keypair.fromPublicKey(opts.destination).xdrAccountId());
37501 this.setSourceAccount(opAttributes, opts);
37502
37503 return new xdr.Operation(opAttributes);
37504};
37505exports.accountMerge = accountMerge;
37506},{"../generated/stellar-xdr_generated":410,"../keypair":413,"../strkey":431}],418:[function(require,module,exports){
37507"use strict";
37508
37509var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37510
37511Object.defineProperty(exports, "__esModule", {
37512 value: true
37513});
37514
37515var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37516
37517var Keypair = require("../keypair").Keypair;
37518
37519var StrKey = require("../strkey").StrKey;
37520
37521var padEnd = _interopRequire(require("lodash/padEnd"));
37522
37523/**
37524 * Returns an XDR AllowTrustOp. An "allow trust" operation authorizes another
37525 * account to hold your account's credit for a given asset.
37526 * @function
37527 * @alias Operation.allowTrust
37528 * @param {object} opts
37529 * @param {string} opts.trustor - The trusting account (the one being authorized)
37530 * @param {string} opts.assetCode - The asset code being authorized.
37531 * @param {boolean} opts.authorize - True to authorize the line, false to deauthorize.
37532 * @param {string} [opts.source] - The source account (defaults to transaction source).
37533 * @returns {xdr.AllowTrustOp}
37534 */
37535var allowTrust = function allowTrust(opts) {
37536 if (!StrKey.isValidEd25519PublicKey(opts.trustor)) {
37537 throw new Error("trustor is invalid");
37538 }
37539 var attributes = {};
37540 attributes.trustor = Keypair.fromPublicKey(opts.trustor).xdrAccountId();
37541 if (opts.assetCode.length <= 4) {
37542 var code = padEnd(opts.assetCode, 4, "\u0000");
37543 attributes.asset = xdr.AllowTrustOpAsset.assetTypeCreditAlphanum4(code);
37544 } else if (opts.assetCode.length <= 12) {
37545 var code = padEnd(opts.assetCode, 12, "\u0000");
37546 attributes.asset = xdr.AllowTrustOpAsset.assetTypeCreditAlphanum12(code);
37547 } else {
37548 throw new Error("Asset code must be 12 characters at max.");
37549 }
37550 attributes.authorize = opts.authorize;
37551 var allowTrustOp = new xdr.AllowTrustOp(attributes);
37552
37553 var opAttributes = {};
37554 opAttributes.body = xdr.OperationBody.allowTrust(allowTrustOp);
37555 this.setSourceAccount(opAttributes, opts);
37556
37557 return new xdr.Operation(opAttributes);
37558};
37559exports.allowTrust = allowTrust;
37560},{"../generated/stellar-xdr_generated":410,"../keypair":413,"../strkey":431,"lodash/padEnd":345}],419:[function(require,module,exports){
37561"use strict";
37562
37563var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37564
37565Object.defineProperty(exports, "__esModule", {
37566 value: true
37567});
37568
37569var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37570
37571var Hyper = require("js-xdr").Hyper;
37572
37573var BigNumber = _interopRequire(require("bignumber.js"));
37574
37575var isString = _interopRequire(require("lodash/isString"));
37576
37577/**
37578 * This operation bumps sequence number.
37579 * @function
37580 * @alias Operation.bumpSequence
37581 * @param {object} opts
37582 * @param {string} opts.bumpTo - Sequence number to bump to.
37583 * @param {string} [opts.source] - The optional source account.
37584 * @returns {xdr.BumpSequenceOp}
37585 */
37586var bumpSequence = function bumpSequence(opts) {
37587 var attributes = {};
37588
37589 if (!isString(opts.bumpTo)) {
37590 throw new Error("bumpTo must be a string");
37591 }
37592
37593 try {
37594 new BigNumber(opts.bumpTo);
37595 } catch (e) {
37596 throw new Error("bumpTo must be a stringified number");
37597 }
37598
37599 attributes.bumpTo = Hyper.fromString(opts.bumpTo);
37600
37601 var bumpSequenceOp = new xdr.BumpSequenceOp(attributes);
37602
37603 var opAttributes = {};
37604 opAttributes.body = xdr.OperationBody.bumpSequence(bumpSequenceOp);
37605 this.setSourceAccount(opAttributes, opts);
37606
37607 return new xdr.Operation(opAttributes);
37608};
37609exports.bumpSequence = bumpSequence;
37610},{"../generated/stellar-xdr_generated":410,"bignumber.js":17,"js-xdr":131,"lodash/isString":337}],420:[function(require,module,exports){
37611"use strict";
37612
37613var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37614
37615Object.defineProperty(exports, "__esModule", {
37616 value: true
37617});
37618
37619var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37620
37621var Keypair = require("../keypair").Keypair;
37622
37623var isUndefined = _interopRequire(require("lodash/isUndefined"));
37624
37625var Hyper = require("js-xdr").Hyper;
37626
37627var BigNumber = _interopRequire(require("bignumber.js"));
37628
37629var MAX_INT64 = "9223372036854775807";
37630
37631/**
37632 * Returns an XDR ChangeTrustOp. A "change trust" operation adds, removes, or updates a
37633 * trust line for a given asset from the source account to another. The issuer being
37634 * trusted and the asset code are in the given Asset object.
37635 * @function
37636 * @alias Operation.changeTrust
37637 * @param {object} opts
37638 * @param {Asset} opts.asset - The asset for the trust line.
37639 * @param {string} [opts.limit] - The limit for the asset, defaults to max int64.
37640 * If the limit is set to "0" it deletes the trustline.
37641 * @param {string} [opts.source] - The source account (defaults to transaction source).
37642 * @returns {xdr.ChangeTrustOp}
37643 */
37644var changeTrust = function changeTrust(opts) {
37645 var attributes = {};
37646 attributes.line = opts.asset.toXDRObject();
37647 if (!isUndefined(opts.limit) && !this.isValidAmount(opts.limit, true)) {
37648 throw new TypeError(this.constructAmountRequirementsError("limit"));
37649 }
37650
37651 if (opts.limit) {
37652 attributes.limit = this._toXDRAmount(opts.limit);
37653 } else {
37654 attributes.limit = Hyper.fromString(new BigNumber(MAX_INT64).toString());
37655 }
37656
37657 if (opts.source) {
37658 attributes.source = opts.source.masterKeypair;
37659 }
37660 var changeTrustOP = new xdr.ChangeTrustOp(attributes);
37661
37662 var opAttributes = {};
37663 opAttributes.body = xdr.OperationBody.changeTrust(changeTrustOP);
37664 this.setSourceAccount(opAttributes, opts);
37665
37666 return new xdr.Operation(opAttributes);
37667};
37668exports.changeTrust = changeTrust;
37669},{"../generated/stellar-xdr_generated":410,"../keypair":413,"bignumber.js":17,"js-xdr":131,"lodash/isUndefined":340}],421:[function(require,module,exports){
37670"use strict";
37671
37672var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37673
37674Object.defineProperty(exports, "__esModule", {
37675 value: true
37676});
37677
37678var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37679
37680var Keypair = require("../keypair").Keypair;
37681
37682var StrKey = require("../strkey").StrKey;
37683
37684/**
37685 * Create and fund a non existent account.
37686 * @function
37687 * @alias Operation.createAccount
37688 * @param {object} opts
37689 * @param {string} opts.destination - Destination account ID to create an account for.
37690 * @param {string} opts.startingBalance - Amount in XLM the account should be funded for. Must be greater
37691 * than the [reserve balance amount](https://www.stellar.org/developers/learn/concepts/fees.html).
37692 * @param {string} [opts.source] - The source account for the payment. Defaults to the transaction's source account.
37693 * @returns {xdr.CreateAccountOp}
37694 */
37695var createAccount = (function (_createAccount) {
37696 var _createAccountWrapper = function createAccount(_x) {
37697 return _createAccount.apply(this, arguments);
37698 };
37699
37700 _createAccountWrapper.toString = function () {
37701 return _createAccount.toString();
37702 };
37703
37704 return _createAccountWrapper;
37705})(function (opts) {
37706 if (!StrKey.isValidEd25519PublicKey(opts.destination)) {
37707 throw new Error("destination is invalid");
37708 }
37709 if (!this.isValidAmount(opts.startingBalance)) {
37710 throw new TypeError(this.constructAmountRequirementsError("startingBalance"));
37711 }
37712 var attributes = {};
37713 attributes.destination = Keypair.fromPublicKey(opts.destination).xdrAccountId();
37714 attributes.startingBalance = this._toXDRAmount(opts.startingBalance);
37715 var createAccount = new xdr.CreateAccountOp(attributes);
37716
37717 var opAttributes = {};
37718 opAttributes.body = xdr.OperationBody.createAccount(createAccount);
37719 this.setSourceAccount(opAttributes, opts);
37720
37721 return new xdr.Operation(opAttributes);
37722});
37723exports.createAccount = createAccount;
37724},{"../generated/stellar-xdr_generated":410,"../keypair":413,"../strkey":431}],422:[function(require,module,exports){
37725"use strict";
37726
37727var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37728
37729Object.defineProperty(exports, "__esModule", {
37730 value: true
37731});
37732
37733var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37734
37735var isUndefined = _interopRequire(require("lodash/isUndefined"));
37736
37737/**
37738 * Returns a XDR CreatePasiveOfferOp. A "create passive offer" operation creates an
37739 * offer that won't consume a counter offer that exactly matches this offer. This is
37740 * useful for offers just used as 1:1 exchanges for path payments. Use manage offer
37741 * to manage this offer after using this operation to create it.
37742 * @function
37743 * @alias Operation.createPassiveOffer
37744 * @param {object} opts
37745 * @param {Asset} opts.selling - What you're selling.
37746 * @param {Asset} opts.buying - What you're buying.
37747 * @param {string} opts.amount - The total amount you're selling. If 0, deletes the offer.
37748 * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `selling` in terms of `buying`.
37749 * @param {number} opts.price.n - If `opts.price` is an object: the price numerator
37750 * @param {number} opts.price.d - If `opts.price` is an object: the price denominator
37751 * @param {string} [opts.source] - The source account (defaults to transaction source).
37752 * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found.
37753 * @returns {xdr.CreatePassiveOfferOp}
37754 */
37755var createPassiveOffer = function createPassiveOffer(opts) {
37756 var attributes = {};
37757 attributes.selling = opts.selling.toXDRObject();
37758 attributes.buying = opts.buying.toXDRObject();
37759 if (!this.isValidAmount(opts.amount)) {
37760 throw new TypeError(this.constructAmountRequirementsError("amount"));
37761 }
37762 attributes.amount = this._toXDRAmount(opts.amount);
37763 if (isUndefined(opts.price)) {
37764 throw new TypeError("price argument is required");
37765 }
37766 attributes.price = this._toXDRPrice(opts.price);
37767 var createPassiveOfferOp = new xdr.CreatePassiveOfferOp(attributes);
37768
37769 var opAttributes = {};
37770 opAttributes.body = xdr.OperationBody.createPassiveOffer(createPassiveOfferOp);
37771 this.setSourceAccount(opAttributes, opts);
37772
37773 return new xdr.Operation(opAttributes);
37774};
37775exports.createPassiveOffer = createPassiveOffer;
37776},{"../generated/stellar-xdr_generated":410,"lodash/isUndefined":340}],423:[function(require,module,exports){
37777"use strict";
37778
37779Object.defineProperty(exports, "__esModule", {
37780 value: true
37781});
37782exports.accountMerge = require("./account_merge").accountMerge;
37783exports.allowTrust = require("./allow_trust").allowTrust;
37784exports.bumpSequence = require("./bump_sequence").bumpSequence;
37785exports.changeTrust = require("./change_trust").changeTrust;
37786exports.createAccount = require("./create_account").createAccount;
37787exports.createPassiveOffer = require("./create_passive_offer").createPassiveOffer;
37788exports.inflation = require("./inflation").inflation;
37789exports.manageData = require("./manage_data").manageData;
37790exports.manageOffer = require("./manage_offer").manageOffer;
37791exports.pathPayment = require("./path_payment").pathPayment;
37792exports.payment = require("./payment").payment;
37793exports.setOptions = require("./set_options").setOptions;
37794},{"./account_merge":417,"./allow_trust":418,"./bump_sequence":419,"./change_trust":420,"./create_account":421,"./create_passive_offer":422,"./inflation":424,"./manage_data":425,"./manage_offer":426,"./path_payment":427,"./payment":428,"./set_options":429}],424:[function(require,module,exports){
37795"use strict";
37796
37797var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37798
37799Object.defineProperty(exports, "__esModule", {
37800 value: true
37801});
37802
37803var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37804
37805/**
37806 * This operation generates the inflation.
37807 * @function
37808 * @alias Operation.inflation
37809 * @param {object} [opts]
37810 * @param {string} [opts.source] - The optional source account.
37811 * @returns {xdr.InflationOp}
37812 */
37813var inflation = function inflation() {
37814 var opts = arguments[0] === undefined ? {} : arguments[0];
37815
37816 var opAttributes = {};
37817 opAttributes.body = xdr.OperationBody.inflation();
37818 this.setSourceAccount(opAttributes, opts);
37819 return new xdr.Operation(opAttributes);
37820};
37821exports.inflation = inflation;
37822},{"../generated/stellar-xdr_generated":410}],425:[function(require,module,exports){
37823(function (Buffer){
37824"use strict";
37825
37826var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37827
37828Object.defineProperty(exports, "__esModule", {
37829 value: true
37830});
37831
37832var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37833
37834var isString = _interopRequire(require("lodash/isString"));
37835
37836/**
37837 * This operation adds data entry to the ledger.
37838 * @function
37839 * @alias Operation.manageData
37840 * @param {object} opts
37841 * @param {string} opts.name - The name of the data entry.
37842 * @param {string|Buffer} opts.value - The value of the data entry.
37843 * @param {string} [opts.source] - The optional source account.
37844 * @returns {xdr.ManageDataOp}
37845 */
37846var manageData = function manageData(opts) {
37847 var attributes = {};
37848
37849 if (!(isString(opts.name) && opts.name.length <= 64)) {
37850 throw new Error("name must be a string, up to 64 characters");
37851 }
37852 attributes.dataName = opts.name;
37853
37854 if (!isString(opts.value) && !Buffer.isBuffer(opts.value) && opts.value !== null) {
37855 throw new Error("value must be a string, Buffer or null");
37856 }
37857
37858 if (isString(opts.value)) {
37859 attributes.dataValue = Buffer.from(opts.value);
37860 } else {
37861 attributes.dataValue = opts.value;
37862 }
37863
37864 if (attributes.dataValue !== null && attributes.dataValue.length > 64) {
37865 throw new Error("value cannot be longer that 64 bytes");
37866 }
37867
37868 var manageDataOp = new xdr.ManageDataOp(attributes);
37869
37870 var opAttributes = {};
37871 opAttributes.body = xdr.OperationBody.manageDatum(manageDataOp);
37872 this.setSourceAccount(opAttributes, opts);
37873
37874 return new xdr.Operation(opAttributes);
37875};
37876exports.manageData = manageData;
37877}).call(this,require("buffer").Buffer)
37878},{"../generated/stellar-xdr_generated":410,"buffer":50,"lodash/isString":337}],426:[function(require,module,exports){
37879"use strict";
37880
37881var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37882
37883Object.defineProperty(exports, "__esModule", {
37884 value: true
37885});
37886
37887var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37888
37889var isUndefined = _interopRequire(require("lodash/isUndefined"));
37890
37891var UnsignedHyper = require("js-xdr").UnsignedHyper;
37892
37893/**
37894 * Returns a XDR ManageOfferOp. A "manage offer" operation creates, updates, or
37895 * deletes an offer.
37896 * @function
37897 * @alias Operation.manageOffer
37898 * @param {object} opts
37899 * @param {Asset} opts.selling - What you're selling.
37900 * @param {Asset} opts.buying - What you're buying.
37901 * @param {string} opts.amount - The total amount you're selling. If 0, deletes the offer.
37902 * @param {number|string|BigNumber|Object} opts.price - Price of 1 unit of `selling` in terms of `buying`.
37903 * @param {number} opts.price.n - If `opts.price` is an object: the price numerator
37904 * @param {number} opts.price.d - If `opts.price` is an object: the price denominator
37905 * @param {number|string} [opts.offerId ] - If `0`, will create a new offer (default). Otherwise, edits an exisiting offer.
37906 * @param {string} [opts.source] - The source account (defaults to transaction source).
37907 * @throws {Error} Throws `Error` when the best rational approximation of `price` cannot be found.
37908 * @returns {xdr.ManageOfferOp}
37909 */
37910var manageOffer = function manageOffer(opts) {
37911 var attributes = {};
37912 attributes.selling = opts.selling.toXDRObject();
37913 attributes.buying = opts.buying.toXDRObject();
37914 if (!this.isValidAmount(opts.amount, true)) {
37915 throw new TypeError(this.constructAmountRequirementsError("amount"));
37916 }
37917 attributes.amount = this._toXDRAmount(opts.amount);
37918 if (isUndefined(opts.price)) {
37919 throw new TypeError("price argument is required");
37920 }
37921 attributes.price = this._toXDRPrice(opts.price);
37922
37923 if (!isUndefined(opts.offerId)) {
37924 opts.offerId = opts.offerId.toString();
37925 } else {
37926 opts.offerId = "0";
37927 }
37928 attributes.offerId = UnsignedHyper.fromString(opts.offerId);
37929 var manageOfferOp = new xdr.ManageOfferOp(attributes);
37930
37931 var opAttributes = {};
37932 opAttributes.body = xdr.OperationBody.manageOffer(manageOfferOp);
37933 this.setSourceAccount(opAttributes, opts);
37934
37935 return new xdr.Operation(opAttributes);
37936};
37937exports.manageOffer = manageOffer;
37938},{"../generated/stellar-xdr_generated":410,"js-xdr":131,"lodash/isUndefined":340}],427:[function(require,module,exports){
37939"use strict";
37940
37941var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
37942
37943Object.defineProperty(exports, "__esModule", {
37944 value: true
37945});
37946
37947var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
37948
37949var Keypair = require("../keypair").Keypair;
37950
37951var StrKey = require("../strkey").StrKey;
37952
37953/**
37954 * Returns a XDR PaymentOp. A "payment" operation send the specified amount to the
37955 * destination account, optionally through a path. XLM payments create the destination
37956 * account if it does not exist.
37957 * @function
37958 * @alias Operation.pathPayment
37959 * @param {object} opts
37960 * @param {Asset} opts.sendAsset - The asset to pay with.
37961 * @param {string} opts.sendMax - The maximum amount of sendAsset to send.
37962 * @param {string} opts.destination - The destination account to send to.
37963 * @param {Asset} opts.destAsset - The asset the destination will receive.
37964 * @param {string} opts.destAmount - The amount the destination receives.
37965 * @param {Asset[]} opts.path - An array of Asset objects to use as the path.
37966 * @param {string} [opts.source] - The source account for the payment. Defaults to the transaction's source account.
37967 * @returns {xdr.PathPaymentOp}
37968 */
37969var pathPayment = function pathPayment(opts) {
37970 switch (true) {
37971 case !opts.sendAsset:
37972 throw new Error("Must specify a send asset");
37973 case !this.isValidAmount(opts.sendMax):
37974 throw new TypeError(this.constructAmountRequirementsError("sendMax"));
37975 case !StrKey.isValidEd25519PublicKey(opts.destination):
37976 throw new Error("destination is invalid");
37977 case !opts.destAsset:
37978 throw new Error("Must provide a destAsset for a payment operation");
37979 case !this.isValidAmount(opts.destAmount):
37980 throw new TypeError(this.constructAmountRequirementsError("destAmount"));
37981 }
37982
37983 var attributes = {};
37984 attributes.sendAsset = opts.sendAsset.toXDRObject();
37985 attributes.sendMax = this._toXDRAmount(opts.sendMax);
37986 attributes.destination = Keypair.fromPublicKey(opts.destination).xdrAccountId();
37987 attributes.destAsset = opts.destAsset.toXDRObject();
37988 attributes.destAmount = this._toXDRAmount(opts.destAmount);
37989
37990 var path = opts.path ? opts.path : [];
37991 attributes.path = path.map(function (x) {
37992 return x.toXDRObject();
37993 });
37994
37995 var payment = new xdr.PathPaymentOp(attributes);
37996
37997 var opAttributes = {};
37998 opAttributes.body = xdr.OperationBody.pathPayment(payment);
37999 this.setSourceAccount(opAttributes, opts);
38000
38001 return new xdr.Operation(opAttributes);
38002};
38003exports.pathPayment = pathPayment;
38004},{"../generated/stellar-xdr_generated":410,"../keypair":413,"../strkey":431}],428:[function(require,module,exports){
38005"use strict";
38006
38007var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
38008
38009Object.defineProperty(exports, "__esModule", {
38010 value: true
38011});
38012
38013var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
38014
38015var Keypair = require("../keypair").Keypair;
38016
38017var StrKey = require("../strkey").StrKey;
38018
38019/**
38020 * Create a payment operation.
38021 * @function
38022 * @alias Operation.payment
38023 * @param {object} opts
38024 * @param {string} opts.destination - The destination account ID.
38025 * @param {Asset} opts.asset - The asset to send.
38026 * @param {string} opts.amount - The amount to send.
38027 * @param {string} [opts.source] - The source account for the payment. Defaults to the transaction's source account.
38028 * @returns {xdr.PaymentOp}
38029 */
38030var payment = (function (_payment) {
38031 var _paymentWrapper = function payment(_x) {
38032 return _payment.apply(this, arguments);
38033 };
38034
38035 _paymentWrapper.toString = function () {
38036 return _payment.toString();
38037 };
38038
38039 return _paymentWrapper;
38040})(function (opts) {
38041 if (!StrKey.isValidEd25519PublicKey(opts.destination)) {
38042 throw new Error("destination is invalid");
38043 }
38044 if (!opts.asset) {
38045 throw new Error("Must provide an asset for a payment operation");
38046 }
38047 if (!this.isValidAmount(opts.amount)) {
38048 throw new TypeError(this.constructAmountRequirementsError("amount"));
38049 }
38050
38051 var attributes = {};
38052 attributes.destination = Keypair.fromPublicKey(opts.destination).xdrAccountId();
38053 attributes.asset = opts.asset.toXDRObject();
38054 attributes.amount = this._toXDRAmount(opts.amount);
38055 var payment = new xdr.PaymentOp(attributes);
38056
38057 var opAttributes = {};
38058 opAttributes.body = xdr.OperationBody.payment(payment);
38059 this.setSourceAccount(opAttributes, opts);
38060
38061 return new xdr.Operation(opAttributes);
38062});
38063exports.payment = payment;
38064},{"../generated/stellar-xdr_generated":410,"../keypair":413,"../strkey":431}],429:[function(require,module,exports){
38065(function (Buffer){
38066"use strict";
38067
38068var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
38069
38070Object.defineProperty(exports, "__esModule", {
38071 value: true
38072});
38073
38074var xdr = _interopRequire(require("../generated/stellar-xdr_generated"));
38075
38076var Keypair = require("../keypair").Keypair;
38077
38078var StrKey = require("../strkey").StrKey;
38079
38080var isUndefined = _interopRequire(require("lodash/isUndefined"));
38081
38082var isString = _interopRequire(require("lodash/isString"));
38083
38084/**
38085 * Returns an XDR SetOptionsOp. A "set options" operations set or clear account flags,
38086 * set the account's inflation destination, and/or add new signers to the account.
38087 * The flags used in `opts.clearFlags` and `opts.setFlags` can be the following:
38088 * - `{@link AuthRequiredFlag}`
38089 * - `{@link AuthRevocableFlag}`
38090 * - `{@link AuthImmutableFlag}`
38091 *
38092 * It's possible to set/clear multiple flags at once using logical or.
38093 * @function
38094 * @alias Operation.setOptions
38095 * @param {object} opts
38096 * @param {string} [opts.inflationDest] - Set this account ID as the account's inflation destination.
38097 * @param {(number|string)} [opts.clearFlags] - Bitmap integer for which account flags to clear.
38098 * @param {(number|string)} [opts.setFlags] - Bitmap integer for which account flags to set.
38099 * @param {number|string} [opts.masterWeight] - The master key weight.
38100 * @param {number|string} [opts.lowThreshold] - The sum weight for the low threshold.
38101 * @param {number|string} [opts.medThreshold] - The sum weight for the medium threshold.
38102 * @param {number|string} [opts.highThreshold] - The sum weight for the high threshold.
38103 * @param {object} [opts.signer] - Add or remove a signer from the account. The signer is
38104 * deleted if the weight is 0. Only one of `ed25519PublicKey`, `sha256Hash`, `preAuthTx` should be defined.
38105 * @param {string} [opts.signer.ed25519PublicKey] - The ed25519 public key of the signer.
38106 * @param {Buffer|string} [opts.signer.sha256Hash] - sha256 hash (Buffer or hex string) of preimage that will unlock funds. Preimage should be used as signature of future transaction.
38107 * @param {Buffer|string} [opts.signer.preAuthTx] - Hash (Buffer or hex string) of transaction that will unlock funds.
38108 * @param {number|string} [opts.signer.weight] - The weight of the new signer (0 to delete or 1-255)
38109 * @param {string} [opts.homeDomain] - sets the home domain used for reverse federation lookup.
38110 * @param {string} [opts.source] - The source account (defaults to transaction source).
38111 * @returns {xdr.SetOptionsOp}
38112 * @see [Account flags](https://www.stellar.org/developers/guides/concepts/accounts.html#flags)
38113 */
38114var setOptions = function setOptions(opts) {
38115 var attributes = {};
38116
38117 if (opts.inflationDest) {
38118 if (!StrKey.isValidEd25519PublicKey(opts.inflationDest)) {
38119 throw new Error("inflationDest is invalid");
38120 }
38121 attributes.inflationDest = Keypair.fromPublicKey(opts.inflationDest).xdrAccountId();
38122 }
38123
38124 var weightCheckFunction = function (value, name) {
38125 if (value >= 0 && value <= 255) {
38126 return true;
38127 } else {
38128 throw new Error("" + name + " value must be between 0 and 255");
38129 }
38130 };
38131
38132 attributes.clearFlags = this._checkUnsignedIntValue("clearFlags", opts.clearFlags);
38133 attributes.setFlags = this._checkUnsignedIntValue("setFlags", opts.setFlags);
38134 attributes.masterWeight = this._checkUnsignedIntValue("masterWeight", opts.masterWeight, weightCheckFunction);
38135 attributes.lowThreshold = this._checkUnsignedIntValue("lowThreshold", opts.lowThreshold, weightCheckFunction);
38136 attributes.medThreshold = this._checkUnsignedIntValue("medThreshold", opts.medThreshold, weightCheckFunction);
38137 attributes.highThreshold = this._checkUnsignedIntValue("highThreshold", opts.highThreshold, weightCheckFunction);
38138
38139 if (!isUndefined(opts.homeDomain) && !isString(opts.homeDomain)) {
38140 throw new TypeError("homeDomain argument must be of type String");
38141 }
38142 attributes.homeDomain = opts.homeDomain;
38143
38144 if (opts.signer) {
38145 var weight = this._checkUnsignedIntValue("signer.weight", opts.signer.weight, weightCheckFunction);
38146 var key = undefined;
38147
38148 var setValues = 0;
38149
38150 if (opts.signer.ed25519PublicKey) {
38151 if (!StrKey.isValidEd25519PublicKey(opts.signer.ed25519PublicKey)) {
38152 throw new Error("signer.ed25519PublicKey is invalid.");
38153 }
38154 var rawKey = StrKey.decodeEd25519PublicKey(opts.signer.ed25519PublicKey);
38155 key = new xdr.SignerKey.signerKeyTypeEd25519(rawKey);
38156 setValues++;
38157 }
38158
38159 if (opts.signer.preAuthTx) {
38160 if (isString(opts.signer.preAuthTx)) {
38161 opts.signer.preAuthTx = Buffer.from(opts.signer.preAuthTx, "hex");
38162 }
38163
38164 if (!(Buffer.isBuffer(opts.signer.preAuthTx) && opts.signer.preAuthTx.length == 32)) {
38165 throw new Error("signer.preAuthTx must be 32 bytes Buffer.");
38166 }
38167 key = new xdr.SignerKey.signerKeyTypePreAuthTx(opts.signer.preAuthTx);
38168 setValues++;
38169 }
38170
38171 if (opts.signer.sha256Hash) {
38172 if (isString(opts.signer.sha256Hash)) {
38173 opts.signer.sha256Hash = Buffer.from(opts.signer.sha256Hash, "hex");
38174 }
38175
38176 if (!(Buffer.isBuffer(opts.signer.sha256Hash) && opts.signer.sha256Hash.length == 32)) {
38177 throw new Error("signer.sha256Hash must be 32 bytes Buffer.");
38178 }
38179 key = new xdr.SignerKey.signerKeyTypeHashX(opts.signer.sha256Hash);
38180 setValues++;
38181 }
38182
38183 if (setValues != 1) {
38184 throw new Error("Signer object must contain exactly one of signer.ed25519PublicKey, signer.sha256Hash, signer.preAuthTx.");
38185 }
38186
38187 attributes.signer = new xdr.Signer({ key: key, weight: weight });
38188 }
38189
38190 var setOptionsOp = new xdr.SetOptionsOp(attributes);
38191
38192 var opAttributes = {};
38193 opAttributes.body = xdr.OperationBody.setOption(setOptionsOp);
38194 this.setSourceAccount(opAttributes, opts);
38195
38196 return new xdr.Operation(opAttributes);
38197};
38198exports.setOptions = setOptions;
38199}).call(this,require("buffer").Buffer)
38200},{"../generated/stellar-xdr_generated":410,"../keypair":413,"../strkey":431,"buffer":50,"lodash/isString":337,"lodash/isUndefined":340}],430:[function(require,module,exports){
38201(function (Buffer){
38202"use strict";
38203
38204exports.sign = sign;
38205exports.verify = verify;
38206Object.defineProperty(exports, "__esModule", {
38207 value: true
38208});
38209// This module provides the signing functionality used by the stellar network
38210// The code below may look a little strange... this is because we try to provide
38211// the most efficient signing method possible. First, we try to load the
38212// native ed25519 package for node.js environments, and if that fails we
38213// fallback to tweetnacl.js
38214
38215var actualMethods = {};
38216
38217/**
38218 * Use this flag to check if fast signing (provided by `ed25519` package) is available.
38219 * If your app is signing a large number of transaction or verifying a large number
38220 * of signatures make sure `ed25519` package is installed.
38221 */
38222var FastSigning = checkFastSigning();
38223
38224exports.FastSigning = FastSigning;
38225
38226function sign(data, secretKey) {
38227 return actualMethods.sign(data, secretKey);
38228}
38229
38230function verify(data, signature, publicKey) {
38231 return actualMethods.verify(data, signature, publicKey);
38232}
38233
38234function checkFastSigning() {
38235 return typeof window === "undefined" ? checkFastSigningNode() : checkFastSigningBrowser();
38236}
38237
38238function checkFastSigningNode() {
38239 // NOTE: we use commonjs style require here because es6 imports
38240 // can only occur at the top level. thanks, obama.
38241 var ed25519 = undefined;
38242 try {
38243 ed25519 = require("ed25519");
38244 } catch (err) {
38245 return checkFastSigningBrowser();
38246 }
38247
38248 actualMethods.sign = function (data, secretKey) {
38249 return ed25519.Sign(Buffer.from(data), secretKey);
38250 };
38251
38252 actualMethods.verify = function (data, signature, publicKey) {
38253 data = Buffer.from(data);
38254 try {
38255 return ed25519.Verify(data, signature, publicKey);
38256 } catch (e) {
38257 return false;
38258 }
38259 };
38260
38261 return true;
38262}
38263
38264function checkFastSigningBrowser() {
38265 // fallback to tweetnacl.js if we're in the browser or
38266 // if there was a failure installing ed25519
38267 var nacl = require("tweetnacl");
38268
38269 actualMethods.sign = function (data, secretKey) {
38270 data = Buffer.from(data);
38271 data = new Uint8Array(data.toJSON().data);
38272 secretKey = new Uint8Array(secretKey.toJSON().data);
38273
38274 var signature = nacl.sign.detached(data, secretKey);
38275
38276 return Buffer.from(signature);
38277 };
38278
38279 actualMethods.verify = function (data, signature, publicKey) {
38280 data = Buffer.from(data);
38281 data = new Uint8Array(data.toJSON().data);
38282 signature = new Uint8Array(signature.toJSON().data);
38283 publicKey = new Uint8Array(publicKey.toJSON().data);
38284
38285 return nacl.sign.detached.verify(data, signature, publicKey);
38286 };
38287
38288 return false;
38289}
38290}).call(this,require("buffer").Buffer)
38291},{"buffer":50,"ed25519":20,"tweetnacl":440}],431:[function(require,module,exports){
38292(function (Buffer){
38293"use strict";
38294
38295var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
38296
38297var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
38298
38299var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
38300
38301exports.decodeCheck = decodeCheck;
38302exports.encodeCheck = encodeCheck;
38303Object.defineProperty(exports, "__esModule", {
38304 value: true
38305});
38306
38307var base32 = _interopRequire(require("base32.js"));
38308
38309var crc = _interopRequire(require("crc"));
38310
38311var isUndefined = _interopRequire(require("lodash/isUndefined"));
38312
38313var isNull = _interopRequire(require("lodash/isNull"));
38314
38315var isString = _interopRequire(require("lodash/isString"));
38316
38317var verifyChecksum = require("./util/checksum").verifyChecksum;
38318
38319var versionBytes = {
38320 ed25519PublicKey: 6 << 3, // G
38321 ed25519SecretSeed: 18 << 3, // S
38322 preAuthTx: 19 << 3, // T
38323 sha256Hash: 23 << 3 // X
38324};
38325
38326/**
38327 * StrKey is a helper class that allows encoding and decoding strkey.
38328 */
38329
38330var StrKey = exports.StrKey = (function () {
38331 function StrKey() {
38332 _classCallCheck(this, StrKey);
38333 }
38334
38335 _createClass(StrKey, null, {
38336 encodeEd25519PublicKey: {
38337 /**
38338 * Encodes data to strkey ed25519 public key.
38339 * @param {Buffer} data data to encode
38340 * @returns {string}
38341 */
38342
38343 value: function encodeEd25519PublicKey(data) {
38344 return encodeCheck("ed25519PublicKey", data);
38345 }
38346 },
38347 decodeEd25519PublicKey: {
38348
38349 /**
38350 * Decodes strkey ed25519 public key to raw data.
38351 * @param {string} data data to decode
38352 * @returns {Buffer}
38353 */
38354
38355 value: function decodeEd25519PublicKey(data) {
38356 return decodeCheck("ed25519PublicKey", data);
38357 }
38358 },
38359 isValidEd25519PublicKey: {
38360
38361 /**
38362 * Returns true if the given Stellar public key is a valid ed25519 public key.
38363 * @param {string} publicKey public key to check
38364 * @returns {boolean}
38365 */
38366
38367 value: function isValidEd25519PublicKey(publicKey) {
38368 return isValid("ed25519PublicKey", publicKey);
38369 }
38370 },
38371 encodeEd25519SecretSeed: {
38372
38373 /**
38374 * Encodes data to strkey ed25519 seed.
38375 * @param {Buffer} data data to encode
38376 * @returns {string}
38377 */
38378
38379 value: function encodeEd25519SecretSeed(data) {
38380 return encodeCheck("ed25519SecretSeed", data);
38381 }
38382 },
38383 decodeEd25519SecretSeed: {
38384
38385 /**
38386 * Decodes strkey ed25519 seed to raw data.
38387 * @param {string} data data to decode
38388 * @returns {Buffer}
38389 */
38390
38391 value: function decodeEd25519SecretSeed(data) {
38392 return decodeCheck("ed25519SecretSeed", data);
38393 }
38394 },
38395 isValidEd25519SecretSeed: {
38396
38397 /**
38398 * Returns true if the given Stellar secret key is a valid ed25519 secret seed.
38399 * @param {string} seed seed to check
38400 * @returns {boolean}
38401 */
38402
38403 value: function isValidEd25519SecretSeed(seed) {
38404 return isValid("ed25519SecretSeed", seed);
38405 }
38406 },
38407 encodePreAuthTx: {
38408
38409 /**
38410 * Encodes data to strkey preAuthTx.
38411 * @param {Buffer} data data to encode
38412 * @returns {string}
38413 */
38414
38415 value: function encodePreAuthTx(data) {
38416 return encodeCheck("preAuthTx", data);
38417 }
38418 },
38419 decodePreAuthTx: {
38420
38421 /**
38422 * Decodes strkey PreAuthTx to raw data.
38423 * @param {string} data data to decode
38424 * @returns {Buffer}
38425 */
38426
38427 value: function decodePreAuthTx(data) {
38428 return decodeCheck("preAuthTx", data);
38429 }
38430 },
38431 encodeSha256Hash: {
38432
38433 /**
38434 * Encodes data to strkey sha256 hash.
38435 * @param {Buffer} data data to encode
38436 * @returns {string}
38437 */
38438
38439 value: function encodeSha256Hash(data) {
38440 return encodeCheck("sha256Hash", data);
38441 }
38442 },
38443 decodeSha256Hash: {
38444
38445 /**
38446 * Decodes strkey sha256 hash to raw data.
38447 * @param {string} data data to decode
38448 * @returns {Buffer}
38449 */
38450
38451 value: function decodeSha256Hash(data) {
38452 return decodeCheck("sha256Hash", data);
38453 }
38454 }
38455 });
38456
38457 return StrKey;
38458})();
38459
38460function isValid(versionByteName, encoded) {
38461 if (encoded && encoded.length != 56) {
38462 return false;
38463 }
38464
38465 try {
38466 var decoded = decodeCheck(versionByteName, encoded);
38467 if (decoded.length !== 32) {
38468 return false;
38469 }
38470 } catch (err) {
38471 return false;
38472 }
38473 return true;
38474}
38475
38476function decodeCheck(versionByteName, encoded) {
38477 if (!isString(encoded)) {
38478 throw new TypeError("encoded argument must be of type String");
38479 }
38480
38481 var decoded = base32.decode(encoded);
38482 var versionByte = decoded[0];
38483 var payload = decoded.slice(0, -2);
38484 var data = payload.slice(1);
38485 var checksum = decoded.slice(-2);
38486
38487 if (encoded != base32.encode(decoded)) {
38488 throw new Error("invalid encoded string");
38489 }
38490
38491 var expectedVersion = versionBytes[versionByteName];
38492
38493 if (isUndefined(expectedVersion)) {
38494 throw new Error("" + versionByteName + " is not a valid version byte name. expected one of \"accountId\" or \"seed\"");
38495 }
38496
38497 if (versionByte !== expectedVersion) {
38498 throw new Error("invalid version byte. expected " + expectedVersion + ", got " + versionByte);
38499 }
38500
38501 var expectedChecksum = calculateChecksum(payload);
38502
38503 if (!verifyChecksum(expectedChecksum, checksum)) {
38504 throw new Error("invalid checksum");
38505 }
38506
38507 return Buffer.from(data);
38508}
38509
38510function encodeCheck(versionByteName, data) {
38511 if (isNull(data) || isUndefined(data)) {
38512 throw new Error("cannot encode null data");
38513 }
38514
38515 var versionByte = versionBytes[versionByteName];
38516
38517 if (isUndefined(versionByte)) {
38518 throw new Error("" + versionByteName + " is not a valid version byte name. expected one of \"ed25519PublicKey\", \"ed25519SecretSeed\", \"preAuthTx\", \"sha256Hash\"");
38519 }
38520
38521 data = Buffer.from(data);
38522 var versionBuffer = Buffer.from([versionByte]);
38523 var payload = Buffer.concat([versionBuffer, data]);
38524 var checksum = calculateChecksum(payload);
38525 var unencoded = Buffer.concat([payload, checksum]);
38526
38527 return base32.encode(unencoded);
38528}
38529
38530function calculateChecksum(payload) {
38531 // This code calculates CRC16-XModem checksum of payload
38532 // and returns it as Buffer in little-endian order.
38533 var checksum = Buffer.alloc(2);
38534 checksum.writeUInt16LE(crc.crc16xmodem(payload), 0);
38535 return checksum;
38536}
38537}).call(this,require("buffer").Buffer)
38538},{"./util/checksum":434,"base32.js":15,"buffer":50,"crc":66,"lodash/isNull":331,"lodash/isString":337,"lodash/isUndefined":340}],432:[function(require,module,exports){
38539(function (Buffer){
38540"use strict";
38541
38542var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
38543
38544var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
38545
38546var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
38547
38548Object.defineProperty(exports, "__esModule", {
38549 value: true
38550});
38551
38552var _index = require("./index");
38553
38554var xdr = _index.xdr;
38555var hash = _index.hash;
38556
38557var StrKey = require("./strkey").StrKey;
38558
38559var Operation = require("./operation").Operation;
38560
38561var Network = require("./network").Network;
38562
38563var Memo = require("./memo").Memo;
38564
38565var map = _interopRequire(require("lodash/map"));
38566
38567var each = _interopRequire(require("lodash/each"));
38568
38569var isString = _interopRequire(require("lodash/isString"));
38570
38571var crypto = _interopRequire(require("crypto"));
38572
38573/**
38574 * A new Transaction object is created from a transaction envelope or via {@link TransactionBuilder}.
38575 * Once a Transaction has been created from an envelope, its attributes and operations
38576 * should not be changed. You should only add signers (using {@link Transaction#sign}) to a Transaction object before
38577 * submitting to the network or forwarding on to additional signers.
38578 * @constructor
38579 * @param {string|xdr.TransactionEnvelope} envelope - The transaction envelope object or base64 encoded string.
38580 */
38581
38582var Transaction = exports.Transaction = (function () {
38583 function Transaction(envelope) {
38584 _classCallCheck(this, Transaction);
38585
38586 if (typeof envelope === "string") {
38587 var buffer = Buffer.from(envelope, "base64");
38588 envelope = xdr.TransactionEnvelope.fromXDR(buffer);
38589 }
38590 // since this transaction is immutable, save the tx
38591 this.tx = envelope.tx();
38592 this.source = StrKey.encodeEd25519PublicKey(envelope.tx().sourceAccount().ed25519());
38593 this.fee = this.tx.fee();
38594 this._memo = this.tx.memo();
38595 this.sequence = this.tx.seqNum().toString();
38596
38597 var timeBounds = this.tx.timeBounds();
38598 if (timeBounds) {
38599 this.timeBounds = {
38600 minTime: timeBounds.minTime().toString(),
38601 maxTime: timeBounds.maxTime().toString()
38602 };
38603 }
38604
38605 var operations = this.tx.operations() || [];
38606 this.operations = map(operations, function (op) {
38607 return Operation.fromXDRObject(op);
38608 });
38609
38610 var signatures = envelope.signatures() || [];
38611 this.signatures = map(signatures, function (s) {
38612 return s;
38613 });
38614 }
38615
38616 _createClass(Transaction, {
38617 memo: {
38618 get: function () {
38619 return Memo.fromXDRObject(this._memo);
38620 },
38621 set: function (value) {
38622 throw new Error("Transaction is immutable");
38623 }
38624 },
38625 sign: {
38626
38627 /**
38628 * Signs the transaction with the given {@link Keypair}.
38629 * @param {...Keypair} keypairs Keypairs of signers
38630 * @returns {void}
38631 */
38632
38633 value: function sign() {
38634 var _this = this;
38635
38636 for (var _len = arguments.length, keypairs = Array(_len), _key = 0; _key < _len; _key++) {
38637 keypairs[_key] = arguments[_key];
38638 }
38639
38640 var txHash = this.hash();
38641 var newSigs = each(keypairs, function (kp) {
38642 var sig = kp.signDecorated(txHash);
38643 _this.signatures.push(sig);
38644 });
38645 }
38646 },
38647 signHashX: {
38648
38649 /**
38650 * Add `hashX` signer preimage as signature.
38651 * @param {Buffer|String} preimage Preimage of hash used as signer
38652 * @returns {void}
38653 */
38654
38655 value: function signHashX(preimage) {
38656 if (isString(preimage)) {
38657 preimage = Buffer.from(preimage, "hex");
38658 }
38659
38660 if (preimage.length > 64) {
38661 throw new Error("preimage cannnot be longer than 64 bytes");
38662 }
38663
38664 var signature = preimage;
38665 var hash = crypto.createHash("sha256").update(preimage).digest();
38666 var hint = hash.slice(hash.length - 4);
38667 this.signatures.push(new xdr.DecoratedSignature({ hint: hint, signature: signature }));
38668 }
38669 },
38670 hash: {
38671
38672 /**
38673 * Returns a hash for this transaction, suitable for signing.
38674 * @returns {Buffer}
38675 */
38676
38677 value: (function (_hash) {
38678 var _hashWrapper = function hash() {
38679 return _hash.apply(this, arguments);
38680 };
38681
38682 _hashWrapper.toString = function () {
38683 return _hash.toString();
38684 };
38685
38686 return _hashWrapper;
38687 })(function () {
38688 return hash(this.signatureBase());
38689 })
38690 },
38691 signatureBase: {
38692
38693 /**
38694 * Returns the "signature base" of this transaction, which is the value
38695 * that, when hashed, should be signed to create a signature that
38696 * validators on the Stellar Network will accept.
38697 *
38698 * It is composed of a 4 prefix bytes followed by the xdr-encoded form
38699 * of this transaction.
38700 * @returns {Buffer}
38701 */
38702
38703 value: function signatureBase() {
38704 if (Network.current() === null) {
38705 throw new Error("No network selected. Use `Network.use`, `Network.usePublicNetwork` or `Network.useTestNetwork` helper methods to select network.");
38706 }
38707
38708 return Buffer.concat([Network.current().networkId(), xdr.EnvelopeType.envelopeTypeTx().toXDR(), this.tx.toXDR()]);
38709 }
38710 },
38711 toEnvelope: {
38712
38713 /**
38714 * To envelope returns a xdr.TransactionEnvelope which can be submitted to the network.
38715 * @returns {xdr.TransactionEnvelope}
38716 */
38717
38718 value: function toEnvelope() {
38719 var tx = this.tx;
38720 var signatures = this.signatures;
38721 var envelope = new xdr.TransactionEnvelope({ tx: tx, signatures: signatures });
38722
38723 return envelope;
38724 }
38725 }
38726 });
38727
38728 return Transaction;
38729})();
38730}).call(this,require("buffer").Buffer)
38731},{"./index":412,"./memo":414,"./network":415,"./operation":416,"./strkey":431,"buffer":50,"crypto":72,"lodash/each":312,"lodash/isString":337,"lodash/map":343}],433:[function(require,module,exports){
38732"use strict";
38733
38734var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
38735
38736var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
38737
38738var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
38739
38740Object.defineProperty(exports, "__esModule", {
38741 value: true
38742});
38743
38744var xdr = _interopRequire(require("./generated/stellar-xdr_generated"));
38745
38746var UnsignedHyper = require("js-xdr").UnsignedHyper;
38747
38748var hash = require("./hashing").hash;
38749
38750var Keypair = require("./keypair").Keypair;
38751
38752var Account = require("./account").Account;
38753
38754var Operation = require("./operation").Operation;
38755
38756var Transaction = require("./transaction").Transaction;
38757
38758var Memo = require("./memo").Memo;
38759
38760var BigNumber = _interopRequire(require("bignumber.js"));
38761
38762var clone = _interopRequire(require("lodash/clone"));
38763
38764var map = _interopRequire(require("lodash/map"));
38765
38766var isUndefined = _interopRequire(require("lodash/isUndefined"));
38767
38768var BASE_FEE = 100; // Stroops
38769
38770/**
38771 * @constant
38772 * @see {@link TransactionBuilder#setTimeout}
38773 * @see [Timeout](https://www.stellar.org/developers/horizon/reference/endpoints/transactions-create.html#timeout)
38774 */
38775var TimeoutInfinite = 0;
38776
38777exports.TimeoutInfinite = TimeoutInfinite;
38778/**
38779 * <p>Transaction builder helps constructs a new `{@link Transaction}` using the given {@link Account}
38780 * as the transaction's "source account". The transaction will use the current sequence
38781 * number of the given account as its sequence number and increment the given account's
38782 * sequence number by one. The given source account must include a private key for signing
38783 * the transaction or an error will be thrown.</p>
38784 *
38785 * <p>Operations can be added to the transaction via their corresponding builder methods, and
38786 * each returns the TransactionBuilder object so they can be chained together. After adding
38787 * the desired operations, call the `build()` method on the `TransactionBuilder` to return a fully
38788 * constructed `{@link Transaction}` that can be signed. The returned transaction will contain the
38789 * sequence number of the source account and include the signature from the source account.</p>
38790 *
38791 * <p>The following code example creates a new transaction with {@link Operation.createAccount} and
38792 * {@link Operation.payment} operations.
38793 * The Transaction's source account first funds `destinationA`, then sends
38794 * a payment to `destinationB`. The built transaction is then signed by `sourceKeypair`.</p>
38795 *
38796 * ```
38797 * var transaction = new TransactionBuilder(source)
38798 * .addOperation(Operation.createAccount({
38799 destination: destinationA,
38800 startingBalance: "20"
38801 }) // <- funds and creates destinationA
38802 .addOperation(Operation.payment({
38803 destination: destinationB,
38804 amount: "100"
38805 asset: Asset.native()
38806 }) // <- sends 100 XLM to destinationB
38807 * .setTimeout(30)
38808 * .build();
38809 *
38810 * transaction.sign(sourceKeypair);
38811 * ```
38812 * @constructor
38813 * @param {Account} sourceAccount - The source account for this transaction.
38814 * @param {object} [opts]
38815 * @param {number} [opts.fee] - The max fee willing to pay per operation in this transaction (**in stroops**).
38816 * @param {object} [opts.timebounds] - The timebounds for the validity of this transaction.
38817 * @param {number|string} [opts.timebounds.minTime] - 64 bit unix timestamp
38818 * @param {number|string} [opts.timebounds.maxTime] - 64 bit unix timestamp
38819 * @param {Memo} [opts.memo] - The memo for the transaction
38820 */
38821
38822var TransactionBuilder = exports.TransactionBuilder = (function () {
38823 function TransactionBuilder(sourceAccount) {
38824 var opts = arguments[1] === undefined ? {} : arguments[1];
38825
38826 _classCallCheck(this, TransactionBuilder);
38827
38828 if (!sourceAccount) {
38829 throw new Error("must specify source account for the transaction");
38830 }
38831 this.source = sourceAccount;
38832 this.operations = [];
38833 this.baseFee = isUndefined(opts.fee) ? BASE_FEE : opts.fee;
38834 this.timebounds = clone(opts.timebounds);
38835 this.memo = opts.memo || Memo.none();
38836 this.timeoutSet = false;
38837 }
38838
38839 _createClass(TransactionBuilder, {
38840 addOperation: {
38841
38842 /**
38843 * Adds an operation to the transaction.
38844 * @param {xdr.Operation} operation The xdr operation object, use {@link Operation} static methods.
38845 * @returns {TransactionBuilder}
38846 */
38847
38848 value: function addOperation(operation) {
38849 this.operations.push(operation);
38850 return this;
38851 }
38852 },
38853 addMemo: {
38854
38855 /**
38856 * Adds a memo to the transaction.
38857 * @param {Memo} memo {@link Memo} object
38858 * @returns {TransactionBuilder}
38859 */
38860
38861 value: function addMemo(memo) {
38862 this.memo = memo;
38863 return this;
38864 }
38865 },
38866 setTimeout: {
38867
38868 /**
38869 * Because of the distributed nature of the Stellar network it is possible that the status of your transaction
38870 * will be determined after a long time if the network is highly congested.
38871 * If you want to be sure to receive the status of the transaction within a given period you should set the
38872 * {@link TimeBounds} with <code>maxTime</code> on the transaction (this is what <code>setTimeout</code> does
38873 * internally; if there's <code>minTime</code> set but no <code>maxTime</code> it will be added).
38874 * Call to <code>TransactionBuilder.setTimeout</code> is required if Transaction does not have <code>max_time</code> set.
38875 * If you don't want to set timeout, use <code>{@link TimeoutInfinite}</code>. In general you should set
38876 * <code>{@link TimeoutInfinite}</code> only in smart contracts.
38877 *
38878 * Please note that Horizon may still return <code>504 Gateway Timeout</code> error, even for short timeouts.
38879 * In such case you need to resubmit the same transaction again without making any changes to receive a status.
38880 * This method is using the machine system time (UTC), make sure it is set correctly.
38881 * @param {timeout} Timeout in seconds.
38882 * @return {TransactionBuilder}
38883 * @see TimeoutInfinite
38884 */
38885
38886 value: function setTimeout(timeout) {
38887 if (this.timebounds != null && this.timebounds.maxTime > 0) {
38888 throw new Error("TimeBounds.max_time has been already set - setting timeout would overwrite it.");
38889 }
38890
38891 if (timeout < 0) {
38892 throw new Error("timeout cannot be negative");
38893 }
38894
38895 this.timeoutSet = true;
38896 if (timeout > 0) {
38897 var timeoutTimestamp = Math.floor(Date.now() / 1000) + timeout;
38898 if (this.timebounds == null) {
38899 this.timebounds = { minTime: 0, maxTime: timeoutTimestamp };
38900 } else {
38901 this.timebounds = { minTime: this.timebounds.minTime, maxTime: timeoutTimestamp };
38902 }
38903 }
38904
38905 return this;
38906 }
38907 },
38908 build: {
38909
38910 /**
38911 * This will build the transaction.
38912 * It will also increment the source account's sequence number by 1.
38913 * @returns {Transaction} This method will return the built {@link Transaction}.
38914 */
38915
38916 value: function build() {
38917 // Ensure setTimeout called or maxTime is set
38918 if ((this.timebounds == null || this.timebounds != null && this.timebounds.maxTime == 0) && !this.timeoutSet) {
38919 throw new Error("TimeBounds has to be set or you must call setTimeout(TimeoutInfinite).");
38920 }
38921
38922 var sequenceNumber = new BigNumber(this.source.sequenceNumber()).add(1);
38923
38924 var attrs = {
38925 sourceAccount: Keypair.fromPublicKey(this.source.accountId()).xdrAccountId(),
38926 fee: this.baseFee * this.operations.length,
38927 seqNum: xdr.SequenceNumber.fromString(sequenceNumber.toString()),
38928 memo: this.memo ? this.memo.toXDRObject() : null,
38929 ext: new xdr.TransactionExt(0)
38930 };
38931
38932 if (this.timebounds) {
38933 this.timebounds.minTime = UnsignedHyper.fromString(this.timebounds.minTime.toString());
38934 this.timebounds.maxTime = UnsignedHyper.fromString(this.timebounds.maxTime.toString());
38935 attrs.timeBounds = new xdr.TimeBounds(this.timebounds);
38936 }
38937
38938 var xtx = new xdr.Transaction(attrs);
38939 xtx.operations(this.operations);
38940
38941 var xenv = new xdr.TransactionEnvelope({ tx: xtx });
38942 var tx = new Transaction(xenv);
38943
38944 this.source.incrementSequenceNumber();
38945
38946 return tx;
38947 }
38948 }
38949 });
38950
38951 return TransactionBuilder;
38952})();
38953},{"./account":407,"./generated/stellar-xdr_generated":410,"./hashing":411,"./keypair":413,"./memo":414,"./operation":416,"./transaction":432,"bignumber.js":17,"js-xdr":131,"lodash/clone":310,"lodash/isUndefined":340,"lodash/map":343}],434:[function(require,module,exports){
38954"use strict";
38955
38956exports.verifyChecksum = verifyChecksum;
38957Object.defineProperty(exports, "__esModule", {
38958 value: true
38959});
38960
38961function verifyChecksum(expected, actual) {
38962 if (expected.length !== actual.length) {
38963 return false;
38964 }
38965
38966 if (expected.length === 0) {
38967 return true;
38968 }
38969
38970 for (var i = 0; i < expected.length; i++) {
38971 if (expected[i] !== actual[i]) {
38972 return false;
38973 }
38974 }
38975
38976 return true;
38977}
38978},{}],435:[function(require,module,exports){
38979"use strict";
38980
38981var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
38982
38983var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } };
38984
38985/**
38986 * Calculates and returns the best rational approximation of the given real number.
38987 * @private
38988 * @param {string|number|BigNumber} number
38989 * @throws Error Throws `Error` when the best rational approximation cannot be found.
38990 * @returns {array} first element is n (numerator), second element is d (denominator)
38991 */
38992exports.best_r = best_r;
38993Object.defineProperty(exports, "__esModule", {
38994 value: true
38995});
38996
38997var BigNumber = _interopRequire(require("bignumber.js"));
38998
38999var MAX_INT = (1 << 31 >>> 0) - 1;
39000function best_r(number) {
39001 number = new BigNumber(number);
39002 var a;
39003 var f;
39004 var fractions = [[new BigNumber(0), new BigNumber(1)], [new BigNumber(1), new BigNumber(0)]];
39005 var i = 2;
39006 while (true) {
39007 if (number.gt(MAX_INT)) {
39008 break;
39009 }
39010 a = number.floor();
39011 f = number.sub(a);
39012 var h = a.mul(fractions[i - 1][0]).add(fractions[i - 2][0]);
39013 var k = a.mul(fractions[i - 1][1]).add(fractions[i - 2][1]);
39014 if (h.gt(MAX_INT) || k.gt(MAX_INT)) {
39015 break;
39016 }
39017 fractions.push([h, k]);
39018 if (f.eq(0)) {
39019 break;
39020 }
39021 number = new BigNumber(1).div(f);
39022 i++;
39023 }
39024
39025 var _fractions = _slicedToArray(fractions[fractions.length - 1], 2);
39026
39027 var n = _fractions[0];
39028 var d = _fractions[1];
39029
39030 if (n.isZero() || d.isZero()) {
39031 throw new Error("Couldn't find approximation");
39032 }
39033
39034 return [n.toNumber(), d.toNumber()];
39035}
39036},{"bignumber.js":17}],436:[function(require,module,exports){
39037// vendored from http://cryptocoinjs.com/modules/misc/bs58/
39038
39039// Base58 encoding/decoding
39040// Originally written by Mike Hearn for BitcoinJ
39041// Copyright (c) 2011 Google Inc
39042// Ported to JavaScript by Stefan Thomas
39043// Merged Buffer refactorings from base58-native by Stephen Pair
39044// Copyright (c) 2013 BitPay Inc
39045
39046"use strict";
39047
39048var ALPHABET = "gsphnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCr65jkm8oFqi1tuvAxyz";
39049var ALPHABET_MAP = {};
39050for (var i = 0; i < ALPHABET.length; ++i) {
39051 ALPHABET_MAP[ALPHABET.charAt(i)] = i;
39052}
39053var BASE = 58;
39054
39055function decode(string) {
39056 if (string.length === 0) {
39057 return [];
39058 }var i,
39059 j,
39060 bytes = [0];
39061 for (i = 0; i < string.length; ++i) {
39062 var c = string[i];
39063 if (!(c in ALPHABET_MAP)) throw new Error("Non-base58 character");
39064
39065 for (j = 0; j < bytes.length; ++j) bytes[j] *= BASE;
39066 bytes[0] += ALPHABET_MAP[c];
39067
39068 var carry = 0;
39069 for (j = 0; j < bytes.length; ++j) {
39070 bytes[j] += carry;
39071
39072 carry = bytes[j] >> 8;
39073 bytes[j] &= 255;
39074 }
39075
39076 while (carry) {
39077 bytes.push(carry & 255);
39078
39079 carry >>= 8;
39080 }
39081 }
39082
39083 // deal with leading zeros
39084 for (i = 0; string[i] === "g" && i < string.length - 1; ++i) bytes.push(0);
39085
39086 return bytes.reverse();
39087}
39088
39089module.exports = { decode: decode };
39090},{}],437:[function(require,module,exports){
39091// Copyright Joyent, Inc. and other Node contributors.
39092//
39093// Permission is hereby granted, free of charge, to any person obtaining a
39094// copy of this software and associated documentation files (the
39095// "Software"), to deal in the Software without restriction, including
39096// without limitation the rights to use, copy, modify, merge, publish,
39097// distribute, sublicense, and/or sell copies of the Software, and to permit
39098// persons to whom the Software is furnished to do so, subject to the
39099// following conditions:
39100//
39101// The above copyright notice and this permission notice shall be included
39102// in all copies or substantial portions of the Software.
39103//
39104// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
39105// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
39106// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
39107// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
39108// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
39109// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
39110// USE OR OTHER DEALINGS IN THE SOFTWARE.
39111
39112module.exports = Stream;
39113
39114var EE = require('events').EventEmitter;
39115var inherits = require('inherits');
39116
39117inherits(Stream, EE);
39118Stream.Readable = require('readable-stream/readable.js');
39119Stream.Writable = require('readable-stream/writable.js');
39120Stream.Duplex = require('readable-stream/duplex.js');
39121Stream.Transform = require('readable-stream/transform.js');
39122Stream.PassThrough = require('readable-stream/passthrough.js');
39123
39124// Backwards-compat with node 0.4.x
39125Stream.Stream = Stream;
39126
39127
39128
39129// old-style streams. Note that the pipe method (the only relevant
39130// part of this class) is overridden in the Readable class.
39131
39132function Stream() {
39133 EE.call(this);
39134}
39135
39136Stream.prototype.pipe = function(dest, options) {
39137 var source = this;
39138
39139 function ondata(chunk) {
39140 if (dest.writable) {
39141 if (false === dest.write(chunk) && source.pause) {
39142 source.pause();
39143 }
39144 }
39145 }
39146
39147 source.on('data', ondata);
39148
39149 function ondrain() {
39150 if (source.readable && source.resume) {
39151 source.resume();
39152 }
39153 }
39154
39155 dest.on('drain', ondrain);
39156
39157 // If the 'end' option is not supplied, dest.end() will be called when
39158 // source gets the 'end' or 'close' events. Only dest.end() once.
39159 if (!dest._isStdio && (!options || options.end !== false)) {
39160 source.on('end', onend);
39161 source.on('close', onclose);
39162 }
39163
39164 var didOnEnd = false;
39165 function onend() {
39166 if (didOnEnd) return;
39167 didOnEnd = true;
39168
39169 dest.end();
39170 }
39171
39172
39173 function onclose() {
39174 if (didOnEnd) return;
39175 didOnEnd = true;
39176
39177 if (typeof dest.destroy === 'function') dest.destroy();
39178 }
39179
39180 // don't leave dangling pipes when there are errors.
39181 function onerror(er) {
39182 cleanup();
39183 if (EE.listenerCount(this, 'error') === 0) {
39184 throw er; // Unhandled stream error in pipe.
39185 }
39186 }
39187
39188 source.on('error', onerror);
39189 dest.on('error', onerror);
39190
39191 // remove all the event listeners that were added.
39192 function cleanup() {
39193 source.removeListener('data', ondata);
39194 dest.removeListener('drain', ondrain);
39195
39196 source.removeListener('end', onend);
39197 source.removeListener('close', onclose);
39198
39199 source.removeListener('error', onerror);
39200 dest.removeListener('error', onerror);
39201
39202 source.removeListener('end', cleanup);
39203 source.removeListener('close', cleanup);
39204
39205 dest.removeListener('close', cleanup);
39206 }
39207
39208 source.on('end', cleanup);
39209 source.on('close', cleanup);
39210
39211 dest.on('close', cleanup);
39212
39213 dest.emit('pipe', source);
39214
39215 // Allow for unix-like usage: A.pipe(B).pipe(C)
39216 return dest;
39217};
39218
39219},{"events":102,"inherits":119,"readable-stream/duplex.js":383,"readable-stream/passthrough.js":393,"readable-stream/readable.js":394,"readable-stream/transform.js":395,"readable-stream/writable.js":396}],438:[function(require,module,exports){
39220arguments[4][392][0].apply(exports,arguments)
39221},{"dup":392,"safe-buffer":398}],439:[function(require,module,exports){
39222(function (setImmediate,clearImmediate){
39223var nextTick = require('process/browser.js').nextTick;
39224var apply = Function.prototype.apply;
39225var slice = Array.prototype.slice;
39226var immediateIds = {};
39227var nextImmediateId = 0;
39228
39229// DOM APIs, for completeness
39230
39231exports.setTimeout = function() {
39232 return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
39233};
39234exports.setInterval = function() {
39235 return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
39236};
39237exports.clearTimeout =
39238exports.clearInterval = function(timeout) { timeout.close(); };
39239
39240function Timeout(id, clearFn) {
39241 this._id = id;
39242 this._clearFn = clearFn;
39243}
39244Timeout.prototype.unref = Timeout.prototype.ref = function() {};
39245Timeout.prototype.close = function() {
39246 this._clearFn.call(window, this._id);
39247};
39248
39249// Does not start the time, just sets up the members needed.
39250exports.enroll = function(item, msecs) {
39251 clearTimeout(item._idleTimeoutId);
39252 item._idleTimeout = msecs;
39253};
39254
39255exports.unenroll = function(item) {
39256 clearTimeout(item._idleTimeoutId);
39257 item._idleTimeout = -1;
39258};
39259
39260exports._unrefActive = exports.active = function(item) {
39261 clearTimeout(item._idleTimeoutId);
39262
39263 var msecs = item._idleTimeout;
39264 if (msecs >= 0) {
39265 item._idleTimeoutId = setTimeout(function onTimeout() {
39266 if (item._onTimeout)
39267 item._onTimeout();
39268 }, msecs);
39269 }
39270};
39271
39272// That's not how node.js implements it but the exposed api is the same.
39273exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) {
39274 var id = nextImmediateId++;
39275 var args = arguments.length < 2 ? false : slice.call(arguments, 1);
39276
39277 immediateIds[id] = true;
39278
39279 nextTick(function onNextTick() {
39280 if (immediateIds[id]) {
39281 // fn.call() is faster so we optimize for the common use-case
39282 // @see http://jsperf.com/call-apply-segu
39283 if (args) {
39284 fn.apply(null, args);
39285 } else {
39286 fn.call(null);
39287 }
39288 // Prevent ids from leaking
39289 exports.clearImmediate(id);
39290 }
39291 });
39292
39293 return id;
39294};
39295
39296exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) {
39297 delete immediateIds[id];
39298};
39299}).call(this,require("timers").setImmediate,require("timers").clearImmediate)
39300},{"process/browser.js":374,"timers":439}],440:[function(require,module,exports){
39301(function(nacl) {
39302'use strict';
39303
39304// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
39305// Public domain.
39306//
39307// Implementation derived from TweetNaCl version 20140427.
39308// See for details: http://tweetnacl.cr.yp.to/
39309
39310var gf = function(init) {
39311 var i, r = new Float64Array(16);
39312 if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
39313 return r;
39314};
39315
39316// Pluggable, initialized in high-level API below.
39317var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };
39318
39319var _0 = new Uint8Array(16);
39320var _9 = new Uint8Array(32); _9[0] = 9;
39321
39322var gf0 = gf(),
39323 gf1 = gf([1]),
39324 _121665 = gf([0xdb41, 1]),
39325 D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
39326 D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
39327 X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
39328 Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
39329 I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
39330
39331function ts64(x, i, h, l) {
39332 x[i] = (h >> 24) & 0xff;
39333 x[i+1] = (h >> 16) & 0xff;
39334 x[i+2] = (h >> 8) & 0xff;
39335 x[i+3] = h & 0xff;
39336 x[i+4] = (l >> 24) & 0xff;
39337 x[i+5] = (l >> 16) & 0xff;
39338 x[i+6] = (l >> 8) & 0xff;
39339 x[i+7] = l & 0xff;
39340}
39341
39342function vn(x, xi, y, yi, n) {
39343 var i,d = 0;
39344 for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
39345 return (1 & ((d - 1) >>> 8)) - 1;
39346}
39347
39348function crypto_verify_16(x, xi, y, yi) {
39349 return vn(x,xi,y,yi,16);
39350}
39351
39352function crypto_verify_32(x, xi, y, yi) {
39353 return vn(x,xi,y,yi,32);
39354}
39355
39356function core_salsa20(o, p, k, c) {
39357 var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
39358 j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
39359 j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
39360 j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
39361 j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
39362 j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
39363 j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
39364 j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
39365 j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
39366 j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
39367 j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
39368 j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
39369 j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
39370 j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
39371 j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
39372 j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
39373
39374 var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
39375 x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
39376 x15 = j15, u;
39377
39378 for (var i = 0; i < 20; i += 2) {
39379 u = x0 + x12 | 0;
39380 x4 ^= u<<7 | u>>>(32-7);
39381 u = x4 + x0 | 0;
39382 x8 ^= u<<9 | u>>>(32-9);
39383 u = x8 + x4 | 0;
39384 x12 ^= u<<13 | u>>>(32-13);
39385 u = x12 + x8 | 0;
39386 x0 ^= u<<18 | u>>>(32-18);
39387
39388 u = x5 + x1 | 0;
39389 x9 ^= u<<7 | u>>>(32-7);
39390 u = x9 + x5 | 0;
39391 x13 ^= u<<9 | u>>>(32-9);
39392 u = x13 + x9 | 0;
39393 x1 ^= u<<13 | u>>>(32-13);
39394 u = x1 + x13 | 0;
39395 x5 ^= u<<18 | u>>>(32-18);
39396
39397 u = x10 + x6 | 0;
39398 x14 ^= u<<7 | u>>>(32-7);
39399 u = x14 + x10 | 0;
39400 x2 ^= u<<9 | u>>>(32-9);
39401 u = x2 + x14 | 0;
39402 x6 ^= u<<13 | u>>>(32-13);
39403 u = x6 + x2 | 0;
39404 x10 ^= u<<18 | u>>>(32-18);
39405
39406 u = x15 + x11 | 0;
39407 x3 ^= u<<7 | u>>>(32-7);
39408 u = x3 + x15 | 0;
39409 x7 ^= u<<9 | u>>>(32-9);
39410 u = x7 + x3 | 0;
39411 x11 ^= u<<13 | u>>>(32-13);
39412 u = x11 + x7 | 0;
39413 x15 ^= u<<18 | u>>>(32-18);
39414
39415 u = x0 + x3 | 0;
39416 x1 ^= u<<7 | u>>>(32-7);
39417 u = x1 + x0 | 0;
39418 x2 ^= u<<9 | u>>>(32-9);
39419 u = x2 + x1 | 0;
39420 x3 ^= u<<13 | u>>>(32-13);
39421 u = x3 + x2 | 0;
39422 x0 ^= u<<18 | u>>>(32-18);
39423
39424 u = x5 + x4 | 0;
39425 x6 ^= u<<7 | u>>>(32-7);
39426 u = x6 + x5 | 0;
39427 x7 ^= u<<9 | u>>>(32-9);
39428 u = x7 + x6 | 0;
39429 x4 ^= u<<13 | u>>>(32-13);
39430 u = x4 + x7 | 0;
39431 x5 ^= u<<18 | u>>>(32-18);
39432
39433 u = x10 + x9 | 0;
39434 x11 ^= u<<7 | u>>>(32-7);
39435 u = x11 + x10 | 0;
39436 x8 ^= u<<9 | u>>>(32-9);
39437 u = x8 + x11 | 0;
39438 x9 ^= u<<13 | u>>>(32-13);
39439 u = x9 + x8 | 0;
39440 x10 ^= u<<18 | u>>>(32-18);
39441
39442 u = x15 + x14 | 0;
39443 x12 ^= u<<7 | u>>>(32-7);
39444 u = x12 + x15 | 0;
39445 x13 ^= u<<9 | u>>>(32-9);
39446 u = x13 + x12 | 0;
39447 x14 ^= u<<13 | u>>>(32-13);
39448 u = x14 + x13 | 0;
39449 x15 ^= u<<18 | u>>>(32-18);
39450 }
39451 x0 = x0 + j0 | 0;
39452 x1 = x1 + j1 | 0;
39453 x2 = x2 + j2 | 0;
39454 x3 = x3 + j3 | 0;
39455 x4 = x4 + j4 | 0;
39456 x5 = x5 + j5 | 0;
39457 x6 = x6 + j6 | 0;
39458 x7 = x7 + j7 | 0;
39459 x8 = x8 + j8 | 0;
39460 x9 = x9 + j9 | 0;
39461 x10 = x10 + j10 | 0;
39462 x11 = x11 + j11 | 0;
39463 x12 = x12 + j12 | 0;
39464 x13 = x13 + j13 | 0;
39465 x14 = x14 + j14 | 0;
39466 x15 = x15 + j15 | 0;
39467
39468 o[ 0] = x0 >>> 0 & 0xff;
39469 o[ 1] = x0 >>> 8 & 0xff;
39470 o[ 2] = x0 >>> 16 & 0xff;
39471 o[ 3] = x0 >>> 24 & 0xff;
39472
39473 o[ 4] = x1 >>> 0 & 0xff;
39474 o[ 5] = x1 >>> 8 & 0xff;
39475 o[ 6] = x1 >>> 16 & 0xff;
39476 o[ 7] = x1 >>> 24 & 0xff;
39477
39478 o[ 8] = x2 >>> 0 & 0xff;
39479 o[ 9] = x2 >>> 8 & 0xff;
39480 o[10] = x2 >>> 16 & 0xff;
39481 o[11] = x2 >>> 24 & 0xff;
39482
39483 o[12] = x3 >>> 0 & 0xff;
39484 o[13] = x3 >>> 8 & 0xff;
39485 o[14] = x3 >>> 16 & 0xff;
39486 o[15] = x3 >>> 24 & 0xff;
39487
39488 o[16] = x4 >>> 0 & 0xff;
39489 o[17] = x4 >>> 8 & 0xff;
39490 o[18] = x4 >>> 16 & 0xff;
39491 o[19] = x4 >>> 24 & 0xff;
39492
39493 o[20] = x5 >>> 0 & 0xff;
39494 o[21] = x5 >>> 8 & 0xff;
39495 o[22] = x5 >>> 16 & 0xff;
39496 o[23] = x5 >>> 24 & 0xff;
39497
39498 o[24] = x6 >>> 0 & 0xff;
39499 o[25] = x6 >>> 8 & 0xff;
39500 o[26] = x6 >>> 16 & 0xff;
39501 o[27] = x6 >>> 24 & 0xff;
39502
39503 o[28] = x7 >>> 0 & 0xff;
39504 o[29] = x7 >>> 8 & 0xff;
39505 o[30] = x7 >>> 16 & 0xff;
39506 o[31] = x7 >>> 24 & 0xff;
39507
39508 o[32] = x8 >>> 0 & 0xff;
39509 o[33] = x8 >>> 8 & 0xff;
39510 o[34] = x8 >>> 16 & 0xff;
39511 o[35] = x8 >>> 24 & 0xff;
39512
39513 o[36] = x9 >>> 0 & 0xff;
39514 o[37] = x9 >>> 8 & 0xff;
39515 o[38] = x9 >>> 16 & 0xff;
39516 o[39] = x9 >>> 24 & 0xff;
39517
39518 o[40] = x10 >>> 0 & 0xff;
39519 o[41] = x10 >>> 8 & 0xff;
39520 o[42] = x10 >>> 16 & 0xff;
39521 o[43] = x10 >>> 24 & 0xff;
39522
39523 o[44] = x11 >>> 0 & 0xff;
39524 o[45] = x11 >>> 8 & 0xff;
39525 o[46] = x11 >>> 16 & 0xff;
39526 o[47] = x11 >>> 24 & 0xff;
39527
39528 o[48] = x12 >>> 0 & 0xff;
39529 o[49] = x12 >>> 8 & 0xff;
39530 o[50] = x12 >>> 16 & 0xff;
39531 o[51] = x12 >>> 24 & 0xff;
39532
39533 o[52] = x13 >>> 0 & 0xff;
39534 o[53] = x13 >>> 8 & 0xff;
39535 o[54] = x13 >>> 16 & 0xff;
39536 o[55] = x13 >>> 24 & 0xff;
39537
39538 o[56] = x14 >>> 0 & 0xff;
39539 o[57] = x14 >>> 8 & 0xff;
39540 o[58] = x14 >>> 16 & 0xff;
39541 o[59] = x14 >>> 24 & 0xff;
39542
39543 o[60] = x15 >>> 0 & 0xff;
39544 o[61] = x15 >>> 8 & 0xff;
39545 o[62] = x15 >>> 16 & 0xff;
39546 o[63] = x15 >>> 24 & 0xff;
39547}
39548
39549function core_hsalsa20(o,p,k,c) {
39550 var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
39551 j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
39552 j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
39553 j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
39554 j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
39555 j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
39556 j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
39557 j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
39558 j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
39559 j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
39560 j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
39561 j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
39562 j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
39563 j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
39564 j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
39565 j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
39566
39567 var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
39568 x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
39569 x15 = j15, u;
39570
39571 for (var i = 0; i < 20; i += 2) {
39572 u = x0 + x12 | 0;
39573 x4 ^= u<<7 | u>>>(32-7);
39574 u = x4 + x0 | 0;
39575 x8 ^= u<<9 | u>>>(32-9);
39576 u = x8 + x4 | 0;
39577 x12 ^= u<<13 | u>>>(32-13);
39578 u = x12 + x8 | 0;
39579 x0 ^= u<<18 | u>>>(32-18);
39580
39581 u = x5 + x1 | 0;
39582 x9 ^= u<<7 | u>>>(32-7);
39583 u = x9 + x5 | 0;
39584 x13 ^= u<<9 | u>>>(32-9);
39585 u = x13 + x9 | 0;
39586 x1 ^= u<<13 | u>>>(32-13);
39587 u = x1 + x13 | 0;
39588 x5 ^= u<<18 | u>>>(32-18);
39589
39590 u = x10 + x6 | 0;
39591 x14 ^= u<<7 | u>>>(32-7);
39592 u = x14 + x10 | 0;
39593 x2 ^= u<<9 | u>>>(32-9);
39594 u = x2 + x14 | 0;
39595 x6 ^= u<<13 | u>>>(32-13);
39596 u = x6 + x2 | 0;
39597 x10 ^= u<<18 | u>>>(32-18);
39598
39599 u = x15 + x11 | 0;
39600 x3 ^= u<<7 | u>>>(32-7);
39601 u = x3 + x15 | 0;
39602 x7 ^= u<<9 | u>>>(32-9);
39603 u = x7 + x3 | 0;
39604 x11 ^= u<<13 | u>>>(32-13);
39605 u = x11 + x7 | 0;
39606 x15 ^= u<<18 | u>>>(32-18);
39607
39608 u = x0 + x3 | 0;
39609 x1 ^= u<<7 | u>>>(32-7);
39610 u = x1 + x0 | 0;
39611 x2 ^= u<<9 | u>>>(32-9);
39612 u = x2 + x1 | 0;
39613 x3 ^= u<<13 | u>>>(32-13);
39614 u = x3 + x2 | 0;
39615 x0 ^= u<<18 | u>>>(32-18);
39616
39617 u = x5 + x4 | 0;
39618 x6 ^= u<<7 | u>>>(32-7);
39619 u = x6 + x5 | 0;
39620 x7 ^= u<<9 | u>>>(32-9);
39621 u = x7 + x6 | 0;
39622 x4 ^= u<<13 | u>>>(32-13);
39623 u = x4 + x7 | 0;
39624 x5 ^= u<<18 | u>>>(32-18);
39625
39626 u = x10 + x9 | 0;
39627 x11 ^= u<<7 | u>>>(32-7);
39628 u = x11 + x10 | 0;
39629 x8 ^= u<<9 | u>>>(32-9);
39630 u = x8 + x11 | 0;
39631 x9 ^= u<<13 | u>>>(32-13);
39632 u = x9 + x8 | 0;
39633 x10 ^= u<<18 | u>>>(32-18);
39634
39635 u = x15 + x14 | 0;
39636 x12 ^= u<<7 | u>>>(32-7);
39637 u = x12 + x15 | 0;
39638 x13 ^= u<<9 | u>>>(32-9);
39639 u = x13 + x12 | 0;
39640 x14 ^= u<<13 | u>>>(32-13);
39641 u = x14 + x13 | 0;
39642 x15 ^= u<<18 | u>>>(32-18);
39643 }
39644
39645 o[ 0] = x0 >>> 0 & 0xff;
39646 o[ 1] = x0 >>> 8 & 0xff;
39647 o[ 2] = x0 >>> 16 & 0xff;
39648 o[ 3] = x0 >>> 24 & 0xff;
39649
39650 o[ 4] = x5 >>> 0 & 0xff;
39651 o[ 5] = x5 >>> 8 & 0xff;
39652 o[ 6] = x5 >>> 16 & 0xff;
39653 o[ 7] = x5 >>> 24 & 0xff;
39654
39655 o[ 8] = x10 >>> 0 & 0xff;
39656 o[ 9] = x10 >>> 8 & 0xff;
39657 o[10] = x10 >>> 16 & 0xff;
39658 o[11] = x10 >>> 24 & 0xff;
39659
39660 o[12] = x15 >>> 0 & 0xff;
39661 o[13] = x15 >>> 8 & 0xff;
39662 o[14] = x15 >>> 16 & 0xff;
39663 o[15] = x15 >>> 24 & 0xff;
39664
39665 o[16] = x6 >>> 0 & 0xff;
39666 o[17] = x6 >>> 8 & 0xff;
39667 o[18] = x6 >>> 16 & 0xff;
39668 o[19] = x6 >>> 24 & 0xff;
39669
39670 o[20] = x7 >>> 0 & 0xff;
39671 o[21] = x7 >>> 8 & 0xff;
39672 o[22] = x7 >>> 16 & 0xff;
39673 o[23] = x7 >>> 24 & 0xff;
39674
39675 o[24] = x8 >>> 0 & 0xff;
39676 o[25] = x8 >>> 8 & 0xff;
39677 o[26] = x8 >>> 16 & 0xff;
39678 o[27] = x8 >>> 24 & 0xff;
39679
39680 o[28] = x9 >>> 0 & 0xff;
39681 o[29] = x9 >>> 8 & 0xff;
39682 o[30] = x9 >>> 16 & 0xff;
39683 o[31] = x9 >>> 24 & 0xff;
39684}
39685
39686function crypto_core_salsa20(out,inp,k,c) {
39687 core_salsa20(out,inp,k,c);
39688}
39689
39690function crypto_core_hsalsa20(out,inp,k,c) {
39691 core_hsalsa20(out,inp,k,c);
39692}
39693
39694var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
39695 // "expand 32-byte k"
39696
39697function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
39698 var z = new Uint8Array(16), x = new Uint8Array(64);
39699 var u, i;
39700 for (i = 0; i < 16; i++) z[i] = 0;
39701 for (i = 0; i < 8; i++) z[i] = n[i];
39702 while (b >= 64) {
39703 crypto_core_salsa20(x,z,k,sigma);
39704 for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];
39705 u = 1;
39706 for (i = 8; i < 16; i++) {
39707 u = u + (z[i] & 0xff) | 0;
39708 z[i] = u & 0xff;
39709 u >>>= 8;
39710 }
39711 b -= 64;
39712 cpos += 64;
39713 mpos += 64;
39714 }
39715 if (b > 0) {
39716 crypto_core_salsa20(x,z,k,sigma);
39717 for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];
39718 }
39719 return 0;
39720}
39721
39722function crypto_stream_salsa20(c,cpos,b,n,k) {
39723 var z = new Uint8Array(16), x = new Uint8Array(64);
39724 var u, i;
39725 for (i = 0; i < 16; i++) z[i] = 0;
39726 for (i = 0; i < 8; i++) z[i] = n[i];
39727 while (b >= 64) {
39728 crypto_core_salsa20(x,z,k,sigma);
39729 for (i = 0; i < 64; i++) c[cpos+i] = x[i];
39730 u = 1;
39731 for (i = 8; i < 16; i++) {
39732 u = u + (z[i] & 0xff) | 0;
39733 z[i] = u & 0xff;
39734 u >>>= 8;
39735 }
39736 b -= 64;
39737 cpos += 64;
39738 }
39739 if (b > 0) {
39740 crypto_core_salsa20(x,z,k,sigma);
39741 for (i = 0; i < b; i++) c[cpos+i] = x[i];
39742 }
39743 return 0;
39744}
39745
39746function crypto_stream(c,cpos,d,n,k) {
39747 var s = new Uint8Array(32);
39748 crypto_core_hsalsa20(s,n,k,sigma);
39749 var sn = new Uint8Array(8);
39750 for (var i = 0; i < 8; i++) sn[i] = n[i+16];
39751 return crypto_stream_salsa20(c,cpos,d,sn,s);
39752}
39753
39754function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
39755 var s = new Uint8Array(32);
39756 crypto_core_hsalsa20(s,n,k,sigma);
39757 var sn = new Uint8Array(8);
39758 for (var i = 0; i < 8; i++) sn[i] = n[i+16];
39759 return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);
39760}
39761
39762/*
39763* Port of Andrew Moon's Poly1305-donna-16. Public domain.
39764* https://github.com/floodyberry/poly1305-donna
39765*/
39766
39767var poly1305 = function(key) {
39768 this.buffer = new Uint8Array(16);
39769 this.r = new Uint16Array(10);
39770 this.h = new Uint16Array(10);
39771 this.pad = new Uint16Array(8);
39772 this.leftover = 0;
39773 this.fin = 0;
39774
39775 var t0, t1, t2, t3, t4, t5, t6, t7;
39776
39777 t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;
39778 t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
39779 t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;
39780 t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
39781 t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;
39782 this.r[5] = ((t4 >>> 1)) & 0x1ffe;
39783 t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
39784 t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;
39785 t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
39786 this.r[9] = ((t7 >>> 5)) & 0x007f;
39787
39788 this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;
39789 this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;
39790 this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;
39791 this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;
39792 this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;
39793 this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;
39794 this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;
39795 this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;
39796};
39797
39798poly1305.prototype.blocks = function(m, mpos, bytes) {
39799 var hibit = this.fin ? 0 : (1 << 11);
39800 var t0, t1, t2, t3, t4, t5, t6, t7, c;
39801 var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
39802
39803 var h0 = this.h[0],
39804 h1 = this.h[1],
39805 h2 = this.h[2],
39806 h3 = this.h[3],
39807 h4 = this.h[4],
39808 h5 = this.h[5],
39809 h6 = this.h[6],
39810 h7 = this.h[7],
39811 h8 = this.h[8],
39812 h9 = this.h[9];
39813
39814 var r0 = this.r[0],
39815 r1 = this.r[1],
39816 r2 = this.r[2],
39817 r3 = this.r[3],
39818 r4 = this.r[4],
39819 r5 = this.r[5],
39820 r6 = this.r[6],
39821 r7 = this.r[7],
39822 r8 = this.r[8],
39823 r9 = this.r[9];
39824
39825 while (bytes >= 16) {
39826 t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;
39827 t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
39828 t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;
39829 t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
39830 t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;
39831 h5 += ((t4 >>> 1)) & 0x1fff;
39832 t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
39833 t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;
39834 t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
39835 h9 += ((t7 >>> 5)) | hibit;
39836
39837 c = 0;
39838
39839 d0 = c;
39840 d0 += h0 * r0;
39841 d0 += h1 * (5 * r9);
39842 d0 += h2 * (5 * r8);
39843 d0 += h3 * (5 * r7);
39844 d0 += h4 * (5 * r6);
39845 c = (d0 >>> 13); d0 &= 0x1fff;
39846 d0 += h5 * (5 * r5);
39847 d0 += h6 * (5 * r4);
39848 d0 += h7 * (5 * r3);
39849 d0 += h8 * (5 * r2);
39850 d0 += h9 * (5 * r1);
39851 c += (d0 >>> 13); d0 &= 0x1fff;
39852
39853 d1 = c;
39854 d1 += h0 * r1;
39855 d1 += h1 * r0;
39856 d1 += h2 * (5 * r9);
39857 d1 += h3 * (5 * r8);
39858 d1 += h4 * (5 * r7);
39859 c = (d1 >>> 13); d1 &= 0x1fff;
39860 d1 += h5 * (5 * r6);
39861 d1 += h6 * (5 * r5);
39862 d1 += h7 * (5 * r4);
39863 d1 += h8 * (5 * r3);
39864 d1 += h9 * (5 * r2);
39865 c += (d1 >>> 13); d1 &= 0x1fff;
39866
39867 d2 = c;
39868 d2 += h0 * r2;
39869 d2 += h1 * r1;
39870 d2 += h2 * r0;
39871 d2 += h3 * (5 * r9);
39872 d2 += h4 * (5 * r8);
39873 c = (d2 >>> 13); d2 &= 0x1fff;
39874 d2 += h5 * (5 * r7);
39875 d2 += h6 * (5 * r6);
39876 d2 += h7 * (5 * r5);
39877 d2 += h8 * (5 * r4);
39878 d2 += h9 * (5 * r3);
39879 c += (d2 >>> 13); d2 &= 0x1fff;
39880
39881 d3 = c;
39882 d3 += h0 * r3;
39883 d3 += h1 * r2;
39884 d3 += h2 * r1;
39885 d3 += h3 * r0;
39886 d3 += h4 * (5 * r9);
39887 c = (d3 >>> 13); d3 &= 0x1fff;
39888 d3 += h5 * (5 * r8);
39889 d3 += h6 * (5 * r7);
39890 d3 += h7 * (5 * r6);
39891 d3 += h8 * (5 * r5);
39892 d3 += h9 * (5 * r4);
39893 c += (d3 >>> 13); d3 &= 0x1fff;
39894
39895 d4 = c;
39896 d4 += h0 * r4;
39897 d4 += h1 * r3;
39898 d4 += h2 * r2;
39899 d4 += h3 * r1;
39900 d4 += h4 * r0;
39901 c = (d4 >>> 13); d4 &= 0x1fff;
39902 d4 += h5 * (5 * r9);
39903 d4 += h6 * (5 * r8);
39904 d4 += h7 * (5 * r7);
39905 d4 += h8 * (5 * r6);
39906 d4 += h9 * (5 * r5);
39907 c += (d4 >>> 13); d4 &= 0x1fff;
39908
39909 d5 = c;
39910 d5 += h0 * r5;
39911 d5 += h1 * r4;
39912 d5 += h2 * r3;
39913 d5 += h3 * r2;
39914 d5 += h4 * r1;
39915 c = (d5 >>> 13); d5 &= 0x1fff;
39916 d5 += h5 * r0;
39917 d5 += h6 * (5 * r9);
39918 d5 += h7 * (5 * r8);
39919 d5 += h8 * (5 * r7);
39920 d5 += h9 * (5 * r6);
39921 c += (d5 >>> 13); d5 &= 0x1fff;
39922
39923 d6 = c;
39924 d6 += h0 * r6;
39925 d6 += h1 * r5;
39926 d6 += h2 * r4;
39927 d6 += h3 * r3;
39928 d6 += h4 * r2;
39929 c = (d6 >>> 13); d6 &= 0x1fff;
39930 d6 += h5 * r1;
39931 d6 += h6 * r0;
39932 d6 += h7 * (5 * r9);
39933 d6 += h8 * (5 * r8);
39934 d6 += h9 * (5 * r7);
39935 c += (d6 >>> 13); d6 &= 0x1fff;
39936
39937 d7 = c;
39938 d7 += h0 * r7;
39939 d7 += h1 * r6;
39940 d7 += h2 * r5;
39941 d7 += h3 * r4;
39942 d7 += h4 * r3;
39943 c = (d7 >>> 13); d7 &= 0x1fff;
39944 d7 += h5 * r2;
39945 d7 += h6 * r1;
39946 d7 += h7 * r0;
39947 d7 += h8 * (5 * r9);
39948 d7 += h9 * (5 * r8);
39949 c += (d7 >>> 13); d7 &= 0x1fff;
39950
39951 d8 = c;
39952 d8 += h0 * r8;
39953 d8 += h1 * r7;
39954 d8 += h2 * r6;
39955 d8 += h3 * r5;
39956 d8 += h4 * r4;
39957 c = (d8 >>> 13); d8 &= 0x1fff;
39958 d8 += h5 * r3;
39959 d8 += h6 * r2;
39960 d8 += h7 * r1;
39961 d8 += h8 * r0;
39962 d8 += h9 * (5 * r9);
39963 c += (d8 >>> 13); d8 &= 0x1fff;
39964
39965 d9 = c;
39966 d9 += h0 * r9;
39967 d9 += h1 * r8;
39968 d9 += h2 * r7;
39969 d9 += h3 * r6;
39970 d9 += h4 * r5;
39971 c = (d9 >>> 13); d9 &= 0x1fff;
39972 d9 += h5 * r4;
39973 d9 += h6 * r3;
39974 d9 += h7 * r2;
39975 d9 += h8 * r1;
39976 d9 += h9 * r0;
39977 c += (d9 >>> 13); d9 &= 0x1fff;
39978
39979 c = (((c << 2) + c)) | 0;
39980 c = (c + d0) | 0;
39981 d0 = c & 0x1fff;
39982 c = (c >>> 13);
39983 d1 += c;
39984
39985 h0 = d0;
39986 h1 = d1;
39987 h2 = d2;
39988 h3 = d3;
39989 h4 = d4;
39990 h5 = d5;
39991 h6 = d6;
39992 h7 = d7;
39993 h8 = d8;
39994 h9 = d9;
39995
39996 mpos += 16;
39997 bytes -= 16;
39998 }
39999 this.h[0] = h0;
40000 this.h[1] = h1;
40001 this.h[2] = h2;
40002 this.h[3] = h3;
40003 this.h[4] = h4;
40004 this.h[5] = h5;
40005 this.h[6] = h6;
40006 this.h[7] = h7;
40007 this.h[8] = h8;
40008 this.h[9] = h9;
40009};
40010
40011poly1305.prototype.finish = function(mac, macpos) {
40012 var g = new Uint16Array(10);
40013 var c, mask, f, i;
40014
40015 if (this.leftover) {
40016 i = this.leftover;
40017 this.buffer[i++] = 1;
40018 for (; i < 16; i++) this.buffer[i] = 0;
40019 this.fin = 1;
40020 this.blocks(this.buffer, 0, 16);
40021 }
40022
40023 c = this.h[1] >>> 13;
40024 this.h[1] &= 0x1fff;
40025 for (i = 2; i < 10; i++) {
40026 this.h[i] += c;
40027 c = this.h[i] >>> 13;
40028 this.h[i] &= 0x1fff;
40029 }
40030 this.h[0] += (c * 5);
40031 c = this.h[0] >>> 13;
40032 this.h[0] &= 0x1fff;
40033 this.h[1] += c;
40034 c = this.h[1] >>> 13;
40035 this.h[1] &= 0x1fff;
40036 this.h[2] += c;
40037
40038 g[0] = this.h[0] + 5;
40039 c = g[0] >>> 13;
40040 g[0] &= 0x1fff;
40041 for (i = 1; i < 10; i++) {
40042 g[i] = this.h[i] + c;
40043 c = g[i] >>> 13;
40044 g[i] &= 0x1fff;
40045 }
40046 g[9] -= (1 << 13);
40047
40048 mask = (c ^ 1) - 1;
40049 for (i = 0; i < 10; i++) g[i] &= mask;
40050 mask = ~mask;
40051 for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];
40052
40053 this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;
40054 this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;
40055 this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;
40056 this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;
40057 this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;
40058 this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;
40059 this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;
40060 this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;
40061
40062 f = this.h[0] + this.pad[0];
40063 this.h[0] = f & 0xffff;
40064 for (i = 1; i < 8; i++) {
40065 f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;
40066 this.h[i] = f & 0xffff;
40067 }
40068
40069 mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;
40070 mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;
40071 mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;
40072 mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;
40073 mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;
40074 mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;
40075 mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;
40076 mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;
40077 mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;
40078 mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;
40079 mac[macpos+10] = (this.h[5] >>> 0) & 0xff;
40080 mac[macpos+11] = (this.h[5] >>> 8) & 0xff;
40081 mac[macpos+12] = (this.h[6] >>> 0) & 0xff;
40082 mac[macpos+13] = (this.h[6] >>> 8) & 0xff;
40083 mac[macpos+14] = (this.h[7] >>> 0) & 0xff;
40084 mac[macpos+15] = (this.h[7] >>> 8) & 0xff;
40085};
40086
40087poly1305.prototype.update = function(m, mpos, bytes) {
40088 var i, want;
40089
40090 if (this.leftover) {
40091 want = (16 - this.leftover);
40092 if (want > bytes)
40093 want = bytes;
40094 for (i = 0; i < want; i++)
40095 this.buffer[this.leftover + i] = m[mpos+i];
40096 bytes -= want;
40097 mpos += want;
40098 this.leftover += want;
40099 if (this.leftover < 16)
40100 return;
40101 this.blocks(this.buffer, 0, 16);
40102 this.leftover = 0;
40103 }
40104
40105 if (bytes >= 16) {
40106 want = bytes - (bytes % 16);
40107 this.blocks(m, mpos, want);
40108 mpos += want;
40109 bytes -= want;
40110 }
40111
40112 if (bytes) {
40113 for (i = 0; i < bytes; i++)
40114 this.buffer[this.leftover + i] = m[mpos+i];
40115 this.leftover += bytes;
40116 }
40117};
40118
40119function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
40120 var s = new poly1305(k);
40121 s.update(m, mpos, n);
40122 s.finish(out, outpos);
40123 return 0;
40124}
40125
40126function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
40127 var x = new Uint8Array(16);
40128 crypto_onetimeauth(x,0,m,mpos,n,k);
40129 return crypto_verify_16(h,hpos,x,0);
40130}
40131
40132function crypto_secretbox(c,m,d,n,k) {
40133 var i;
40134 if (d < 32) return -1;
40135 crypto_stream_xor(c,0,m,0,d,n,k);
40136 crypto_onetimeauth(c, 16, c, 32, d - 32, c);
40137 for (i = 0; i < 16; i++) c[i] = 0;
40138 return 0;
40139}
40140
40141function crypto_secretbox_open(m,c,d,n,k) {
40142 var i;
40143 var x = new Uint8Array(32);
40144 if (d < 32) return -1;
40145 crypto_stream(x,0,32,n,k);
40146 if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
40147 crypto_stream_xor(m,0,c,0,d,n,k);
40148 for (i = 0; i < 32; i++) m[i] = 0;
40149 return 0;
40150}
40151
40152function set25519(r, a) {
40153 var i;
40154 for (i = 0; i < 16; i++) r[i] = a[i]|0;
40155}
40156
40157function car25519(o) {
40158 var i, v, c = 1;
40159 for (i = 0; i < 16; i++) {
40160 v = o[i] + c + 65535;
40161 c = Math.floor(v / 65536);
40162 o[i] = v - c * 65536;
40163 }
40164 o[0] += c-1 + 37 * (c-1);
40165}
40166
40167function sel25519(p, q, b) {
40168 var t, c = ~(b-1);
40169 for (var i = 0; i < 16; i++) {
40170 t = c & (p[i] ^ q[i]);
40171 p[i] ^= t;
40172 q[i] ^= t;
40173 }
40174}
40175
40176function pack25519(o, n) {
40177 var i, j, b;
40178 var m = gf(), t = gf();
40179 for (i = 0; i < 16; i++) t[i] = n[i];
40180 car25519(t);
40181 car25519(t);
40182 car25519(t);
40183 for (j = 0; j < 2; j++) {
40184 m[0] = t[0] - 0xffed;
40185 for (i = 1; i < 15; i++) {
40186 m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
40187 m[i-1] &= 0xffff;
40188 }
40189 m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
40190 b = (m[15]>>16) & 1;
40191 m[14] &= 0xffff;
40192 sel25519(t, m, 1-b);
40193 }
40194 for (i = 0; i < 16; i++) {
40195 o[2*i] = t[i] & 0xff;
40196 o[2*i+1] = t[i]>>8;
40197 }
40198}
40199
40200function neq25519(a, b) {
40201 var c = new Uint8Array(32), d = new Uint8Array(32);
40202 pack25519(c, a);
40203 pack25519(d, b);
40204 return crypto_verify_32(c, 0, d, 0);
40205}
40206
40207function par25519(a) {
40208 var d = new Uint8Array(32);
40209 pack25519(d, a);
40210 return d[0] & 1;
40211}
40212
40213function unpack25519(o, n) {
40214 var i;
40215 for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
40216 o[15] &= 0x7fff;
40217}
40218
40219function A(o, a, b) {
40220 for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
40221}
40222
40223function Z(o, a, b) {
40224 for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
40225}
40226
40227function M(o, a, b) {
40228 var v, c,
40229 t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,
40230 t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
40231 t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
40232 t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
40233 b0 = b[0],
40234 b1 = b[1],
40235 b2 = b[2],
40236 b3 = b[3],
40237 b4 = b[4],
40238 b5 = b[5],
40239 b6 = b[6],
40240 b7 = b[7],
40241 b8 = b[8],
40242 b9 = b[9],
40243 b10 = b[10],
40244 b11 = b[11],
40245 b12 = b[12],
40246 b13 = b[13],
40247 b14 = b[14],
40248 b15 = b[15];
40249
40250 v = a[0];
40251 t0 += v * b0;
40252 t1 += v * b1;
40253 t2 += v * b2;
40254 t3 += v * b3;
40255 t4 += v * b4;
40256 t5 += v * b5;
40257 t6 += v * b6;
40258 t7 += v * b7;
40259 t8 += v * b8;
40260 t9 += v * b9;
40261 t10 += v * b10;
40262 t11 += v * b11;
40263 t12 += v * b12;
40264 t13 += v * b13;
40265 t14 += v * b14;
40266 t15 += v * b15;
40267 v = a[1];
40268 t1 += v * b0;
40269 t2 += v * b1;
40270 t3 += v * b2;
40271 t4 += v * b3;
40272 t5 += v * b4;
40273 t6 += v * b5;
40274 t7 += v * b6;
40275 t8 += v * b7;
40276 t9 += v * b8;
40277 t10 += v * b9;
40278 t11 += v * b10;
40279 t12 += v * b11;
40280 t13 += v * b12;
40281 t14 += v * b13;
40282 t15 += v * b14;
40283 t16 += v * b15;
40284 v = a[2];
40285 t2 += v * b0;
40286 t3 += v * b1;
40287 t4 += v * b2;
40288 t5 += v * b3;
40289 t6 += v * b4;
40290 t7 += v * b5;
40291 t8 += v * b6;
40292 t9 += v * b7;
40293 t10 += v * b8;
40294 t11 += v * b9;
40295 t12 += v * b10;
40296 t13 += v * b11;
40297 t14 += v * b12;
40298 t15 += v * b13;
40299 t16 += v * b14;
40300 t17 += v * b15;
40301 v = a[3];
40302 t3 += v * b0;
40303 t4 += v * b1;
40304 t5 += v * b2;
40305 t6 += v * b3;
40306 t7 += v * b4;
40307 t8 += v * b5;
40308 t9 += v * b6;
40309 t10 += v * b7;
40310 t11 += v * b8;
40311 t12 += v * b9;
40312 t13 += v * b10;
40313 t14 += v * b11;
40314 t15 += v * b12;
40315 t16 += v * b13;
40316 t17 += v * b14;
40317 t18 += v * b15;
40318 v = a[4];
40319 t4 += v * b0;
40320 t5 += v * b1;
40321 t6 += v * b2;
40322 t7 += v * b3;
40323 t8 += v * b4;
40324 t9 += v * b5;
40325 t10 += v * b6;
40326 t11 += v * b7;
40327 t12 += v * b8;
40328 t13 += v * b9;
40329 t14 += v * b10;
40330 t15 += v * b11;
40331 t16 += v * b12;
40332 t17 += v * b13;
40333 t18 += v * b14;
40334 t19 += v * b15;
40335 v = a[5];
40336 t5 += v * b0;
40337 t6 += v * b1;
40338 t7 += v * b2;
40339 t8 += v * b3;
40340 t9 += v * b4;
40341 t10 += v * b5;
40342 t11 += v * b6;
40343 t12 += v * b7;
40344 t13 += v * b8;
40345 t14 += v * b9;
40346 t15 += v * b10;
40347 t16 += v * b11;
40348 t17 += v * b12;
40349 t18 += v * b13;
40350 t19 += v * b14;
40351 t20 += v * b15;
40352 v = a[6];
40353 t6 += v * b0;
40354 t7 += v * b1;
40355 t8 += v * b2;
40356 t9 += v * b3;
40357 t10 += v * b4;
40358 t11 += v * b5;
40359 t12 += v * b6;
40360 t13 += v * b7;
40361 t14 += v * b8;
40362 t15 += v * b9;
40363 t16 += v * b10;
40364 t17 += v * b11;
40365 t18 += v * b12;
40366 t19 += v * b13;
40367 t20 += v * b14;
40368 t21 += v * b15;
40369 v = a[7];
40370 t7 += v * b0;
40371 t8 += v * b1;
40372 t9 += v * b2;
40373 t10 += v * b3;
40374 t11 += v * b4;
40375 t12 += v * b5;
40376 t13 += v * b6;
40377 t14 += v * b7;
40378 t15 += v * b8;
40379 t16 += v * b9;
40380 t17 += v * b10;
40381 t18 += v * b11;
40382 t19 += v * b12;
40383 t20 += v * b13;
40384 t21 += v * b14;
40385 t22 += v * b15;
40386 v = a[8];
40387 t8 += v * b0;
40388 t9 += v * b1;
40389 t10 += v * b2;
40390 t11 += v * b3;
40391 t12 += v * b4;
40392 t13 += v * b5;
40393 t14 += v * b6;
40394 t15 += v * b7;
40395 t16 += v * b8;
40396 t17 += v * b9;
40397 t18 += v * b10;
40398 t19 += v * b11;
40399 t20 += v * b12;
40400 t21 += v * b13;
40401 t22 += v * b14;
40402 t23 += v * b15;
40403 v = a[9];
40404 t9 += v * b0;
40405 t10 += v * b1;
40406 t11 += v * b2;
40407 t12 += v * b3;
40408 t13 += v * b4;
40409 t14 += v * b5;
40410 t15 += v * b6;
40411 t16 += v * b7;
40412 t17 += v * b8;
40413 t18 += v * b9;
40414 t19 += v * b10;
40415 t20 += v * b11;
40416 t21 += v * b12;
40417 t22 += v * b13;
40418 t23 += v * b14;
40419 t24 += v * b15;
40420 v = a[10];
40421 t10 += v * b0;
40422 t11 += v * b1;
40423 t12 += v * b2;
40424 t13 += v * b3;
40425 t14 += v * b4;
40426 t15 += v * b5;
40427 t16 += v * b6;
40428 t17 += v * b7;
40429 t18 += v * b8;
40430 t19 += v * b9;
40431 t20 += v * b10;
40432 t21 += v * b11;
40433 t22 += v * b12;
40434 t23 += v * b13;
40435 t24 += v * b14;
40436 t25 += v * b15;
40437 v = a[11];
40438 t11 += v * b0;
40439 t12 += v * b1;
40440 t13 += v * b2;
40441 t14 += v * b3;
40442 t15 += v * b4;
40443 t16 += v * b5;
40444 t17 += v * b6;
40445 t18 += v * b7;
40446 t19 += v * b8;
40447 t20 += v * b9;
40448 t21 += v * b10;
40449 t22 += v * b11;
40450 t23 += v * b12;
40451 t24 += v * b13;
40452 t25 += v * b14;
40453 t26 += v * b15;
40454 v = a[12];
40455 t12 += v * b0;
40456 t13 += v * b1;
40457 t14 += v * b2;
40458 t15 += v * b3;
40459 t16 += v * b4;
40460 t17 += v * b5;
40461 t18 += v * b6;
40462 t19 += v * b7;
40463 t20 += v * b8;
40464 t21 += v * b9;
40465 t22 += v * b10;
40466 t23 += v * b11;
40467 t24 += v * b12;
40468 t25 += v * b13;
40469 t26 += v * b14;
40470 t27 += v * b15;
40471 v = a[13];
40472 t13 += v * b0;
40473 t14 += v * b1;
40474 t15 += v * b2;
40475 t16 += v * b3;
40476 t17 += v * b4;
40477 t18 += v * b5;
40478 t19 += v * b6;
40479 t20 += v * b7;
40480 t21 += v * b8;
40481 t22 += v * b9;
40482 t23 += v * b10;
40483 t24 += v * b11;
40484 t25 += v * b12;
40485 t26 += v * b13;
40486 t27 += v * b14;
40487 t28 += v * b15;
40488 v = a[14];
40489 t14 += v * b0;
40490 t15 += v * b1;
40491 t16 += v * b2;
40492 t17 += v * b3;
40493 t18 += v * b4;
40494 t19 += v * b5;
40495 t20 += v * b6;
40496 t21 += v * b7;
40497 t22 += v * b8;
40498 t23 += v * b9;
40499 t24 += v * b10;
40500 t25 += v * b11;
40501 t26 += v * b12;
40502 t27 += v * b13;
40503 t28 += v * b14;
40504 t29 += v * b15;
40505 v = a[15];
40506 t15 += v * b0;
40507 t16 += v * b1;
40508 t17 += v * b2;
40509 t18 += v * b3;
40510 t19 += v * b4;
40511 t20 += v * b5;
40512 t21 += v * b6;
40513 t22 += v * b7;
40514 t23 += v * b8;
40515 t24 += v * b9;
40516 t25 += v * b10;
40517 t26 += v * b11;
40518 t27 += v * b12;
40519 t28 += v * b13;
40520 t29 += v * b14;
40521 t30 += v * b15;
40522
40523 t0 += 38 * t16;
40524 t1 += 38 * t17;
40525 t2 += 38 * t18;
40526 t3 += 38 * t19;
40527 t4 += 38 * t20;
40528 t5 += 38 * t21;
40529 t6 += 38 * t22;
40530 t7 += 38 * t23;
40531 t8 += 38 * t24;
40532 t9 += 38 * t25;
40533 t10 += 38 * t26;
40534 t11 += 38 * t27;
40535 t12 += 38 * t28;
40536 t13 += 38 * t29;
40537 t14 += 38 * t30;
40538 // t15 left as is
40539
40540 // first car
40541 c = 1;
40542 v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
40543 v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
40544 v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
40545 v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
40546 v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
40547 v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
40548 v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
40549 v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
40550 v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
40551 v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
40552 v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
40553 v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
40554 v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
40555 v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
40556 v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
40557 v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
40558 t0 += c-1 + 37 * (c-1);
40559
40560 // second car
40561 c = 1;
40562 v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
40563 v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
40564 v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
40565 v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
40566 v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
40567 v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
40568 v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
40569 v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
40570 v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
40571 v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
40572 v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
40573 v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
40574 v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
40575 v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
40576 v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
40577 v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
40578 t0 += c-1 + 37 * (c-1);
40579
40580 o[ 0] = t0;
40581 o[ 1] = t1;
40582 o[ 2] = t2;
40583 o[ 3] = t3;
40584 o[ 4] = t4;
40585 o[ 5] = t5;
40586 o[ 6] = t6;
40587 o[ 7] = t7;
40588 o[ 8] = t8;
40589 o[ 9] = t9;
40590 o[10] = t10;
40591 o[11] = t11;
40592 o[12] = t12;
40593 o[13] = t13;
40594 o[14] = t14;
40595 o[15] = t15;
40596}
40597
40598function S(o, a) {
40599 M(o, a, a);
40600}
40601
40602function inv25519(o, i) {
40603 var c = gf();
40604 var a;
40605 for (a = 0; a < 16; a++) c[a] = i[a];
40606 for (a = 253; a >= 0; a--) {
40607 S(c, c);
40608 if(a !== 2 && a !== 4) M(c, c, i);
40609 }
40610 for (a = 0; a < 16; a++) o[a] = c[a];
40611}
40612
40613function pow2523(o, i) {
40614 var c = gf();
40615 var a;
40616 for (a = 0; a < 16; a++) c[a] = i[a];
40617 for (a = 250; a >= 0; a--) {
40618 S(c, c);
40619 if(a !== 1) M(c, c, i);
40620 }
40621 for (a = 0; a < 16; a++) o[a] = c[a];
40622}
40623
40624function crypto_scalarmult(q, n, p) {
40625 var z = new Uint8Array(32);
40626 var x = new Float64Array(80), r, i;
40627 var a = gf(), b = gf(), c = gf(),
40628 d = gf(), e = gf(), f = gf();
40629 for (i = 0; i < 31; i++) z[i] = n[i];
40630 z[31]=(n[31]&127)|64;
40631 z[0]&=248;
40632 unpack25519(x,p);
40633 for (i = 0; i < 16; i++) {
40634 b[i]=x[i];
40635 d[i]=a[i]=c[i]=0;
40636 }
40637 a[0]=d[0]=1;
40638 for (i=254; i>=0; --i) {
40639 r=(z[i>>>3]>>>(i&7))&1;
40640 sel25519(a,b,r);
40641 sel25519(c,d,r);
40642 A(e,a,c);
40643 Z(a,a,c);
40644 A(c,b,d);
40645 Z(b,b,d);
40646 S(d,e);
40647 S(f,a);
40648 M(a,c,a);
40649 M(c,b,e);
40650 A(e,a,c);
40651 Z(a,a,c);
40652 S(b,a);
40653 Z(c,d,f);
40654 M(a,c,_121665);
40655 A(a,a,d);
40656 M(c,c,a);
40657 M(a,d,f);
40658 M(d,b,x);
40659 S(b,e);
40660 sel25519(a,b,r);
40661 sel25519(c,d,r);
40662 }
40663 for (i = 0; i < 16; i++) {
40664 x[i+16]=a[i];
40665 x[i+32]=c[i];
40666 x[i+48]=b[i];
40667 x[i+64]=d[i];
40668 }
40669 var x32 = x.subarray(32);
40670 var x16 = x.subarray(16);
40671 inv25519(x32,x32);
40672 M(x16,x16,x32);
40673 pack25519(q,x16);
40674 return 0;
40675}
40676
40677function crypto_scalarmult_base(q, n) {
40678 return crypto_scalarmult(q, n, _9);
40679}
40680
40681function crypto_box_keypair(y, x) {
40682 randombytes(x, 32);
40683 return crypto_scalarmult_base(y, x);
40684}
40685
40686function crypto_box_beforenm(k, y, x) {
40687 var s = new Uint8Array(32);
40688 crypto_scalarmult(s, x, y);
40689 return crypto_core_hsalsa20(k, _0, s, sigma);
40690}
40691
40692var crypto_box_afternm = crypto_secretbox;
40693var crypto_box_open_afternm = crypto_secretbox_open;
40694
40695function crypto_box(c, m, d, n, y, x) {
40696 var k = new Uint8Array(32);
40697 crypto_box_beforenm(k, y, x);
40698 return crypto_box_afternm(c, m, d, n, k);
40699}
40700
40701function crypto_box_open(m, c, d, n, y, x) {
40702 var k = new Uint8Array(32);
40703 crypto_box_beforenm(k, y, x);
40704 return crypto_box_open_afternm(m, c, d, n, k);
40705}
40706
40707var K = [
40708 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
40709 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
40710 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
40711 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
40712 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
40713 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
40714 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
40715 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
40716 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
40717 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
40718 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
40719 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
40720 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
40721 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
40722 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
40723 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
40724 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
40725 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
40726 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
40727 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
40728 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
40729 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
40730 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
40731 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
40732 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
40733 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
40734 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
40735 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
40736 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
40737 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
40738 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
40739 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
40740 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
40741 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
40742 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
40743 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
40744 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
40745 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
40746 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
40747 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
40748];
40749
40750function crypto_hashblocks_hl(hh, hl, m, n) {
40751 var wh = new Int32Array(16), wl = new Int32Array(16),
40752 bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,
40753 bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,
40754 th, tl, i, j, h, l, a, b, c, d;
40755
40756 var ah0 = hh[0],
40757 ah1 = hh[1],
40758 ah2 = hh[2],
40759 ah3 = hh[3],
40760 ah4 = hh[4],
40761 ah5 = hh[5],
40762 ah6 = hh[6],
40763 ah7 = hh[7],
40764
40765 al0 = hl[0],
40766 al1 = hl[1],
40767 al2 = hl[2],
40768 al3 = hl[3],
40769 al4 = hl[4],
40770 al5 = hl[5],
40771 al6 = hl[6],
40772 al7 = hl[7];
40773
40774 var pos = 0;
40775 while (n >= 128) {
40776 for (i = 0; i < 16; i++) {
40777 j = 8 * i + pos;
40778 wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];
40779 wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];
40780 }
40781 for (i = 0; i < 80; i++) {
40782 bh0 = ah0;
40783 bh1 = ah1;
40784 bh2 = ah2;
40785 bh3 = ah3;
40786 bh4 = ah4;
40787 bh5 = ah5;
40788 bh6 = ah6;
40789 bh7 = ah7;
40790
40791 bl0 = al0;
40792 bl1 = al1;
40793 bl2 = al2;
40794 bl3 = al3;
40795 bl4 = al4;
40796 bl5 = al5;
40797 bl6 = al6;
40798 bl7 = al7;
40799
40800 // add
40801 h = ah7;
40802 l = al7;
40803
40804 a = l & 0xffff; b = l >>> 16;
40805 c = h & 0xffff; d = h >>> 16;
40806
40807 // Sigma1
40808 h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));
40809 l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));
40810
40811 a += l & 0xffff; b += l >>> 16;
40812 c += h & 0xffff; d += h >>> 16;
40813
40814 // Ch
40815 h = (ah4 & ah5) ^ (~ah4 & ah6);
40816 l = (al4 & al5) ^ (~al4 & al6);
40817
40818 a += l & 0xffff; b += l >>> 16;
40819 c += h & 0xffff; d += h >>> 16;
40820
40821 // K
40822 h = K[i*2];
40823 l = K[i*2+1];
40824
40825 a += l & 0xffff; b += l >>> 16;
40826 c += h & 0xffff; d += h >>> 16;
40827
40828 // w
40829 h = wh[i%16];
40830 l = wl[i%16];
40831
40832 a += l & 0xffff; b += l >>> 16;
40833 c += h & 0xffff; d += h >>> 16;
40834
40835 b += a >>> 16;
40836 c += b >>> 16;
40837 d += c >>> 16;
40838
40839 th = c & 0xffff | d << 16;
40840 tl = a & 0xffff | b << 16;
40841
40842 // add
40843 h = th;
40844 l = tl;
40845
40846 a = l & 0xffff; b = l >>> 16;
40847 c = h & 0xffff; d = h >>> 16;
40848
40849 // Sigma0
40850 h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));
40851 l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));
40852
40853 a += l & 0xffff; b += l >>> 16;
40854 c += h & 0xffff; d += h >>> 16;
40855
40856 // Maj
40857 h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);
40858 l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);
40859
40860 a += l & 0xffff; b += l >>> 16;
40861 c += h & 0xffff; d += h >>> 16;
40862
40863 b += a >>> 16;
40864 c += b >>> 16;
40865 d += c >>> 16;
40866
40867 bh7 = (c & 0xffff) | (d << 16);
40868 bl7 = (a & 0xffff) | (b << 16);
40869
40870 // add
40871 h = bh3;
40872 l = bl3;
40873
40874 a = l & 0xffff; b = l >>> 16;
40875 c = h & 0xffff; d = h >>> 16;
40876
40877 h = th;
40878 l = tl;
40879
40880 a += l & 0xffff; b += l >>> 16;
40881 c += h & 0xffff; d += h >>> 16;
40882
40883 b += a >>> 16;
40884 c += b >>> 16;
40885 d += c >>> 16;
40886
40887 bh3 = (c & 0xffff) | (d << 16);
40888 bl3 = (a & 0xffff) | (b << 16);
40889
40890 ah1 = bh0;
40891 ah2 = bh1;
40892 ah3 = bh2;
40893 ah4 = bh3;
40894 ah5 = bh4;
40895 ah6 = bh5;
40896 ah7 = bh6;
40897 ah0 = bh7;
40898
40899 al1 = bl0;
40900 al2 = bl1;
40901 al3 = bl2;
40902 al4 = bl3;
40903 al5 = bl4;
40904 al6 = bl5;
40905 al7 = bl6;
40906 al0 = bl7;
40907
40908 if (i%16 === 15) {
40909 for (j = 0; j < 16; j++) {
40910 // add
40911 h = wh[j];
40912 l = wl[j];
40913
40914 a = l & 0xffff; b = l >>> 16;
40915 c = h & 0xffff; d = h >>> 16;
40916
40917 h = wh[(j+9)%16];
40918 l = wl[(j+9)%16];
40919
40920 a += l & 0xffff; b += l >>> 16;
40921 c += h & 0xffff; d += h >>> 16;
40922
40923 // sigma0
40924 th = wh[(j+1)%16];
40925 tl = wl[(j+1)%16];
40926 h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);
40927 l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));
40928
40929 a += l & 0xffff; b += l >>> 16;
40930 c += h & 0xffff; d += h >>> 16;
40931
40932 // sigma1
40933 th = wh[(j+14)%16];
40934 tl = wl[(j+14)%16];
40935 h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);
40936 l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));
40937
40938 a += l & 0xffff; b += l >>> 16;
40939 c += h & 0xffff; d += h >>> 16;
40940
40941 b += a >>> 16;
40942 c += b >>> 16;
40943 d += c >>> 16;
40944
40945 wh[j] = (c & 0xffff) | (d << 16);
40946 wl[j] = (a & 0xffff) | (b << 16);
40947 }
40948 }
40949 }
40950
40951 // add
40952 h = ah0;
40953 l = al0;
40954
40955 a = l & 0xffff; b = l >>> 16;
40956 c = h & 0xffff; d = h >>> 16;
40957
40958 h = hh[0];
40959 l = hl[0];
40960
40961 a += l & 0xffff; b += l >>> 16;
40962 c += h & 0xffff; d += h >>> 16;
40963
40964 b += a >>> 16;
40965 c += b >>> 16;
40966 d += c >>> 16;
40967
40968 hh[0] = ah0 = (c & 0xffff) | (d << 16);
40969 hl[0] = al0 = (a & 0xffff) | (b << 16);
40970
40971 h = ah1;
40972 l = al1;
40973
40974 a = l & 0xffff; b = l >>> 16;
40975 c = h & 0xffff; d = h >>> 16;
40976
40977 h = hh[1];
40978 l = hl[1];
40979
40980 a += l & 0xffff; b += l >>> 16;
40981 c += h & 0xffff; d += h >>> 16;
40982
40983 b += a >>> 16;
40984 c += b >>> 16;
40985 d += c >>> 16;
40986
40987 hh[1] = ah1 = (c & 0xffff) | (d << 16);
40988 hl[1] = al1 = (a & 0xffff) | (b << 16);
40989
40990 h = ah2;
40991 l = al2;
40992
40993 a = l & 0xffff; b = l >>> 16;
40994 c = h & 0xffff; d = h >>> 16;
40995
40996 h = hh[2];
40997 l = hl[2];
40998
40999 a += l & 0xffff; b += l >>> 16;
41000 c += h & 0xffff; d += h >>> 16;
41001
41002 b += a >>> 16;
41003 c += b >>> 16;
41004 d += c >>> 16;
41005
41006 hh[2] = ah2 = (c & 0xffff) | (d << 16);
41007 hl[2] = al2 = (a & 0xffff) | (b << 16);
41008
41009 h = ah3;
41010 l = al3;
41011
41012 a = l & 0xffff; b = l >>> 16;
41013 c = h & 0xffff; d = h >>> 16;
41014
41015 h = hh[3];
41016 l = hl[3];
41017
41018 a += l & 0xffff; b += l >>> 16;
41019 c += h & 0xffff; d += h >>> 16;
41020
41021 b += a >>> 16;
41022 c += b >>> 16;
41023 d += c >>> 16;
41024
41025 hh[3] = ah3 = (c & 0xffff) | (d << 16);
41026 hl[3] = al3 = (a & 0xffff) | (b << 16);
41027
41028 h = ah4;
41029 l = al4;
41030
41031 a = l & 0xffff; b = l >>> 16;
41032 c = h & 0xffff; d = h >>> 16;
41033
41034 h = hh[4];
41035 l = hl[4];
41036
41037 a += l & 0xffff; b += l >>> 16;
41038 c += h & 0xffff; d += h >>> 16;
41039
41040 b += a >>> 16;
41041 c += b >>> 16;
41042 d += c >>> 16;
41043
41044 hh[4] = ah4 = (c & 0xffff) | (d << 16);
41045 hl[4] = al4 = (a & 0xffff) | (b << 16);
41046
41047 h = ah5;
41048 l = al5;
41049
41050 a = l & 0xffff; b = l >>> 16;
41051 c = h & 0xffff; d = h >>> 16;
41052
41053 h = hh[5];
41054 l = hl[5];
41055
41056 a += l & 0xffff; b += l >>> 16;
41057 c += h & 0xffff; d += h >>> 16;
41058
41059 b += a >>> 16;
41060 c += b >>> 16;
41061 d += c >>> 16;
41062
41063 hh[5] = ah5 = (c & 0xffff) | (d << 16);
41064 hl[5] = al5 = (a & 0xffff) | (b << 16);
41065
41066 h = ah6;
41067 l = al6;
41068
41069 a = l & 0xffff; b = l >>> 16;
41070 c = h & 0xffff; d = h >>> 16;
41071
41072 h = hh[6];
41073 l = hl[6];
41074
41075 a += l & 0xffff; b += l >>> 16;
41076 c += h & 0xffff; d += h >>> 16;
41077
41078 b += a >>> 16;
41079 c += b >>> 16;
41080 d += c >>> 16;
41081
41082 hh[6] = ah6 = (c & 0xffff) | (d << 16);
41083 hl[6] = al6 = (a & 0xffff) | (b << 16);
41084
41085 h = ah7;
41086 l = al7;
41087
41088 a = l & 0xffff; b = l >>> 16;
41089 c = h & 0xffff; d = h >>> 16;
41090
41091 h = hh[7];
41092 l = hl[7];
41093
41094 a += l & 0xffff; b += l >>> 16;
41095 c += h & 0xffff; d += h >>> 16;
41096
41097 b += a >>> 16;
41098 c += b >>> 16;
41099 d += c >>> 16;
41100
41101 hh[7] = ah7 = (c & 0xffff) | (d << 16);
41102 hl[7] = al7 = (a & 0xffff) | (b << 16);
41103
41104 pos += 128;
41105 n -= 128;
41106 }
41107
41108 return n;
41109}
41110
41111function crypto_hash(out, m, n) {
41112 var hh = new Int32Array(8),
41113 hl = new Int32Array(8),
41114 x = new Uint8Array(256),
41115 i, b = n;
41116
41117 hh[0] = 0x6a09e667;
41118 hh[1] = 0xbb67ae85;
41119 hh[2] = 0x3c6ef372;
41120 hh[3] = 0xa54ff53a;
41121 hh[4] = 0x510e527f;
41122 hh[5] = 0x9b05688c;
41123 hh[6] = 0x1f83d9ab;
41124 hh[7] = 0x5be0cd19;
41125
41126 hl[0] = 0xf3bcc908;
41127 hl[1] = 0x84caa73b;
41128 hl[2] = 0xfe94f82b;
41129 hl[3] = 0x5f1d36f1;
41130 hl[4] = 0xade682d1;
41131 hl[5] = 0x2b3e6c1f;
41132 hl[6] = 0xfb41bd6b;
41133 hl[7] = 0x137e2179;
41134
41135 crypto_hashblocks_hl(hh, hl, m, n);
41136 n %= 128;
41137
41138 for (i = 0; i < n; i++) x[i] = m[b-n+i];
41139 x[n] = 128;
41140
41141 n = 256-128*(n<112?1:0);
41142 x[n-9] = 0;
41143 ts64(x, n-8, (b / 0x20000000) | 0, b << 3);
41144 crypto_hashblocks_hl(hh, hl, x, n);
41145
41146 for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);
41147
41148 return 0;
41149}
41150
41151function add(p, q) {
41152 var a = gf(), b = gf(), c = gf(),
41153 d = gf(), e = gf(), f = gf(),
41154 g = gf(), h = gf(), t = gf();
41155
41156 Z(a, p[1], p[0]);
41157 Z(t, q[1], q[0]);
41158 M(a, a, t);
41159 A(b, p[0], p[1]);
41160 A(t, q[0], q[1]);
41161 M(b, b, t);
41162 M(c, p[3], q[3]);
41163 M(c, c, D2);
41164 M(d, p[2], q[2]);
41165 A(d, d, d);
41166 Z(e, b, a);
41167 Z(f, d, c);
41168 A(g, d, c);
41169 A(h, b, a);
41170
41171 M(p[0], e, f);
41172 M(p[1], h, g);
41173 M(p[2], g, f);
41174 M(p[3], e, h);
41175}
41176
41177function cswap(p, q, b) {
41178 var i;
41179 for (i = 0; i < 4; i++) {
41180 sel25519(p[i], q[i], b);
41181 }
41182}
41183
41184function pack(r, p) {
41185 var tx = gf(), ty = gf(), zi = gf();
41186 inv25519(zi, p[2]);
41187 M(tx, p[0], zi);
41188 M(ty, p[1], zi);
41189 pack25519(r, ty);
41190 r[31] ^= par25519(tx) << 7;
41191}
41192
41193function scalarmult(p, q, s) {
41194 var b, i;
41195 set25519(p[0], gf0);
41196 set25519(p[1], gf1);
41197 set25519(p[2], gf1);
41198 set25519(p[3], gf0);
41199 for (i = 255; i >= 0; --i) {
41200 b = (s[(i/8)|0] >> (i&7)) & 1;
41201 cswap(p, q, b);
41202 add(q, p);
41203 add(p, p);
41204 cswap(p, q, b);
41205 }
41206}
41207
41208function scalarbase(p, s) {
41209 var q = [gf(), gf(), gf(), gf()];
41210 set25519(q[0], X);
41211 set25519(q[1], Y);
41212 set25519(q[2], gf1);
41213 M(q[3], X, Y);
41214 scalarmult(p, q, s);
41215}
41216
41217function crypto_sign_keypair(pk, sk, seeded) {
41218 var d = new Uint8Array(64);
41219 var p = [gf(), gf(), gf(), gf()];
41220 var i;
41221
41222 if (!seeded) randombytes(sk, 32);
41223 crypto_hash(d, sk, 32);
41224 d[0] &= 248;
41225 d[31] &= 127;
41226 d[31] |= 64;
41227
41228 scalarbase(p, d);
41229 pack(pk, p);
41230
41231 for (i = 0; i < 32; i++) sk[i+32] = pk[i];
41232 return 0;
41233}
41234
41235var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
41236
41237function modL(r, x) {
41238 var carry, i, j, k;
41239 for (i = 63; i >= 32; --i) {
41240 carry = 0;
41241 for (j = i - 32, k = i - 12; j < k; ++j) {
41242 x[j] += carry - 16 * x[i] * L[j - (i - 32)];
41243 carry = (x[j] + 128) >> 8;
41244 x[j] -= carry * 256;
41245 }
41246 x[j] += carry;
41247 x[i] = 0;
41248 }
41249 carry = 0;
41250 for (j = 0; j < 32; j++) {
41251 x[j] += carry - (x[31] >> 4) * L[j];
41252 carry = x[j] >> 8;
41253 x[j] &= 255;
41254 }
41255 for (j = 0; j < 32; j++) x[j] -= carry * L[j];
41256 for (i = 0; i < 32; i++) {
41257 x[i+1] += x[i] >> 8;
41258 r[i] = x[i] & 255;
41259 }
41260}
41261
41262function reduce(r) {
41263 var x = new Float64Array(64), i;
41264 for (i = 0; i < 64; i++) x[i] = r[i];
41265 for (i = 0; i < 64; i++) r[i] = 0;
41266 modL(r, x);
41267}
41268
41269// Note: difference from C - smlen returned, not passed as argument.
41270function crypto_sign(sm, m, n, sk) {
41271 var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
41272 var i, j, x = new Float64Array(64);
41273 var p = [gf(), gf(), gf(), gf()];
41274
41275 crypto_hash(d, sk, 32);
41276 d[0] &= 248;
41277 d[31] &= 127;
41278 d[31] |= 64;
41279
41280 var smlen = n + 64;
41281 for (i = 0; i < n; i++) sm[64 + i] = m[i];
41282 for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
41283
41284 crypto_hash(r, sm.subarray(32), n+32);
41285 reduce(r);
41286 scalarbase(p, r);
41287 pack(sm, p);
41288
41289 for (i = 32; i < 64; i++) sm[i] = sk[i];
41290 crypto_hash(h, sm, n + 64);
41291 reduce(h);
41292
41293 for (i = 0; i < 64; i++) x[i] = 0;
41294 for (i = 0; i < 32; i++) x[i] = r[i];
41295 for (i = 0; i < 32; i++) {
41296 for (j = 0; j < 32; j++) {
41297 x[i+j] += h[i] * d[j];
41298 }
41299 }
41300
41301 modL(sm.subarray(32), x);
41302 return smlen;
41303}
41304
41305function unpackneg(r, p) {
41306 var t = gf(), chk = gf(), num = gf(),
41307 den = gf(), den2 = gf(), den4 = gf(),
41308 den6 = gf();
41309
41310 set25519(r[2], gf1);
41311 unpack25519(r[1], p);
41312 S(num, r[1]);
41313 M(den, num, D);
41314 Z(num, num, r[2]);
41315 A(den, r[2], den);
41316
41317 S(den2, den);
41318 S(den4, den2);
41319 M(den6, den4, den2);
41320 M(t, den6, num);
41321 M(t, t, den);
41322
41323 pow2523(t, t);
41324 M(t, t, num);
41325 M(t, t, den);
41326 M(t, t, den);
41327 M(r[0], t, den);
41328
41329 S(chk, r[0]);
41330 M(chk, chk, den);
41331 if (neq25519(chk, num)) M(r[0], r[0], I);
41332
41333 S(chk, r[0]);
41334 M(chk, chk, den);
41335 if (neq25519(chk, num)) return -1;
41336
41337 if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);
41338
41339 M(r[3], r[0], r[1]);
41340 return 0;
41341}
41342
41343function crypto_sign_open(m, sm, n, pk) {
41344 var i, mlen;
41345 var t = new Uint8Array(32), h = new Uint8Array(64);
41346 var p = [gf(), gf(), gf(), gf()],
41347 q = [gf(), gf(), gf(), gf()];
41348
41349 mlen = -1;
41350 if (n < 64) return -1;
41351
41352 if (unpackneg(q, pk)) return -1;
41353
41354 for (i = 0; i < n; i++) m[i] = sm[i];
41355 for (i = 0; i < 32; i++) m[i+32] = pk[i];
41356 crypto_hash(h, m, n);
41357 reduce(h);
41358 scalarmult(p, q, h);
41359
41360 scalarbase(q, sm.subarray(32));
41361 add(p, q);
41362 pack(t, p);
41363
41364 n -= 64;
41365 if (crypto_verify_32(sm, 0, t, 0)) {
41366 for (i = 0; i < n; i++) m[i] = 0;
41367 return -1;
41368 }
41369
41370 for (i = 0; i < n; i++) m[i] = sm[i + 64];
41371 mlen = n;
41372 return mlen;
41373}
41374
41375var crypto_secretbox_KEYBYTES = 32,
41376 crypto_secretbox_NONCEBYTES = 24,
41377 crypto_secretbox_ZEROBYTES = 32,
41378 crypto_secretbox_BOXZEROBYTES = 16,
41379 crypto_scalarmult_BYTES = 32,
41380 crypto_scalarmult_SCALARBYTES = 32,
41381 crypto_box_PUBLICKEYBYTES = 32,
41382 crypto_box_SECRETKEYBYTES = 32,
41383 crypto_box_BEFORENMBYTES = 32,
41384 crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
41385 crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
41386 crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
41387 crypto_sign_BYTES = 64,
41388 crypto_sign_PUBLICKEYBYTES = 32,
41389 crypto_sign_SECRETKEYBYTES = 64,
41390 crypto_sign_SEEDBYTES = 32,
41391 crypto_hash_BYTES = 64;
41392
41393nacl.lowlevel = {
41394 crypto_core_hsalsa20: crypto_core_hsalsa20,
41395 crypto_stream_xor: crypto_stream_xor,
41396 crypto_stream: crypto_stream,
41397 crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
41398 crypto_stream_salsa20: crypto_stream_salsa20,
41399 crypto_onetimeauth: crypto_onetimeauth,
41400 crypto_onetimeauth_verify: crypto_onetimeauth_verify,
41401 crypto_verify_16: crypto_verify_16,
41402 crypto_verify_32: crypto_verify_32,
41403 crypto_secretbox: crypto_secretbox,
41404 crypto_secretbox_open: crypto_secretbox_open,
41405 crypto_scalarmult: crypto_scalarmult,
41406 crypto_scalarmult_base: crypto_scalarmult_base,
41407 crypto_box_beforenm: crypto_box_beforenm,
41408 crypto_box_afternm: crypto_box_afternm,
41409 crypto_box: crypto_box,
41410 crypto_box_open: crypto_box_open,
41411 crypto_box_keypair: crypto_box_keypair,
41412 crypto_hash: crypto_hash,
41413 crypto_sign: crypto_sign,
41414 crypto_sign_keypair: crypto_sign_keypair,
41415 crypto_sign_open: crypto_sign_open,
41416
41417 crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
41418 crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
41419 crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
41420 crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
41421 crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
41422 crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
41423 crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
41424 crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
41425 crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
41426 crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
41427 crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
41428 crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
41429 crypto_sign_BYTES: crypto_sign_BYTES,
41430 crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
41431 crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
41432 crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
41433 crypto_hash_BYTES: crypto_hash_BYTES
41434};
41435
41436/* High-level API */
41437
41438function checkLengths(k, n) {
41439 if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
41440 if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
41441}
41442
41443function checkBoxLengths(pk, sk) {
41444 if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
41445 if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
41446}
41447
41448function checkArrayTypes() {
41449 for (var i = 0; i < arguments.length; i++) {
41450 if (!(arguments[i] instanceof Uint8Array))
41451 throw new TypeError('unexpected type, use Uint8Array');
41452 }
41453}
41454
41455function cleanup(arr) {
41456 for (var i = 0; i < arr.length; i++) arr[i] = 0;
41457}
41458
41459nacl.randomBytes = function(n) {
41460 var b = new Uint8Array(n);
41461 randombytes(b, n);
41462 return b;
41463};
41464
41465nacl.secretbox = function(msg, nonce, key) {
41466 checkArrayTypes(msg, nonce, key);
41467 checkLengths(key, nonce);
41468 var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
41469 var c = new Uint8Array(m.length);
41470 for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
41471 crypto_secretbox(c, m, m.length, nonce, key);
41472 return c.subarray(crypto_secretbox_BOXZEROBYTES);
41473};
41474
41475nacl.secretbox.open = function(box, nonce, key) {
41476 checkArrayTypes(box, nonce, key);
41477 checkLengths(key, nonce);
41478 var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
41479 var m = new Uint8Array(c.length);
41480 for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
41481 if (c.length < 32) return null;
41482 if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;
41483 return m.subarray(crypto_secretbox_ZEROBYTES);
41484};
41485
41486nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
41487nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
41488nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
41489
41490nacl.scalarMult = function(n, p) {
41491 checkArrayTypes(n, p);
41492 if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
41493 if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
41494 var q = new Uint8Array(crypto_scalarmult_BYTES);
41495 crypto_scalarmult(q, n, p);
41496 return q;
41497};
41498
41499nacl.scalarMult.base = function(n) {
41500 checkArrayTypes(n);
41501 if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
41502 var q = new Uint8Array(crypto_scalarmult_BYTES);
41503 crypto_scalarmult_base(q, n);
41504 return q;
41505};
41506
41507nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
41508nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
41509
41510nacl.box = function(msg, nonce, publicKey, secretKey) {
41511 var k = nacl.box.before(publicKey, secretKey);
41512 return nacl.secretbox(msg, nonce, k);
41513};
41514
41515nacl.box.before = function(publicKey, secretKey) {
41516 checkArrayTypes(publicKey, secretKey);
41517 checkBoxLengths(publicKey, secretKey);
41518 var k = new Uint8Array(crypto_box_BEFORENMBYTES);
41519 crypto_box_beforenm(k, publicKey, secretKey);
41520 return k;
41521};
41522
41523nacl.box.after = nacl.secretbox;
41524
41525nacl.box.open = function(msg, nonce, publicKey, secretKey) {
41526 var k = nacl.box.before(publicKey, secretKey);
41527 return nacl.secretbox.open(msg, nonce, k);
41528};
41529
41530nacl.box.open.after = nacl.secretbox.open;
41531
41532nacl.box.keyPair = function() {
41533 var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
41534 var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
41535 crypto_box_keypair(pk, sk);
41536 return {publicKey: pk, secretKey: sk};
41537};
41538
41539nacl.box.keyPair.fromSecretKey = function(secretKey) {
41540 checkArrayTypes(secretKey);
41541 if (secretKey.length !== crypto_box_SECRETKEYBYTES)
41542 throw new Error('bad secret key size');
41543 var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
41544 crypto_scalarmult_base(pk, secretKey);
41545 return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
41546};
41547
41548nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
41549nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
41550nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
41551nacl.box.nonceLength = crypto_box_NONCEBYTES;
41552nacl.box.overheadLength = nacl.secretbox.overheadLength;
41553
41554nacl.sign = function(msg, secretKey) {
41555 checkArrayTypes(msg, secretKey);
41556 if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
41557 throw new Error('bad secret key size');
41558 var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
41559 crypto_sign(signedMsg, msg, msg.length, secretKey);
41560 return signedMsg;
41561};
41562
41563nacl.sign.open = function(signedMsg, publicKey) {
41564 checkArrayTypes(signedMsg, publicKey);
41565 if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
41566 throw new Error('bad public key size');
41567 var tmp = new Uint8Array(signedMsg.length);
41568 var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
41569 if (mlen < 0) return null;
41570 var m = new Uint8Array(mlen);
41571 for (var i = 0; i < m.length; i++) m[i] = tmp[i];
41572 return m;
41573};
41574
41575nacl.sign.detached = function(msg, secretKey) {
41576 var signedMsg = nacl.sign(msg, secretKey);
41577 var sig = new Uint8Array(crypto_sign_BYTES);
41578 for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
41579 return sig;
41580};
41581
41582nacl.sign.detached.verify = function(msg, sig, publicKey) {
41583 checkArrayTypes(msg, sig, publicKey);
41584 if (sig.length !== crypto_sign_BYTES)
41585 throw new Error('bad signature size');
41586 if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
41587 throw new Error('bad public key size');
41588 var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
41589 var m = new Uint8Array(crypto_sign_BYTES + msg.length);
41590 var i;
41591 for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
41592 for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
41593 return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
41594};
41595
41596nacl.sign.keyPair = function() {
41597 var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
41598 var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
41599 crypto_sign_keypair(pk, sk);
41600 return {publicKey: pk, secretKey: sk};
41601};
41602
41603nacl.sign.keyPair.fromSecretKey = function(secretKey) {
41604 checkArrayTypes(secretKey);
41605 if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
41606 throw new Error('bad secret key size');
41607 var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
41608 for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
41609 return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
41610};
41611
41612nacl.sign.keyPair.fromSeed = function(seed) {
41613 checkArrayTypes(seed);
41614 if (seed.length !== crypto_sign_SEEDBYTES)
41615 throw new Error('bad seed size');
41616 var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
41617 var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
41618 for (var i = 0; i < 32; i++) sk[i] = seed[i];
41619 crypto_sign_keypair(pk, sk, true);
41620 return {publicKey: pk, secretKey: sk};
41621};
41622
41623nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
41624nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
41625nacl.sign.seedLength = crypto_sign_SEEDBYTES;
41626nacl.sign.signatureLength = crypto_sign_BYTES;
41627
41628nacl.hash = function(msg) {
41629 checkArrayTypes(msg);
41630 var h = new Uint8Array(crypto_hash_BYTES);
41631 crypto_hash(h, msg, msg.length);
41632 return h;
41633};
41634
41635nacl.hash.hashLength = crypto_hash_BYTES;
41636
41637nacl.verify = function(x, y) {
41638 checkArrayTypes(x, y);
41639 // Zero length arguments are considered not equal.
41640 if (x.length === 0 || y.length === 0) return false;
41641 if (x.length !== y.length) return false;
41642 return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
41643};
41644
41645nacl.setPRNG = function(fn) {
41646 randombytes = fn;
41647};
41648
41649(function() {
41650 // Initialize PRNG if environment provides CSPRNG.
41651 // If not, methods calling randombytes will throw.
41652 var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
41653 if (crypto && crypto.getRandomValues) {
41654 // Browsers.
41655 var QUOTA = 65536;
41656 nacl.setPRNG(function(x, n) {
41657 var i, v = new Uint8Array(n);
41658 for (i = 0; i < n; i += QUOTA) {
41659 crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
41660 }
41661 for (i = 0; i < n; i++) x[i] = v[i];
41662 cleanup(v);
41663 });
41664 } else if (typeof require !== 'undefined') {
41665 // Node.js.
41666 crypto = require('crypto');
41667 if (crypto && crypto.randomBytes) {
41668 nacl.setPRNG(function(x, n) {
41669 var i, v = crypto.randomBytes(n);
41670 for (i = 0; i < n; i++) x[i] = v[i];
41671 cleanup(v);
41672 });
41673 }
41674 }
41675})();
41676
41677})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));
41678
41679},{"crypto":20}],441:[function(require,module,exports){
41680(function (global){
41681
41682/**
41683 * Module exports.
41684 */
41685
41686module.exports = deprecate;
41687
41688/**
41689 * Mark that a method should not be used.
41690 * Returns a modified function which warns once by default.
41691 *
41692 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
41693 *
41694 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
41695 * will throw an Error when invoked.
41696 *
41697 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
41698 * will invoke `console.trace()` instead of `console.error()`.
41699 *
41700 * @param {Function} fn - the function to deprecate
41701 * @param {String} msg - the string to print to the console when `fn` is invoked
41702 * @returns {Function} a new "deprecated" version of `fn`
41703 * @api public
41704 */
41705
41706function deprecate (fn, msg) {
41707 if (config('noDeprecation')) {
41708 return fn;
41709 }
41710
41711 var warned = false;
41712 function deprecated() {
41713 if (!warned) {
41714 if (config('throwDeprecation')) {
41715 throw new Error(msg);
41716 } else if (config('traceDeprecation')) {
41717 console.trace(msg);
41718 } else {
41719 console.warn(msg);
41720 }
41721 warned = true;
41722 }
41723 return fn.apply(this, arguments);
41724 }
41725
41726 return deprecated;
41727}
41728
41729/**
41730 * Checks `localStorage` for boolean values for the given `name`.
41731 *
41732 * @param {String} name
41733 * @returns {Boolean}
41734 * @api private
41735 */
41736
41737function config (name) {
41738 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
41739 try {
41740 if (!global.localStorage) return false;
41741 } catch (_) {
41742 return false;
41743 }
41744 var val = global.localStorage[name];
41745 if (null == val) return false;
41746 return String(val).toLowerCase() === 'true';
41747}
41748
41749}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
41750},{}],442:[function(require,module,exports){
41751module.exports = function isBuffer(arg) {
41752 return arg && typeof arg === 'object'
41753 && typeof arg.copy === 'function'
41754 && typeof arg.fill === 'function'
41755 && typeof arg.readUInt8 === 'function';
41756}
41757},{}],443:[function(require,module,exports){
41758(function (process,global){
41759// Copyright Joyent, Inc. and other Node contributors.
41760//
41761// Permission is hereby granted, free of charge, to any person obtaining a
41762// copy of this software and associated documentation files (the
41763// "Software"), to deal in the Software without restriction, including
41764// without limitation the rights to use, copy, modify, merge, publish,
41765// distribute, sublicense, and/or sell copies of the Software, and to permit
41766// persons to whom the Software is furnished to do so, subject to the
41767// following conditions:
41768//
41769// The above copyright notice and this permission notice shall be included
41770// in all copies or substantial portions of the Software.
41771//
41772// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
41773// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
41774// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
41775// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
41776// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
41777// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
41778// USE OR OTHER DEALINGS IN THE SOFTWARE.
41779
41780var formatRegExp = /%[sdj%]/g;
41781exports.format = function(f) {
41782 if (!isString(f)) {
41783 var objects = [];
41784 for (var i = 0; i < arguments.length; i++) {
41785 objects.push(inspect(arguments[i]));
41786 }
41787 return objects.join(' ');
41788 }
41789
41790 var i = 1;
41791 var args = arguments;
41792 var len = args.length;
41793 var str = String(f).replace(formatRegExp, function(x) {
41794 if (x === '%%') return '%';
41795 if (i >= len) return x;
41796 switch (x) {
41797 case '%s': return String(args[i++]);
41798 case '%d': return Number(args[i++]);
41799 case '%j':
41800 try {
41801 return JSON.stringify(args[i++]);
41802 } catch (_) {
41803 return '[Circular]';
41804 }
41805 default:
41806 return x;
41807 }
41808 });
41809 for (var x = args[i]; i < len; x = args[++i]) {
41810 if (isNull(x) || !isObject(x)) {
41811 str += ' ' + x;
41812 } else {
41813 str += ' ' + inspect(x);
41814 }
41815 }
41816 return str;
41817};
41818
41819
41820// Mark that a method should not be used.
41821// Returns a modified function which warns once by default.
41822// If --no-deprecation is set, then it is a no-op.
41823exports.deprecate = function(fn, msg) {
41824 // Allow for deprecating things in the process of starting up.
41825 if (isUndefined(global.process)) {
41826 return function() {
41827 return exports.deprecate(fn, msg).apply(this, arguments);
41828 };
41829 }
41830
41831 if (process.noDeprecation === true) {
41832 return fn;
41833 }
41834
41835 var warned = false;
41836 function deprecated() {
41837 if (!warned) {
41838 if (process.throwDeprecation) {
41839 throw new Error(msg);
41840 } else if (process.traceDeprecation) {
41841 console.trace(msg);
41842 } else {
41843 console.error(msg);
41844 }
41845 warned = true;
41846 }
41847 return fn.apply(this, arguments);
41848 }
41849
41850 return deprecated;
41851};
41852
41853
41854var debugs = {};
41855var debugEnviron;
41856exports.debuglog = function(set) {
41857 if (isUndefined(debugEnviron))
41858 debugEnviron = process.env.NODE_DEBUG || '';
41859 set = set.toUpperCase();
41860 if (!debugs[set]) {
41861 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
41862 var pid = process.pid;
41863 debugs[set] = function() {
41864 var msg = exports.format.apply(exports, arguments);
41865 console.error('%s %d: %s', set, pid, msg);
41866 };
41867 } else {
41868 debugs[set] = function() {};
41869 }
41870 }
41871 return debugs[set];
41872};
41873
41874
41875/**
41876 * Echos the value of a value. Trys to print the value out
41877 * in the best way possible given the different types.
41878 *
41879 * @param {Object} obj The object to print out.
41880 * @param {Object} opts Optional options object that alters the output.
41881 */
41882/* legacy: obj, showHidden, depth, colors*/
41883function inspect(obj, opts) {
41884 // default options
41885 var ctx = {
41886 seen: [],
41887 stylize: stylizeNoColor
41888 };
41889 // legacy...
41890 if (arguments.length >= 3) ctx.depth = arguments[2];
41891 if (arguments.length >= 4) ctx.colors = arguments[3];
41892 if (isBoolean(opts)) {
41893 // legacy...
41894 ctx.showHidden = opts;
41895 } else if (opts) {
41896 // got an "options" object
41897 exports._extend(ctx, opts);
41898 }
41899 // set default options
41900 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
41901 if (isUndefined(ctx.depth)) ctx.depth = 2;
41902 if (isUndefined(ctx.colors)) ctx.colors = false;
41903 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
41904 if (ctx.colors) ctx.stylize = stylizeWithColor;
41905 return formatValue(ctx, obj, ctx.depth);
41906}
41907exports.inspect = inspect;
41908
41909
41910// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
41911inspect.colors = {
41912 'bold' : [1, 22],
41913 'italic' : [3, 23],
41914 'underline' : [4, 24],
41915 'inverse' : [7, 27],
41916 'white' : [37, 39],
41917 'grey' : [90, 39],
41918 'black' : [30, 39],
41919 'blue' : [34, 39],
41920 'cyan' : [36, 39],
41921 'green' : [32, 39],
41922 'magenta' : [35, 39],
41923 'red' : [31, 39],
41924 'yellow' : [33, 39]
41925};
41926
41927// Don't use 'blue' not visible on cmd.exe
41928inspect.styles = {
41929 'special': 'cyan',
41930 'number': 'yellow',
41931 'boolean': 'yellow',
41932 'undefined': 'grey',
41933 'null': 'bold',
41934 'string': 'green',
41935 'date': 'magenta',
41936 // "name": intentionally not styling
41937 'regexp': 'red'
41938};
41939
41940
41941function stylizeWithColor(str, styleType) {
41942 var style = inspect.styles[styleType];
41943
41944 if (style) {
41945 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
41946 '\u001b[' + inspect.colors[style][1] + 'm';
41947 } else {
41948 return str;
41949 }
41950}
41951
41952
41953function stylizeNoColor(str, styleType) {
41954 return str;
41955}
41956
41957
41958function arrayToHash(array) {
41959 var hash = {};
41960
41961 array.forEach(function(val, idx) {
41962 hash[val] = true;
41963 });
41964
41965 return hash;
41966}
41967
41968
41969function formatValue(ctx, value, recurseTimes) {
41970 // Provide a hook for user-specified inspect functions.
41971 // Check that value is an object with an inspect function on it
41972 if (ctx.customInspect &&
41973 value &&
41974 isFunction(value.inspect) &&
41975 // Filter out the util module, it's inspect function is special
41976 value.inspect !== exports.inspect &&
41977 // Also filter out any prototype objects using the circular check.
41978 !(value.constructor && value.constructor.prototype === value)) {
41979 var ret = value.inspect(recurseTimes, ctx);
41980 if (!isString(ret)) {
41981 ret = formatValue(ctx, ret, recurseTimes);
41982 }
41983 return ret;
41984 }
41985
41986 // Primitive types cannot have properties
41987 var primitive = formatPrimitive(ctx, value);
41988 if (primitive) {
41989 return primitive;
41990 }
41991
41992 // Look up the keys of the object.
41993 var keys = Object.keys(value);
41994 var visibleKeys = arrayToHash(keys);
41995
41996 if (ctx.showHidden) {
41997 keys = Object.getOwnPropertyNames(value);
41998 }
41999
42000 // IE doesn't make error fields non-enumerable
42001 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
42002 if (isError(value)
42003 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
42004 return formatError(value);
42005 }
42006
42007 // Some type of object without properties can be shortcutted.
42008 if (keys.length === 0) {
42009 if (isFunction(value)) {
42010 var name = value.name ? ': ' + value.name : '';
42011 return ctx.stylize('[Function' + name + ']', 'special');
42012 }
42013 if (isRegExp(value)) {
42014 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
42015 }
42016 if (isDate(value)) {
42017 return ctx.stylize(Date.prototype.toString.call(value), 'date');
42018 }
42019 if (isError(value)) {
42020 return formatError(value);
42021 }
42022 }
42023
42024 var base = '', array = false, braces = ['{', '}'];
42025
42026 // Make Array say that they are Array
42027 if (isArray(value)) {
42028 array = true;
42029 braces = ['[', ']'];
42030 }
42031
42032 // Make functions say that they are functions
42033 if (isFunction(value)) {
42034 var n = value.name ? ': ' + value.name : '';
42035 base = ' [Function' + n + ']';
42036 }
42037
42038 // Make RegExps say that they are RegExps
42039 if (isRegExp(value)) {
42040 base = ' ' + RegExp.prototype.toString.call(value);
42041 }
42042
42043 // Make dates with properties first say the date
42044 if (isDate(value)) {
42045 base = ' ' + Date.prototype.toUTCString.call(value);
42046 }
42047
42048 // Make error with message first say the error
42049 if (isError(value)) {
42050 base = ' ' + formatError(value);
42051 }
42052
42053 if (keys.length === 0 && (!array || value.length == 0)) {
42054 return braces[0] + base + braces[1];
42055 }
42056
42057 if (recurseTimes < 0) {
42058 if (isRegExp(value)) {
42059 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
42060 } else {
42061 return ctx.stylize('[Object]', 'special');
42062 }
42063 }
42064
42065 ctx.seen.push(value);
42066
42067 var output;
42068 if (array) {
42069 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
42070 } else {
42071 output = keys.map(function(key) {
42072 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
42073 });
42074 }
42075
42076 ctx.seen.pop();
42077
42078 return reduceToSingleString(output, base, braces);
42079}
42080
42081
42082function formatPrimitive(ctx, value) {
42083 if (isUndefined(value))
42084 return ctx.stylize('undefined', 'undefined');
42085 if (isString(value)) {
42086 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
42087 .replace(/'/g, "\\'")
42088 .replace(/\\"/g, '"') + '\'';
42089 return ctx.stylize(simple, 'string');
42090 }
42091 if (isNumber(value))
42092 return ctx.stylize('' + value, 'number');
42093 if (isBoolean(value))
42094 return ctx.stylize('' + value, 'boolean');
42095 // For some reason typeof null is "object", so special case here.
42096 if (isNull(value))
42097 return ctx.stylize('null', 'null');
42098}
42099
42100
42101function formatError(value) {
42102 return '[' + Error.prototype.toString.call(value) + ']';
42103}
42104
42105
42106function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
42107 var output = [];
42108 for (var i = 0, l = value.length; i < l; ++i) {
42109 if (hasOwnProperty(value, String(i))) {
42110 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
42111 String(i), true));
42112 } else {
42113 output.push('');
42114 }
42115 }
42116 keys.forEach(function(key) {
42117 if (!key.match(/^\d+$/)) {
42118 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
42119 key, true));
42120 }
42121 });
42122 return output;
42123}
42124
42125
42126function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
42127 var name, str, desc;
42128 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
42129 if (desc.get) {
42130 if (desc.set) {
42131 str = ctx.stylize('[Getter/Setter]', 'special');
42132 } else {
42133 str = ctx.stylize('[Getter]', 'special');
42134 }
42135 } else {
42136 if (desc.set) {
42137 str = ctx.stylize('[Setter]', 'special');
42138 }
42139 }
42140 if (!hasOwnProperty(visibleKeys, key)) {
42141 name = '[' + key + ']';
42142 }
42143 if (!str) {
42144 if (ctx.seen.indexOf(desc.value) < 0) {
42145 if (isNull(recurseTimes)) {
42146 str = formatValue(ctx, desc.value, null);
42147 } else {
42148 str = formatValue(ctx, desc.value, recurseTimes - 1);
42149 }
42150 if (str.indexOf('\n') > -1) {
42151 if (array) {
42152 str = str.split('\n').map(function(line) {
42153 return ' ' + line;
42154 }).join('\n').substr(2);
42155 } else {
42156 str = '\n' + str.split('\n').map(function(line) {
42157 return ' ' + line;
42158 }).join('\n');
42159 }
42160 }
42161 } else {
42162 str = ctx.stylize('[Circular]', 'special');
42163 }
42164 }
42165 if (isUndefined(name)) {
42166 if (array && key.match(/^\d+$/)) {
42167 return str;
42168 }
42169 name = JSON.stringify('' + key);
42170 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
42171 name = name.substr(1, name.length - 2);
42172 name = ctx.stylize(name, 'name');
42173 } else {
42174 name = name.replace(/'/g, "\\'")
42175 .replace(/\\"/g, '"')
42176 .replace(/(^"|"$)/g, "'");
42177 name = ctx.stylize(name, 'string');
42178 }
42179 }
42180
42181 return name + ': ' + str;
42182}
42183
42184
42185function reduceToSingleString(output, base, braces) {
42186 var numLinesEst = 0;
42187 var length = output.reduce(function(prev, cur) {
42188 numLinesEst++;
42189 if (cur.indexOf('\n') >= 0) numLinesEst++;
42190 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
42191 }, 0);
42192
42193 if (length > 60) {
42194 return braces[0] +
42195 (base === '' ? '' : base + '\n ') +
42196 ' ' +
42197 output.join(',\n ') +
42198 ' ' +
42199 braces[1];
42200 }
42201
42202 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
42203}
42204
42205
42206// NOTE: These type checking functions intentionally don't use `instanceof`
42207// because it is fragile and can be easily faked with `Object.create()`.
42208function isArray(ar) {
42209 return Array.isArray(ar);
42210}
42211exports.isArray = isArray;
42212
42213function isBoolean(arg) {
42214 return typeof arg === 'boolean';
42215}
42216exports.isBoolean = isBoolean;
42217
42218function isNull(arg) {
42219 return arg === null;
42220}
42221exports.isNull = isNull;
42222
42223function isNullOrUndefined(arg) {
42224 return arg == null;
42225}
42226exports.isNullOrUndefined = isNullOrUndefined;
42227
42228function isNumber(arg) {
42229 return typeof arg === 'number';
42230}
42231exports.isNumber = isNumber;
42232
42233function isString(arg) {
42234 return typeof arg === 'string';
42235}
42236exports.isString = isString;
42237
42238function isSymbol(arg) {
42239 return typeof arg === 'symbol';
42240}
42241exports.isSymbol = isSymbol;
42242
42243function isUndefined(arg) {
42244 return arg === void 0;
42245}
42246exports.isUndefined = isUndefined;
42247
42248function isRegExp(re) {
42249 return isObject(re) && objectToString(re) === '[object RegExp]';
42250}
42251exports.isRegExp = isRegExp;
42252
42253function isObject(arg) {
42254 return typeof arg === 'object' && arg !== null;
42255}
42256exports.isObject = isObject;
42257
42258function isDate(d) {
42259 return isObject(d) && objectToString(d) === '[object Date]';
42260}
42261exports.isDate = isDate;
42262
42263function isError(e) {
42264 return isObject(e) &&
42265 (objectToString(e) === '[object Error]' || e instanceof Error);
42266}
42267exports.isError = isError;
42268
42269function isFunction(arg) {
42270 return typeof arg === 'function';
42271}
42272exports.isFunction = isFunction;
42273
42274function isPrimitive(arg) {
42275 return arg === null ||
42276 typeof arg === 'boolean' ||
42277 typeof arg === 'number' ||
42278 typeof arg === 'string' ||
42279 typeof arg === 'symbol' || // ES6 symbol
42280 typeof arg === 'undefined';
42281}
42282exports.isPrimitive = isPrimitive;
42283
42284exports.isBuffer = require('./support/isBuffer');
42285
42286function objectToString(o) {
42287 return Object.prototype.toString.call(o);
42288}
42289
42290
42291function pad(n) {
42292 return n < 10 ? '0' + n.toString(10) : n.toString(10);
42293}
42294
42295
42296var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
42297 'Oct', 'Nov', 'Dec'];
42298
42299// 26 Feb 16:19:34
42300function timestamp() {
42301 var d = new Date();
42302 var time = [pad(d.getHours()),
42303 pad(d.getMinutes()),
42304 pad(d.getSeconds())].join(':');
42305 return [d.getDate(), months[d.getMonth()], time].join(' ');
42306}
42307
42308
42309// log is just a thin wrapper to console.log that prepends a timestamp
42310exports.log = function() {
42311 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
42312};
42313
42314
42315/**
42316 * Inherit the prototype methods from one constructor into another.
42317 *
42318 * The Function.prototype.inherits from lang.js rewritten as a standalone
42319 * function (not on Function.prototype). NOTE: If this file is to be loaded
42320 * during bootstrapping this function needs to be rewritten using some native
42321 * functions as prototype setup using normal JavaScript does not work as
42322 * expected during bootstrapping (see mirror.js in r114903).
42323 *
42324 * @param {function} ctor Constructor function which needs to inherit the
42325 * prototype.
42326 * @param {function} superCtor Constructor function to inherit prototype from.
42327 */
42328exports.inherits = require('inherits');
42329
42330exports._extend = function(origin, add) {
42331 // Don't do anything if add isn't an object
42332 if (!add || !isObject(add)) return origin;
42333
42334 var keys = Object.keys(add);
42335 var i = keys.length;
42336 while (i--) {
42337 origin[keys[i]] = add[keys[i]];
42338 }
42339 return origin;
42340};
42341
42342function hasOwnProperty(obj, prop) {
42343 return Object.prototype.hasOwnProperty.call(obj, prop);
42344}
42345
42346}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
42347},{"./support/isBuffer":442,"_process":374,"inherits":119}],444:[function(require,module,exports){
42348var indexOf = function (xs, item) {
42349 if (xs.indexOf) return xs.indexOf(item);
42350 else for (var i = 0; i < xs.length; i++) {
42351 if (xs[i] === item) return i;
42352 }
42353 return -1;
42354};
42355var Object_keys = function (obj) {
42356 if (Object.keys) return Object.keys(obj)
42357 else {
42358 var res = [];
42359 for (var key in obj) res.push(key)
42360 return res;
42361 }
42362};
42363
42364var forEach = function (xs, fn) {
42365 if (xs.forEach) return xs.forEach(fn)
42366 else for (var i = 0; i < xs.length; i++) {
42367 fn(xs[i], i, xs);
42368 }
42369};
42370
42371var defineProp = (function() {
42372 try {
42373 Object.defineProperty({}, '_', {});
42374 return function(obj, name, value) {
42375 Object.defineProperty(obj, name, {
42376 writable: true,
42377 enumerable: false,
42378 configurable: true,
42379 value: value
42380 })
42381 };
42382 } catch(e) {
42383 return function(obj, name, value) {
42384 obj[name] = value;
42385 };
42386 }
42387}());
42388
42389var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
42390'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
42391'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
42392'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
42393'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
42394
42395function Context() {}
42396Context.prototype = {};
42397
42398var Script = exports.Script = function NodeScript (code) {
42399 if (!(this instanceof Script)) return new Script(code);
42400 this.code = code;
42401};
42402
42403Script.prototype.runInContext = function (context) {
42404 if (!(context instanceof Context)) {
42405 throw new TypeError("needs a 'context' argument.");
42406 }
42407
42408 var iframe = document.createElement('iframe');
42409 if (!iframe.style) iframe.style = {};
42410 iframe.style.display = 'none';
42411
42412 document.body.appendChild(iframe);
42413
42414 var win = iframe.contentWindow;
42415 var wEval = win.eval, wExecScript = win.execScript;
42416
42417 if (!wEval && wExecScript) {
42418 // win.eval() magically appears when this is called in IE:
42419 wExecScript.call(win, 'null');
42420 wEval = win.eval;
42421 }
42422
42423 forEach(Object_keys(context), function (key) {
42424 win[key] = context[key];
42425 });
42426 forEach(globals, function (key) {
42427 if (context[key]) {
42428 win[key] = context[key];
42429 }
42430 });
42431
42432 var winKeys = Object_keys(win);
42433
42434 var res = wEval.call(win, this.code);
42435
42436 forEach(Object_keys(win), function (key) {
42437 // Avoid copying circular objects like `top` and `window` by only
42438 // updating existing context properties or new properties in the `win`
42439 // that was only introduced after the eval.
42440 if (key in context || indexOf(winKeys, key) === -1) {
42441 context[key] = win[key];
42442 }
42443 });
42444
42445 forEach(globals, function (key) {
42446 if (!(key in context)) {
42447 defineProp(context, key, win[key]);
42448 }
42449 });
42450
42451 document.body.removeChild(iframe);
42452
42453 return res;
42454};
42455
42456Script.prototype.runInThisContext = function () {
42457 return eval(this.code); // maybe...
42458};
42459
42460Script.prototype.runInNewContext = function (context) {
42461 var ctx = Script.createContext(context);
42462 var res = this.runInContext(ctx);
42463
42464 if (context) {
42465 forEach(Object_keys(ctx), function (key) {
42466 context[key] = ctx[key];
42467 });
42468 }
42469
42470 return res;
42471};
42472
42473forEach(Object_keys(Script.prototype), function (name) {
42474 exports[name] = Script[name] = function (code) {
42475 var s = Script(code);
42476 return s[name].apply(s, [].slice.call(arguments, 1));
42477 };
42478});
42479
42480exports.isContext = function (context) {
42481 return context instanceof Context;
42482};
42483
42484exports.createScript = function (code) {
42485 return exports.Script(code);
42486};
42487
42488exports.createContext = Script.createContext = function (context) {
42489 var copy = new Context();
42490 if(typeof context === 'object') {
42491 forEach(Object_keys(context), function (key) {
42492 copy[key] = context[key];
42493 });
42494 }
42495 return copy;
42496};
42497
42498},{}],445:[function(require,module,exports){
42499const StellarBase = require('stellar-base');
42500const edHd = require('ed25519-hd-key');
42501
42502window.stellarUtil = {
42503 getKeypair: function (path, seed) {
42504 const result = edHd.derivePath(path, seed);
42505 return StellarBase.Keypair.fromRawEd25519Seed(result.key);
42506 },
42507 dummyNetwork: {
42508 bip32: {public: 0, private: 0},
42509 messagePrefix: '',
42510 pubKeyHash: 0,
42511 scriptHash: 0,
42512 wif: 0,
42513 },
42514}
42515
42516},{"ed25519-hd-key":84,"stellar-base":412}]},{},[445]);