From 360713c6896d18a95dd3ca541ea477bf44b98d0c Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 10 Mar 2024 22:38:21 +0000 Subject: add sodium-plus js crypto library --- library/sodium-plus/.github/workflows/main.yml | 40 + library/sodium-plus/.gitignore | 6 + library/sodium-plus/.npmignore | 3 + library/sodium-plus/LICENSE | 18 + library/sodium-plus/README.md | 86 + library/sodium-plus/browser.js | 25 + library/sodium-plus/build.sh | 22 + library/sodium-plus/build/pre-build.patch | 57 + library/sodium-plus/build/remove-sodium-native.sh | 12 + library/sodium-plus/dist/sodium-plus.js | 30454 +++++++++++++++++++ library/sodium-plus/dist/sodium-plus.min.js | 1 + library/sodium-plus/docs/README.md | 99 + library/sodium-plus/docs/SodiumPlus/AEAD.md | 64 + library/sodium-plus/docs/SodiumPlus/README.md | 99 + .../authenticated-public-key-encryption.md | 99 + .../docs/SodiumPlus/digital-signatures.md | 134 + .../docs/SodiumPlus/encrypted-streams.md | 138 + .../general-purpose-cryptographic-hash.md | 82 + .../sodium-plus/docs/SodiumPlus/key-derivation.md | 45 + .../sodium-plus/docs/SodiumPlus/key-exchange.md | 94 + .../docs/SodiumPlus/one-time-authentication.md | 52 + .../SodiumPlus/password-based-key-derivation.md | 45 + .../SodiumPlus/password-hashing-and-storage.md | 74 + library/sodium-plus/docs/SodiumPlus/randomness.md | 43 + .../docs/SodiumPlus/scalar-multiplication.md | 49 + .../sodium-plus/docs/SodiumPlus/sealed-boxes.md | 48 + .../shared-key-authenticated-encryption.md | 62 + .../docs/SodiumPlus/shared-key-authentication.md | 46 + .../docs/SodiumPlus/short-input-hashing.md | 39 + .../sodium-plus/docs/SodiumPlus/stream-ciphers.md | 55 + library/sodium-plus/docs/SodiumPlus/utilities.md | 45 + library/sodium-plus/docs/getting-started.md | 100 + library/sodium-plus/index.d.ts | 433 + library/sodium-plus/index.js | 36 + library/sodium-plus/lib/backend.js | 32 + .../sodium-plus/lib/backend/libsodium-wrappers.js | 782 + library/sodium-plus/lib/backend/sodiumnative.js | 866 + library/sodium-plus/lib/cryptography-key.js | 80 + library/sodium-plus/lib/keytypes/ed25519pk.js | 28 + library/sodium-plus/lib/keytypes/ed25519sk.js | 29 + library/sodium-plus/lib/keytypes/x25519pk.js | 29 + library/sodium-plus/lib/keytypes/x25519sk.js | 29 + library/sodium-plus/lib/polyfill.js | 74 + library/sodium-plus/lib/sodium-error.js | 1 + library/sodium-plus/lib/sodiumplus.js | 1212 + library/sodium-plus/lib/util.js | 133 + library/sodium-plus/package.json | 64 + library/sodium-plus/test/async-helper.js | 13 + library/sodium-plus/test/backend-test.js | 37 + library/sodium-plus/test/cryptography-key-test.js | 83 + library/sodium-plus/test/longtext.md | 135 + library/sodium-plus/test/sodiumplus-pwhash-test.js | 33 + .../sodium-plus/test/sodiumplus-pwhashstr-test.js | 53 + library/sodium-plus/test/sodiumplus-test.js | 732 + library/sodium-plus/test/util-test.js | 30 + 55 files changed, 37180 insertions(+) create mode 100644 library/sodium-plus/.github/workflows/main.yml create mode 100644 library/sodium-plus/.gitignore create mode 100644 library/sodium-plus/.npmignore create mode 100644 library/sodium-plus/LICENSE create mode 100644 library/sodium-plus/README.md create mode 100644 library/sodium-plus/browser.js create mode 100644 library/sodium-plus/build.sh create mode 100644 library/sodium-plus/build/pre-build.patch create mode 100644 library/sodium-plus/build/remove-sodium-native.sh create mode 100644 library/sodium-plus/dist/sodium-plus.js create mode 100644 library/sodium-plus/dist/sodium-plus.min.js create mode 100644 library/sodium-plus/docs/README.md create mode 100644 library/sodium-plus/docs/SodiumPlus/AEAD.md create mode 100644 library/sodium-plus/docs/SodiumPlus/README.md create mode 100644 library/sodium-plus/docs/SodiumPlus/authenticated-public-key-encryption.md create mode 100644 library/sodium-plus/docs/SodiumPlus/digital-signatures.md create mode 100644 library/sodium-plus/docs/SodiumPlus/encrypted-streams.md create mode 100644 library/sodium-plus/docs/SodiumPlus/general-purpose-cryptographic-hash.md create mode 100644 library/sodium-plus/docs/SodiumPlus/key-derivation.md create mode 100644 library/sodium-plus/docs/SodiumPlus/key-exchange.md create mode 100644 library/sodium-plus/docs/SodiumPlus/one-time-authentication.md create mode 100644 library/sodium-plus/docs/SodiumPlus/password-based-key-derivation.md create mode 100644 library/sodium-plus/docs/SodiumPlus/password-hashing-and-storage.md create mode 100644 library/sodium-plus/docs/SodiumPlus/randomness.md create mode 100644 library/sodium-plus/docs/SodiumPlus/scalar-multiplication.md create mode 100644 library/sodium-plus/docs/SodiumPlus/sealed-boxes.md create mode 100644 library/sodium-plus/docs/SodiumPlus/shared-key-authenticated-encryption.md create mode 100644 library/sodium-plus/docs/SodiumPlus/shared-key-authentication.md create mode 100644 library/sodium-plus/docs/SodiumPlus/short-input-hashing.md create mode 100644 library/sodium-plus/docs/SodiumPlus/stream-ciphers.md create mode 100644 library/sodium-plus/docs/SodiumPlus/utilities.md create mode 100644 library/sodium-plus/docs/getting-started.md create mode 100644 library/sodium-plus/index.d.ts create mode 100644 library/sodium-plus/index.js create mode 100644 library/sodium-plus/lib/backend.js create mode 100644 library/sodium-plus/lib/backend/libsodium-wrappers.js create mode 100644 library/sodium-plus/lib/backend/sodiumnative.js create mode 100644 library/sodium-plus/lib/cryptography-key.js create mode 100644 library/sodium-plus/lib/keytypes/ed25519pk.js create mode 100644 library/sodium-plus/lib/keytypes/ed25519sk.js create mode 100644 library/sodium-plus/lib/keytypes/x25519pk.js create mode 100644 library/sodium-plus/lib/keytypes/x25519sk.js create mode 100644 library/sodium-plus/lib/polyfill.js create mode 100644 library/sodium-plus/lib/sodium-error.js create mode 100644 library/sodium-plus/lib/sodiumplus.js create mode 100644 library/sodium-plus/lib/util.js create mode 100644 library/sodium-plus/package.json create mode 100644 library/sodium-plus/test/async-helper.js create mode 100644 library/sodium-plus/test/backend-test.js create mode 100644 library/sodium-plus/test/cryptography-key-test.js create mode 100644 library/sodium-plus/test/longtext.md create mode 100644 library/sodium-plus/test/sodiumplus-pwhash-test.js create mode 100644 library/sodium-plus/test/sodiumplus-pwhashstr-test.js create mode 100644 library/sodium-plus/test/sodiumplus-test.js create mode 100644 library/sodium-plus/test/util-test.js diff --git a/library/sodium-plus/.github/workflows/main.yml b/library/sodium-plus/.github/workflows/main.yml new file mode 100644 index 000000000..5b5459a31 --- /dev/null +++ b/library/sodium-plus/.github/workflows/main.yml @@ -0,0 +1,40 @@ +name: CI + +on: [push, pull_request] + +jobs: + build: + strategy: + matrix: + platform: [ubuntu-latest] + node: [ '12', '10' ] + name: Node ${{ matrix.node }} (${{ matrix.platform }}) + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - name: install dependencies + run: npm install + - name: test without sodium-native + run: npm test + - name: install sodium-native + run: npm install --save sodium-native + - name: test with sodium-native + run: npm test + + build_latest: + name: Node latest + runs-on: ubuntu-latest + container: node:latest + steps: + - uses: actions/checkout@v1 + - name: install dependencies + run: npm install + - name: test without sodium-native + run: npm test + - name: install sodium-native + run: npm install --save sodium-native + - name: test with sodium-native + run: npm test diff --git a/library/sodium-plus/.gitignore b/library/sodium-plus/.gitignore new file mode 100644 index 000000000..59a3d0596 --- /dev/null +++ b/library/sodium-plus/.gitignore @@ -0,0 +1,6 @@ +/.idea +/node_modules +/package-lock.json +*-tmp.js +/nbproject +/.nyc_output diff --git a/library/sodium-plus/.npmignore b/library/sodium-plus/.npmignore new file mode 100644 index 000000000..21aa3aa2d --- /dev/null +++ b/library/sodium-plus/.npmignore @@ -0,0 +1,3 @@ +/.idea +/dist +*-tmp.js diff --git a/library/sodium-plus/LICENSE b/library/sodium-plus/LICENSE new file mode 100644 index 000000000..d3332b753 --- /dev/null +++ b/library/sodium-plus/LICENSE @@ -0,0 +1,18 @@ +/* + * ISC License + * + * Copyright (c) 2019 + * Paragon Initiative Enterprises + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ \ No newline at end of file diff --git a/library/sodium-plus/README.md b/library/sodium-plus/README.md new file mode 100644 index 000000000..6ca5ca8cf --- /dev/null +++ b/library/sodium-plus/README.md @@ -0,0 +1,86 @@ +# Sodium-Plus (Na+) + +[![Build Status](https://github.com/paragonie/sodium-plus/workflows/CI/badge.svg)](https://github.com/paragonie/sodium-plus/actions?workflow=CI) +[![npm version](https://img.shields.io/npm/v/sodium-plus.svg)](https://npm.im/sodium-plus) + +Sodium-Plus delivers a positive cryptography experience for JavaScript developers. + +Sodium-Plus brings you all the benefits of using libsodium in your application +without any of the headaches introduced by the incumbent APIs. + +Sodium-Plus is permissively licensed (ISC) and free to use. + +## Features + +* **Cross-platform.** + * Yes, this includes [in the browser](docs/getting-started.md#sodium-plus-in-the-browser). +* Pluggable backend with an [auto-loader](docs/getting-started.md): + * If [sodium-native](https://github.com/sodium-friends/sodium-native) + is installed, it will be preferred. + * Otherwise, the default is [libsodium-wrappers](https://github.com/jedisct1/libsodium.js). +* Fully `async`/`await` ready (aside from object constructors). +* Type-safe API: + * Instead of just passing around `Buffer` objects and hoping you got your + argument order correct, `sodium-plus` will throw an Error if you provide + the wrong key type. This prevents you from accidentally introducing a severe + security risk into your application. + +## Installing + +### Installing as a Node.js Module + +With NPM: + +```terminal +npm install sodium-plus +``` + +You can optionally install `sodium-native` alongside `sodium-plus` if you +want better performance. + +The default configuration is a bit slower, but has a wider reach +(e.g. web browsers). + +### Installing in a Web Page + +See [this section of the documentation](docs/getting-started.md#sodium-plus-in-the-browser) +for getting started with Sodium-Plus in a web browser. + +## Using Sodium-Plus in Your Projects + +SodiumPlus is meant to be used asynchronously, like so: + +```javascript +const { SodiumPlus } = require('sodium-plus'); + +(async function() { + // Select a backend automatically + let sodium = await SodiumPlus.auto(); + + let key = await sodium.crypto_secretbox_keygen(); + let nonce = await sodium.randombytes_buf(24); + let message = 'This is just a test message'; + // Message can be a string, buffer, array, etc. + + let ciphertext = await sodium.crypto_secretbox(message, nonce, key); + console.log(ciphertext); + let decrypted = await sodium.crypto_secretbox_open(ciphertext, nonce, key); + console.log(decrypted.toString('utf-8')); +})(); +``` + +This should produce output similar to below (but with different random-looking bytes): + +``` + +This is just a test message +``` + +## Documentation + +The documentation is [available online on Github](https://github.com/paragonie/sodium-plus/tree/master/docs)! + +## Support Contracts + +If your company uses this library in their products or services, you may be +interested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise). diff --git a/library/sodium-plus/browser.js b/library/sodium-plus/browser.js new file mode 100644 index 000000000..8a413caf8 --- /dev/null +++ b/library/sodium-plus/browser.js @@ -0,0 +1,25 @@ +const { + CryptographyKey, + Ed25519PublicKey, + Ed25519SecretKey, + SodiumError, + SodiumPlus, + SodiumPolyfill, + SodiumUtil, + X25519PublicKey, + X25519SecretKey +} = require('./index'); + +// Load dependencies into window +(async function(){ + window.CryptographyKey = CryptographyKey; + window.Ed25519PublicKey = Ed25519PublicKey; + window.Ed25519SecretKey = Ed25519SecretKey; + window.SodiumError = SodiumError; + window.SodiumPlus = SodiumPlus; + window.SodiumPolyfill = SodiumPolyfill; + window.SodiumUtil = SodiumUtil; + window.X25519PublicKey = X25519PublicKey; + window.X25519SecretKey = X25519SecretKey; + window.sodium = await SodiumPlus.auto(); +})(); diff --git a/library/sodium-plus/build.sh b/library/sodium-plus/build.sh new file mode 100644 index 000000000..fc6396f3c --- /dev/null +++ b/library/sodium-plus/build.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +basedir=$(dirname $(readlink -f ${BASH_SOURCE[0]})) +path="${basedir}/build/remove-sodium-native.sh" + +bash "${path}" +ret=$? +if [[ $ret -ne 0 ]]; then + echo "Exiting..." + exit "${ret}" +fi + +echo "Building..." +browserify browser.js > dist/sodium-plus.js +echo "Minifying..." +browserify browser.js -p tinyify > dist/sodium-plus.min.js +echo "Build complete! Resetting..." + +# Once browserify finishes, rollback changes that removed sodium-native. +git checkout -- lib/* +git checkout -- lib/*/* +echo "Done!" diff --git a/library/sodium-plus/build/pre-build.patch b/library/sodium-plus/build/pre-build.patch new file mode 100644 index 000000000..d6304bf65 --- /dev/null +++ b/library/sodium-plus/build/pre-build.patch @@ -0,0 +1,57 @@ +diff --git a/lib/backend/sodiumnative.js b/lib/backend/sodiumnative.js +index a592b10..f268085 100644 +--- a/lib/backend/sodiumnative.js ++++ b/lib/backend/sodiumnative.js +@@ -1,12 +1,5 @@ + let loaded = false; +-let _sodium; +-/* istanbul ignore next */ +-try { +- _sodium = require('sodium-native'); +- loaded = true; +-} catch (e) { +- _sodium = {}; +-} ++let _sodium = {}; + const Backend = require('../backend'); + const CryptographyKey = require('../cryptography-key'); + const SodiumError = require('../sodium-error'); +diff --git a/lib/sodiumplus.js b/lib/sodiumplus.js +index a592b10..f268085 100644 +--- a/lib/sodiumplus.js ++++ b/lib/sodiumplus.js +@@ -4,7 +4,6 @@ + const Ed25519PublicKey = require('./keytypes/ed25519pk'); + const LibsodiumWrappersBackend = require('./backend/libsodium-wrappers'); + const SodiumError = require('./sodium-error'); +-const SodiumNativeBackend = require('./backend/sodiumnative'); + const X25519PublicKey = require('./keytypes/x25519pk'); + const X25519SecretKey = require('./keytypes/x25519sk'); + const Util = require('./util'); +@@ -41,7 +40,7 @@ + * @return {boolean} + */ + isSodiumNative() { +- return (this.backend instanceof SodiumNativeBackend); ++ return false; + } + + /** +@@ -60,16 +59,7 @@ + * @return {Promise} + */ + static async auto() { +- let backend; +- try { +- backend = await SodiumNativeBackend.init(); +- } catch (e) { +- backend = await LibsodiumWrappersBackend.init(); +- } +- /* istanbul ignore if */ +- if (!backend) { +- backend = await LibsodiumWrappersBackend.init(); +- } ++ let backend = await LibsodiumWrappersBackend.init(); + Util.populateConstants(backend); + return new SodiumPlus(backend); + } diff --git a/library/sodium-plus/build/remove-sodium-native.sh b/library/sodium-plus/build/remove-sodium-native.sh new file mode 100644 index 000000000..f09a5b274 --- /dev/null +++ b/library/sodium-plus/build/remove-sodium-native.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +basedir=$(dirname $(readlink -f ${BASH_SOURCE[0]})) +path="${basedir}/pre-build.patch" + +git apply --check "${path}" +ret=$? +if [[ $ret -ne 0 ]]; then + exit "${ret}" +fi +git apply "${path}" +ret=$? +exit $ret diff --git a/library/sodium-plus/dist/sodium-plus.js b/library/sodium-plus/dist/sodium-plus.js new file mode 100644 index 000000000..073c65aa1 --- /dev/null +++ b/library/sodium-plus/dist/sodium-plus.js @@ -0,0 +1,30454 @@ +(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 { + if (type === 'SodiumNative') { + // This one may error out. You should catch it in your code. + // We won't here. Use the `await SodiumPlus.auto()` API instead! + return require('./lib/backend/sodiumnative'); + } else if (type === 'LibsodiumWrappers') { + return require('./lib/backend/libsodium-wrappers'); + } else if (type.length === 0) { + return require('./lib/backend'); + } + + // Default: Throw a SodiumError + let SodiumError = require('./lib/sodium-error'); + throw new SodiumError(`Unrecognized backend type: ${type}`); + }, + CryptographyKey: require('./lib/cryptography-key'), + Ed25519PublicKey: require('./lib/keytypes/ed25519pk'), + Ed25519SecretKey: require('./lib/keytypes/ed25519sk'), + SodiumError: require('./lib/sodium-error'), + SodiumPlus: require('./lib/sodiumplus'), + SodiumPolyfill: require('./lib/polyfill'), + SodiumUtil: require('./lib/util'), + X25519PublicKey: require('./lib/keytypes/x25519pk'), + X25519SecretKey: require('./lib/keytypes/x25519sk') +}; + +},{"./lib/backend":3,"./lib/backend/libsodium-wrappers":4,"./lib/backend/sodiumnative":5,"./lib/cryptography-key":6,"./lib/keytypes/ed25519pk":7,"./lib/keytypes/ed25519sk":8,"./lib/keytypes/x25519pk":9,"./lib/keytypes/x25519sk":10,"./lib/polyfill":11,"./lib/sodium-error":12,"./lib/sodiumplus":13,"./lib/util":14}],3:[function(require,module,exports){ +(function (Buffer){ +const CryptographyKey = require('./cryptography-key'); +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +module.exports = class Backend { + constructor() { + // NOP + this.backendName = 'UndefinedBackend'; + } + + /** + * @param {CryptographyKey} sKey + * @param {CryptographyKey} pKey + * @return {Promise} + */ + async crypto_box_keypair_from_secretkey_and_publickey(sKey, pKey) { + /* istanbul ignore if */ + if (sKey.getLength() !== 32) { + throw new Error('Secret key must be 32 bytes'); + } + /* istanbul ignore if */ + if (pKey.getLength() !== 32) { + throw new Error('Public key must be 32 bytes'); + } + const keypair = Buffer.alloc(64); + sKey.getBuffer().copy(keypair, 0, 0, 32); + pKey.getBuffer().copy(keypair, 32, 0, 32); + return new CryptographyKey(Buffer.from(keypair)); + } +}; + +}).call(this,require("buffer").Buffer) +},{"./cryptography-key":6,"buffer":74,"buffer/":17}],4:[function(require,module,exports){ +(function (Buffer){ +const _sodium = require('libsodium-wrappers'); +const Backend = require('../backend'); +const CryptographyKey = require('../cryptography-key'); +const Polyfill = require('../polyfill'); +const Util = require('../util'); +const SodiumError = require('../sodium-error'); +const toBuffer = require('typedarray-to-buffer'); +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +/* istanbul ignore next */ +module.exports = class LibsodiumWrappersBackend extends Backend { + constructor(lib) { + super(lib); + this.sodium = lib; + this.backendName = 'LibsodiumWrappersBackend'; + } + + static async init() { + await _sodium.ready; + return new LibsodiumWrappersBackend(_sodium); + } + + /** + * + * @param {String|Buffer} ciphertext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, assocData, nonce, key) { + return toBuffer( + this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt( + null, + ciphertext, + assocData, + nonce, + key.getBuffer() + ) + ); + } + + /** + * + * @param {String|Buffer} plaintext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, assocData, nonce, key) { + return toBuffer( + this.sodium.crypto_aead_xchacha20poly1305_ietf_encrypt( + plaintext, + assocData, + null, + nonce, + key.getBuffer() + ) + ); + } + + /** + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth(message, key) { + return toBuffer( + this.sodium.crypto_auth( + message, + key.getBuffer() + ) + ); + } + + /** + * @param {Buffer} mac + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth_verify(mac, message, key) { + return this.sodium.crypto_auth_verify( + mac, + message, + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box(plaintext, nonce, sk, pk) { + return Util.toBuffer( + await this.sodium.crypto_box_easy( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + pk.getBuffer(), + sk.getBuffer() + ) + ); + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + */ + async crypto_box_open(ciphertext, nonce, sk, pk) { + return Util.toBuffer( + await this.sodium.crypto_box_open_easy( + await Util.toBuffer(ciphertext), + await Util.toBuffer(nonce), + pk.getBuffer(), + sk.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box_seal(plaintext, pk) { + return Util.toBuffer( + await this.sodium.crypto_box_seal( + await Util.toBuffer(plaintext), + pk.getBuffer() + ) + ); + } + + /** + * @param {Buffer} ciphertext + * @param {CryptographyKey} pk + * @param {CryptographyKey} sk + * @return {Promise} + */ + async crypto_box_seal_open(ciphertext, pk, sk) { + return Util.toBuffer( + await this.sodium.crypto_box_seal_open( + await Util.toBuffer(ciphertext), + pk.getBuffer(), + sk.getBuffer() + ) + ); + } + + /** + * @return {Promise} + */ + async crypto_box_keypair() { + const obj = this.sodium.crypto_box_keypair(); + return new CryptographyKey( + Buffer.concat([ + await Util.toBuffer(obj.privateKey), + await Util.toBuffer(obj.publicKey) + ]) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash(message, key = null, outputLength = 32) { + if (key) { + return Util.toBuffer( + this.sodium.crypto_generichash( + outputLength, + await Util.toBuffer(message), + key.getBuffer() + ) + ); + } + return Util.toBuffer( + this.sodium.crypto_generichash( + outputLength, + await Util.toBuffer(message) + ) + ); + } + + /** + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_init(key = null, outputLength = 32) { + if (key) { + return this.sodium.crypto_generichash_init(key.getBuffer(), outputLength); + } + return this.sodium.crypto_generichash_init(null, outputLength); + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @return {Promise<*>} + */ + async crypto_generichash_update(state, message) { + return this.sodium.crypto_generichash_update(state, await Util.toBuffer(message)); + } + + /** + * @param {*} state + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_final(state, outputLength = 32) { + return Util.toBuffer( + this.sodium.crypto_generichash_final(state, outputLength) + ); + } + + /** + * @param {X25519PublicKey} clientPublicKey + * @param {X25519SecretKey} clientSecretKey + * @param {X25519PublicKey} serverPublicKey + * @return {Promise} + */ + async crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey) { + const gen = this.sodium.crypto_kx_client_session_keys( + clientPublicKey.getBuffer(), + clientSecretKey.getBuffer(), + serverPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(await Util.toBuffer(gen.sharedRx)), + new CryptographyKey(await Util.toBuffer(gen.sharedTx)) + ]; + } + + /** + * @param {X25519PublicKey} serverPublicKey + * @param {X25519SecretKey} serverSecretKey + * @param {X25519PublicKey} clientPublicKey + * @return {Promise} + */ + async crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey) { + const gen = this.sodium.crypto_kx_server_session_keys( + serverPublicKey.getBuffer(), + serverSecretKey.getBuffer(), + clientPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(await Util.toBuffer(gen.sharedRx)), + new CryptographyKey(await Util.toBuffer(gen.sharedTx)) + ]; + } + + /** + * @param {number} length + * @param {number} subKeyId + * @param {string|Buffer} context + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_kdf_derive_from_key(length, subKeyId, context, key) { + return new CryptographyKey( + await Util.toBuffer( + this.sodium.crypto_kdf_derive_from_key( + length, + subKeyId | 0, + context, + key.getBuffer() + ) + ) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_onetimeauth(message, key) { + if (typeof this.sodium.crypto_onetimeauth === 'undefined') { + return Polyfill.crypto_onetimeauth( + await Util.toBuffer(message), + key + ); + } + return this.sodium.crypto_onetimeauth( + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + async crypto_onetimeauth_verify(message, key, tag) { + if (typeof this.sodium.crypto_onetimeauth_verify === 'undefined') { + return Polyfill.crypto_onetimeauth_verify( + await Util.toBuffer(message), + key, + tag + ); + } + return this.sodium.crypto_onetimeauth_verify( + tag, + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {number} length + * @param {string|Buffer} password + * @param {Buffer} salt + * @param {number} opslimit + * @param {number} memlimit + * @param {number} algorithm + * @return {Promise} + */ + async crypto_pwhash(length, password, salt, opslimit, memlimit, algorithm) { + return Util.toBuffer( + this.sodium.crypto_pwhash( + length, + await Util.toBuffer(password), + await Util.toBuffer(salt), + opslimit, + memlimit, + algorithm + ) + ); + } + + /** + * @param {string|Buffer} password + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str(password, opslimit, memlimit) { + return (await Util.toBuffer( + this.sodium.crypto_pwhash_str( + await Util.toBuffer(password), + opslimit, + memlimit + )) + ).toString('utf-8'); + } + + /** + * @param {string|Buffer} password + * @param {string|Buffer} hash + * @return {Promise} + */ + async crypto_pwhash_str_verify(password, hash) { + return this.sodium.crypto_pwhash_str_verify( + hash.toString('utf-8'), + await Util.toBuffer(password) + ); + } + + /** + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + if (typeof (this.sodium.crypto_pwhash_str_needs_rehash) !== 'function') { + return await Polyfill.crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit); + } + return this.sodium.crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit); + } + + /** + * @param {X25519SecretKey} secretKey + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_scalarmult(secretKey, publicKey) { + return new CryptographyKey( + await Util.toBuffer( + this.sodium.crypto_scalarmult(secretKey.getBuffer(), publicKey.getBuffer()) + ) + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox(plaintext, nonce, key) { + return Util.toBuffer( + this.sodium.crypto_secretbox_easy( + await Util.toBuffer(plaintext), + nonce, + key.getBuffer() + ) + ); + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox_open(ciphertext, nonce, key) { + return Util.toBuffer( + this.sodium.crypto_secretbox_open_easy( + await Util.toBuffer(ciphertext), + nonce, + key.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_shorthash(message, key) { + return Util.toBuffer( + this.sodium.crypto_shorthash( + await Util.toBuffer(message), + key.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign(message, secretKey) { + return Util.toBuffer( + this.sodium.crypto_sign( + await Util.toBuffer(message), + secretKey.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_sign_open(message, publicKey) { + return Util.toBuffer( + this.sodium.crypto_sign_open( + message, + publicKey.getBuffer() + ) + ); + } + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign_detached(message, secretKey) { + return Util.toBuffer( + this.sodium.crypto_sign_detached( + await Util.toBuffer(message), + secretKey.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @param {Buffer} signature + * @return {Promise} + */ + async crypto_sign_verify_detached(message, publicKey, signature) { + return this.sodium.crypto_sign_verify_detached( + signature, + await Util.toBuffer(message), + publicKey.getBuffer() + ); + } + + /** + * @return {Promise} + */ + async crypto_sign_keypair() { + const obj = this.sodium.crypto_sign_keypair(); + return new CryptographyKey( + Buffer.concat([ + await Util.toBuffer(obj.privateKey), + await Util.toBuffer(obj.publicKey) + ]) + ); + } + + /** + * @param {Buffer} seed + * @return {Promise} + */ + async crypto_sign_seed_keypair(seed) { + const obj = this.sodium.crypto_sign_seed_keypair(seed); + return new CryptographyKey( + Buffer.concat([ + await Util.toBuffer(obj.privateKey), + await Util.toBuffer(obj.publicKey) + ]) + ); + } + + /** + * @param {Ed25519SecretKey} sk + * @return {Promise} + */ + async crypto_sign_ed25519_sk_to_curve25519(sk) { + return Util.toBuffer( + this.sodium.crypto_sign_ed25519_sk_to_curve25519(sk.getBuffer()) + ); + } + + /** + * @param {Ed25519PublicKey} pk + * @return {Promise} + */ + async crypto_sign_ed25519_pk_to_curve25519(pk) { + return Util.toBuffer( + this.sodium.crypto_sign_ed25519_pk_to_curve25519(pk.getBuffer()) + ); + } + + + /** + * @param {number} length + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream(length, nonce, key) { + if (typeof (this.sodium.crypto_stream_xor) === 'undefined') { + return Polyfill.crypto_stream_xor( + Buffer.alloc(length, 0), + await Util.toBuffer(nonce), + key + ); + } + return this.sodium.crypto_stream( + length, + await Util.toBuffer(nonce), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream_xor(plaintext, nonce, key) { + if (typeof (this.sodium.crypto_stream_xor) === 'undefined') { + return Polyfill.crypto_stream_xor( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + key + ) + } + return this.sodium.crypto_stream_xor( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + key.getBuffer() + ); + } + + /** + * + * @param {CryptographyKey} secretKey + * @return {Promise} + */ + async crypto_scalarmult_base(secretKey) { + return Util.toBuffer( + this.sodium.crypto_scalarmult_base(secretKey.getBuffer()) + ); + } + + /** + * @param {CryptographyKey} key + * @return {Promise} [state, header] + */ + async crypto_secretstream_xchacha20poly1305_init_push(key) { + const res = this.sodium.crypto_secretstream_xchacha20poly1305_init_push(key.getBuffer()); + return [res.state, await Util.toBuffer(res.header)]; + } + + /** + * @param {Buffer} header + * @param {CryptographyKey} key + * @return {Promise<*>} Returns the opaque state object + */ + async crypto_secretstream_xchacha20poly1305_init_pull(header, key) { + if (header.length !== this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) { + throw new SodiumError(`Header must be ${this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES} bytes long`); + } + return this.sodium.crypto_secretstream_xchacha20poly1305_init_pull(header, key.getBuffer()); + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_push(state, message, ad = '', tag = 0) { + return Util.toBuffer( + this.sodium.crypto_secretstream_xchacha20poly1305_push( + state, + await Util.toBuffer(message), + ad.length > 0 ? (await Util.toBuffer(ad)) : null, + tag + ) + ); + } + + /** + * @param {*} state + * @param {Buffer} ciphertext + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad = '', tag = 0) { + if (ciphertext.length < this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES) { + throw new SodiumError('Invalid ciphertext size'); + } + const out = this.sodium.crypto_secretstream_xchacha20poly1305_pull( + state, + await Util.toBuffer(ciphertext), + ad.length > 0 ? (await Util.toBuffer(ad)) : null, + tag + ); + if (tag !== out.tag) { + throw new SodiumError(`Invalid tag (Given: ${tag}; Expected: ${out.tag})`); + } + return Util.toBuffer(out.message); + } + + /** + * @param {*} state + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_rekey(state) { + this.sodium.crypto_secretstream_xchacha20poly1305_rekey(state); + } + + /** + * @param {number} number + * @return {Promise} + */ + async randombytes_buf(number) { + return Util.toBuffer(await this.sodium.randombytes_buf(number)); + } + + /** + * @param {number} upperBound + * @return {Promise} + */ + async randombytes_uniform(upperBound) { + return this.sodium.randombytes_uniform(upperBound); + } + + /** + * @param {Uint8Array} val + * @param {Uint8Array} addv + * @return {Promise} + */ + async sodium_add(val, addv) { + const buf = await Util.cloneBuffer(val); + this.sodium.add(buf, addv); + return buf; + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_bin2hex(buf) { + return this.sodium.to_hex(buf); + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_compare(b1, b2) { + return this.sodium.compare(b1, b2); + } + + /** + * @param {Buffer|string} encoded + * @return {Promise} + */ + async sodium_hex2bin(encoded) { + return Buffer.from(this.sodium.from_hex(encoded)); + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_increment(buf) { + return this.sodium.increment(buf); + } + + /** + * @param {Buffer} buf + * @param {number} len + * @return {Promise} + */ + async sodium_is_zero(buf, len) { + return this.sodium.is_zero(buf, len); + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_memcmp(b1, b2) { + return this.sodium.memcmp(b1, b2); + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_memzero(buf) { + this.sodium.memzero(buf); + } + + + /** + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_pad(buf, blockSize) { + return Util.toBuffer( + this.sodium.pad(await Util.toBuffer(buf), blockSize) + ); + } + + /** + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_unpad(buf, blockSize) { + return Util.toBuffer(this.sodium.unpad(buf, blockSize)); + } +}; + +}).call(this,require("buffer").Buffer) +},{"../backend":3,"../cryptography-key":6,"../polyfill":11,"../sodium-error":12,"../util":14,"buffer":74,"buffer/":17,"libsodium-wrappers":20,"typedarray-to-buffer":25}],5:[function(require,module,exports){ +(function (Buffer){ +let loaded = false; +let _sodium = {}; +const Backend = require('../backend'); +const CryptographyKey = require('../cryptography-key'); +const SodiumError = require('../sodium-error'); +const Util = require('../util'); +const toBuffer = require('typedarray-to-buffer'); +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +/* istanbul ignore next */ +module.exports = class SodiumNativeBackend extends Backend { + constructor(lib) { + super(lib); + this.sodium = lib; + this.backendName = 'SodiumNativeBackend'; + } + + static async init() { + if (!loaded) { + throw new SodiumError('sodium-native not installed'); + } + return new SodiumNativeBackend(_sodium); + } + + /** + * + * @param {String|Buffer} ciphertext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, assocData, nonce, key) { + const plaintext = Buffer.alloc(ciphertext.length - 16, 0); + this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt( + plaintext, + null, + await Util.toBuffer(ciphertext), + await Util.toBuffer(assocData), + await Util.toBuffer(nonce), + key.getBuffer() + ); + return plaintext; + } + + /** + * + * @param {String|Buffer} plaintext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, assocData, nonce, key) { + const ciphertext = Buffer.alloc(plaintext.length + 16, 0); + this.sodium.crypto_aead_xchacha20poly1305_ietf_encrypt( + ciphertext, + await Util.toBuffer(plaintext), + await Util.toBuffer(assocData), + null, + await Util.toBuffer(nonce), + key.getBuffer() + ); + return ciphertext; + } + + /** + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth(message, key) { + const output = Buffer.alloc(32); + this.sodium.crypto_auth( + output, + await Util.toBuffer(message), + key.getBuffer() + ); + return toBuffer(output); + } + + /** + * @param {Buffer} mac + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth_verify(mac, message, key) { + return this.sodium.crypto_auth_verify( + mac, + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box(plaintext, nonce, sk, pk) { + const ciphertext = Buffer.alloc(plaintext.length + 16); + this.sodium.crypto_box_easy( + ciphertext, + await Util.toBuffer(plaintext), + nonce, + pk.getBuffer(), + sk.getBuffer() + ); + return Util.toBuffer(ciphertext); + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + */ + async crypto_box_open(ciphertext, nonce, sk, pk) { + const plaintext = Buffer.alloc(ciphertext.length - 16); + const success = this.sodium.crypto_box_open_easy( + plaintext, + ciphertext, + nonce, + pk.getBuffer(), + sk.getBuffer() + ); + if (!success) { + throw new SodiumError('Decryption failed'); + } + return Util.toBuffer(plaintext); + } + + /** + * @param {string|Buffer} plaintext + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box_seal(plaintext, pk) { + const ciphertext = Buffer.alloc(plaintext.length + 48); + this.sodium.crypto_box_seal( + ciphertext, + await Util.toBuffer(plaintext), + pk.getBuffer() + ); + return Util.toBuffer(ciphertext); + } + + /** + * @param {Buffer} ciphertext + * @param {CryptographyKey} pk + * @param {CryptographyKey} sk + * @return {Promise} + */ + async crypto_box_seal_open(ciphertext, pk, sk) { + const plaintext = Buffer.alloc(ciphertext.length - 48); + const success = this.sodium.crypto_box_seal_open( + plaintext, + await Util.toBuffer(ciphertext), + pk.getBuffer(), + sk.getBuffer() + ); + if (!success) { + throw new SodiumError('Decryption failed'); + } + return Util.toBuffer(plaintext); + } + + /** + * @return {Promise} + */ + async crypto_box_keypair() { + const sK = Buffer.alloc(32, 0); + const pK = Buffer.alloc(32, 0); + this.sodium.crypto_box_keypair(sK, pK); + return new CryptographyKey( + Buffer.concat([pK, sK]) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash(message, key = null, outputLength = 32) { + const hash = Buffer.alloc(outputLength); + if (key) { + this.sodium.crypto_generichash(hash, await Util.toBuffer(message), key.getBuffer()); + } else { + this.sodium.crypto_generichash(hash, await Util.toBuffer(message)); + } + return hash; + } + + /** + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_init(key = null, outputLength = 32) { + const state = Buffer.alloc(this.CRYPTO_GENERICHASH_STATEBYTES); + if (key) { + this.sodium.crypto_generichash_init(state, key.getBuffer(), outputLength); + } else { + this.sodium.crypto_generichash_init(state, null, outputLength); + } + return state; + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @return {Promise<*>} + */ + async crypto_generichash_update(state, message) { + this.sodium.crypto_generichash_update(state, await Util.toBuffer(message)); + return state; + } + + /** + * @param {*} state + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_final(state, outputLength = 32) { + const output = Buffer.alloc(outputLength); + this.sodium.crypto_generichash_final(state, output); + return output; + } + + /** + * @param {number} length + * @param {number} subKeyId + * @param {string|Buffer} context + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_kdf_derive_from_key(length, subKeyId, context, key) { + const subkey = Buffer.alloc(length, 0); + this.sodium.crypto_kdf_derive_from_key( + subkey, + subKeyId | 0, + await Util.toBuffer(context), + key.getBuffer() + ); + return new CryptographyKey(subkey); + } + + /** + * @param {X25519PublicKey} clientPublicKey + * @param {X25519SecretKey} clientSecretKey + * @param {X25519PublicKey} serverPublicKey + * @return {Promise} + */ + async crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey) { + const rx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + const tx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + this.sodium.crypto_kx_client_session_keys( + rx, + tx, + clientPublicKey.getBuffer(), + clientSecretKey.getBuffer(), + serverPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(rx), + new CryptographyKey(tx) + ]; + } + + /** + * @param {X25519PublicKey} serverPublicKey + * @param {X25519SecretKey} serverSecretKey + * @param {X25519PublicKey} clientPublicKey + * @return {Promise} + */ + async crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey) { + const rx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + const tx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + this.sodium.crypto_kx_server_session_keys( + rx, + tx, + serverPublicKey.getBuffer(), + serverSecretKey.getBuffer(), + clientPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(rx), + new CryptographyKey(tx) + ]; + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_onetimeauth(message, key) { + const output = Buffer.alloc(16); + this.sodium.crypto_onetimeauth( + output, + await Util.toBuffer(message), + key.getBuffer() + ); + return output; + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + async crypto_onetimeauth_verify(message, key, tag) { + return this.sodium.crypto_onetimeauth_verify( + tag, + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {number} length + * @param {string|Buffer} password + * @param {Buffer} salt + * @param {number} opslimit + * @param {number} memlimit + * @param {number} algorithm + * @return {Promise} + */ + async crypto_pwhash(length, password, salt, opslimit, memlimit, algorithm) { + const hashed = Buffer.alloc(length, 0); + const bufPass = await Util.toBuffer(password); + const bufSalt = await Util.toBuffer(salt); + await new Promise((resolve, reject) => { + this.sodium.crypto_pwhash_async( + hashed, + bufPass, + bufSalt, + opslimit, + memlimit, + algorithm, + (e, res) => { + if (e) return reject(e); + return resolve(res); + } + ); + }); + return hashed; + } + + /** + * @param {string|Buffer} password + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str(password, opslimit, memlimit) { + const hashed = Buffer.alloc(128, 0); + const bufPass = await Util.toBuffer(password); + await new Promise((resolve, reject) => { + this.sodium.crypto_pwhash_str_async( + hashed, + bufPass, + opslimit, + memlimit, + (e, res) => { + if (e) return reject(e); + return resolve(res); + } + ); + }); + return hashed.toString(); + + } + + /** + * @param {string|Buffer} password + * @param {string|Buffer} hash + * @return {Promise} + */ + async crypto_pwhash_str_verify(password, hash) { + const allocated = Buffer.alloc(128, 0); + (await Util.toBuffer(hash)).copy(allocated, 0, 0); + const bufPass = await Util.toBuffer(password); + return new Promise((resolve, reject) => { + this.sodium.crypto_pwhash_str_verify_async( + allocated, + bufPass, + (e, res) => { + if (e) return reject(e); + return resolve(res); + } + ); + }); + } + + /** + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + const allocated = Buffer.alloc(128, 0); + (await Util.toBuffer(hash)).copy(allocated, 0, 0); + return this.sodium.crypto_pwhash_str_needs_rehash( + allocated, + opslimit, + memlimit + ); + } + + /** + * @param {X25519SecretKey} secretKey + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_scalarmult(secretKey, publicKey) { + const shared = Buffer.alloc(32); + this.sodium.crypto_scalarmult(shared, secretKey.getBuffer(), publicKey.getBuffer()); + return new CryptographyKey( + await Util.toBuffer(shared) + ); + } + + /** + * + * @param {CryptographyKey} secretKey + * @return {Promise} + */ + async crypto_scalarmult_base(secretKey) { + const buf = Buffer.alloc(32); + this.sodium.crypto_scalarmult_base(buf, secretKey.getBuffer()); + return buf; + } + + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox(plaintext, nonce, key) { + const encrypted = Buffer.alloc(plaintext.length + 16); + this.sodium.crypto_secretbox_easy( + encrypted, + await Util.toBuffer(plaintext), + nonce, + key.getBuffer() + ); + return encrypted; + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_shorthash(message, key) { + const output = Buffer.alloc(8); + this.sodium.crypto_shorthash( + output, + await Util.toBuffer(message), + key.getBuffer() + ); + return output; + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox_open(ciphertext, nonce, key) { + const decrypted = Buffer.alloc(ciphertext.length - 16); + if (!this.sodium.crypto_secretbox_open_easy( + decrypted, + ciphertext, + nonce, + key.getBuffer() + )) { + throw new SodiumError('Decryption failure'); + } + return decrypted; + } + + /** + * @param {CryptographyKey} key + * @return {Promise} [state, header] + */ + async crypto_secretstream_xchacha20poly1305_init_push(key) { + const state = Buffer.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES); + const header = Buffer.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES); + this.sodium.randombytes_buf(header); + this.sodium.crypto_secretstream_xchacha20poly1305_init_push(state, header, key.getBuffer()); + return [state, header]; + } + + /** + * @param {Buffer} header + * @param {CryptographyKey} key + * @return {Promise<*>} Returns the opaque state object + */ + async crypto_secretstream_xchacha20poly1305_init_pull(header, key) { + if (header.length !== this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) { + throw new SodiumError(`Header must be ${this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES} bytes long`); + } + const state = Buffer.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES); + this.sodium.crypto_secretstream_xchacha20poly1305_init_pull(state, header, key.getBuffer()); + return state; + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_push(state, message, ad = '', tag = 0) { + const ciphertext = Buffer.alloc(message.length + this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES); + this.sodium.crypto_secretstream_xchacha20poly1305_push( + state, + ciphertext, + await Util.toBuffer(message), + ad.length > 0 ? (await Util.toBuffer(ad)) : null, + Buffer.from([tag]) + ); + return ciphertext; + } + + /** + * @param {*} state + * @param {Buffer} ciphertext + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad = '', tag = 0) { + if (ciphertext.length < this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES) { + throw new SodiumError('Invalid ciphertext size'); + } + const plaintext = Buffer.alloc(ciphertext.length - this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES); + this.sodium.crypto_secretstream_xchacha20poly1305_pull( + state, + plaintext, + Buffer.from([tag]), + ciphertext, + ad.length > 0 ? (await Util.toBuffer(ad)) : null + ); + return plaintext; + } + + /** + * @param {*} state + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_rekey(state) { + this.sodium.crypto_secretstream_xchacha20poly1305_rekey(state); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign(message, secretKey) { + const signed = Buffer.alloc(message.length + 64); + this.sodium.crypto_sign(signed, await Util.toBuffer(message), secretKey.getBuffer()); + return signed; + } + + /** + * @param {Buffer} signedMessage, + * @param {Ed25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_sign_open(signedMessage, publicKey) { + const original = Buffer.alloc(signedMessage.length - 64); + this.sodium.crypto_sign_open(original, await Util.toBuffer(signedMessage), publicKey.getBuffer()); + return original; + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign_detached(message, secretKey) { + const signature = Buffer.alloc(64); + this.sodium.crypto_sign_detached(signature, await Util.toBuffer(message), secretKey.getBuffer()); + return signature; + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @param {Buffer} signature + * @return {Promise} + */ + async crypto_sign_verify_detached(message, publicKey, signature) { + return this.sodium.crypto_sign_verify_detached( + signature, + await Util.toBuffer(message), + publicKey.getBuffer() + ); + } + + /** + * @return {Promise} + */ + async crypto_sign_keypair() { + const sK = Buffer.alloc(64, 0); + const pK = Buffer.alloc(32, 0); + this.sodium.crypto_sign_keypair(pK, sK); + return new CryptographyKey( + Buffer.concat([sK, pK]) + ); + } + + /** + * @param {Buffer} seed + * @return {Promise} + */ + async crypto_sign_seed_keypair(seed) { + const sK = Buffer.alloc(64, 0); + const pK = Buffer.alloc(32, 0); + this.sodium.crypto_sign_seed_keypair(pK, sK, seed); + return new CryptographyKey( + Buffer.concat([sK, pK]) + ); + } + + /** + * @param {Ed25519SecretKey} sk + * @return {Promise} + */ + async crypto_sign_ed25519_sk_to_curve25519(sk) { + const xsk = Buffer.alloc(32); + this.sodium.crypto_sign_ed25519_sk_to_curve25519(xsk, sk.getBuffer()); + return xsk; + } + + /** + * @param {Ed25519PublicKey} pk + * @return {Promise} + */ + async crypto_sign_ed25519_pk_to_curve25519(pk) { + const xpk = Buffer.alloc(32); + this.sodium.crypto_sign_ed25519_pk_to_curve25519(xpk, pk.getBuffer()); + return xpk; + } + + /** + * @param {number} length + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream(length, nonce, key) { + const output = Buffer.alloc(length); + this.sodium.crypto_stream( + output, + await Util.toBuffer(nonce), + key.getBuffer() + ); + return output; + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream_xor(plaintext, nonce, key) { + const output = Buffer.alloc(plaintext.length); + this.sodium.crypto_stream_xor( + output, + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + key.getBuffer() + ); + return output; + } + + /** + * @param {number} number + * @return {Promise} + */ + async randombytes_buf(number) { + let buf = Buffer.alloc(number); + this.sodium.randombytes_buf(buf); + return buf; + } + + /** + * @param {number} upperBound + * @return {Promise} + */ + async randombytes_uniform(upperBound) { + return this.sodium.randombytes_uniform(upperBound); + } + + /** + * @param {Uint8Array} val + * @param {Uint8Array} addv + * @return {Promise} + */ + async sodium_add(val, addv) { + const buf = await Util.cloneBuffer(val); + this.sodium.sodium_add(buf, addv); + return buf; + } + + /** + * @param {Buffer} input + * @return {Promise} + */ + async sodium_bin2hex(input) { + let str = "", b, c, x; + for (let i = 0; i < input.length; i++) { + c = input[i] & 0xf; + b = input[i] >>> 4; + x = + ((87 + c + (((c - 10) >> 8) & ~38)) << 8) | + (87 + b + (((b - 10) >> 8) & ~38)); + str += String.fromCharCode(x & 0xff) + String.fromCharCode(x >>> 8); + } + return str; + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_compare(b1, b2) { + return this.sodium.sodium_compare(b1, b2); + } + + /** + * @param {Buffer|string} hex + * @param {string|null} ignore + * @return {Promise} + */ + async sodium_hex2bin(hex, ignore = null) { + let bin_pos = 0, + hex_pos = 0, + c = 0, + c_acc = 0, + c_alpha0 = 0, + c_alpha = 0, + c_num0 = 0, + c_num = 0, + c_val = 0, + state = 0; + const bin = Buffer.alloc(hex.length >> 1, 0); + + while (hex_pos < hex.length) { + c = hex.charCodeAt(hex_pos); + c_num = c ^ 48; + c_num0 = (c_num - 10) >> 8; + c_alpha = (c & ~32) - 55; + c_alpha0 = ((c_alpha - 10) ^ (c_alpha - 16)) >> 8; + if ((c_num0 | c_alpha0) === 0) { + if (ignore && state === 0 && ignore.indexOf(c) >= 0) { + hex_pos++; + continue; + } + break; + } + c_val = (c_num0 & c_num) | (c_alpha0 & c_alpha); + if (state === 0) { + c_acc = c_val * 16; + } else { + bin[bin_pos++] = c_acc | c_val; + } + state = ~state; + hex_pos++; + } + return bin; + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_increment(buf) { + return this.sodium.sodium_increment(buf); + } + + /** + * @param {Buffer} buf + * @param {number} len + * @return {Promise} + */ + async sodium_is_zero(buf, len) { + return this.sodium.sodium_is_zero(buf, len); + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_memcmp(b1, b2) { + return this.sodium.sodium_memcmp(b1, b2); + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_memzero(buf) { + this.sodium.sodium_memzero(buf); + } + + /** + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_pad(buf, blockSize) { + buf = await Util.toBuffer(buf); + let length = buf.length + (buf.length % blockSize); + if (length < blockSize) { + length += blockSize; + } + const padded = Buffer.alloc(length + 100); + buf.copy(padded, 0, 0); + const sliceto = this.sodium.sodium_pad(padded, buf.length, blockSize); + return padded.slice(0, sliceto); + } + + /** + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_unpad(buf, blockSize) { + const outlen = this.sodium.sodium_unpad(buf, buf.length, blockSize); + return buf.slice(0, outlen); + } +}; + +}).call(this,require("buffer").Buffer) +},{"../backend":3,"../cryptography-key":6,"../sodium-error":12,"../util":14,"buffer":74,"buffer/":17,"typedarray-to-buffer":25}],6:[function(require,module,exports){ +(function (Buffer){ +"use strict"; + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} +module.exports = class CryptographyKey { + /** + * Note: We use Object.defineProperty() to hide the buffer inside of the + * CryptographyKey object to prevent accidental leaks. + * + * @param {Buffer} buf + */ + constructor(buf) { + if (!Buffer.isBuffer(buf)) { + throw new TypeError('Argument 1 must be an instance of Buffer.'); + } + Object.defineProperty(this, 'buffer', { + enumerable: false, + value: buf.slice() + }); + } + + /** + * @return {CryptographyKey} + */ + static from() { + return new CryptographyKey(Buffer.from(...arguments)); + } + + /** + * @return {boolean} + */ + isEd25519Key() { + return false; + } + + /** + * @return {boolean} + */ + isX25519Key() { + return false; + } + + /** + * @return {boolean} + */ + isPublicKey() { + return false; + } + + /** + * @return {Number} + */ + getLength() { + return this.buffer.length; + } + + /** + * @return {Buffer} + */ + getBuffer() { + return this.buffer; + } + + /** + * @param {string} encoding + */ + toString(encoding = 'utf-8') { + /* istanbul ignore if */ + return this.getBuffer().toString(encoding); + } + + /** + * @return {Buffer} + */ + slice() { + return this.buffer.slice(...arguments); + } +}; + +}).call(this,require("buffer").Buffer) +},{"buffer":74,"buffer/":17}],7:[function(require,module,exports){ +(function (Buffer){ +const CryptographyKey = require('../cryptography-key'); + +class Ed25519PublicKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 32) { + throw new Error('Ed25519 public keys must be 32 bytes long'); + } + super(buf); + this.keyType = 'ed25519'; + this.publicKey = true; + } + /** + * @return {Ed25519PublicKey} + */ + static from() { + return new Ed25519PublicKey(Buffer.from(...arguments)); + } + + isEd25519Key() { + return true; + } + + isPublicKey() { + return true; + } +} + +module.exports = Ed25519PublicKey; + +}).call(this,require("buffer").Buffer) +},{"../cryptography-key":6,"buffer":74}],8:[function(require,module,exports){ +(function (Buffer){ +const CryptographyKey = require('../cryptography-key'); + +class Ed25519SecretKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 64) { + throw new Error('Ed25519 secret keys must be 64 bytes long'); + } + super(buf); + this.keyType = 'ed25519'; + this.publicKey = false; + } + + /** + * @return {Ed25519SecretKey} + */ + static from() { + return new Ed25519SecretKey(Buffer.from(...arguments)); + } + + isEd25519Key() { + return true; + } + + isPublicKey() { + return false; + } +} + +module.exports = Ed25519SecretKey; +}).call(this,require("buffer").Buffer) +},{"../cryptography-key":6,"buffer":74}],9:[function(require,module,exports){ +(function (Buffer){ +const CryptographyKey = require('../cryptography-key'); + +class X25519PublicKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 32) { + throw new Error('X25519 public keys must be 32 bytes long'); + } + super(buf); + this.keyType = 'x25519'; + this.publicKey = true; + } + + /** + * @return {X25519PublicKey} + */ + static from() { + return new X25519PublicKey(Buffer.from(...arguments)); + } + + isX25519Key() { + return true; + } + + isPublicKey() { + return true; + } +} + +module.exports = X25519PublicKey; + +}).call(this,require("buffer").Buffer) +},{"../cryptography-key":6,"buffer":74}],10:[function(require,module,exports){ +(function (Buffer){ +const CryptographyKey = require('../cryptography-key'); + +class X25519SecretKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 32) { + throw new Error('X25519 secret keys must be 32 bytes long'); + } + super(buf); + this.keyType = 'x25519'; + this.publicKey = false; + } + + /** + * @return {X25519SecretKey} + */ + static from() { + return new X25519SecretKey(Buffer.from(...arguments)); + } + + isX25519Key() { + return true; + } + + isPublicKey() { + return false; + } +} + +module.exports = X25519SecretKey; + +}).call(this,require("buffer").Buffer) +},{"../cryptography-key":6,"buffer":74}],11:[function(require,module,exports){ +(function (Buffer){ +"use strict"; +const crypto = require('crypto'); +const Poly1305 = require('poly1305-js'); +const Util = require('./util'); +const XSalsa20 = require('xsalsa20'); + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +module.exports = class SodiumPolyfill { + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + static async crypto_onetimeauth(message, key) { + return Poly1305.onetimeauth( + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + static async crypto_onetimeauth_verify(message, key, tag) { + return Poly1305.onetimeauth_verify( + await Util.toBuffer(message), + key.getBuffer(), + await Util.toBuffer(tag) + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + static async crypto_stream_xor(plaintext, nonce, key) { + const stream = XSalsa20(nonce, key.getBuffer()); + const output = stream.update(plaintext); + stream.finalize(); + return Util.toBuffer(output); + } + + /** + * Polyfill crypto_pwhash_str_needs_rehash() for bindings that don't + * include this (somewhat new) helper function. + * + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + static async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + const pwhash = (await Util.toBuffer(hash)).toString('utf-8'); + const pieces = pwhash.split('$'); + const expect = 'm=' + (memlimit >> 10) + ',t=' + opslimit + ',p=1'; + if (expect.length !== pieces[3].length) { + return true; + } + return !crypto.timingSafeEqual( + await Util.toBuffer(expect), + await Util.toBuffer(pieces[3]) + ); + } +}; + +}).call(this,require("buffer").Buffer) +},{"./util":14,"buffer":74,"buffer/":17,"crypto":82,"poly1305-js":22,"xsalsa20":26}],12:[function(require,module,exports){ +module.exports = class SodiumError extends Error {}; + +},{}],13:[function(require,module,exports){ +(function (Buffer){ +const Backend = require('./backend'); +const CryptographyKey = require('./cryptography-key'); +const Ed25519SecretKey = require('./keytypes/ed25519sk'); +const Ed25519PublicKey = require('./keytypes/ed25519pk'); +const LibsodiumWrappersBackend = require('./backend/libsodium-wrappers'); +const SodiumError = require('./sodium-error'); +const X25519PublicKey = require('./keytypes/x25519pk'); +const X25519SecretKey = require('./keytypes/x25519sk'); +const Util = require('./util'); + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +class SodiumPlus { + constructor(backend) { + /* istanbul ignore if */ + if (!(backend instanceof Backend)) { + throw new TypeError('Backend object must implement the backend function'); + } + this.backend = backend; + Util.populateConstants(this); + } + + /** + * Returns the name of the current active backend. + * This method is NOT async. + * + * @return {string} + */ + getBackendName() { + return this.backend.backendName; + } + + /** + * Is this powered by sodium-native? + * This method is NOT async. + * + * @return {boolean} + */ + isSodiumNative() { + return false; + } + + /** + * Is this powered by libsodium-wrappers? + * This method is NOT async. + * + * @return {boolean} + */ + isLibsodiumWrappers() { + return (this.backend instanceof LibsodiumWrappersBackend); + } + + /** + * Automatically select a backend. + * + * @return {Promise} + */ + static async auto() { + let backend = await LibsodiumWrappersBackend.init(); + Util.populateConstants(backend); + return new SodiumPlus(backend); + } + + /** + * If our backend isn't defined, it will trigger an autoload. + * + * Mostly used internally. `await SodiumPlus.auto()` provides the same + * exact guarantee as this method. + * + * @return {Promise} + */ + async ensureLoaded() { + /* istanbul ignore if */ + if (typeof (this.backend) === 'undefined') { + try { + await SodiumPlus.auto(); + } catch (e) { + this.backend = await LibsodiumWrappersBackend.init(); + } + } + } + + /** + * Decrypt a message (and optional associated data) with XChaCha20-Poly1305 + * + * @param {String|Buffer} ciphertext + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @param {String|Buffer} assocData + * @return {Promise} + * @throws {SodiumError} + */ + async crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, nonce, key, assocData = '') { + await this.ensureLoaded(); + if (nonce.length !== 24) { + throw new SodiumError('Argument 2 must be 24 bytes'); + } + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 3 must be an instance of CryptographyKey'); + } + return await this.backend.crypto_aead_xchacha20poly1305_ietf_decrypt( + await Util.toBuffer(ciphertext), + assocData.length > 0 ? await Util.toBuffer(assocData) : null, + await Util.toBuffer(nonce), + key + ); + } + + /** + * Encrypt a message (and optional associated data) with XChaCha20-Poly1305. + * + * Throws a SodiumError if an invalid ciphertext/AAD is provided for this + * nonce and key. + * + * @param {String|Buffer} plaintext + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @param {String|Buffer} assocData + * @return {Promise} + * @throws {SodiumError} + */ + async crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, nonce, key, assocData = '') { + await this.ensureLoaded(); + if (nonce.length !== 24) { + throw new SodiumError('Argument 2 must be 24 bytes'); + } + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 3 must be an instance of CryptographyKey'); + } + + return await this.backend.crypto_aead_xchacha20poly1305_ietf_encrypt( + await Util.toBuffer(plaintext), + assocData.length > 0 ? await Util.toBuffer(assocData) : null, + await Util.toBuffer(nonce), + key + ); + } + + /** + * Generate an XChaCha20-Poly1305 key. + * + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_keygen() { + return new CryptographyKey(await this.backend.randombytes_buf(32)); + } + + /** + * Get an authenticator for a message for a given key. + * + * Algorithm: HMAC-SHA512 truncated to 32 bytes. + * + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth(message, key) { + await this.ensureLoaded(); + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + await this.ensureLoaded(); + return await this.backend.crypto_auth( + await Util.toBuffer(message), + key + ); + } + + /** + * @return {Promise} + */ + async crypto_auth_keygen() { + return new CryptographyKey(await this.backend.randombytes_buf(32)); + } + + /** + * Verify an authenticator for a message for a given key. + * + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} mac + * @return {Promise} + */ + async crypto_auth_verify(message, key, mac) { + await this.ensureLoaded(); + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + await this.ensureLoaded(); + return await this.backend.crypto_auth_verify( + await Util.toBuffer(mac), + await Util.toBuffer(message), + key + ); + } + + /** + * Public-key authenticated encryption. + * + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {X25519SecretKey} myPrivateKey + * @param {X25519PublicKey} theirPublicKey + * @return {Promise} + */ + async crypto_box(plaintext, nonce, myPrivateKey, theirPublicKey) { + await this.ensureLoaded(); + if (!(myPrivateKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 3 must be an instance of X25519SecretKey'); + } + if (!(theirPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 4 must be an instance of X25519PublicKey'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + return this.backend.crypto_box( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + myPrivateKey, + theirPublicKey + ); + } + + /** + * Public-key authenticated decryption. + * + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {X25519SecretKey} myPrivateKey + * @param {X25519PublicKey} theirPublicKey + * @return {Promise} + */ + async crypto_box_open(ciphertext, nonce, myPrivateKey, theirPublicKey) { + await this.ensureLoaded(); + if (!(myPrivateKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 3 must be an instance of X25519SecretKey'); + } + if (!(theirPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 4 must be an instance of X25519PublicKey'); + } + ciphertext = await Util.toBuffer(ciphertext); + if (ciphertext.length < 16) { + throw new SodiumError('Ciphertext must be a buffer of at least 16 bytes'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + return this.backend.crypto_box_open( + ciphertext, + nonce, + myPrivateKey, + theirPublicKey + ); + } + + /** + * @return {Promise} + */ + async crypto_box_keypair() { + await this.ensureLoaded(); + return this.backend.crypto_box_keypair(); + } + + /** + * Combine two X25519 keys (secret, public) into a keypair object. + * + * @param {X25519SecretKey} sKey + * @param {X25519PublicKey} pKey + * @return {Promise} + */ + async crypto_box_keypair_from_secretkey_and_publickey(sKey, pKey) { + await this.ensureLoaded(); + if (!(sKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + if (!(pKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + return await this.backend.crypto_box_keypair_from_secretkey_and_publickey(sKey, pKey); + } + + /** + * Extract the secret key from an X25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_box_secretkey(keypair) { + if (keypair.getLength()!== 64) { + throw new SodiumError('Keypair must be 64 bytes'); + } + return new X25519SecretKey( + Buffer.from(keypair.getBuffer().slice(0, 32)) + ); + } + + /** + * Extract the public key from an X25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_box_publickey(keypair) { + if (keypair.getLength() !== 64) { + throw new SodiumError('Keypair must be 64 bytes'); + } + return new X25519PublicKey( + Buffer.from(keypair.getBuffer().slice(32, 64)) + ); + } + + /** + * Derive the public key from a given X25519 secret key. + * + * @param {X25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_box_publickey_from_secretkey(secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + return new X25519PublicKey( + await this.backend.crypto_scalarmult_base(secretKey) + ); + } + + /** + * Anonymous public-key encryption. (Message integrity is still assured.) + * + * @param {string|Buffer} plaintext + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_box_seal(plaintext, publicKey) { + await this.ensureLoaded(); + if (!(publicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + return await this.backend.crypto_box_seal(plaintext, publicKey); + } + + /** + * Anonymous public-key decryption. (Message integrity is still assured.) + * + * @param {Buffer} ciphertext + * @param {X25519PublicKey} publicKey + * @param {X25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_box_seal_open(ciphertext, publicKey, secretKey) { + await this.ensureLoaded(); + if (!(publicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 3 must be an instance of X25519SecretKey'); + } + return await this.backend.crypto_box_seal_open( + await Util.toBuffer(ciphertext), + publicKey, + secretKey + ); + } + + /** + * Generic-purpose cryptographic hash. + * + * @param {string|Buffer} message + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash(message, key = null, outputLength = 32) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash(message, key, outputLength); + } + + /** + * Initialize a BLAKE2 hash context for stream hashing. + * + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_init(key = null, outputLength = 32) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash_init(key, outputLength); + } + + + /** + * Update the BLAKE2 hash state with a block of data. + * + * @param {*} state + * @param {string|Buffer} message + * @return {Promise<*>} + */ + async crypto_generichash_update(state, message) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash_update(state, message); + } + + /** + * Obtain the final BLAKE2 hash output. + * + * @param {*} state + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_final(state, outputLength = 32) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash_final(state, outputLength); + } + + /** + * Generate a 256-bit random key for BLAKE2. + * + * @return {Promise} + */ + async crypto_generichash_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_GENERICHASH_KEYBYTES) + ); + } + + /** + * Derive a subkey from a master key. + * + * @param {number} length + * @param {number} subKeyId + * @param {string|Buffer} context + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_kdf_derive_from_key(length, subKeyId, context, key) { + await this.ensureLoaded(); + if (length < 1) { + throw new SodiumError('Length must be a positive integer.'); + } + if (subKeyId < 0) { + throw new SodiumError('Key ID must be an unsigned integer'); + } + return await this.backend.crypto_kdf_derive_from_key( + length, + subKeyId, + context, + key + ); + } + + /** + * Generate a 256-bit random key for our KDF. + * + * @return {Promise} + */ + async crypto_kdf_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_KDF_KEYBYTES) + ); + } + + /** + * This is functionally identical to crypto_box_keypair(). + * + * @return {Promise} + */ + async crypto_kx_keypair() { + return this.crypto_box_keypair(); + } + + /** + * Generate an X25519 keypair from a seed. + * + * @param {string|Buffer} seed + * @return {Promise} + */ + async crypto_kx_seed_keypair(seed) { + await this.ensureLoaded(); + const sk = await this.backend.crypto_generichash(seed, null, this.CRYPTO_KX_SECRETKEYBYTES); + const pk = await this.backend.crypto_scalarmult_base(new CryptographyKey(sk)); + return new CryptographyKey(Buffer.concat([sk, pk])); + } + + /** + * Perform a key exchange from the client's perspective. + * + * Returns an array of two CryptographyKey objects. + * + * The first is meant for data sent from the server to the client (incoming decryption). + * The second is meant for data sent from the client to the server (outgoing encryption). + * + * @param {X25519PublicKey} clientPublicKey + * @param {X25519SecretKey} clientSecretKey + * @param {X25519PublicKey} serverPublicKey + * @return {Promise} + */ + async crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey) { + await this.ensureLoaded(); + if (!(clientPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 1 must be an instance of X25519PublicKey'); + } + if (!(clientSecretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of X25519SecretKey'); + } + if (!(serverPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 3 must be an instance of X25519PublicKey'); + } + return this.backend.crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey); + } + + /** + * Perform a key exchange from the server's perspective. + * + * Returns an array of two CryptographyKey objects. + * + * The first is meant for data sent from the client to the server (incoming decryption). + * The second is meant for data sent from the server to the client (outgoing encryption). + * + * @param {X25519PublicKey} serverPublicKey + * @param {X25519SecretKey} serverSecretKey + * @param {X25519PublicKey} clientPublicKey + * @return {Promise} + */ + async crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey) { + await this.ensureLoaded(); + if (!(serverPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 1 must be an instance of X25519PublicKey'); + } + if (!(serverSecretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of X25519SecretKey'); + } + if (!(clientPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 3 must be an instance of X25519PublicKey'); + } + return this.backend.crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_onetimeauth(message, key) { + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + return await this.backend.crypto_onetimeauth(await Util.toBuffer(message), key); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + async crypto_onetimeauth_verify(message, key, tag) { + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + return await this.backend.crypto_onetimeauth_verify( + await Util.toBuffer(message), + key, + await Util.toBuffer(tag) + ); + } + + /** + * @return {Promise} + */ + async crypto_onetimeauth_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(32) + ); + } + + /** + * Derive a cryptography key from a password and salt. + * + * @param {number} length + * @param {string|Buffer} password + * @param {Buffer} salt + * @param {number} opslimit + * @param {number} memlimit + * @param {number|null} algorithm + * @return {Promise} + */ + async crypto_pwhash(length, password, salt, opslimit, memlimit, algorithm = null) { + await this.ensureLoaded(); + /* istanbul ignore if */ + if (!algorithm) { + algorithm = this.CRYPTO_PWHASH_ALG_DEFAULT; + } + return new CryptographyKey( + await this.backend.crypto_pwhash( + length, + await Util.toBuffer(password), + await Util.toBuffer(salt), + opslimit, + memlimit, + algorithm + ) + ); + } + + /** + * Get a password hash (in a safe-for-storage format) + * + * @param {string|Buffer} password + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str(password, opslimit, memlimit) { + await this.ensureLoaded(); + return await this.backend.crypto_pwhash_str(password, opslimit, memlimit); + } + + /** + * Verify a password against a known password hash + * + * @param {string|Buffer} password + * @param {string|Buffer} hash + * @return {Promise} + */ + async crypto_pwhash_str_verify(password, hash) { + await this.ensureLoaded(); + return await this.backend.crypto_pwhash_str_verify(password, hash); + } + + /** + * Does this password need to be rehashed? + * + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + await this.ensureLoaded(); + return await this.backend.crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit); + } + + /** + * Elliptic Curve Diffie-Hellman key exchange + * + * @param {X25519SecretKey} secretKey + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_scalarmult(secretKey, publicKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + if (!(publicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + return await this.backend.crypto_scalarmult(secretKey, publicKey); + } + + /** + * Generate an X25519PublicKey from an X25519SecretKey + * + * @param {X25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_scalarmult_base(secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + return new X25519PublicKey( + await this.backend.crypto_scalarmult_base(secretKey) + ); + } + + /** + * Shared-key authenticated encryption + * + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox(plaintext, nonce, key) { + await this.ensureLoaded(); + if (key.isEd25519Key() || key.isX25519Key()) { + throw new TypeError('Argument 3 must not be an asymmetric key'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + + return await this.backend.crypto_secretbox( + plaintext, + nonce, + key + ); + } + + /** + * Shared-key authenticated decryption + * + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox_open(ciphertext, nonce, key) { + await this.ensureLoaded(); + if (key.isEd25519Key() || key.isX25519Key()) { + throw new TypeError('Argument 3 must not be an asymmetric key'); + } + ciphertext = await Util.toBuffer(ciphertext); + if (ciphertext.length < 16) { + throw new SodiumError('Ciphertext must be a buffer of at least 16 bytes'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + return await this.backend.crypto_secretbox_open( + ciphertext, + nonce, + key + ); + } + + /** + * Generate a key for shared-key authenticated encryption. + * + * @return {Promise} + */ + async crypto_secretbox_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_SECRETBOX_KEYBYTES) + ); + } + + /** + * Internalize the internal state and a random header for stream encryption. + * + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_init_push(key) { + await this.ensureLoaded(); + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Key must be an instance of CryptographyKey'); + } + if (key.getLength() !== 32) { + throw new SodiumError('crypto_secretstream keys must be 32 bytes long'); + } + const [state, header] = await this.backend.crypto_secretstream_xchacha20poly1305_init_push(key); + return Object.freeze({ + header: header, + push: this.crypto_secretstream_xchacha20poly1305_push.bind(this, state), + rekey: this.crypto_secretstream_xchacha20poly1305_rekey.bind(this, state) + }); + } + + /** + * Initialize the internal state for stream decryption. + * + * @param {Buffer} header + * @param {CryptographyKey} key + * @return {Promise<*>} + */ + async crypto_secretstream_xchacha20poly1305_init_pull(key, header) { + await this.ensureLoaded(); + header = await Util.toBuffer(header); + if (header.length !== 24) { + throw new SodiumError('crypto_secretstream headers must be 24 bytes long'); + } + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Key must be an instance of CryptographyKey'); + } + if (key.getLength() !== 32) { + throw new SodiumError('crypto_secretstream keys must be 32 bytes long'); + } + const state = await this.backend.crypto_secretstream_xchacha20poly1305_init_pull(header, key); + return Object.freeze({ + pull: this.crypto_secretstream_xchacha20poly1305_pull.bind(this, state) + }); + } + + /** + * Stream encryption. + * + * @param {*} state + * @param {string|Buffer} message + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_push(state, message, ad = '', tag = 0) { + await this.ensureLoaded(); + return this.backend.crypto_secretstream_xchacha20poly1305_push(state, message, ad, tag); + } + + /** + * Stream decryption. + * + * @param {*} state + * @param {Buffer} ciphertext + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad = '', tag = 0) { + await this.ensureLoaded(); + return this.backend.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad, tag); + } + + /** + * Deterministic rekeying. + * + * @param {*} state + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_rekey(state) { + await this.ensureLoaded(); + await this.backend.crypto_secretstream_xchacha20poly1305_rekey(state); + } + + /** + * Generate a key for shared-key authenticated encryption. + * + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES) + ); + } + + /** + * Calculate a fast hash for short inputs. + * + * Algorithm: SipHash-2-4 + * + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_shorthash(message, key) { + await this.ensureLoaded(); + return await this.backend.crypto_shorthash(await Util.toBuffer(message), key); + } + + /** + * @return {Promise} + */ + async crypto_shorthash_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_SHORTHASH_KEYBYTES) + ); + } + + /** + * Returns a signed message. + * + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign(message, secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof Ed25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519SecretKey'); + } + return this.backend.crypto_sign(message, secretKey); + } + + /** + * Given a signed message, verify the Ed25519 signature. If it matches, return the + * bare message (no signature). + * + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_sign_open(message, publicKey) { + await this.ensureLoaded(); + if (!(publicKey instanceof Ed25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519PublicKey'); + } + return this.backend.crypto_sign_open(message, publicKey); + } + + /** + * Returns the Ed25519 signature of the message, for the given secret key. + * + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign_detached(message, secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof Ed25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519SecretKey'); + } + return this.backend.crypto_sign_detached(message, secretKey); + } + + /** + * Returns true if the Ed25519 signature is valid for a given message and public key. + * + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @param {Buffer} signature + * @return {Promise} + */ + async crypto_sign_verify_detached(message, publicKey, signature) { + await this.ensureLoaded(); + if (!(publicKey instanceof Ed25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519PublicKey'); + } + return this.backend.crypto_sign_verify_detached(message, publicKey, signature); + } + + /** + * Extract the secret key from an Ed25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_sign_secretkey(keypair) { + if (keypair.getLength() !== 96) { + throw new SodiumError('Keypair must be 96 bytes'); + } + return new Ed25519SecretKey( + await Util.toBuffer( + keypair.getBuffer().slice(0, 64) + ) + ); + } + + /** + * Extract the public key from an Ed25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_sign_publickey(keypair) { + if (keypair.getLength() !== 96) { + throw new SodiumError('Keypair must be 96 bytes'); + } + return new Ed25519PublicKey( + keypair.getBuffer().slice(64, 96) + ); + } + + /** + * Generate an Ed25519 keypair object. + * + * @return {Promise} + */ + async crypto_sign_keypair() { + await this.ensureLoaded(); + return this.backend.crypto_sign_keypair(); + } + + /** + * Generate an Ed25519 keypair object from a seed. + * + * @param {Buffer} seed + * @return {Promise} + */ + async crypto_sign_seed_keypair(seed) { + await this.ensureLoaded(); + if (seed instanceof CryptographyKey) { + seed = seed.getBuffer(); + } + seed = await Util.toBuffer(seed); + if (seed.length !== 32) { + throw new SodiumError(`Seed must be 32 bytes long; got ${seed.length}`); + } + return this.backend.crypto_sign_seed_keypair(seed); + } + + /** + * Obtain a birationally equivalent X25519 secret key, + * given an Ed25519 secret key. + * + * @param {Ed25519SecretKey} sk + * @return {Promise} + */ + async crypto_sign_ed25519_sk_to_curve25519(sk) { + await this.ensureLoaded(); + return new X25519SecretKey( + await this.backend.crypto_sign_ed25519_sk_to_curve25519(sk) + ); + } + + /** + * Obtain a birationally equivalent X25519 public key, + * given an Ed25519 public key. + * + * @param {Ed25519PublicKey} pk + * @return {Promise} + */ + async crypto_sign_ed25519_pk_to_curve25519(pk) { + await this.ensureLoaded(); + return new X25519PublicKey( + await this.backend.crypto_sign_ed25519_pk_to_curve25519(pk) + ); + } + + /** + * Generate an arbitrary number of pseudorandom bytes from a given + * nonce and key. + * + * @param {number} length + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream(length, nonce, key) { + await this.ensureLoaded(); + return this.backend.crypto_stream(length, nonce, key); + } + + /** + * Encrypts a string (without authentication). + * + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream_xor(plaintext, nonce, key) { + await this.ensureLoaded(); + return this.backend.crypto_stream_xor(plaintext, nonce, key); + } + /** + * Generate a key for stream ciphers. + * + * @return {Promise} + */ + async crypto_stream_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_STREAM_KEYBYTES) + ); + } + + /** + * Returns a buffer filled with random bytes. + * + * @param {number} num + * @return {Promise} + */ + async randombytes_buf(num) { + await this.ensureLoaded(); + return await this.backend.randombytes_buf(num); + } + + /** + * Generate an integer between 0 and upperBound (non-inclusive). + * + * For example, randombytes_uniform(10) returns an integer between 0 and 9. + * + * @param {number} upperBound + * @return {Promise} + */ + async randombytes_uniform(upperBound) { + await this.ensureLoaded(); + return this.backend.randombytes_uniform(upperBound); + } + + /** + * Add two buffers (little-endian). Returns the value. + * + * @param {Buffer} val + * @param {Buffer} addv + * @return {Promise} + */ + async sodium_add(val, addv) { + await this.ensureLoaded(); + return await this.backend.sodium_add( + await Util.toBuffer(val), + await Util.toBuffer(addv) + ); + } + + /** + * Convert to hex. + * + * @param {Buffer} decoded + * @return {Promise} + */ + async sodium_bin2hex(decoded) { + await this.ensureLoaded(); + return this.backend.sodium_bin2hex(decoded); + } + + /** + * Compare two buffers in constant time. + * + * Returns -1 if b1 is less than b2. + * Returns 1 if b1 is greater than b2. + * Returns 0 if b1 is equal to b2. + * + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_compare(b1, b2) { + await this.ensureLoaded(); + return this.backend.sodium_compare(b1, b2); + } + /** + * Convert to hex. + * + * @param {Buffer|string} encoded + * @return {Promise} + */ + async sodium_hex2bin(encoded) { + await this.ensureLoaded(); + return this.backend.sodium_hex2bin(encoded); + } + + /** + * Increment a buffer (little endian). Overwrites the buffer in-place. + * + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_increment(buf) { + await this.ensureLoaded(); + return this.backend.sodium_increment(buf); + } + + /** + * Returns true if the buffer is zero. + * + * @param {Buffer} buf + * @param {number} len + * @return {Promise} + */ + async sodium_is_zero(buf, len) { + await this.ensureLoaded(); + return this.backend.sodium_is_zero(buf, len); + } + + /** + * Timing-safe buffer comparison. + * + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_memcmp(b1, b2) { + await this.ensureLoaded(); + return this.backend.sodium_memcmp(b1, b2); + } + + /** + * Zero out a buffer. Overwrites the buffer in-place. + * + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_memzero(buf) { + await this.ensureLoaded(); + await this.backend.sodium_memzero(buf); + } + + /** + * Pad a string. + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_pad(buf, blockSize) { + await this.ensureLoaded(); + return this.backend.sodium_pad(buf, blockSize); + } + + /** + * Unpad a string. + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_unpad(buf, blockSize) { + await this.ensureLoaded(); + return this.backend.sodium_unpad(buf, blockSize); + } +} + +module.exports = SodiumPlus; + +}).call(this,require("buffer").Buffer) +},{"./backend":3,"./backend/libsodium-wrappers":4,"./cryptography-key":6,"./keytypes/ed25519pk":7,"./keytypes/ed25519sk":8,"./keytypes/x25519pk":9,"./keytypes/x25519sk":10,"./sodium-error":12,"./util":14,"buffer":74,"buffer/":17}],14:[function(require,module,exports){ +(function (Buffer){ +"use strict"; + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +const arrayToBuffer = require('typedarray-to-buffer'); + +module.exports = class Util +{ + static async cloneBuffer(buf) { + return Buffer.from(buf); + } + + /** + * Define the sodium constants + * + * @param {object} anyobject + * @return {object} + */ + static populateConstants(anyobject) { + anyobject.LIBRARY_VERSION_MAJOR = 10; + anyobject.LIBRARY_VERSION_MINOR = 2; + anyobject.VERSION_STRING = '1.0.17'; + anyobject.BASE64_VARIANT_ORIGINAL = 1; + anyobject.BASE64_VARIANT_ORIGINAL_NO_PADDING = 3; + anyobject.BASE64_VARIANT_URLSAFE = 5; + anyobject.BASE64_VARIANT_URLSAFE_NO_PADDING = 7; + anyobject.CRYPTO_AEAD_AES256GCM_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_AES256GCM_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12; + anyobject.CRYPTO_AEAD_AES256GCM_ABYTES = 16; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = 16; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = 12; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = 16; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES = 24; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES = 16; + anyobject.CRYPTO_AUTH_BYTES = 32; + anyobject.CRYPTO_AUTH_KEYBYTES = 32; + anyobject.CRYPTO_BOX_SEALBYTES = 16; + anyobject.CRYPTO_BOX_SECRETKEYBYTES = 32; + anyobject.CRYPTO_BOX_PUBLICKEYBYTES = 32; + anyobject.CRYPTO_BOX_KEYPAIRBYTES = 64; + anyobject.CRYPTO_BOX_MACBYTES = 16; + anyobject.CRYPTO_BOX_NONCEBYTES = 24; + anyobject.CRYPTO_BOX_SEEDBYTES = 32; + anyobject.CRYPTO_KDF_BYTES_MIN = 16; + anyobject.CRYPTO_KDF_BYTES_MAX = 64; + anyobject.CRYPTO_KDF_CONTEXTBYTES = 8; + anyobject.CRYPTO_KDF_KEYBYTES = 32; + anyobject.CRYPTO_KX_BYTES = 32; + anyobject.CRYPTO_KX_PRIMITIVE = 'x25519blake2b'; + anyobject.CRYPTO_KX_SEEDBYTES = 32; + anyobject.CRYPTO_KX_KEYPAIRBYTES = 64; + anyobject.CRYPTO_KX_PUBLICKEYBYTES = 32; + anyobject.CRYPTO_KX_SECRETKEYBYTES = 32; + anyobject.CRYPTO_KX_SESSIONKEYBYTES = 32; + anyobject.CRYPTO_GENERICHASH_BYTES = 32; + anyobject.CRYPTO_GENERICHASH_BYTES_MIN = 16; + anyobject.CRYPTO_GENERICHASH_BYTES_MAX = 64; + anyobject.CRYPTO_GENERICHASH_KEYBYTES = 32; + anyobject.CRYPTO_GENERICHASH_KEYBYTES_MIN = 16; + anyobject.CRYPTO_GENERICHASH_KEYBYTES_MAX = 64; + anyobject.CRYPTO_GENERICHASH_STATEBYTES = 384; + anyobject.CRYPTO_PWHASH_SALTBYTES = 16; + anyobject.CRYPTO_PWHASH_STRPREFIX = '$argon2id$'; + anyobject.CRYPTO_PWHASH_ALG_ARGON2I13 = 1; + anyobject.CRYPTO_PWHASH_ALG_ARGON2ID13 = 2; + anyobject.CRYPTO_PWHASH_ALG_DEFAULT = anyobject.CRYPTO_PWHASH_ALG_ARGON2ID13; + anyobject.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE = 2; + anyobject.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 67108864; + anyobject.CRYPTO_PWHASH_OPSLIMIT_MODERATE = 3; + anyobject.CRYPTO_PWHASH_MEMLIMIT_MODERATE = 268435456; + anyobject.CRYPTO_PWHASH_OPSLIMIT_SENSITIVE = 4; + anyobject.CRYPTO_PWHASH_MEMLIMIT_SENSITIVE = 1073741824; + anyobject.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES = 32; + anyobject.CRYPTO_SCALARMULT_BYTES = 32; + anyobject.CRYPTO_SCALARMULT_SCALARBYTES = 32; + anyobject.CRYPTO_SHORTHASH_BYTES = 8; + anyobject.CRYPTO_SHORTHASH_KEYBYTES = 16; + anyobject.CRYPTO_SECRETBOX_KEYBYTES = 32; + anyobject.CRYPTO_SECRETBOX_MACBYTES = 16; + anyobject.CRYPTO_SECRETBOX_NONCEBYTES = 24; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES = 52; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80; + anyobject.CRYPTO_SIGN_BYTES = 64; + anyobject.CRYPTO_SIGN_SEEDBYTES = 32; + anyobject.CRYPTO_SIGN_PUBLICKEYBYTES = 32; + anyobject.CRYPTO_SIGN_SECRETKEYBYTES = 64; + anyobject.CRYPTO_SIGN_KEYPAIRBYTES = 96; + anyobject.CRYPTO_STREAM_KEYBYTES = 32; + anyobject.CRYPTO_STREAM_NONCEBYTES = 24; + return anyobject; + } + + /** + * Coerce input to a Buffer, throwing a TypeError if it cannot be coerced. + * + * @param {string|Buffer|Uint8Array|Promise} stringOrBuffer + * @returns {Buffer} + */ + static async toBuffer(stringOrBuffer) + { + if (Buffer.isBuffer(stringOrBuffer)) { + return stringOrBuffer; + } else if (stringOrBuffer === null) { + return null; + } else if (typeof(stringOrBuffer) === 'string') { + return Buffer.from(stringOrBuffer, 'binary'); + } else if (stringOrBuffer instanceof Uint8Array) { + return arrayToBuffer(stringOrBuffer); + } else if (stringOrBuffer instanceof Promise) { + return await stringOrBuffer; + } else { + throw new TypeError('Invalid type; string or buffer expected'); + } + } +}; + +}).call(this,require("buffer").Buffer) +},{"buffer":74,"buffer/":17,"typedarray-to-buffer":25}],15:[function(require,module,exports){ +'use strict' + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk( + uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) + )) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + +},{}],16:[function(require,module,exports){ +var bigInt = (function (undefined) { + "use strict"; + + var BASE = 1e7, + LOG_BASE = 7, + MAX_INT = 9007199254740992, + MAX_INT_ARR = smallToArray(MAX_INT), + DEFAULT_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz"; + + var supportsNativeBigInt = typeof BigInt === "function"; + + function Integer(v, radix, alphabet, caseSensitive) { + if (typeof v === "undefined") return Integer[0]; + if (typeof radix !== "undefined") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive); + return parseValue(v); + } + + function BigInteger(value, sign) { + this.value = value; + this.sign = sign; + this.isSmall = false; + } + BigInteger.prototype = Object.create(Integer.prototype); + + function SmallInteger(value) { + this.value = value; + this.sign = value < 0; + this.isSmall = true; + } + SmallInteger.prototype = Object.create(Integer.prototype); + + function NativeBigInt(value) { + this.value = value; + } + NativeBigInt.prototype = Object.create(Integer.prototype); + + function isPrecise(n) { + return -MAX_INT < n && n < MAX_INT; + } + + function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes + if (n < 1e7) + return [n]; + if (n < 1e14) + return [n % 1e7, Math.floor(n / 1e7)]; + return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)]; + } + + function arrayToSmall(arr) { // If BASE changes this function may need to change + trim(arr); + var length = arr.length; + if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) { + switch (length) { + case 0: return 0; + case 1: return arr[0]; + case 2: return arr[0] + arr[1] * BASE; + default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE; + } + } + return arr; + } + + function trim(v) { + var i = v.length; + while (v[--i] === 0); + v.length = i + 1; + } + + function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger + var x = new Array(length); + var i = -1; + while (++i < length) { + x[i] = 0; + } + return x; + } + + function truncate(n) { + if (n > 0) return Math.floor(n); + return Math.ceil(n); + } + + function add(a, b) { // assumes a and b are arrays with a.length >= b.length + var l_a = a.length, + l_b = b.length, + r = new Array(l_a), + carry = 0, + base = BASE, + sum, i; + for (i = 0; i < l_b; i++) { + sum = a[i] + b[i] + carry; + carry = sum >= base ? 1 : 0; + r[i] = sum - carry * base; + } + while (i < l_a) { + sum = a[i] + carry; + carry = sum === base ? 1 : 0; + r[i++] = sum - carry * base; + } + if (carry > 0) r.push(carry); + return r; + } + + function addAny(a, b) { + if (a.length >= b.length) return add(a, b); + return add(b, a); + } + + function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT + var l = a.length, + r = new Array(l), + base = BASE, + sum, i; + for (i = 0; i < l; i++) { + sum = a[i] - base + carry; + carry = Math.floor(sum / base); + r[i] = sum - carry * base; + carry += 1; + } + while (carry > 0) { + r[i++] = carry % base; + carry = Math.floor(carry / base); + } + return r; + } + + BigInteger.prototype.add = function (v) { + var n = parseValue(v); + if (this.sign !== n.sign) { + return this.subtract(n.negate()); + } + var a = this.value, b = n.value; + if (n.isSmall) { + return new BigInteger(addSmall(a, Math.abs(b)), this.sign); + } + return new BigInteger(addAny(a, b), this.sign); + }; + BigInteger.prototype.plus = BigInteger.prototype.add; + + SmallInteger.prototype.add = function (v) { + var n = parseValue(v); + var a = this.value; + if (a < 0 !== n.sign) { + return this.subtract(n.negate()); + } + var b = n.value; + if (n.isSmall) { + if (isPrecise(a + b)) return new SmallInteger(a + b); + b = smallToArray(Math.abs(b)); + } + return new BigInteger(addSmall(b, Math.abs(a)), a < 0); + }; + SmallInteger.prototype.plus = SmallInteger.prototype.add; + + NativeBigInt.prototype.add = function (v) { + return new NativeBigInt(this.value + parseValue(v).value); + } + NativeBigInt.prototype.plus = NativeBigInt.prototype.add; + + function subtract(a, b) { // assumes a and b are arrays with a >= b + var a_l = a.length, + b_l = b.length, + r = new Array(a_l), + borrow = 0, + base = BASE, + i, difference; + for (i = 0; i < b_l; i++) { + difference = a[i] - borrow - b[i]; + if (difference < 0) { + difference += base; + borrow = 1; + } else borrow = 0; + r[i] = difference; + } + for (i = b_l; i < a_l; i++) { + difference = a[i] - borrow; + if (difference < 0) difference += base; + else { + r[i++] = difference; + break; + } + r[i] = difference; + } + for (; i < a_l; i++) { + r[i] = a[i]; + } + trim(r); + return r; + } + + function subtractAny(a, b, sign) { + var value; + if (compareAbs(a, b) >= 0) { + value = subtract(a, b); + } else { + value = subtract(b, a); + sign = !sign; + } + value = arrayToSmall(value); + if (typeof value === "number") { + if (sign) value = -value; + return new SmallInteger(value); + } + return new BigInteger(value, sign); + } + + function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT + var l = a.length, + r = new Array(l), + carry = -b, + base = BASE, + i, difference; + for (i = 0; i < l; i++) { + difference = a[i] + carry; + carry = Math.floor(difference / base); + difference %= base; + r[i] = difference < 0 ? difference + base : difference; + } + r = arrayToSmall(r); + if (typeof r === "number") { + if (sign) r = -r; + return new SmallInteger(r); + } return new BigInteger(r, sign); + } + + BigInteger.prototype.subtract = function (v) { + var n = parseValue(v); + if (this.sign !== n.sign) { + return this.add(n.negate()); + } + var a = this.value, b = n.value; + if (n.isSmall) + return subtractSmall(a, Math.abs(b), this.sign); + return subtractAny(a, b, this.sign); + }; + BigInteger.prototype.minus = BigInteger.prototype.subtract; + + SmallInteger.prototype.subtract = function (v) { + var n = parseValue(v); + var a = this.value; + if (a < 0 !== n.sign) { + return this.add(n.negate()); + } + var b = n.value; + if (n.isSmall) { + return new SmallInteger(a - b); + } + return subtractSmall(b, Math.abs(a), a >= 0); + }; + SmallInteger.prototype.minus = SmallInteger.prototype.subtract; + + NativeBigInt.prototype.subtract = function (v) { + return new NativeBigInt(this.value - parseValue(v).value); + } + NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract; + + BigInteger.prototype.negate = function () { + return new BigInteger(this.value, !this.sign); + }; + SmallInteger.prototype.negate = function () { + var sign = this.sign; + var small = new SmallInteger(-this.value); + small.sign = !sign; + return small; + }; + NativeBigInt.prototype.negate = function () { + return new NativeBigInt(-this.value); + } + + BigInteger.prototype.abs = function () { + return new BigInteger(this.value, false); + }; + SmallInteger.prototype.abs = function () { + return new SmallInteger(Math.abs(this.value)); + }; + NativeBigInt.prototype.abs = function () { + return new NativeBigInt(this.value >= 0 ? this.value : -this.value); + } + + + function multiplyLong(a, b) { + var a_l = a.length, + b_l = b.length, + l = a_l + b_l, + r = createArray(l), + base = BASE, + product, carry, i, a_i, b_j; + for (i = 0; i < a_l; ++i) { + a_i = a[i]; + for (var j = 0; j < b_l; ++j) { + b_j = b[j]; + product = a_i * b_j + r[i + j]; + carry = Math.floor(product / base); + r[i + j] = product - carry * base; + r[i + j + 1] += carry; + } + } + trim(r); + return r; + } + + function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE + var l = a.length, + r = new Array(l), + base = BASE, + carry = 0, + product, i; + for (i = 0; i < l; i++) { + product = a[i] * b + carry; + carry = Math.floor(product / base); + r[i] = product - carry * base; + } + while (carry > 0) { + r[i++] = carry % base; + carry = Math.floor(carry / base); + } + return r; + } + + function shiftLeft(x, n) { + var r = []; + while (n-- > 0) r.push(0); + return r.concat(x); + } + + function multiplyKaratsuba(x, y) { + var n = Math.max(x.length, y.length); + + if (n <= 30) return multiplyLong(x, y); + n = Math.ceil(n / 2); + + var b = x.slice(n), + a = x.slice(0, n), + d = y.slice(n), + c = y.slice(0, n); + + var ac = multiplyKaratsuba(a, c), + bd = multiplyKaratsuba(b, d), + abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d)); + + var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n)); + trim(product); + return product; + } + + // The following function is derived from a surface fit of a graph plotting the performance difference + // between long multiplication and karatsuba multiplication versus the lengths of the two arrays. + function useKaratsuba(l1, l2) { + return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0; + } + + BigInteger.prototype.multiply = function (v) { + var n = parseValue(v), + a = this.value, b = n.value, + sign = this.sign !== n.sign, + abs; + if (n.isSmall) { + if (b === 0) return Integer[0]; + if (b === 1) return this; + if (b === -1) return this.negate(); + abs = Math.abs(b); + if (abs < BASE) { + return new BigInteger(multiplySmall(a, abs), sign); + } + b = smallToArray(abs); + } + if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes + return new BigInteger(multiplyKaratsuba(a, b), sign); + return new BigInteger(multiplyLong(a, b), sign); + }; + + BigInteger.prototype.times = BigInteger.prototype.multiply; + + function multiplySmallAndArray(a, b, sign) { // a >= 0 + if (a < BASE) { + return new BigInteger(multiplySmall(b, a), sign); + } + return new BigInteger(multiplyLong(b, smallToArray(a)), sign); + } + SmallInteger.prototype._multiplyBySmall = function (a) { + if (isPrecise(a.value * this.value)) { + return new SmallInteger(a.value * this.value); + } + return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign); + }; + BigInteger.prototype._multiplyBySmall = function (a) { + if (a.value === 0) return Integer[0]; + if (a.value === 1) return this; + if (a.value === -1) return this.negate(); + return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign); + }; + SmallInteger.prototype.multiply = function (v) { + return parseValue(v)._multiplyBySmall(this); + }; + SmallInteger.prototype.times = SmallInteger.prototype.multiply; + + NativeBigInt.prototype.multiply = function (v) { + return new NativeBigInt(this.value * parseValue(v).value); + } + NativeBigInt.prototype.times = NativeBigInt.prototype.multiply; + + function square(a) { + //console.assert(2 * BASE * BASE < MAX_INT); + var l = a.length, + r = createArray(l + l), + base = BASE, + product, carry, i, a_i, a_j; + for (i = 0; i < l; i++) { + a_i = a[i]; + carry = 0 - a_i * a_i; + for (var j = i; j < l; j++) { + a_j = a[j]; + product = 2 * (a_i * a_j) + r[i + j] + carry; + carry = Math.floor(product / base); + r[i + j] = product - carry * base; + } + r[i + l] = carry; + } + trim(r); + return r; + } + + BigInteger.prototype.square = function () { + return new BigInteger(square(this.value), false); + }; + + SmallInteger.prototype.square = function () { + var value = this.value * this.value; + if (isPrecise(value)) return new SmallInteger(value); + return new BigInteger(square(smallToArray(Math.abs(this.value))), false); + }; + + NativeBigInt.prototype.square = function (v) { + return new NativeBigInt(this.value * this.value); + } + + function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes. + var a_l = a.length, + b_l = b.length, + base = BASE, + result = createArray(b.length), + divisorMostSignificantDigit = b[b_l - 1], + // normalization + lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)), + remainder = multiplySmall(a, lambda), + divisor = multiplySmall(b, lambda), + quotientDigit, shift, carry, borrow, i, l, q; + if (remainder.length <= a_l) remainder.push(0); + divisor.push(0); + divisorMostSignificantDigit = divisor[b_l - 1]; + for (shift = a_l - b_l; shift >= 0; shift--) { + quotientDigit = base - 1; + if (remainder[shift + b_l] !== divisorMostSignificantDigit) { + quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit); + } + // quotientDigit <= base - 1 + carry = 0; + borrow = 0; + l = divisor.length; + for (i = 0; i < l; i++) { + carry += quotientDigit * divisor[i]; + q = Math.floor(carry / base); + borrow += remainder[shift + i] - (carry - q * base); + carry = q; + if (borrow < 0) { + remainder[shift + i] = borrow + base; + borrow = -1; + } else { + remainder[shift + i] = borrow; + borrow = 0; + } + } + while (borrow !== 0) { + quotientDigit -= 1; + carry = 0; + for (i = 0; i < l; i++) { + carry += remainder[shift + i] - base + divisor[i]; + if (carry < 0) { + remainder[shift + i] = carry + base; + carry = 0; + } else { + remainder[shift + i] = carry; + carry = 1; + } + } + borrow += carry; + } + result[shift] = quotientDigit; + } + // denormalization + remainder = divModSmall(remainder, lambda)[0]; + return [arrayToSmall(result), arrayToSmall(remainder)]; + } + + function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/ + // Performs faster than divMod1 on larger input sizes. + var a_l = a.length, + b_l = b.length, + result = [], + part = [], + base = BASE, + guess, xlen, highx, highy, check; + while (a_l) { + part.unshift(a[--a_l]); + trim(part); + if (compareAbs(part, b) < 0) { + result.push(0); + continue; + } + xlen = part.length; + highx = part[xlen - 1] * base + part[xlen - 2]; + highy = b[b_l - 1] * base + b[b_l - 2]; + if (xlen > b_l) { + highx = (highx + 1) * base; + } + guess = Math.ceil(highx / highy); + do { + check = multiplySmall(b, guess); + if (compareAbs(check, part) <= 0) break; + guess--; + } while (guess); + result.push(guess); + part = subtract(part, check); + } + result.reverse(); + return [arrayToSmall(result), arrayToSmall(part)]; + } + + function divModSmall(value, lambda) { + var length = value.length, + quotient = createArray(length), + base = BASE, + i, q, remainder, divisor; + remainder = 0; + for (i = length - 1; i >= 0; --i) { + divisor = remainder * base + value[i]; + q = truncate(divisor / lambda); + remainder = divisor - q * lambda; + quotient[i] = q | 0; + } + return [quotient, remainder | 0]; + } + + function divModAny(self, v) { + var value, n = parseValue(v); + if (supportsNativeBigInt) { + return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)]; + } + var a = self.value, b = n.value; + var quotient; + if (b === 0) throw new Error("Cannot divide by zero"); + if (self.isSmall) { + if (n.isSmall) { + return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)]; + } + return [Integer[0], self]; + } + if (n.isSmall) { + if (b === 1) return [self, Integer[0]]; + if (b == -1) return [self.negate(), Integer[0]]; + var abs = Math.abs(b); + if (abs < BASE) { + value = divModSmall(a, abs); + quotient = arrayToSmall(value[0]); + var remainder = value[1]; + if (self.sign) remainder = -remainder; + if (typeof quotient === "number") { + if (self.sign !== n.sign) quotient = -quotient; + return [new SmallInteger(quotient), new SmallInteger(remainder)]; + } + return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)]; + } + b = smallToArray(abs); + } + var comparison = compareAbs(a, b); + if (comparison === -1) return [Integer[0], self]; + if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]]; + + // divMod1 is faster on smaller input sizes + if (a.length + b.length <= 200) + value = divMod1(a, b); + else value = divMod2(a, b); + + quotient = value[0]; + var qSign = self.sign !== n.sign, + mod = value[1], + mSign = self.sign; + if (typeof quotient === "number") { + if (qSign) quotient = -quotient; + quotient = new SmallInteger(quotient); + } else quotient = new BigInteger(quotient, qSign); + if (typeof mod === "number") { + if (mSign) mod = -mod; + mod = new SmallInteger(mod); + } else mod = new BigInteger(mod, mSign); + return [quotient, mod]; + } + + BigInteger.prototype.divmod = function (v) { + var result = divModAny(this, v); + return { + quotient: result[0], + remainder: result[1] + }; + }; + NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod; + + + BigInteger.prototype.divide = function (v) { + return divModAny(this, v)[0]; + }; + NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) { + return new NativeBigInt(this.value / parseValue(v).value); + }; + SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide; + + BigInteger.prototype.mod = function (v) { + return divModAny(this, v)[1]; + }; + NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) { + return new NativeBigInt(this.value % parseValue(v).value); + }; + SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod; + + BigInteger.prototype.pow = function (v) { + var n = parseValue(v), + a = this.value, + b = n.value, + value, x, y; + if (b === 0) return Integer[1]; + if (a === 0) return Integer[0]; + if (a === 1) return Integer[1]; + if (a === -1) return n.isEven() ? Integer[1] : Integer[-1]; + if (n.sign) { + return Integer[0]; + } + if (!n.isSmall) throw new Error("The exponent " + n.toString() + " is too large."); + if (this.isSmall) { + if (isPrecise(value = Math.pow(a, b))) + return new SmallInteger(truncate(value)); + } + x = this; + y = Integer[1]; + while (true) { + if (b & 1 === 1) { + y = y.times(x); + --b; + } + if (b === 0) break; + b /= 2; + x = x.square(); + } + return y; + }; + SmallInteger.prototype.pow = BigInteger.prototype.pow; + + NativeBigInt.prototype.pow = function (v) { + var n = parseValue(v); + var a = this.value, b = n.value; + var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2); + if (b === _0) return Integer[1]; + if (a === _0) return Integer[0]; + if (a === _1) return Integer[1]; + if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1]; + if (n.isNegative()) return new NativeBigInt(_0); + var x = this; + var y = Integer[1]; + while (true) { + if ((b & _1) === _1) { + y = y.times(x); + --b; + } + if (b === _0) break; + b /= _2; + x = x.square(); + } + return y; + } + + BigInteger.prototype.modPow = function (exp, mod) { + exp = parseValue(exp); + mod = parseValue(mod); + if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0"); + var r = Integer[1], + base = this.mod(mod); + if (exp.isNegative()) { + exp = exp.multiply(Integer[-1]); + base = base.modInv(mod); + } + while (exp.isPositive()) { + if (base.isZero()) return Integer[0]; + if (exp.isOdd()) r = r.multiply(base).mod(mod); + exp = exp.divide(2); + base = base.square().mod(mod); + } + return r; + }; + NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow; + + function compareAbs(a, b) { + if (a.length !== b.length) { + return a.length > b.length ? 1 : -1; + } + for (var i = a.length - 1; i >= 0; i--) { + if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1; + } + return 0; + } + + BigInteger.prototype.compareAbs = function (v) { + var n = parseValue(v), + a = this.value, + b = n.value; + if (n.isSmall) return 1; + return compareAbs(a, b); + }; + SmallInteger.prototype.compareAbs = function (v) { + var n = parseValue(v), + a = Math.abs(this.value), + b = n.value; + if (n.isSmall) { + b = Math.abs(b); + return a === b ? 0 : a > b ? 1 : -1; + } + return -1; + }; + NativeBigInt.prototype.compareAbs = function (v) { + var a = this.value; + var b = parseValue(v).value; + a = a >= 0 ? a : -a; + b = b >= 0 ? b : -b; + return a === b ? 0 : a > b ? 1 : -1; + } + + BigInteger.prototype.compare = function (v) { + // See discussion about comparison with Infinity: + // https://github.com/peterolson/BigInteger.js/issues/61 + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + + var n = parseValue(v), + a = this.value, + b = n.value; + if (this.sign !== n.sign) { + return n.sign ? 1 : -1; + } + if (n.isSmall) { + return this.sign ? -1 : 1; + } + return compareAbs(a, b) * (this.sign ? -1 : 1); + }; + BigInteger.prototype.compareTo = BigInteger.prototype.compare; + + SmallInteger.prototype.compare = function (v) { + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + + var n = parseValue(v), + a = this.value, + b = n.value; + if (n.isSmall) { + return a == b ? 0 : a > b ? 1 : -1; + } + if (a < 0 !== n.sign) { + return a < 0 ? -1 : 1; + } + return a < 0 ? 1 : -1; + }; + SmallInteger.prototype.compareTo = SmallInteger.prototype.compare; + + NativeBigInt.prototype.compare = function (v) { + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + var a = this.value; + var b = parseValue(v).value; + return a === b ? 0 : a > b ? 1 : -1; + } + NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare; + + BigInteger.prototype.equals = function (v) { + return this.compare(v) === 0; + }; + NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals; + + BigInteger.prototype.notEquals = function (v) { + return this.compare(v) !== 0; + }; + NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals; + + BigInteger.prototype.greater = function (v) { + return this.compare(v) > 0; + }; + NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater; + + BigInteger.prototype.lesser = function (v) { + return this.compare(v) < 0; + }; + NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser; + + BigInteger.prototype.greaterOrEquals = function (v) { + return this.compare(v) >= 0; + }; + NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals; + + BigInteger.prototype.lesserOrEquals = function (v) { + return this.compare(v) <= 0; + }; + NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals; + + BigInteger.prototype.isEven = function () { + return (this.value[0] & 1) === 0; + }; + SmallInteger.prototype.isEven = function () { + return (this.value & 1) === 0; + }; + NativeBigInt.prototype.isEven = function () { + return (this.value & BigInt(1)) === BigInt(0); + } + + BigInteger.prototype.isOdd = function () { + return (this.value[0] & 1) === 1; + }; + SmallInteger.prototype.isOdd = function () { + return (this.value & 1) === 1; + }; + NativeBigInt.prototype.isOdd = function () { + return (this.value & BigInt(1)) === BigInt(1); + } + + BigInteger.prototype.isPositive = function () { + return !this.sign; + }; + SmallInteger.prototype.isPositive = function () { + return this.value > 0; + }; + NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive; + + BigInteger.prototype.isNegative = function () { + return this.sign; + }; + SmallInteger.prototype.isNegative = function () { + return this.value < 0; + }; + NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative; + + BigInteger.prototype.isUnit = function () { + return false; + }; + SmallInteger.prototype.isUnit = function () { + return Math.abs(this.value) === 1; + }; + NativeBigInt.prototype.isUnit = function () { + return this.abs().value === BigInt(1); + } + + BigInteger.prototype.isZero = function () { + return false; + }; + SmallInteger.prototype.isZero = function () { + return this.value === 0; + }; + NativeBigInt.prototype.isZero = function () { + return this.value === BigInt(0); + } + + BigInteger.prototype.isDivisibleBy = function (v) { + var n = parseValue(v); + if (n.isZero()) return false; + if (n.isUnit()) return true; + if (n.compareAbs(2) === 0) return this.isEven(); + return this.mod(n).isZero(); + }; + NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy; + + function isBasicPrime(v) { + var n = v.abs(); + if (n.isUnit()) return false; + if (n.equals(2) || n.equals(3) || n.equals(5)) return true; + if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false; + if (n.lesser(49)) return true; + // we don't know if it's prime: let the other functions figure it out + } + + function millerRabinTest(n, a) { + var nPrev = n.prev(), + b = nPrev, + r = 0, + d, t, i, x; + while (b.isEven()) b = b.divide(2), r++; + next: for (i = 0; i < a.length; i++) { + if (n.lesser(a[i])) continue; + x = bigInt(a[i]).modPow(b, n); + if (x.isUnit() || x.equals(nPrev)) continue; + for (d = r - 1; d != 0; d--) { + x = x.square().mod(n); + if (x.isUnit()) return false; + if (x.equals(nPrev)) continue next; + } + return false; + } + return true; + } + + // Set "strict" to true to force GRH-supported lower bound of 2*log(N)^2 + BigInteger.prototype.isPrime = function (strict) { + var isPrime = isBasicPrime(this); + if (isPrime !== undefined) return isPrime; + var n = this.abs(); + var bits = n.bitLength(); + if (bits <= 64) + return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]); + var logN = Math.log(2) * bits.toJSNumber(); + var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN); + for (var a = [], i = 0; i < t; i++) { + a.push(bigInt(i + 2)); + } + return millerRabinTest(n, a); + }; + NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime; + + BigInteger.prototype.isProbablePrime = function (iterations, rng) { + var isPrime = isBasicPrime(this); + if (isPrime !== undefined) return isPrime; + var n = this.abs(); + var t = iterations === undefined ? 5 : iterations; + for (var a = [], i = 0; i < t; i++) { + a.push(bigInt.randBetween(2, n.minus(2), rng)); + } + return millerRabinTest(n, a); + }; + NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime; + + BigInteger.prototype.modInv = function (n) { + var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR; + while (!newR.isZero()) { + q = r.divide(newR); + lastT = t; + lastR = r; + t = newT; + r = newR; + newT = lastT.subtract(q.multiply(newT)); + newR = lastR.subtract(q.multiply(newR)); + } + if (!r.isUnit()) throw new Error(this.toString() + " and " + n.toString() + " are not co-prime"); + if (t.compare(0) === -1) { + t = t.add(n); + } + if (this.isNegative()) { + return t.negate(); + } + return t; + }; + + NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv; + + BigInteger.prototype.next = function () { + var value = this.value; + if (this.sign) { + return subtractSmall(value, 1, this.sign); + } + return new BigInteger(addSmall(value, 1), this.sign); + }; + SmallInteger.prototype.next = function () { + var value = this.value; + if (value + 1 < MAX_INT) return new SmallInteger(value + 1); + return new BigInteger(MAX_INT_ARR, false); + }; + NativeBigInt.prototype.next = function () { + return new NativeBigInt(this.value + BigInt(1)); + } + + BigInteger.prototype.prev = function () { + var value = this.value; + if (this.sign) { + return new BigInteger(addSmall(value, 1), true); + } + return subtractSmall(value, 1, this.sign); + }; + SmallInteger.prototype.prev = function () { + var value = this.value; + if (value - 1 > -MAX_INT) return new SmallInteger(value - 1); + return new BigInteger(MAX_INT_ARR, true); + }; + NativeBigInt.prototype.prev = function () { + return new NativeBigInt(this.value - BigInt(1)); + } + + var powersOfTwo = [1]; + while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]); + var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1]; + + function shift_isSmall(n) { + return Math.abs(n) <= BASE; + } + + BigInteger.prototype.shiftLeft = function (v) { + var n = parseValue(v).toJSNumber(); + if (!shift_isSmall(n)) { + throw new Error(String(n) + " is too large for shifting."); + } + if (n < 0) return this.shiftRight(-n); + var result = this; + if (result.isZero()) return result; + while (n >= powers2Length) { + result = result.multiply(highestPower2); + n -= powers2Length - 1; + } + return result.multiply(powersOfTwo[n]); + }; + NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft; + + BigInteger.prototype.shiftRight = function (v) { + var remQuo; + var n = parseValue(v).toJSNumber(); + if (!shift_isSmall(n)) { + throw new Error(String(n) + " is too large for shifting."); + } + if (n < 0) return this.shiftLeft(-n); + var result = this; + while (n >= powers2Length) { + if (result.isZero() || (result.isNegative() && result.isUnit())) return result; + remQuo = divModAny(result, highestPower2); + result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0]; + n -= powers2Length - 1; + } + remQuo = divModAny(result, powersOfTwo[n]); + return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0]; + }; + NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight; + + function bitwise(x, y, fn) { + y = parseValue(y); + var xSign = x.isNegative(), ySign = y.isNegative(); + var xRem = xSign ? x.not() : x, + yRem = ySign ? y.not() : y; + var xDigit = 0, yDigit = 0; + var xDivMod = null, yDivMod = null; + var result = []; + while (!xRem.isZero() || !yRem.isZero()) { + xDivMod = divModAny(xRem, highestPower2); + xDigit = xDivMod[1].toJSNumber(); + if (xSign) { + xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers + } + + yDivMod = divModAny(yRem, highestPower2); + yDigit = yDivMod[1].toJSNumber(); + if (ySign) { + yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers + } + + xRem = xDivMod[0]; + yRem = yDivMod[0]; + result.push(fn(xDigit, yDigit)); + } + var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0); + for (var i = result.length - 1; i >= 0; i -= 1) { + sum = sum.multiply(highestPower2).add(bigInt(result[i])); + } + return sum; + } + + BigInteger.prototype.not = function () { + return this.negate().prev(); + }; + NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not; + + BigInteger.prototype.and = function (n) { + return bitwise(this, n, function (a, b) { return a & b; }); + }; + NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and; + + BigInteger.prototype.or = function (n) { + return bitwise(this, n, function (a, b) { return a | b; }); + }; + NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or; + + BigInteger.prototype.xor = function (n) { + return bitwise(this, n, function (a, b) { return a ^ b; }); + }; + NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor; + + var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I; + function roughLOB(n) { // get lowestOneBit (rough) + // SmallInteger: return Min(lowestOneBit(n), 1 << 30) + // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7] + var v = n.value, + x = typeof v === "number" ? v | LOBMASK_I : + typeof v === "bigint" ? v | BigInt(LOBMASK_I) : + v[0] + v[1] * BASE | LOBMASK_BI; + return x & -x; + } + + function integerLogarithm(value, base) { + if (base.compareTo(value) <= 0) { + var tmp = integerLogarithm(value, base.square(base)); + var p = tmp.p; + var e = tmp.e; + var t = p.multiply(base); + return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 }; + } + return { p: bigInt(1), e: 0 }; + } + + BigInteger.prototype.bitLength = function () { + var n = this; + if (n.compareTo(bigInt(0)) < 0) { + n = n.negate().subtract(bigInt(1)); + } + if (n.compareTo(bigInt(0)) === 0) { + return bigInt(0); + } + return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1)); + } + NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength; + + function max(a, b) { + a = parseValue(a); + b = parseValue(b); + return a.greater(b) ? a : b; + } + function min(a, b) { + a = parseValue(a); + b = parseValue(b); + return a.lesser(b) ? a : b; + } + function gcd(a, b) { + a = parseValue(a).abs(); + b = parseValue(b).abs(); + if (a.equals(b)) return a; + if (a.isZero()) return b; + if (b.isZero()) return a; + var c = Integer[1], d, t; + while (a.isEven() && b.isEven()) { + d = min(roughLOB(a), roughLOB(b)); + a = a.divide(d); + b = b.divide(d); + c = c.multiply(d); + } + while (a.isEven()) { + a = a.divide(roughLOB(a)); + } + do { + while (b.isEven()) { + b = b.divide(roughLOB(b)); + } + if (a.greater(b)) { + t = b; b = a; a = t; + } + b = b.subtract(a); + } while (!b.isZero()); + return c.isUnit() ? a : a.multiply(c); + } + function lcm(a, b) { + a = parseValue(a).abs(); + b = parseValue(b).abs(); + return a.divide(gcd(a, b)).multiply(b); + } + function randBetween(a, b, rng) { + a = parseValue(a); + b = parseValue(b); + var usedRNG = rng || Math.random; + var low = min(a, b), high = max(a, b); + var range = high.subtract(low).add(1); + if (range.isSmall) return low.add(Math.floor(usedRNG() * range)); + var digits = toBase(range, BASE).value; + var result = [], restricted = true; + for (var i = 0; i < digits.length; i++) { + var top = restricted ? digits[i] : BASE; + var digit = truncate(usedRNG() * top); + result.push(digit); + if (digit < top) restricted = false; + } + return low.add(Integer.fromArray(result, BASE, false)); + } + + var parseBase = function (text, base, alphabet, caseSensitive) { + alphabet = alphabet || DEFAULT_ALPHABET; + text = String(text); + if (!caseSensitive) { + text = text.toLowerCase(); + alphabet = alphabet.toLowerCase(); + } + var length = text.length; + var i; + var absBase = Math.abs(base); + var alphabetValues = {}; + for (i = 0; i < alphabet.length; i++) { + alphabetValues[alphabet[i]] = i; + } + for (i = 0; i < length; i++) { + var c = text[i]; + if (c === "-") continue; + if (c in alphabetValues) { + if (alphabetValues[c] >= absBase) { + if (c === "1" && absBase === 1) continue; + throw new Error(c + " is not a valid digit in base " + base + "."); + } + } + } + base = parseValue(base); + var digits = []; + var isNegative = text[0] === "-"; + for (i = isNegative ? 1 : 0; i < text.length; i++) { + var c = text[i]; + if (c in alphabetValues) digits.push(parseValue(alphabetValues[c])); + else if (c === "<") { + var start = i; + do { i++; } while (text[i] !== ">" && i < text.length); + digits.push(parseValue(text.slice(start + 1, i))); + } + else throw new Error(c + " is not a valid character"); + } + return parseBaseFromArray(digits, base, isNegative); + }; + + function parseBaseFromArray(digits, base, isNegative) { + var val = Integer[0], pow = Integer[1], i; + for (i = digits.length - 1; i >= 0; i--) { + val = val.add(digits[i].times(pow)); + pow = pow.times(base); + } + return isNegative ? val.negate() : val; + } + + function stringify(digit, alphabet) { + alphabet = alphabet || DEFAULT_ALPHABET; + if (digit < alphabet.length) { + return alphabet[digit]; + } + return "<" + digit + ">"; + } + + function toBase(n, base) { + base = bigInt(base); + if (base.isZero()) { + if (n.isZero()) return { value: [0], isNegative: false }; + throw new Error("Cannot convert nonzero numbers to base 0."); + } + if (base.equals(-1)) { + if (n.isZero()) return { value: [0], isNegative: false }; + if (n.isNegative()) + return { + value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber())) + .map(Array.prototype.valueOf, [1, 0]) + ), + isNegative: false + }; + + var arr = Array.apply(null, Array(n.toJSNumber() - 1)) + .map(Array.prototype.valueOf, [0, 1]); + arr.unshift([1]); + return { + value: [].concat.apply([], arr), + isNegative: false + }; + } + + var neg = false; + if (n.isNegative() && base.isPositive()) { + neg = true; + n = n.abs(); + } + if (base.isUnit()) { + if (n.isZero()) return { value: [0], isNegative: false }; + + return { + value: Array.apply(null, Array(n.toJSNumber())) + .map(Number.prototype.valueOf, 1), + isNegative: neg + }; + } + var out = []; + var left = n, divmod; + while (left.isNegative() || left.compareAbs(base) >= 0) { + divmod = left.divmod(base); + left = divmod.quotient; + var digit = divmod.remainder; + if (digit.isNegative()) { + digit = base.minus(digit).abs(); + left = left.next(); + } + out.push(digit.toJSNumber()); + } + out.push(left.toJSNumber()); + return { value: out.reverse(), isNegative: neg }; + } + + function toBaseString(n, base, alphabet) { + var arr = toBase(n, base); + return (arr.isNegative ? "-" : "") + arr.value.map(function (x) { + return stringify(x, alphabet); + }).join(''); + } + + BigInteger.prototype.toArray = function (radix) { + return toBase(this, radix); + }; + + SmallInteger.prototype.toArray = function (radix) { + return toBase(this, radix); + }; + + NativeBigInt.prototype.toArray = function (radix) { + return toBase(this, radix); + }; + + BigInteger.prototype.toString = function (radix, alphabet) { + if (radix === undefined) radix = 10; + if (radix !== 10) return toBaseString(this, radix, alphabet); + var v = this.value, l = v.length, str = String(v[--l]), zeros = "0000000", digit; + while (--l >= 0) { + digit = String(v[l]); + str += zeros.slice(digit.length) + digit; + } + var sign = this.sign ? "-" : ""; + return sign + str; + }; + + SmallInteger.prototype.toString = function (radix, alphabet) { + if (radix === undefined) radix = 10; + if (radix != 10) return toBaseString(this, radix, alphabet); + return String(this.value); + }; + + NativeBigInt.prototype.toString = SmallInteger.prototype.toString; + + NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); } + + BigInteger.prototype.valueOf = function () { + return parseInt(this.toString(), 10); + }; + BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf; + + SmallInteger.prototype.valueOf = function () { + return this.value; + }; + SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf; + NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () { + return parseInt(this.toString(), 10); + } + + function parseStringValue(v) { + if (isPrecise(+v)) { + var x = +v; + if (x === truncate(x)) + return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x); + throw new Error("Invalid integer: " + v); + } + var sign = v[0] === "-"; + if (sign) v = v.slice(1); + var split = v.split(/e/i); + if (split.length > 2) throw new Error("Invalid integer: " + split.join("e")); + if (split.length === 2) { + var exp = split[1]; + if (exp[0] === "+") exp = exp.slice(1); + exp = +exp; + if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error("Invalid integer: " + exp + " is not a valid exponent."); + var text = split[0]; + var decimalPlace = text.indexOf("."); + if (decimalPlace >= 0) { + exp -= text.length - decimalPlace - 1; + text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1); + } + if (exp < 0) throw new Error("Cannot include negative exponent part for integers"); + text += (new Array(exp + 1)).join("0"); + v = text; + } + var isValid = /^([0-9][0-9]*)$/.test(v); + if (!isValid) throw new Error("Invalid integer: " + v); + if (supportsNativeBigInt) { + return new NativeBigInt(BigInt(sign ? "-" + v : v)); + } + var r = [], max = v.length, l = LOG_BASE, min = max - l; + while (max > 0) { + r.push(+v.slice(min, max)); + min -= l; + if (min < 0) min = 0; + max -= l; + } + trim(r); + return new BigInteger(r, sign); + } + + function parseNumberValue(v) { + if (supportsNativeBigInt) { + return new NativeBigInt(BigInt(v)); + } + if (isPrecise(v)) { + if (v !== truncate(v)) throw new Error(v + " is not an integer."); + return new SmallInteger(v); + } + return parseStringValue(v.toString()); + } + + function parseValue(v) { + if (typeof v === "number") { + return parseNumberValue(v); + } + if (typeof v === "string") { + return parseStringValue(v); + } + if (typeof v === "bigint") { + return new NativeBigInt(v); + } + return v; + } + // Pre-define numbers in range [-999,999] + for (var i = 0; i < 1000; i++) { + Integer[i] = parseValue(i); + if (i > 0) Integer[-i] = parseValue(-i); + } + // Backwards compatibility + Integer.one = Integer[1]; + Integer.zero = Integer[0]; + Integer.minusOne = Integer[-1]; + Integer.max = max; + Integer.min = min; + Integer.gcd = gcd; + Integer.lcm = lcm; + Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; }; + Integer.randBetween = randBetween; + + Integer.fromArray = function (digits, base, isNegative) { + return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative); + }; + + return Integer; +})(); + +// Node.js check +if (typeof module !== "undefined" && module.hasOwnProperty("exports")) { + module.exports = bigInt; +} + +//amd check +if (typeof define === "function" && define.amd) { + define( function () { + return bigInt; + }); +} + +},{}],17:[function(require,module,exports){ +(function (Buffer){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol.for === 'function') + ? Symbol.for('nodejs.util.inspect.custom') + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + var proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf) + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +var hexSliceLookupTable = (function () { + var alphabet = '0123456789abcdef' + var table = new Array(256) + for (var i = 0; i < 16; ++i) { + var i16 = i * 16 + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +}).call(this,require("buffer").Buffer) +},{"base64-js":15,"buffer":74,"ieee754":18}],18:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + +},{}],19:[function(require,module,exports){ +module.exports = isTypedArray +isTypedArray.strict = isStrictTypedArray +isTypedArray.loose = isLooseTypedArray + +var toString = Object.prototype.toString +var names = { + '[object Int8Array]': true + , '[object Int16Array]': true + , '[object Int32Array]': true + , '[object Uint8Array]': true + , '[object Uint8ClampedArray]': true + , '[object Uint16Array]': true + , '[object Uint32Array]': true + , '[object Float32Array]': true + , '[object Float64Array]': true +} + +function isTypedArray(arr) { + return ( + isStrictTypedArray(arr) + || isLooseTypedArray(arr) + ) +} + +function isStrictTypedArray(arr) { + return ( + arr instanceof Int8Array + || arr instanceof Int16Array + || arr instanceof Int32Array + || arr instanceof Uint8Array + || arr instanceof Uint8ClampedArray + || arr instanceof Uint16Array + || arr instanceof Uint32Array + || arr instanceof Float32Array + || arr instanceof Float64Array + ) +} + +function isLooseTypedArray(arr) { + return names[toString.call(arr)] +} + +},{}],20:[function(require,module,exports){ +!function(e){function t(e,t){"use strict";var r,a="uint8array",_=t.ready.then(function(){function a(){if(0!==r._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var t=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha512","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],a=[x,E,w,S,T,Y,A,B,K,I,M,L,N,U,O,R,P,C,G,D,X,V,F,H,z,j,q,W,J,Q,Z,$,ee,te,re,ae,_e,ne,se,ce,he,oe,pe,ye,ie,le,ue,ve,de,ge,be,fe,me,ke,xe,Ee,we,Se,Te,Ye,Ae,Be,Ke,Ie,Me,Le,Ne,Ue,Oe,Re,Pe,Ce,Ge,De,Xe,Ve,Fe,He,ze,je,qe,We,Je,Qe,Ze,$e,et,tt,rt,at,_t,nt,st,ct,ht,ot,pt,yt,it,lt,ut,vt,dt,gt,bt,ft,mt,kt,xt,Et,wt,St,Tt,Yt,At,Bt,Kt,It,Mt,Lt,Nt,Ut,Ot,Rt,Pt,Ct,Gt,Dt,Xt],_=0;_=240?(o=4,c=!0):p>=224?(o=3,c=!0):p>=192?(o=2,c=!0):p<128&&(o=1,c=!0)}while(!c);for(var y=o-(n.length-h),i=0;i>8&-39)<<8|87+(t=e[n]>>>4)+(t-10>>8&-39),_+=String.fromCharCode(255&a)+String.fromCharCode(a>>>8);return _}var h={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function o(e){if(null==e)return h.URLSAFE_NO_PADDING;if(e!==h.ORIGINAL&&e!==h.ORIGINAL_NO_PADDING&&e!==h.URLSAFE&&e!=h.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function p(e,t){t=o(t),e=k(_,e,"input");var a,_=[],n=0|Math.floor(e.length/3),c=e.length-3*n,h=4*n+(0!==c?0==(2&t)?4:2+(c>>>1):0),p=new u(h+1),y=v(e);return _.push(y),_.push(p.address),0===r._sodium_bin2base64(p.address,p.length,y,e.length,t)&&b(_,"conversion failed"),p.length=h,a=s(p.to_Uint8Array()),g(_),a}function y(e,t){var r=t||a;if(!i(r))throw new Error(r+" output format is not available");if(e instanceof u){if("uint8array"===r)return e.to_Uint8Array();if("text"===r)return s(e.to_Uint8Array());if("hex"===r)return c(e.to_Uint8Array());if("base64"===r)return p(e.to_Uint8Array(),h.URLSAFE_NO_PADDING);throw new Error('What is output format "'+r+'"?')}if("object"==typeof e){for(var _=Object.keys(e),n={},o=0;o<_.length;o++)n[_[o]]=y(e[_[o]],r);return n}if("string"==typeof e)return e;throw new TypeError("Cannot format output")}function i(e){for(var t=["uint8array","text","hex","base64"],r=0;r>>24>>>8,h,o);var b=y(i,s);return g(c),b}function Be(e){var t=[];l(e);var a=new u(0|r._crypto_kdf_keybytes()),_=a.address;t.push(_),r._crypto_kdf_keygen(_);var n=y(a,e);return g(t),n}function Ke(e,t,a,_){var n=[];l(_),e=k(n,e,"clientPublicKey");var s,c=0|r._crypto_kx_publickeybytes();e.length!==c&&f(n,"invalid clientPublicKey length"),s=v(e),n.push(s),t=k(n,t,"clientSecretKey");var h,o=0|r._crypto_kx_secretkeybytes();t.length!==o&&f(n,"invalid clientSecretKey length"),h=v(t),n.push(h),a=k(n,a,"serverPublicKey");var p,i=0|r._crypto_kx_publickeybytes();a.length!==i&&f(n,"invalid serverPublicKey length"),p=v(a),n.push(p);var d=new u(0|r._crypto_kx_sessionkeybytes()),m=d.address;n.push(m);var x=new u(0|r._crypto_kx_sessionkeybytes()),E=x.address;if(n.push(E),0==(0|r._crypto_kx_client_session_keys(m,E,s,h,p))){var w=y({sharedRx:d,sharedTx:x},_);return g(n),w}b(n,"invalid usage")}function Ie(e){var t=[];l(e);var a=new u(0|r._crypto_kx_publickeybytes()),_=a.address;t.push(_);var n=new u(0|r._crypto_kx_secretkeybytes()),s=n.address;if(t.push(s),0==(0|r._crypto_kx_keypair(_,s))){var c={publicKey:y(a,e),privateKey:y(n,e),keyType:"x25519"};return g(t),c}b(t,"internal error")}function Me(e,t){var a=[];l(t),e=k(a,e,"seed");var _,n=0|r._crypto_kx_seedbytes();e.length!==n&&f(a,"invalid seed length"),_=v(e),a.push(_);var s=new u(0|r._crypto_kx_publickeybytes()),c=s.address;a.push(c);var h=new u(0|r._crypto_kx_secretkeybytes()),o=h.address;if(a.push(o),0==(0|r._crypto_kx_seed_keypair(c,o,_))){var p={publicKey:y(s,t),privateKey:y(h,t),keyType:"x25519"};return g(a),p}b(a,"internal error")}function Le(e,t,a,_){var n=[];l(_),e=k(n,e,"serverPublicKey");var s,c=0|r._crypto_kx_publickeybytes();e.length!==c&&f(n,"invalid serverPublicKey length"),s=v(e),n.push(s),t=k(n,t,"serverSecretKey");var h,o=0|r._crypto_kx_secretkeybytes();t.length!==o&&f(n,"invalid serverSecretKey length"),h=v(t),n.push(h),a=k(n,a,"clientPublicKey");var p,i=0|r._crypto_kx_publickeybytes();a.length!==i&&f(n,"invalid clientPublicKey length"),p=v(a),n.push(p);var d=new u(0|r._crypto_kx_sessionkeybytes()),m=d.address;n.push(m);var x=new u(0|r._crypto_kx_sessionkeybytes()),E=x.address;if(n.push(E),0==(0|r._crypto_kx_server_session_keys(m,E,s,h,p))){var w=y({sharedRx:d,sharedTx:x},_);return g(n),w}b(n,"invalid usage")}function Ne(e,t,a){var _=[];l(a);var n=v(e=k(_,e,"message")),s=e.length;_.push(n),t=k(_,t,"key");var c,h=0|r._crypto_onetimeauth_keybytes();t.length!==h&&f(_,"invalid key length"),c=v(t),_.push(c);var o=new u(0|r._crypto_onetimeauth_bytes()),p=o.address;if(_.push(p),0==(0|r._crypto_onetimeauth(p,n,s,0,c))){var i=y(o,a);return g(_),i}b(_,"invalid usage")}function Ue(e,t){var a=[];l(t),m(a,e,"state_address");var _=new u(0|r._crypto_onetimeauth_bytes()),n=_.address;if(a.push(n),0==(0|r._crypto_onetimeauth_final(e,n))){var s=(r._free(e),y(_,t));return g(a),s}b(a,"invalid usage")}function Oe(e,t){var a=[];l(t);var _=null;null!=e&&(_=v(e=k(a,e,"key")),e.length,a.push(_));var n=new u(144).address;if(0==(0|r._crypto_onetimeauth_init(n,_))){var s=n;return g(a),s}b(a,"invalid usage")}function Re(e){var t=[];l(e);var a=new u(0|r._crypto_onetimeauth_keybytes()),_=a.address;t.push(_),r._crypto_onetimeauth_keygen(_);var n=y(a,e);return g(t),n}function Pe(e,t,a){var _=[];l(a),m(_,e,"state_address");var n=v(t=k(_,t,"message_chunk")),s=t.length;_.push(n),0!=(0|r._crypto_onetimeauth_update(e,n,s))&&b(_,"invalid usage"),g(_)}function Ce(e,t,a){var _=[];e=k(_,e,"hash");var n,s=0|r._crypto_onetimeauth_bytes();e.length!==s&&f(_,"invalid hash length"),n=v(e),_.push(n);var c=v(t=k(_,t,"message")),h=t.length;_.push(c),a=k(_,a,"key");var o,p=0|r._crypto_onetimeauth_keybytes();a.length!==p&&f(_,"invalid key length"),o=v(a),_.push(o);var y=0==(0|r._crypto_onetimeauth_verify(n,c,h,0,o));return g(_),y}function Ge(e,t,a,_,n,s,c){var h=[];l(c),m(h,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&f(h,"keyLength must be an unsigned integer");var o=v(t=k(h,t,"password")),p=t.length;h.push(o),a=k(h,a,"salt");var i,d=0|r._crypto_pwhash_saltbytes();a.length!==d&&f(h,"invalid salt length"),i=v(a),h.push(i),m(h,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&f(h,"opsLimit must be an unsigned integer"),m(h,n,"memLimit"),("number"!=typeof n||(0|n)!==n||n<0)&&f(h,"memLimit must be an unsigned integer"),m(h,s,"algorithm"),("number"!=typeof s||(0|s)!==s||s<0)&&f(h,"algorithm must be an unsigned integer");var x=new u(0|e),E=x.address;if(h.push(E),0==(0|r._crypto_pwhash(E,e,0,o,p,0,i,_,0,n,s))){var w=y(x,c);return g(h),w}b(h,"invalid usage")}function De(e,t,a,_,n,s){var c=[];l(s),m(c,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&f(c,"keyLength must be an unsigned integer");var h=v(t=k(c,t,"password")),o=t.length;c.push(h),a=k(c,a,"salt");var p,i=0|r._crypto_pwhash_scryptsalsa208sha256_saltbytes();a.length!==i&&f(c,"invalid salt length"),p=v(a),c.push(p),m(c,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&f(c,"opsLimit must be an unsigned integer"),m(c,n,"memLimit"),("number"!=typeof n||(0|n)!==n||n<0)&&f(c,"memLimit must be an unsigned integer");var d=new u(0|e),x=d.address;if(c.push(x),0==(0|r._crypto_pwhash_scryptsalsa208sha256(x,e,0,h,o,0,p,_,0,n))){var E=y(d,s);return g(c),E}b(c,"invalid usage")}function Xe(e,t,a,_,n,s,c){var h=[];l(c);var o=v(e=k(h,e,"password")),p=e.length;h.push(o);var i=v(t=k(h,t,"salt")),d=t.length;h.push(i),m(h,a,"opsLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&f(h,"opsLimit must be an unsigned integer"),m(h,_,"r"),("number"!=typeof _||(0|_)!==_||_<0)&&f(h,"r must be an unsigned integer"),m(h,n,"p"),("number"!=typeof n||(0|n)!==n||n<0)&&f(h,"p must be an unsigned integer"),m(h,s,"keyLength"),("number"!=typeof s||(0|s)!==s||s<0)&&f(h,"keyLength must be an unsigned integer");var x=new u(0|s),E=x.address;if(h.push(E),0==(0|r._crypto_pwhash_scryptsalsa208sha256_ll(o,p,i,d,a,0,_,n,E,s))){var w=y(x,c);return g(h),w}b(h,"invalid usage")}function Ve(e,t,a,_){var n=[];l(_);var s=v(e=k(n,e,"password")),c=e.length;n.push(s),m(n,t,"opsLimit"),("number"!=typeof t||(0|t)!==t||t<0)&&f(n,"opsLimit must be an unsigned integer"),m(n,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&f(n,"memLimit must be an unsigned integer");var h=new u(0|r._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(n.push(h),0==(0|r._crypto_pwhash_scryptsalsa208sha256_str(h,s,c,0,t,0,a))){var o=r.UTF8ToString(h);return g(n),o}b(n,"invalid usage")}function Fe(e,t,a){var _=[];l(a),"string"!=typeof e&&f(_,"hashed_password must be a string");var s=v(e=n(e+"\0"));e.length,_.push(s);var c=v(t=k(_,t,"password")),h=t.length;_.push(c);var o=0==(0|r._crypto_pwhash_scryptsalsa208sha256_str_verify(s,c,h,0));return g(_),o}function He(e,t,a,_){var n=[];l(_);var s=v(e=k(n,e,"password")),c=e.length;n.push(s),m(n,t,"opsLimit"),("number"!=typeof t||(0|t)!==t||t<0)&&f(n,"opsLimit must be an unsigned integer"),m(n,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&f(n,"memLimit must be an unsigned integer");var h=new u(0|r._crypto_pwhash_strbytes()).address;if(n.push(h),0==(0|r._crypto_pwhash_str(h,s,c,0,t,0,a))){var o=r.UTF8ToString(h);return g(n),o}b(n,"invalid usage")}function ze(e,t,a){var _=[];l(a),"string"!=typeof e&&f(_,"hashed_password must be a string");var s=v(e=n(e+"\0"));e.length,_.push(s);var c=v(t=k(_,t,"password")),h=t.length;_.push(c);var o=0==(0|r._crypto_pwhash_str_verify(s,c,h,0));return g(_),o}function je(e,t,a){var _=[];l(a),e=k(_,e,"privateKey");var n,s=0|r._crypto_scalarmult_scalarbytes();e.length!==s&&f(_,"invalid privateKey length"),n=v(e),_.push(n),t=k(_,t,"publicKey");var c,h=0|r._crypto_scalarmult_scalarbytes();t.length!==h&&f(_,"invalid publicKey length"),c=v(t),_.push(c);var o=new u(0|r._crypto_scalarmult_bytes()),p=o.address;if(_.push(p),0==(0|r._crypto_scalarmult(p,n,c))){var i=y(o,a);return g(_),i}b(_,"weak public key")}function qe(e,t){var a=[];l(t),e=k(a,e,"privateKey");var _,n=0|r._crypto_scalarmult_scalarbytes();e.length!==n&&f(a,"invalid privateKey length"),_=v(e),a.push(_);var s=new u(0|r._crypto_scalarmult_scalarbytes()),c=s.address;if(a.push(c),0==(0|r._crypto_scalarmult_base(c,_))){var h=y(s,t);return g(a),h}b(a,"insecure scalar")}function We(e,t,a){var _=[];l(a),e=k(_,e,"scalar");var n,s=0|r._crypto_scalarmult_ristretto255_scalarbytes();e.length!==s&&f(_,"invalid scalar length"),n=v(e),_.push(n),t=k(_,t,"privateKey");var c,h=0|r._crypto_scalarmult_ristretto255_bytes();t.length!==h&&f(_,"invalid privateKey length"),c=v(t),_.push(c);var o=new u(0|r._crypto_scalarmult_ristretto255_bytes()),p=o.address;if(_.push(p),0==(0|r._crypto_scalarmult_ristretto255(p,n,c))){var i=y(o,a);return g(_),i}b(_,"input is zero element")}function Je(e,t){var a=[];l(t);var _=v(e=k(a,e,"scalar"));e.length,a.push(_);var n=new u(0|r._crypto_core_ristretto255_bytes()),s=n.address;if(a.push(s),0==(0|r._crypto_scalarmult_ristretto255_base(s,_))){var c=y(n,t);return g(a),c}b(a,"scalar is 0")}function Qe(e,t,a,_){var n=[];l(_);var s=v(e=k(n,e,"message")),c=e.length;n.push(s),t=k(n,t,"nonce");var h,o=0|r._crypto_secretbox_noncebytes();t.length!==o&&f(n,"invalid nonce length"),h=v(t),n.push(h),a=k(n,a,"key");var p,i=0|r._crypto_secretbox_keybytes();a.length!==i&&f(n,"invalid key length"),p=v(a),n.push(p);var d=new u(0|c),m=d.address;n.push(m);var x=new u(0|r._crypto_secretbox_macbytes()),E=x.address;if(n.push(E),0==(0|r._crypto_secretbox_detached(m,E,s,c,0,h,p))){var w=y({mac:x,cipher:d},_);return g(n),w}b(n,"invalid usage")}function Ze(e,t,a,_){var n=[];l(_);var s=v(e=k(n,e,"message")),c=e.length;n.push(s),t=k(n,t,"nonce");var h,o=0|r._crypto_secretbox_noncebytes();t.length!==o&&f(n,"invalid nonce length"),h=v(t),n.push(h),a=k(n,a,"key");var p,i=0|r._crypto_secretbox_keybytes();a.length!==i&&f(n,"invalid key length"),p=v(a),n.push(p);var d=new u(c+r._crypto_secretbox_macbytes()|0),m=d.address;if(n.push(m),0==(0|r._crypto_secretbox_easy(m,s,c,0,h,p))){var x=y(d,_);return g(n),x}b(n,"invalid usage")}function $e(e){var t=[];l(e);var a=new u(0|r._crypto_secretbox_keybytes()),_=a.address;t.push(_),r._crypto_secretbox_keygen(_);var n=y(a,e);return g(t),n}function et(e,t,a,_,n){var s=[];l(n);var c=v(e=k(s,e,"ciphertext")),h=e.length;s.push(c),t=k(s,t,"mac");var o,p=0|r._crypto_secretbox_macbytes();t.length!==p&&f(s,"invalid mac length"),o=v(t),s.push(o),a=k(s,a,"nonce");var i,d=0|r._crypto_secretbox_noncebytes();a.length!==d&&f(s,"invalid nonce length"),i=v(a),s.push(i),_=k(s,_,"key");var m,x=0|r._crypto_secretbox_keybytes();_.length!==x&&f(s,"invalid key length"),m=v(_),s.push(m);var E=new u(0|h),w=E.address;if(s.push(w),0==(0|r._crypto_secretbox_open_detached(w,c,o,h,0,i,m))){var S=y(E,n);return g(s),S}b(s,"wrong secret key for the given ciphertext")}function tt(e,t,a,_){var n=[];l(_),e=k(n,e,"ciphertext");var s,c=r._crypto_secretbox_macbytes(),h=e.length;h>>0;return g([]),t}function Ct(e,t){var a=[];l(t);for(var _=r._malloc(24),n=0;n<6;n++)r.setValue(_+4*n,r.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][n]]),"i32");0!=(0|r._randombytes_set_implementation(_))&&b(a,"unsupported implementation"),g(a)}function Gt(e){l(e),r._randombytes_stir()}function Dt(e,t){var a=[];l(t),m(a,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&f(a,"upper_bound must be an unsigned integer");var _=r._randombytes_uniform(e)>>>0;return g(a),_}function Xt(){var e=r._sodium_version_string(),t=r.UTF8ToString(e);return g([]),t}return u.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(r.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,t){if(!(e instanceof Uint8Array&&t instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var r=e.length,a=0,_=0;if(t.length!=e.length)throw new TypeError("Arguments must have the same length");for(_=0;_>=8,a+=e[_]+t[_],e[_]=255&a},e.base64_variants=h,e.compare=function(e,t){if(!(e instanceof Uint8Array&&t instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==t.length)throw new TypeError("Only instances of identical length can be compared");for(var r=0,a=1,_=e.length;_-- >0;)r|=t[_]-e[_]>>8&a,a&=(t[_]^e[_])-1>>8;return r+r+a-1},e.from_base64=function(e,t){t=o(t);var a,_=[],n=new u(3*(e=k(_,e,"input")).length/4),s=v(e),c=d(4),h=d(4);return _.push(s),_.push(n.address),_.push(n.result_bin_len_p),_.push(n.b64_end_p),0!==r._sodium_base642bin(n.address,n.length,s,e.length,0,c,h,t)&&b(_,"invalid input"),r.getValue(h,"i32")-s!==e.length&&b(_,"incomplete input"),n.length=r.getValue(c,"i32"),a=n.to_Uint8Array(),g(_),a},e.from_hex=function(e){var t,a=[],_=new u((e=k(a,e,"input")).length/2),n=v(e),s=d(4);return a.push(n),a.push(_.address),a.push(_.hex_end_p),0!==r._sodium_hex2bin(_.address,_.length,n,e.length,0,0,s)&&b(a,"invalid input"),r.getValue(s,"i32")-n!==e.length&&b(a,"incomplete input"),t=_.to_Uint8Array(),g(a),t},e.from_string=n,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var t=256,r=0,a=e.length;r>=8,t+=e[r],e[r]=255&t},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var t=0,r=0,a=e.length;r 0");var a,_=[],n=d(4),s=1,c=0,h=0|e.length,o=new u(h+t);_.push(n),_.push(o.address);for(var p=o.address,y=o.address+h+t;p>>48|h>>>32|h>>>16|h))-1>>16);return 0!==r._sodium_pad(n,o.address,e.length,t,o.length)&&b(_,"internal error"),o.length=r.getValue(n,"i32"),a=o.to_Uint8Array(),g(_),a},e.unpad=function(e,t){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((t|=0)<=0)throw new Error("block size must be > 0");var a=[],_=v(e),n=d(4);return a.push(_),a.push(n),0!==r._sodium_unpad(n,_,e.length,t)&&b(a,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,r.getValue(n,"i32")),g(a),e},e.ready=_,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=p,e.to_hex=c,e.to_string=s,e}var r="object"==typeof e.sodium&&"function"==typeof e.sodium.onload?e.sodium.onload:null;"function"==typeof define&&define.amd?define(["exports","libsodium"],t):"object"==typeof exports&&"string"!=typeof exports.nodeName?t(exports,require("libsodium")):e.sodium=t(e.commonJsStrict={},e.libsodium),r&&e.sodium.ready.then(function(){r(e.sodium)})}(this); + +},{"libsodium":21}],21:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__dirname){ +!function(A){function I(A){"use strict";var I;void 0===(I=A)&&(I={});var g=I;"object"!=typeof g.sodium&&("object"==typeof global?g=global:"object"==typeof window&&(g=window)),"object"==typeof g.sodium&&"number"==typeof g.sodium.totalMemory&&(I.TOTAL_MEMORY=g.sodium.totalMemory);var B=I;return I.ready=new Promise(function(A,I){(C=B).onAbort=I,C.print=function(A){},C.printErr=function(A){},C.onRuntimeInitialized=function(){try{C._crypto_secretbox_keybytes(),A()}catch(A){I(A)}},C.useBackupModule=function(){var A,I=void 0!==(I={})?I:{},g={};for(A in I)I.hasOwnProperty(A)&&(g[A]=I[A]);var C,Q,E,i,e=[],o=!1;C="object"==typeof window,Q="function"==typeof importScripts,E="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,o=E&&!C&&!Q,i=!C&&!o&&!Q;var c,a,n,r,t,f="";o?(f=__dirname+"/",c=function(A,I){var g;return(g=iA(A))||(r||(r=require("fs")),t||(t=require("path")),A=t.normalize(A),g=r.readFileSync(A)),I?g:g.toString()},n=function(A){var I=c(A,!0);return I.buffer||(I=new Uint8Array(I)),D(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),e=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=I),process.on("unhandledRejection",j),I.inspect=function(){return"[Emscripten Module object]"}):i?("undefined"!=typeof read&&(c=function(A){var I=iA(A);return I?QA(I):read(A)}),n=function(A){var I;return(I=iA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(D("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?e=scriptArgs:void 0!==arguments&&(e=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(C||Q)&&(Q?f=self.location.href:document.currentScript&&(f=document.currentScript.src),f=0!==f.indexOf("blob:")?f.substr(0,f.lastIndexOf("/")+1):"",c=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=iA(A);if(g)return QA(g);throw I}},Q&&(n=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=iA(A);if(g)return g;throw I}}),a=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var C=iA(A);C?I(C.buffer):g()}},B.onerror=g,B.send(null)});var w=I.print||void 0,y=I.printErr||void 0;for(A in g)g.hasOwnProperty(A)&&(I[A]=g[A]);g=null,I.arguments&&(e=I.arguments),I.thisProgram&&I.thisProgram,I.quit&&I.quit,new Array(8);var s=0;I.wasmBinary&&I.wasmBinary,I.noExitRuntime&&I.noExitRuntime;var h=!1;function D(A,I){A||j("Assertion failed: "+I)}var F,p,u,H,k,l,_,G="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function d(A,I){return A?function(A,I,g){for(var B=I+g,C=I;A[C]&&!(C>=B);)++C;if(C-I>16&&A.subarray&&G)return G.decode(A.subarray(I,C));for(var Q="";I>10,56320|1023&o)}}else Q+=String.fromCharCode((31&E)<<6|i)}else Q+=String.fromCharCode(E)}return Q}(u,A,I):""}function Y(A,I){return A%I>0&&(A+=I-A%I),A}function M(A){F=A,I.HEAP8=p=new Int8Array(A),I.HEAP16=H=new Int16Array(A),I.HEAP32=k=new Int32Array(A),I.HEAPU8=u=new Uint8Array(A),I.HEAPU16=new Uint16Array(A),I.HEAPU32=new Uint32Array(A),I.HEAPF32=l=new Float32Array(A),I.HEAPF64=_=new Float64Array(A)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var S=I.TOTAL_MEMORY||16777216;function U(A){for(;A.length>0;){var g=A.shift();if("function"!=typeof g){var B=g.func;"number"==typeof B?void 0===g.arg?I.dynCall_v(B):I.dynCall_vi(B,g.arg):B(void 0===g.arg?null:g.arg)}else g()}}S=(F=I.buffer?I.buffer:new ArrayBuffer(S)).byteLength,M(F),k[8808]=5278304;var v=[],b=[],J=[],P=[],R=Math.abs,N=Math.ceil,m=Math.floor,L=Math.min,x=0,K=null,X=null;function j(A){throw I.onAbort&&I.onAbort(A),w(A+=""),y(A),h=!0,"abort("+A+"). Build with -s ASSERTIONS=1 for more info."}I.preloadedImages={},I.preloadedAudios={};var T,q,V=null,z="data:application/octet-stream;base64,";function W(A){return String.prototype.startsWith?A.startsWith(z):0===A.indexOf(z)}var O=[function(){return I.getRandomValue()},function(){if(void 0===I.getRandomValue)try{var A="object"==typeof window?window:self,g=void 0!==A.crypto?A.crypto:A.msCrypto,B=function(){var A=new Uint32Array(1);return g.getRandomValues(A),A[0]>>>0};B(),I.getRandomValue=B}catch(A){try{var C=require("crypto"),Q=function(){var A=C.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};Q(),I.getRandomValue=Q}catch(A){throw"No secure random number generator found"}}}];function Z(A){return A}function $(A){return A.replace(/\b__Z[\w\d_]+/g,function(A){var I=Z(A);return A===I?A:I+" ["+A+"]"})}function AA(){var A=new Error;if(!A.stack){try{throw new Error(0)}catch(I){A=I}if(!A.stack)return"(no stack trace available)"}return A.stack.toString()}function IA(){return p.length}function gA(A){try{var I=new ArrayBuffer(A);if(I.byteLength!=A)return;return new Int8Array(I).set(p),aA(I),M(I),1}catch(A){}}function BA(A){return I.___errno_location&&(k[I.___errno_location()>>2]=A),A}V="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+d4UAAAAAAAAAAAAAAAAAAAAEAjJvPNn5glqO6fKhIWuZ7sr+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/LXxdYR0qMGURsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f1NpZ0VkMjU1MTkgbm8gRWQyNTUxOSBjb2xsaXNpb25zAQAAAAAAAAAAAAAAAAAAAFMtPmJ1ZmxlbiA8PSBCTEFLRTJCX0JMT0NLQllURVMAY3J5cHRvX2dlbmVyaWNoYXNoL2JsYWtlMmIvcmVmL2JsYWtlMmItcmVmLmMAYmxha2UyYl9maW5hbABvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAJGFyZ29uMmlkACRhcmdvbjJpACR2PQAkbT0ALHQ9ACxwPQAkYXJnb24yaWQkdj0AJGFyZ29uMmkkdj0AJGFyZ29uMmlkJAAkYXJnb24yaSQAInsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBiNjRfcG9zIDw9IGI2NF9sZW4Ac29kaXVtL2NvZGVjcy5jAHNvZGl1bV9iaW4yYmFzZTY0ADEuMC4xOA==";var CA=!1;function QA(A){for(var I=[],g=0;g255&&(CA&&D(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var EA="function"==typeof atob?atob:function(A){var I,g,B,C,Q,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",e="",o=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(o++))<<2|(C=i.indexOf(A.charAt(o++)))>>4,g=(15&C)<<4|(Q=i.indexOf(A.charAt(o++)))>>2,B=(3&Q)<<6|(E=i.indexOf(A.charAt(o++))),e+=String.fromCharCode(I),64!==Q&&(e+=String.fromCharCode(g)),64!==E&&(e+=String.fromCharCode(B))}while(o>2]=f,C[r+4>>2]=t,n=n+1|0}while(16!=(0|n));n=A,r=(I=E)+64|0;do{B[I>>0]=0|B[n>>0],I=I+1|0,n=n+1|0}while((0|I)<(0|r));for(C[E+88>>2]=1595750129,C[E+88+4>>2]=-1521486534,X=-1377402159^(Q[A+64>>0]|Q[A+64+1>>0]<<8|Q[A+64+2>>0]<<16|Q[A+64+3>>0]<<24),K=1359893119^(Q[A+64+4>>0]|Q[A+64+4+1>>0]<<8|Q[A+64+4+2>>0]<<16|Q[A+64+4+3>>0]<<24),S=725511199^(Q[A+72>>0]|Q[A+72+1>>0]<<8|Q[A+72+2>>0]<<16|Q[A+72+3>>0]<<24),U=-1694144372^(Q[A+72+4>>0]|Q[A+72+4+1>>0]<<8|Q[A+72+4+2>>0]<<16|Q[A+72+4+3>>0]<<24),u=-79577749^(Q[A+80>>0]|Q[A+80+1>>0]<<8|Q[A+80+2>>0]<<16|Q[A+80+3>>0]<<24),H=528734635^(Q[A+80+4>>0]|Q[A+80+4+1>>0]<<8|Q[A+80+4+2>>0]<<16|Q[A+80+4+3>>0]<<24),AA=327033209^(Q[A+88>>0]|Q[A+88+1>>0]<<8|Q[A+88+2>>0]<<16|Q[A+88+3>>0]<<24),$=1541459225^(Q[A+88+4>>0]|Q[A+88+4+1>>0]<<8|Q[A+88+4+2>>0]<<16|Q[A+88+4+3>>0]<<24),h=0|C[E+32>>2],D=0|C[E+32+4>>2],D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(yA=0|vg(0|(j=0|C[E+128>>2]),0|(T=0|C[E+128+4>>2]),0|h,0|D)),0|(wA=0|o()),0|C[E>>2],0|C[E+4>>2]))^X,(yA=0|o())^K,32)),0|(X=0|o()),-205731576,1779033703))^h,(f=0|o())^D,24),h=0|o(),IA=0|C[E+128+8>>2],gA=0|C[E+128+8+4>>2],X=0|ZI((yA=0|vg(0|(yA=0|vg(0|D,0|h,0|wA,0|yA)),0|o(),0|IA,0|gA))^K,(wA=0|o())^X,16),K=0|o(),C[E+96>>2]=X,C[E+96+4>>2]=K,f=0|vg(0|X,0|K,0|I,0|f),I=0|o(),C[E+64>>2]=f,C[E+64+4>>2]=I,h=0|ZI(f^D,I^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,W=0|C[E+40>>2],O=0|C[E+40+4>>2],O=0|ZI((s=0|vg(0|(U=0|ZI((nA=0|vg(0|(aA=0|vg(0|(r=0|C[E+128+16>>2]),0|(n=0|C[E+128+16+4>>2]),0|W,0|O)),0|(nA=0|o()),0|C[E+8>>2],0|C[E+8+4>>2]))^S,(aA=0|o())^U,32)),0|(S=0|o()),-2067093701,-1150833019))^W,(F=0|o())^O,24),W=0|o(),p=0|C[E+128+24>>2],k=0|C[E+128+24+4>>2],S=0|ZI((aA=0|vg(0|(aA=0|vg(0|O,0|W,0|nA,0|aA)),0|o(),0|p,0|k))^U,(nA=0|o())^S,16),U=0|o(),C[E+104>>2]=S,C[E+104+4>>2]=U,F=0|vg(0|S,0|U,0|s,0|F),s=0|o(),C[E+72>>2]=F,C[E+72+4>>2]=s,W=0|ZI(F^O,s^W,63),O=0|o(),m=0|C[E+48>>2],L=0|C[E+48+4>>2],L=0|ZI((z=0|vg(0|(H=0|ZI((oA=0|vg(0|(eA=0|vg(0|(a=0|C[E+128+32>>2]),0|(rA=0|C[E+128+32+4>>2]),0|m,0|L)),0|(oA=0|o()),0|C[E+16>>2],0|C[E+16+4>>2]))^u,(eA=0|o())^H,32)),0|(u=0|o()),-23791573,1013904242))^m,(Z=0|o())^L,24),m=0|o(),i=0|C[E+128+40>>2],G=0|C[E+128+40+4>>2],m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|L,0|m,0|oA,0|eA)),0|o(),0|i,0|G))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),Y=0|C[E+56>>2],d=0|C[E+56+4>>2],d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(QA=0|vg(0|(_=0|C[E+128+48>>2]),0|(l=0|C[E+128+48+4>>2]),0|Y,0|d)),0|(EA=0|o()),0|C[E+24>>2],0|C[E+24+4>>2]))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),1595750129,-1521486534))^Y,(x=0|o())^d,24),Y=0|o(),M=0|C[E+128+56>>2],v=0|C[E+128+56+4>>2],Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|d,0|Y,0|EA,0|QA)),0|o(),0|M,0|v))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),q=0|C[E+128+64>>2],V=0|C[E+128+64+4>>2],O=0|ZI((z=0|vg(0|($=0|ZI((wA=0|vg(0|(wA=0|vg(0|W,0|O,0|yA,0|wA)),0|o(),0|q,0|V))^AA,(yA=0|o())^$,32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),c=0|C[E+128+72>>2],cA=0|C[E+128+72+4>>2],AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|O,0|W,0|wA,0|yA)),0|o(),0|c,0|cA))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,Z=0|vg(0|AA,0|$,0|z,0|Z),z=0|o(),C[E+80>>2]=Z,C[E+80+4>>2]=z,W=0|ZI(Z^O,z^W,63),O=0|o(),BA=0|C[E+128+80>>2],CA=0|C[E+128+80+4>>2],L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|m,0|L,0|aA,0|nA)),0|o(),0|BA,0|CA))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),b=0|C[E+128+88>>2],J=0|C[E+128+88+4>>2],m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|L,0|m,0|nA,0|aA)),0|o(),0|b,0|J))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),t=0|C[E+128+96>>2],w=0|C[E+128+96+4>>2],d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|Y,0|d,0|eA,0|oA)),0|o(),0|t,0|w))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),e=0|C[E+128+104>>2],iA=0|C[E+128+104+4>>2],Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|d,0|Y,0|oA,0|eA)),0|o(),0|e,0|iA))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),tA=0|C[E+128+112>>2],fA=0|C[E+128+112+4>>2],D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(EA=0|vg(0|QA,0|EA,0|h,0|D)),0|o(),0|tA,0|fA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),P=0|C[E+128+120>>2],R=0|C[E+128+120+4>>2],h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|D,0|h,0|EA,0|QA)),0|o(),0|P,0|R))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|tA,0|fA,0|yA,0|wA)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|BA,0|CA)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|a,0|rA)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|q,0|V)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|c,0|cA)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|P,0|R,0|oA,0|eA)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|e,0|iA)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|_,0|l)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|IA,0|gA)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|t,0|w)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|j,0|T)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|r,0|n)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|b,0|J)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|M,0|v)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|i,0|G)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|p,0|k)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|b,0|J)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|q,0|V)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|t,0|w)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|j,0|T)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|i,0|G)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|r,0|n)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|P,0|R)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|e,0|iA)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|BA,0|CA)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|tA,0|fA)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|p,0|k)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|_,0|l)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|M,0|v)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|IA,0|gA)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|c,0|cA)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|a,0|rA)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|M,0|v)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|c,0|cA)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|p,0|k)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|IA,0|gA)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|e,0|iA)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|t,0|w)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|b,0|J)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|tA,0|fA)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|r,0|n)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|_,0|l)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|i,0|G)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|BA,0|CA)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|a,0|rA)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|j,0|T)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|P,0|R)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|q,0|V)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|c,0|cA)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|j,0|T)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|i,0|G)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|M,0|v)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|r,0|n)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|a,0|rA)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|BA,0|CA)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|P,0|R)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|tA,0|fA)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|IA,0|gA)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|b,0|J)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|t,0|w)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|_,0|l)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|q,0|V)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|p,0|k)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|e,0|iA)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|r,0|n)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|t,0|w)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|_,0|l)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|BA,0|CA)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|j,0|T)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|b,0|J)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|q,0|V)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|p,0|k)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|a,0|rA)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|e,0|iA)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|M,0|v)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|i,0|G)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|P,0|R)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|tA,0|fA)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|IA,0|gA)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|c,0|cA)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|t,0|w)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|i,0|G)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|IA,0|gA)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|P,0|R)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|tA,0|fA)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|e,0|iA)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|a,0|rA)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|BA,0|CA)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|j,0|T)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|M,0|v)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|_,0|l)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|p,0|k)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|c,0|cA)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|r,0|n)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|q,0|V)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|b,0|J)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|e,0|iA)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|b,0|J)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|M,0|v)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|tA,0|fA)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|t,0|w)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|IA,0|gA)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|p,0|k)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|c,0|cA)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|i,0|G)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|j,0|T)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|P,0|R)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|a,0|rA)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|q,0|V)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|_,0|l)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|r,0|n)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|BA,0|CA)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|_,0|l)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|P,0|R)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|tA,0|fA)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|c,0|cA)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|b,0|J)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|p,0|k)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|j,0|T)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|q,0|V)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|t,0|w)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|r,0|n)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|e,0|iA)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|M,0|v)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|IA,0|gA)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|a,0|rA)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|BA,0|CA)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|i,0|G)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|BA,0|CA)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|r,0|n)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|q,0|V)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|a,0|rA)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|M,0|v)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|_,0|l)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|IA,0|gA)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|i,0|G)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|P,0|R)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|b,0|J)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|c,0|cA)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|tA,0|fA)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|p,0|k)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|t,0|w)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|e,0|iA)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|j,0|T)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|j,0|T)),0|o(),0|h,0|D))^X,(yA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|IA,0|gA)),0|o(),0|D,0|h))^K,(wA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(sA=0|vg(0|W,0|O,0|r,0|n)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|p,0|k)),0|o(),0|O,0|W))^U,(nA=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(sA=0|vg(0|m,0|L,0|a,0|rA)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|i,0|G)),0|o(),0|L,0|m))^H,(oA=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(sA=0|vg(0|Y,0|d,0|_,0|l)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|M,0|v)),0|o(),0|d,0|Y))^$,(EA=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(wA=0|vg(0|(wA=0|vg(0|yA,0|wA,0|q,0|V)),0|o(),0|W,0|O)),$^(yA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),AA=0|ZI((yA=0|vg(0|(yA=0|vg(0|wA,0|yA,0|c,0|cA)),0|o(),0|O,0|W))^$,(wA=0|o())^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,W=0|ZI((Z=0|vg(0|AA,0|$,0|z,0|Z))^O,(z=0|o())^W,63),O=0|o(),L=0|ZI((N=0|vg(0|(K=0|ZI((nA=0|vg(0|(nA=0|vg(0|aA,0|nA,0|BA,0|CA)),0|o(),0|m,0|L))^X,(aA=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),m=0|ZI((x=0|vg(0|(X=0|ZI((aA=0|vg(0|(aA=0|vg(0|nA,0|aA,0|b,0|J)),0|o(),0|L,0|m))^K,(nA=0|o())^X,16)),0|(K=0|o()),0|N,0|x))^L,(N=0|o())^m,63),L=0|o(),d=0|ZI((I=0|vg(0|(U=0|ZI((oA=0|vg(0|(oA=0|vg(0|eA,0|oA,0|t,0|w)),0|o(),0|Y,0|d))^S,(eA=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),Y=0|ZI((f=0|vg(0|(S=0|ZI((eA=0|vg(0|(eA=0|vg(0|oA,0|eA,0|e,0|iA)),0|o(),0|d,0|Y))^U,(oA=0|o())^S,16)),0|(U=0|o()),0|I,0|f))^d,(I=0|o())^Y,63),d=0|o(),D=0|ZI((s=0|vg(0|(H=0|ZI((EA=0|vg(0|(sA=0|vg(0|h,0|D,0|tA,0|fA)),0|o(),0|QA,0|EA))^u,(QA=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),h=0|ZI((F=0|vg(0|(u=0|ZI((QA=0|vg(0|(QA=0|vg(0|EA,0|QA,0|P,0|R)),0|o(),0|D,0|h))^H,(EA=0|o())^u,16)),0|(H=0|o()),0|s,0|F))^D,(s=0|o())^h,63),D=0|o(),D=0|ZI((I=0|vg(0|(K=0|ZI((fA=0|vg(0|(fA=0|vg(0|yA,0|wA,0|tA,0|fA)),0|o(),0|h,0|D))^X,(tA=0|o())^K,32)),0|(X=0|o()),0|f,0|I))^h,(f=0|o())^D,24),h=0|o(),h=0|ZI((f=0|vg(0|(X=0|ZI((CA=0|vg(0|(CA=0|vg(0|fA,0|tA,0|BA,0|CA)),0|o(),0|D,0|h))^K,(BA=0|o())^X,16)),0|(K=0|o()),0|I,0|f))^D,(I=0|o())^h,63),D=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=D,O=0|ZI((s=0|vg(0|(U=0|ZI(S^(nA=0|vg(0|(rA=0|vg(0|W,0|O,0|a,0|rA)),0|o(),0|aA,0|nA)),U^(aA=0|o()),32)),0|(S=0|o()),0|F,0|s))^W,(F=0|o())^O,24),W=0|o(),W=0|ZI((F=0|vg(0|(S=0|ZI((V=0|vg(0|(V=0|vg(0|nA,0|aA,0|q,0|V)),0|o(),0|O,0|W))^U,(q=0|o())^S,16)),0|(U=0|o()),0|s,0|F))^O,(s=0|o())^W,63),O=0|o(),L=0|ZI((z=0|vg(0|(H=0|ZI(u^(oA=0|vg(0|(cA=0|vg(0|m,0|L,0|c,0|cA)),0|o(),0|eA,0|oA)),H^(eA=0|o()),32)),0|(u=0|o()),0|Z,0|z))^m,(Z=0|o())^L,24),m=0|o(),m=0|ZI((Z=0|vg(0|(u=0|ZI((R=0|vg(0|(R=0|vg(0|oA,0|eA,0|P,0|R)),0|o(),0|L,0|m))^H,(P=0|o())^u,16)),0|(H=0|o()),0|z,0|Z))^L,(z=0|o())^m,63),L=0|o(),d=0|ZI((N=0|vg(0|($=0|ZI((EA=0|vg(0|(iA=0|vg(0|Y,0|d,0|e,0|iA)),0|o(),0|QA,0|EA))^AA,(QA=0|o())^$,32)),0|(AA=0|o()),0|x,0|N))^Y,(x=0|o())^d,24),Y=0|o(),Y=0|ZI((x=0|vg(0|(AA=0|ZI((l=0|vg(0|(l=0|vg(0|EA,0|QA,0|_,0|l)),0|o(),0|d,0|Y))^$,(_=0|o())^AA,16)),0|($=0|o()),0|N,0|x))^d,(N=0|o())^Y,63),d=0|o(),O=0|ZI((z=0|vg(0|($=0|ZI(AA^(gA=0|vg(0|(gA=0|vg(0|CA,0|BA,0|IA,0|gA)),0|o(),0|W,0|O)),$^(IA=0|o()),32)),0|(AA=0|o()),0|Z,0|z))^W,(Z=0|o())^O,24),W=0|o(),w=0|vg(0|(w=0|vg(0|gA,0|IA,0|t,0|w)),0|o(),0|O,0|W),t=0|o(),C[E>>2]=w,C[E+4>>2]=t,AA=0|ZI(w^$,t^AA,16),$=0|o(),C[E+120>>2]=AA,C[E+120+4>>2]=$,Z=0|vg(0|AA,0|$,0|z,0|Z),z=0|o(),C[E+80>>2]=Z,C[E+80+4>>2]=z,W=0|ZI(Z^O,z^W,63),z=0|o(),C[E+40>>2]=W,C[E+40+4>>2]=z,L=0|ZI((N=0|vg(0|(K=0|ZI((T=0|vg(0|(T=0|vg(0|V,0|q,0|j,0|T)),0|o(),0|m,0|L))^X,(j=0|o())^K,32)),0|(X=0|o()),0|x,0|N))^m,(x=0|o())^L,24),m=0|o(),n=0|vg(0|(n=0|vg(0|T,0|j,0|r,0|n)),0|o(),0|L,0|m),r=0|o(),C[E+8>>2]=n,C[E+8+4>>2]=r,X=0|ZI(n^K,r^X,16),K=0|o(),C[E+96>>2]=X,C[E+96+4>>2]=K,x=0|vg(0|X,0|K,0|N,0|x),N=0|o(),C[E+88>>2]=x,C[E+88+4>>2]=N,m=0|ZI(x^L,N^m,63),N=0|o(),C[E+48>>2]=m,C[E+48+4>>2]=N,d=0|ZI((I=0|vg(0|(U=0|ZI((J=0|vg(0|(J=0|vg(0|R,0|P,0|b,0|J)),0|o(),0|Y,0|d))^S,(b=0|o())^U,32)),0|(S=0|o()),0|f,0|I))^Y,(f=0|o())^d,24),Y=0|o(),v=0|vg(0|(v=0|vg(0|J,0|b,0|M,0|v)),0|o(),0|d,0|Y),M=0|o(),C[E+16>>2]=v,C[E+16+4>>2]=M,S=0|ZI(v^U,M^S,16),M=0|o(),C[E+104>>2]=S,C[E+104+4>>2]=M,f=0|vg(0|S,0|M,0|I,0|f),I=0|o(),C[E+64>>2]=f,C[E+64+4>>2]=I,Y=0|ZI(f^d,I^Y,63),d=0|o(),C[E+56>>2]=Y,C[E+56+4>>2]=d,D=0|ZI((s=0|vg(0|(H=0|ZI((_=0|vg(0|(G=0|vg(0|h,0|D,0|i,0|G)),0|o(),0|l,0|_))^u,(l=0|o())^H,32)),0|(u=0|o()),0|F,0|s))^h,(F=0|o())^D,24),h=0|o(),k=0|vg(0|(k=0|vg(0|_,0|l,0|p,0|k)),0|o(),0|D,0|h),p=0|o(),C[E+24>>2]=k,C[E+24+4>>2]=p,u=0|ZI(k^H,p^u,16),p=0|o(),C[E+112>>2]=u,C[E+112+4>>2]=p,F=0|vg(0|u,0|p,0|s,0|F),s=0|o(),C[E+72>>2]=F,C[E+72+4>>2]=s,h=0|ZI(F^D,s^h,63),s=0|o(),C[E+32>>2]=h,C[E+32+4>>2]=s,f=w^(Q[A>>0]|Q[A+1>>0]<<8|Q[A+2>>0]<<16|Q[A+3>>0]<<24)^f,I=t^(Q[A+4>>0]|Q[A+4+1>>0]<<8|Q[A+4+2>>0]<<16|Q[A+4+3>>0]<<24)^I,B[A>>0]=f,B[A+1>>0]=f>>8,B[A+2>>0]=f>>16,B[A+3>>0]=f>>24,B[A+4>>0]=I,B[A+4+1>>0]=I>>8,B[A+4+2>>0]=I>>16,B[A+4+3>>0]=I>>24,I=1;yA=E+(I+8<<3)|0,wA=n^(Q[(sA=A+(I<<3)|0)>>0]|Q[sA+1>>0]<<8|Q[sA+2>>0]<<16|Q[sA+3>>0]<<24)^C[yA>>2],yA=r^(Q[sA+4>>0]|Q[sA+4+1>>0]<<8|Q[sA+4+2>>0]<<16|Q[sA+4+3>>0]<<24)^C[yA+4>>2],B[sA>>0]=wA,B[sA+1>>0]=wA>>8,B[sA+2>>0]=wA>>16,B[sA+3>>0]=wA>>24,B[sA+4>>0]=yA,B[sA+4+1>>0]=yA>>8,B[sA+4+2>>0]=yA>>16,B[sA+4+3>>0]=yA>>24,8!=(0|(I=I+1|0));)n=0|C[E+(I<<3)>>2],r=0|C[E+(I<<3)+4>>2];y=g}function h(A,I,g,C){A|=0,g|=0,C|=0;var Q,E,i,e,c,a,n,r,t,f,w,y,s,h,D,F,p,u,H,k,l,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0,m=0,L=0,x=0,K=0,X=0,j=0,T=0,q=0,V=0,z=0,W=0,O=0,Z=0,$=0,AA=0,IA=0,gA=0,BA=0,CA=0,QA=0,EA=0,iA=0,eA=0,oA=0,cA=0,aA=0,nA=0,rA=0,tA=0,fA=0,wA=0,yA=0,sA=0,hA=0,DA=0,FA=0,pA=0,uA=0,HA=0,kA=0,lA=0,_A=0,GA=0,dA=0,YA=0,MA=0,SA=0,UA=0,vA=0,bA=0,JA=0,PA=0,RA=0,NA=0,mA=0,LA=0,xA=0,KA=0,XA=0,jA=0,TA=0,qA=0,VA=0,zA=0,WA=0,OA=0,ZA=0,$A=0,AI=0,II=0,gI=0,BI=0,CI=0,QI=0,EI=0,iI=0,eI=0,oI=0,cI=0,aI=0,nI=0,rI=0,tI=0,fI=0,wI=0,yI=0,sI=0,hI=0,DI=0,FI=0,pI=0,uI=0,HI=0,lI=0,_I=0,GI=0,dI=0,YI=0,MI=0,SI=0,UI=0,vI=0,bI=0,JI=0,PI=0,RI=0,NI=0,mI=0,LI=0,xI=0,KI=0,XI=0,jI=0,TI=0,qI=0,VI=0,zI=0,WI=0,OI=0,ZI=0,$I=0,Ag=0,Ig=0,gg=0,Cg=0,Eg=0,eg=0,og=0,cg=0,ag=0,ng=0,tg=0,fg=0,wg=0,sg=0,hg=0,Dg=0,Fg=0,pg=0,ug=0;wA=0|Bg(0|B[(I|=0)>>0],0|B[I+1>>0],0|B[I+2>>0]),o(),UI=0|yg(0|(UI=0|kI(I+2|0)),0|o(),5),o(),uI=0|yg(0|(uI=0|Bg(0|B[I+5>>0],0|B[I+6>>0],0|B[I+7>>0])),0|o(),2),o(),SI=0|yg(0|(SI=0|kI(I+7|0)),0|o(),7),o(),yI=0|yg(0|(yI=0|kI(I+10|0)),0|o(),4),o(),CA=0|yg(0|(CA=0|Bg(0|B[I+13>>0],0|B[I+14>>0],0|B[I+15>>0])),0|o(),1),o(),FA=0|yg(0|(FA=0|kI(I+15|0)),0|o(),6),o(),_=0|yg(0|(_=0|Bg(0|B[I+18>>0],0|B[I+19>>0],0|B[I+20>>0])),0|o(),3),o(),QA=0|Bg(0|B[I+21>>0],0|B[I+22>>0],0|B[I+23>>0]),o(),q=0|yg(0|(q=0|kI(I+23|0)),0|o(),5),o(),HA=0|yg(0|(HA=0|Bg(0|B[I+26>>0],0|B[I+27>>0],0|B[I+28>>0])),0|o(),2),o(),GA=0|yg(0|(GA=0|kI(I+28|0)),0|o(),7),dA=0|o(),XI=0|Bg(0|B[g>>0],0|B[g+1>>0],0|B[g+2>>0]),o(),hI=0|yg(0|(hI=0|kI(g+2|0)),0|o(),5),o(),gI=0|yg(0|(gI=0|Bg(0|B[g+5>>0],0|B[g+6>>0],0|B[g+7>>0])),0|o(),2),o(),G=0|yg(0|(G=0|kI(g+7|0)),0|o(),7),o(),d=0|yg(0|(d=0|kI(g+10|0)),0|o(),4),o(),x=0|yg(0|(x=0|Bg(0|B[g+13>>0],0|B[g+14>>0],0|B[g+15>>0])),0|o(),1),o(),zA=0|yg(0|(zA=0|kI(g+15|0)),0|o(),6),o(),sA=0|yg(0|(sA=0|Bg(0|B[g+18>>0],0|B[g+19>>0],0|B[g+20>>0])),0|o(),3),o(),RA=0|Bg(0|B[g+21>>0],0|B[g+22>>0],0|B[g+23>>0]),o(),IA=0|yg(0|(IA=0|kI(g+23|0)),0|o(),5),o(),NI=0|yg(0|(NI=0|Bg(0|B[g+26>>0],0|B[g+27>>0],0|B[g+28>>0])),0|o(),2),o(),rA=0|yg(0|(rA=0|kI(g+28|0)),0|o(),7),nA=0|o(),LA=0|Bg(0|B[C>>0],0|B[C+1>>0],0|B[C+2>>0]),o(),BA=0|yg(0|(BA=0|kI(C+2|0)),0|o(),5),o(),KA=0|yg(0|(KA=0|Bg(0|B[C+5>>0],0|B[C+6>>0],0|B[C+7>>0])),0|o(),2),o(),bA=0|yg(0|(bA=0|kI(C+7|0)),0|o(),7),o(),PA=0|yg(0|(PA=0|kI(C+10|0)),0|o(),4),o(),WA=0|yg(0|(WA=0|Bg(0|B[C+13>>0],0|B[C+14>>0],0|B[C+15>>0])),0|o(),1),o(),_I=0|yg(0|(_I=0|kI(C+15|0)),0|o(),6),o(),U=0|yg(0|(U=0|Bg(0|B[C+18>>0],0|B[C+19>>0],0|B[C+20>>0])),0|o(),3),o(),cI=0|Bg(0|B[C+21>>0],0|B[C+22>>0],0|B[C+23>>0]),o(),TA=0|yg(0|(TA=0|kI(C+23|0)),0|o(),5),o(),tA=0|yg(0|(tA=0|Bg(0|B[C+26>>0],0|B[C+27>>0],0|B[C+28>>0])),0|o(),2),o(),FI=0|yg(0|(FI=0|kI(C+28|0)),0|o(),7),GI=0|o(),mA=0|vg(2097151&LA|0,0,0|(mA=0|Qg(2097151&XI|0,0,2097151&wA|0,0)),0|o()),LA=0|o(),F=0|Qg(2097151&hI|0,0,2097151&wA|0,0),D=0|o(),h=0|Qg(2097151&XI|0,0,2097151&UI|0,0),$A=0|o(),Z=0|Qg(2097151&gI|0,0,2097151&wA|0,0),xA=0|o(),KA=0|vg(0|(xA=0|vg(0|(vA=0|vg(0|(O=0|Qg(2097151&hI|0,0,2097151&UI|0,0)),0|o(),0|(vA=0|Qg(2097151&XI|0,0,2097151&uI|0,0)),0|o())),0|o(),0|Z,0|xA)),0|o(),2097151&KA|0,0),xA=0|o(),Z=0|Qg(2097151&G|0,0,2097151&wA|0,0),vA=0|o(),l=0|Qg(2097151&gI|0,0,2097151&UI|0,0),O=0|o(),s=0|Qg(2097151&hI|0,0,2097151&uI|0,0),y=0|o(),w=0|Qg(2097151&XI|0,0,2097151&SI|0,0),ug=0|o(),aA=0|Qg(2097151&d|0,0,2097151&wA|0,0),JA=0|o(),sg=0|Qg(2097151&G|0,0,2097151&UI|0,0),OA=0|o(),Dg=0|Qg(2097151&gI|0,0,2097151&uI|0,0),P=0|o(),PA=0|vg(0|(JA=0|vg(0|(OA=0|vg(0|(P=0|vg(0|(hg=0|vg(0|(Fg=0|Qg(2097151&hI|0,0,2097151&SI|0,0)),0|o(),0|(hg=0|Qg(2097151&XI|0,0,2097151&yI|0,0)),0|o())),0|o(),0|Dg,0|P)),0|o(),0|sg,0|OA)),0|o(),0|aA,0|JA)),0|o(),2097151&PA|0,0),JA=0|o(),aA=0|Qg(2097151&x|0,0,2097151&wA|0,0),OA=0|o(),sg=0|Qg(2097151&d|0,0,2097151&UI|0,0),P=0|o(),Dg=0|Qg(2097151&G|0,0,2097151&uI|0,0),hg=0|o(),k=0|Qg(2097151&gI|0,0,2097151&SI|0,0),Fg=0|o(),f=0|Qg(2097151&hI|0,0,2097151&yI|0,0),t=0|o(),r=0|Qg(2097151&XI|0,0,2097151&CA|0,0),pg=0|o(),I=0|Qg(2097151&zA|0,0,2097151&wA|0,0),DI=0|o(),Eg=0|Qg(2097151&x|0,0,2097151&UI|0,0),Y=0|o(),og=0|Qg(2097151&d|0,0,2097151&uI|0,0),S=0|o(),ag=0|Qg(2097151&G|0,0,2097151&SI|0,0),eg=0|o(),tg=0|Qg(2097151&gI|0,0,2097151&yI|0,0),cg=0|o(),_I=0|vg(0|(DI=0|vg(0|(Y=0|vg(0|(S=0|vg(0|(eg=0|vg(0|(cg=0|vg(0|(ng=0|vg(0|(fg=0|Qg(2097151&hI|0,0,2097151&CA|0,0)),0|o(),0|(ng=0|Qg(2097151&XI|0,0,2097151&FA|0,0)),0|o())),0|o(),0|tg,0|cg)),0|o(),0|ag,0|eg)),0|o(),0|og,0|S)),0|o(),0|Eg,0|Y)),0|o(),0|I,0|DI)),0|o(),2097151&_I|0,0),DI=0|o(),I=0|Qg(2097151&sA|0,0,2097151&wA|0,0),Y=0|o(),Eg=0|Qg(2097151&zA|0,0,2097151&UI|0,0),S=0|o(),og=0|Qg(2097151&x|0,0,2097151&uI|0,0),eg=0|o(),ag=0|Qg(2097151&d|0,0,2097151&SI|0,0),cg=0|o(),tg=0|Qg(2097151&G|0,0,2097151&yI|0,0),ng=0|o(),H=0|Qg(2097151&gI|0,0,2097151&CA|0,0),fg=0|o(),n=0|Qg(2097151&hI|0,0,2097151&FA|0,0),a=0|o(),c=0|Qg(2097151&XI|0,0,2097151&_|0,0),wg=0|o(),qI=0|Qg(2097151&RA|0,0,2097151&wA|0,0),M=0|o(),T=0|Qg(2097151&sA|0,0,2097151&UI|0,0),aI=0|o(),jI=0|Qg(2097151&zA|0,0,2097151&uI|0,0),TI=0|o(),zI=0|Qg(2097151&x|0,0,2097151&SI|0,0),j=0|o(),OI=0|Qg(2097151&d|0,0,2097151&yI|0,0),VI=0|o(),$I=0|Qg(2097151&G|0,0,2097151&CA|0,0),WI=0|o(),Ig=0|Qg(2097151&gI|0,0,2097151&FA|0,0),ZI=0|o(),cI=0|vg(0|(aI=0|vg(0|(M=0|vg(0|(TI=0|vg(0|(j=0|vg(0|(VI=0|vg(0|(WI=0|vg(0|(ZI=0|vg(0|(Ag=0|vg(0|(gg=0|Qg(2097151&hI|0,0,2097151&_|0,0)),0|o(),0|(Ag=0|Qg(2097151&XI|0,0,2097151&QA|0,0)),0|o())),0|o(),0|Ig,0|ZI)),0|o(),0|$I,0|WI)),0|o(),0|OI,0|VI)),0|o(),0|zI,0|j)),0|o(),0|jI,0|TI)),0|o(),0|qI,0|M)),0|o(),0|T,0|aI)),0|o(),2097151&cI|0,0),aI=0|o(),T=0|Qg(2097151&IA|0,0,2097151&wA|0,0),M=0|o(),qI=0|Qg(2097151&RA|0,0,2097151&UI|0,0),TI=0|o(),jI=0|Qg(2097151&sA|0,0,2097151&uI|0,0),j=0|o(),zI=0|Qg(2097151&zA|0,0,2097151&SI|0,0),VI=0|o(),OI=0|Qg(2097151&x|0,0,2097151&yI|0,0),WI=0|o(),$I=0|Qg(2097151&d|0,0,2097151&CA|0,0),ZI=0|o(),Ig=0|Qg(2097151&G|0,0,2097151&FA|0,0),Ag=0|o(),u=0|Qg(2097151&gI|0,0,2097151&_|0,0),gg=0|o(),e=0|Qg(2097151&hI|0,0,2097151&QA|0,0),i=0|o(),E=0|Qg(2097151&XI|0,0,2097151&q|0,0),Cg=0|o(),yA=0|Qg(2097151&NI|0,0,2097151&wA|0,0),fA=0|o(),W=0|Qg(2097151&IA|0,0,2097151&UI|0,0),z=0|o(),iI=0|Qg(2097151&RA|0,0,2097151&uI|0,0),EI=0|o(),JI=0|Qg(2097151&sA|0,0,2097151&SI|0,0),bI=0|o(),EA=0|Qg(2097151&zA|0,0,2097151&yI|0,0),b=0|o(),lI=0|Qg(2097151&x|0,0,2097151&CA|0,0),HI=0|o(),II=0|Qg(2097151&d|0,0,2097151&FA|0,0),AI=0|o(),rI=0|Qg(2097151&G|0,0,2097151&_|0,0),nI=0|o(),V=0|Qg(2097151&gI|0,0,2097151&QA|0,0),C=0|o(),tA=0|vg(0|(fA=0|vg(0|(z=0|vg(0|(bI=0|vg(0|(EI=0|vg(0|(b=0|vg(0|(HI=0|vg(0|(AI=0|vg(0|(nI=0|vg(0|(C=0|vg(0|(xI=0|vg(0|Qg(2097151&hI|0,0,2097151&q|0,0),0|(LI=0|o()),0|(xI=0|Qg(2097151&XI|0,0,2097151&HA|0,0)),0|o())),0|o(),0|V,0|C)),0|o(),0|rI,0|nI)),0|o(),0|II,0|AI)),0|o(),0|lI,0|HI)),0|o(),0|EA,0|b)),0|o(),0|iI,0|EI)),0|o(),0|JI,0|bI)),0|o(),0|W,0|z)),0|o(),0|yA,0|fA)),0|o(),2097151&tA|0,0),fA=0|o(),wA=0|Qg(0|rA,0|nA,2097151&wA|0,0),yA=0|o(),z=0|Qg(2097151&NI|0,0,2097151&UI|0,0),W=0|o(),bI=0|Qg(2097151&IA|0,0,2097151&uI|0,0),JI=0|o(),EI=0|Qg(2097151&RA|0,0,2097151&SI|0,0),iI=0|o(),b=0|Qg(2097151&sA|0,0,2097151&yI|0,0),EA=0|o(),HI=0|Qg(2097151&zA|0,0,2097151&CA|0,0),lI=0|o(),AI=0|Qg(2097151&x|0,0,2097151&FA|0,0),II=0|o(),nI=0|Qg(2097151&d|0,0,2097151&_|0,0),rI=0|o(),C=0|Qg(2097151&G|0,0,2097151&QA|0,0),V=0|o(),xI=0|Qg(2097151&gI|0,0,2097151&q|0,0),LI=0|o(),p=0|Qg(2097151&hI|0,0,2097151&HA|0,0),Q=0|o(),XI=0|Qg(2097151&XI|0,0,0|GA,0|dA),KI=0|o(),UI=0|Qg(0|rA,0|nA,2097151&UI|0,0),vI=0|o(),hA=0|Qg(2097151&NI|0,0,2097151&uI|0,0),pI=0|o(),PI=0|Qg(2097151&IA|0,0,2097151&SI|0,0),N=0|o(),uA=0|Qg(2097151&RA|0,0,2097151&yI|0,0),cA=0|o(),oA=0|Qg(2097151&sA|0,0,2097151&CA|0,0),RI=0|o(),SA=0|Qg(2097151&zA|0,0,2097151&FA|0,0),L=0|o(),kA=0|Qg(2097151&x|0,0,2097151&_|0,0),UA=0|o(),fI=0|Qg(2097151&d|0,0,2097151&QA|0,0),YA=0|o(),sI=0|Qg(2097151&G|0,0,2097151&q|0,0),tI=0|o(),vI=0|vg(0|(pI=0|vg(0|(N=0|vg(0|(RI=0|vg(0|(cA=0|vg(0|(L=0|vg(0|(UA=0|vg(0|(YA=0|vg(0|(tI=0|vg(0|(hI=0|vg(0|(MI=0|Qg(2097151&gI|0,0,2097151&HA|0,0)),0|(BI=0|o()),0|(hI=0|Qg(2097151&hI|0,0,0|GA,0|dA)),0|o())),0|o(),0|sI,0|tI)),0|o(),0|fI,0|YA)),0|o(),0|kA,0|UA)),0|o(),0|SA,0|L)),0|o(),0|uA,0|cA)),0|o(),0|oA,0|RI)),0|o(),0|PI,0|N)),0|o(),0|hA,0|pI)),0|o(),0|UI,0|vI),UI=0|o(),uI=0|Qg(0|rA,0|nA,2097151&uI|0,0),pI=0|o(),hA=0|Qg(2097151&NI|0,0,2097151&SI|0,0),N=0|o(),PI=0|Qg(2097151&IA|0,0,2097151&yI|0,0),RI=0|o(),oA=0|Qg(2097151&RA|0,0,2097151&CA|0,0),cA=0|o(),uA=0|Qg(2097151&sA|0,0,2097151&FA|0,0),L=0|o(),SA=0|Qg(2097151&zA|0,0,2097151&_|0,0),UA=0|o(),kA=0|Qg(2097151&x|0,0,2097151&QA|0,0),YA=0|o(),fI=0|Qg(2097151&d|0,0,2097151&q|0,0),tI=0|o(),sI=0|Qg(2097151&G|0,0,2097151&HA|0,0),hI=0|o(),gI=0|Qg(2097151&gI|0,0,0|GA,0|dA),BI=0|o(),SI=0|Qg(0|rA,0|nA,2097151&SI|0,0),MI=0|o(),dI=0|Qg(2097151&NI|0,0,2097151&yI|0,0),wI=0|o(),K=0|Qg(2097151&IA|0,0,2097151&CA|0,0),YI=0|o(),qA=0|Qg(2097151&RA|0,0,2097151&FA|0,0),$=0|o(),J=0|Qg(2097151&sA|0,0,2097151&_|0,0),g=0|o(),v=0|Qg(2097151&zA|0,0,2097151&QA|0,0),ZA=0|o(),pA=0|Qg(2097151&x|0,0,2097151&q|0,0),DA=0|o(),MI=0|vg(0|(wI=0|vg(0|(YI=0|vg(0|(g=0|vg(0|($=0|vg(0|(ZA=0|vg(0|(DA=0|vg(0|(G=0|vg(0|(mI=0|Qg(2097151&d|0,0,2097151&HA|0,0)),0|(m=0|o()),0|(G=0|Qg(2097151&G|0,0,0|GA,0|dA)),0|o())),0|o(),0|pA,0|DA)),0|o(),0|v,0|ZA)),0|o(),0|qA,0|$)),0|o(),0|J,0|g)),0|o(),0|K,0|YI)),0|o(),0|dI,0|wI)),0|o(),0|SI,0|MI),SI=0|o(),yI=0|Qg(0|rA,0|nA,2097151&yI|0,0),wI=0|o(),dI=0|Qg(2097151&NI|0,0,2097151&CA|0,0),YI=0|o(),K=0|Qg(2097151&IA|0,0,2097151&FA|0,0),g=0|o(),J=0|Qg(2097151&RA|0,0,2097151&_|0,0),$=0|o(),qA=0|Qg(2097151&sA|0,0,2097151&QA|0,0),ZA=0|o(),v=0|Qg(2097151&zA|0,0,2097151&q|0,0),DA=0|o(),pA=0|Qg(2097151&x|0,0,2097151&HA|0,0),G=0|o(),d=0|Qg(2097151&d|0,0,0|GA,0|dA),m=0|o(),CA=0|Qg(0|rA,0|nA,2097151&CA|0,0),mI=0|o(),QI=0|Qg(2097151&NI|0,0,2097151&FA|0,0),gA=0|o(),_A=0|Qg(2097151&IA|0,0,2097151&_|0,0),CI=0|o(),X=0|Qg(2097151&RA|0,0,2097151&QA|0,0),iA=0|o(),eA=0|Qg(2097151&sA|0,0,2097151&q|0,0),lA=0|o(),mI=0|vg(0|(gA=0|vg(0|(CI=0|vg(0|(lA=0|vg(0|(iA=0|vg(0|(x=0|vg(0|(R=0|Qg(2097151&zA|0,0,2097151&HA|0,0)),0|(VA=0|o()),0|(x=0|Qg(2097151&x|0,0,0|GA,0|dA)),0|o())),0|o(),0|X,0|iA)),0|o(),0|eA,0|lA)),0|o(),0|_A,0|CI)),0|o(),0|QI,0|gA)),0|o(),0|CA,0|mI),CA=0|o(),FA=0|Qg(0|rA,0|nA,2097151&FA|0,0),gA=0|o(),QI=0|Qg(2097151&NI|0,0,2097151&_|0,0),CI=0|o(),_A=0|Qg(2097151&IA|0,0,2097151&QA|0,0),lA=0|o(),eA=0|Qg(2097151&RA|0,0,2097151&q|0,0),iA=0|o(),X=0|Qg(2097151&sA|0,0,2097151&HA|0,0),x=0|o(),zA=0|Qg(2097151&zA|0,0,0|GA,0|dA),VA=0|o(),_=0|Qg(0|rA,0|nA,2097151&_|0,0),R=0|o(),XA=0|Qg(2097151&NI|0,0,2097151&QA|0,0),AA=0|o(),oI=0|Qg(2097151&IA|0,0,2097151&q|0,0),jA=0|o(),NA=0|Qg(2097151&RA|0,0,2097151&HA|0,0),eI=0|o(),R=0|vg(0|(AA=0|vg(0|(jA=0|vg(0|(eI=0|vg(0|(sA=0|Qg(2097151&sA|0,0,0|GA,0|dA)),0|o(),0|NA,0|eI)),0|o(),0|oI,0|jA)),0|o(),0|XA,0|AA)),0|o(),0|_,0|R),_=0|o(),QA=0|Qg(0|rA,0|nA,2097151&QA|0,0),AA=0|o(),XA=0|Qg(2097151&NI|0,0,2097151&q|0,0),jA=0|o(),oI=0|Qg(2097151&IA|0,0,2097151&HA|0,0),eI=0|o(),RA=0|Qg(2097151&RA|0,0,0|GA,0|dA),NA=0|o(),q=0|Qg(0|rA,0|nA,2097151&q|0,0),sA=0|o(),sA=0|vg(0|(IA=0|vg(0|Qg(2097151&NI|0,0,2097151&HA|0,0),0|(MA=0|o()),0|(IA=0|Qg(2097151&IA|0,0,0|GA,0|dA)),0|o())),0|o(),0|q,0|sA),q=0|o(),NI=0|vg(0|(HA=0|Qg(0|rA,0|nA,2097151&HA|0,0)),0|(IA=0|o()),0|(NI=0|Qg(2097151&NI|0,0,0|GA,0|dA)),0|o()),IA=0|o(),dA=0|Qg(0|rA,0|nA,0|GA,0|dA),GA=0|o(),HA=0|yg(0|(nA=0|vg(0|mA,0|LA,1048576,0)),0|(rA=0|o()),21),MA=0|o(),MA=0|vg(0|(BA=0|vg(0|($A=0|vg(0|F,0|D,0|h,0|$A)),0|o(),2097151&BA|0,0)),0|o(),0|HA,0|MA),HA=0|o(),rA=0|Ug(0|mA,0|LA,-2097152&nA|0,4095&rA|0),nA=0|o(),BA=0|yg(0|(LA=0|vg(0|KA,0|xA,1048576,0)),0|(mA=0|o()),21),$A=0|o(),$A=0|vg(0|(bA=0|vg(0|(vA=0|vg(0|(O=0|vg(0|(ug=0|vg(0|s,0|y,0|w,0|ug)),0|o(),0|l,0|O)),0|o(),0|Z,0|vA)),0|o(),2097151&bA|0,0)),0|o(),0|BA,0|$A),BA=0|o(),Z=0|ig(0|(bA=0|vg(0|PA,0|JA,1048576,0)),0|(vA=0|o()),21),O=0|o(),O=0|vg(0|(WA=0|vg(0|(OA=0|vg(0|(P=0|vg(0|(hg=0|vg(0|(Fg=0|vg(0|(pg=0|vg(0|f,0|t,0|r,0|pg)),0|o(),0|k,0|Fg)),0|o(),0|Dg,0|hg)),0|o(),0|sg,0|P)),0|o(),0|aA,0|OA)),0|o(),2097151&WA|0,0)),0|o(),0|Z,0|O),Z=0|o(),aA=0|ig(0|(WA=0|vg(0|_I,0|DI,1048576,0)),0|(OA=0|o()),21),P=0|o(),P=0|vg(0|(U=0|vg(0|(Y=0|vg(0|(S=0|vg(0|(eg=0|vg(0|(cg=0|vg(0|(ng=0|vg(0|(fg=0|vg(0|(wg=0|vg(0|n,0|a,0|c,0|wg)),0|o(),0|H,0|fg)),0|o(),0|tg,0|ng)),0|o(),0|ag,0|cg)),0|o(),0|og,0|eg)),0|o(),0|Eg,0|S)),0|o(),0|I,0|Y)),0|o(),2097151&U|0,0)),0|o(),0|aA,0|P),aA=0|o(),I=0|ig(0|(U=0|vg(0|cI,0|aI,1048576,0)),0|(Y=0|o()),21),S=0|o(),S=0|vg(0|(TA=0|vg(0|(M=0|vg(0|(j=0|vg(0|(TI=0|vg(0|(VI=0|vg(0|(WI=0|vg(0|(ZI=0|vg(0|(Ag=0|vg(0|(gg=0|vg(0|(Cg=0|vg(0|e,0|i,0|E,0|Cg)),0|o(),0|u,0|gg)),0|o(),0|Ig,0|Ag)),0|o(),0|$I,0|ZI)),0|o(),0|OI,0|WI)),0|o(),0|zI,0|VI)),0|o(),0|qI,0|TI)),0|o(),0|jI,0|j)),0|o(),0|T,0|M)),0|o(),2097151&TA|0,0)),0|o(),0|I,0|S),I=0|o(),T=0|ig(0|(TA=0|vg(0|tA,0|fA,1048576,0)),0|(M=0|o()),21),j=0|o(),j=0|vg(0|(GI=0|vg(0|(W=0|vg(0|(yA=0|vg(0|(JI=0|vg(0|(EA=0|vg(0|(iI=0|vg(0|(lI=0|vg(0|(II=0|vg(0|(rI=0|vg(0|(V=0|vg(0|(LI=0|vg(0|(KI=0|vg(0|p,0|Q,0|XI,0|KI)),0|o(),0|xI,0|LI)),0|o(),0|C,0|V)),0|o(),0|nI,0|rI)),0|o(),0|AI,0|II)),0|o(),0|HI,0|lI)),0|o(),0|EI,0|iI)),0|o(),0|b,0|EA)),0|o(),0|bI,0|JI)),0|o(),0|wA,0|yA)),0|o(),0|z,0|W)),0|o(),0|FI,0|GI)),0|o(),0|T,0|j),T=0|o(),W=0|ig(0|(GI=0|vg(0|vI,0|UI,1048576,0)),0|(FI=0|o()),21),z=0|o(),z=0|vg(0|(pI=0|vg(0|(N=0|vg(0|(RI=0|vg(0|(L=0|vg(0|(cA=0|vg(0|(UA=0|vg(0|(YA=0|vg(0|(tI=0|vg(0|(BI=0|vg(0|sI,0|hI,0|gI,0|BI)),0|o(),0|fI,0|tI)),0|o(),0|kA,0|YA)),0|o(),0|SA,0|UA)),0|o(),0|oA,0|cA)),0|o(),0|uA,0|L)),0|o(),0|PI,0|RI)),0|o(),0|hA,0|N)),0|o(),0|uI,0|pI)),0|o(),0|W,0|z),W=0|o(),N=0|ig(0|(pI=0|vg(0|MI,0|SI,1048576,0)),0|(uI=0|o()),21),hA=0|o(),hA=0|vg(0|(wI=0|vg(0|(YI=0|vg(0|(g=0|vg(0|(ZA=0|vg(0|($=0|vg(0|(DA=0|vg(0|(m=0|vg(0|pA,0|G,0|d,0|m)),0|o(),0|v,0|DA)),0|o(),0|J,0|$)),0|o(),0|qA,0|ZA)),0|o(),0|K,0|g)),0|o(),0|dI,0|YI)),0|o(),0|yI,0|wI)),0|o(),0|N,0|hA),N=0|o(),YI=0|ig(0|(wI=0|vg(0|mI,0|CA,1048576,0)),0|(yI=0|o()),21),dI=0|o(),dI=0|vg(0|(gA=0|vg(0|(CI=0|vg(0|(lA=0|vg(0|(x=0|vg(0|(VA=0|vg(0|eA,0|iA,0|zA,0|VA)),0|o(),0|X,0|x)),0|o(),0|_A,0|lA)),0|o(),0|QI,0|CI)),0|o(),0|FA,0|gA)),0|o(),0|YI,0|dI),YI=0|o(),CI=0|ig(0|(gA=0|vg(0|R,0|_,1048576,0)),0|(FA=0|o()),21),QI=0|o(),QI=0|vg(0|(AA=0|vg(0|(jA=0|vg(0|(NA=0|vg(0|oI,0|eI,0|RA,0|NA)),0|o(),0|XA,0|jA)),0|o(),0|QA,0|AA)),0|o(),0|CI,0|QI),CI=0|o(),FA=0|Ug(0|R,0|_,-2097152&gA|0,0|FA),gA=0|o(),AA=0|vg(0|NI,0|IA,0|(AA=0|ig(0|(_=0|vg(0|sA,0|q,1048576,0)),0|(R=0|o()),21)),0|o()),IA=0|o(),R=0|Ug(0|sA,0|q,-2097152&_|0,0|R),_=0|o(),NI=0|ig(0|(q=0|vg(0|dA,0|GA,1048576,0)),0|(sA=0|o()),21),QA=0|o(),sA=0|Ug(0|dA,0|GA,-2097152&q|0,0|sA),q=0|o(),jA=0|yg(0|(GA=0|vg(0|MA,0|HA,1048576,0)),0|(dA=0|o()),21),XA=0|o(),dA=0|Ug(0|MA,0|HA,-2097152&GA|0,0|dA),GA=0|o(),NA=0|ig(0|(HA=0|vg(0|$A,0|BA,1048576,0)),0|(MA=0|o()),21),RA=0|o(),MA=0|Ug(0|$A,0|BA,-2097152&HA|0,0|MA),HA=0|o(),eI=0|ig(0|(BA=0|vg(0|O,0|Z,1048576,0)),0|($A=0|o()),21),oI=0|o(),$A=0|Ug(0|O,0|Z,-2097152&BA|0,0|$A),BA=0|o(),lA=0|ig(0|(Z=0|vg(0|P,0|aA,1048576,0)),0|(O=0|o()),21),_A=0|o(),VA=0|ig(0|(x=0|vg(0|S,0|I,1048576,0)),0|(X=0|o()),21),zA=0|o(),g=0|ig(0|(iA=0|vg(0|j,0|T,1048576,0)),0|(eA=0|o()),21),K=0|o(),$=0|ig(0|(ZA=0|vg(0|z,0|W,1048576,0)),0|(qA=0|o()),21),J=0|o(),m=0|ig(0|(DA=0|vg(0|hA,0|N,1048576,0)),0|(v=0|o()),21),d=0|o(),gA=0|vg(0|(RI=0|ig(0|(G=0|vg(0|dI,0|YI,1048576,0)),0|(pA=0|o()),21)),0|o(),0|FA,0|gA),FA=0|o(),pA=0|Ug(0|dI,0|YI,-2097152&G|0,0|pA),G=0|o(),_=0|vg(0|(RI=0|ig(0|(YI=0|vg(0|QI,0|CI,1048576,0)),0|(dI=0|o()),21)),0|o(),0|R,0|_),R=0|o(),dI=0|Ug(0|QI,0|CI,-2097152&YI|0,0|dI),YI=0|o(),q=0|vg(0|(RI=0|ig(0|(CI=0|vg(0|AA,0|IA,1048576,0)),0|(QI=0|o()),21)),0|o(),0|sA,0|q),sA=0|o(),QI=0|Ug(0|AA,0|IA,-2097152&CI|0,0|QI),CI=0|o(),IA=0|Qg(0|NI,0|QA,666643,0),AA=0|o(),RI=0|Qg(0|NI,0|QA,470296,0),PI=0|o(),L=0|Qg(0|NI,0|QA,654183,0),uA=0|o(),cA=0|Qg(0|NI,0|QA,-997805,-1),oA=0|o(),UA=0|Qg(0|NI,0|QA,136657,0),SA=0|o(),d=0|vg(0|(yI=0|Ug(0|(QA=0|vg(0|mI,0|CA,0|(QA=0|Qg(0|NI,0|QA,-683901,-1)),0|o())),0|o(),-2097152&wI|0,0|yI)),0|o(),0|m,0|d),m=0|o(),yI=0|Qg(0|q,0|sA,666643,0),wI=0|o(),QA=0|Qg(0|q,0|sA,470296,0),CA=0|o(),mI=0|Qg(0|q,0|sA,654183,0),NI=0|o(),YA=0|Qg(0|q,0|sA,-997805,-1),kA=0|o(),tI=0|Qg(0|q,0|sA,136657,0),fI=0|o(),sA=0|Qg(0|q,0|sA,-683901,-1),q=0|o(),BI=0|Qg(0|QI,0|CI,666643,0),gI=0|o(),hI=0|Qg(0|QI,0|CI,470296,0),sI=0|o(),yA=0|Qg(0|QI,0|CI,654183,0),wA=0|o(),JI=0|Qg(0|QI,0|CI,-997805,-1),bI=0|o(),EA=0|Qg(0|QI,0|CI,136657,0),b=0|o(),CI=0|Qg(0|QI,0|CI,-683901,-1),QI=0|o(),J=0|vg(0|(uI=0|Ug(0|(QI=0|vg(0|(fI=0|vg(0|(oA=0|vg(0|MI,0|SI,0|cA,0|oA)),0|o(),0|tI,0|fI)),0|o(),0|CI,0|QI)),0|o(),-2097152&pI|0,0|uI)),0|o(),0|$,0|J),$=0|o(),uI=0|Qg(0|_,0|R,666643,0),pI=0|o(),QI=0|Qg(0|_,0|R,470296,0),CI=0|o(),fI=0|Qg(0|_,0|R,654183,0),tI=0|o(),oA=0|Qg(0|_,0|R,-997805,-1),cA=0|o(),SI=0|Qg(0|_,0|R,136657,0),MI=0|o(),R=0|Qg(0|_,0|R,-683901,-1),_=0|o(),iI=0|Qg(0|dI,0|YI,666643,0),EI=0|o(),lI=0|Qg(0|dI,0|YI,470296,0),HI=0|o(),II=0|Qg(0|dI,0|YI,654183,0),AI=0|o(),rI=0|Qg(0|dI,0|YI,-997805,-1),nI=0|o(),V=0|Qg(0|dI,0|YI,136657,0),C=0|o(),YI=0|Qg(0|dI,0|YI,-683901,-1),dI=0|o(),K=0|vg(0|(FI=0|Ug(0|(dI=0|vg(0|(MI=0|vg(0|(UI=0|vg(0|(bI=0|vg(0|(PI=0|vg(0|mI,0|NI,0|RI,0|PI)),0|o(),0|JI,0|bI)),0|o(),0|vI,0|UI)),0|o(),0|SI,0|MI)),0|o(),0|YI,0|dI)),0|o(),-2097152&GI|0,0|FI)),0|o(),0|g,0|K),g=0|o(),OA=0|Ug(0|(oI=0|vg(0|(FI=0|vg(0|_I,0|DI,0|(FI=0|Qg(0|gA,0|FA,666643,0)),0|o())),0|o(),0|eI,0|oI)),0|o(),-2097152&WA|0,0|OA),WA=0|o(),oI=0|Qg(0|gA,0|FA,470296,0),eI=0|o(),FI=0|Qg(0|gA,0|FA,654183,0),DI=0|o(),_A=0|vg(0|(Y=0|Ug(0|(aI=0|vg(0|(DI=0|vg(0|(pI=0|vg(0|lI,0|HI,0|uI,0|pI)),0|o(),0|FI,0|DI)),0|o(),0|cI,0|aI)),0|o(),-2097152&U|0,0|Y)),0|o(),0|lA,0|_A),lA=0|o(),Y=0|Qg(0|gA,0|FA,-997805,-1),U=0|o(),aI=0|Qg(0|gA,0|FA,136657,0),cI=0|o(),M=0|Ug(0|(zA=0|vg(0|(fA=0|vg(0|(cI=0|vg(0|(nI=0|vg(0|(tI=0|vg(0|(wI=0|vg(0|hI,0|sI,0|yI,0|wI)),0|o(),0|fI,0|tI)),0|o(),0|rI,0|nI)),0|o(),0|aI,0|cI)),0|o(),0|tA,0|fA)),0|o(),0|VA,0|zA)),0|o(),-2097152&TA|0,0|M),TA=0|o(),FA=0|Qg(0|gA,0|FA,-683901,-1),gA=0|o(),fA=0|ig(0|(zA=0|vg(0|OA,0|WA,1048576,0)),0|(VA=0|o()),21),tA=0|o(),tA=0|vg(0|(O=0|Ug(0|(aA=0|vg(0|(EI=0|vg(0|oI,0|eI,0|iI,0|EI)),0|o(),0|P,0|aA)),0|o(),-2097152&Z|0,0|O)),0|o(),0|fA,0|tA),fA=0|o(),aA=0|ig(0|(O=0|vg(0|_A,0|lA,1048576,0)),0|(Z=0|o()),21),P=0|o(),P=0|vg(0|(X=0|Ug(0|(I=0|vg(0|(U=0|vg(0|(AI=0|vg(0|(gI=0|vg(0|QI,0|CI,0|BI,0|gI)),0|o(),0|II,0|AI)),0|o(),0|Y,0|U)),0|o(),0|S,0|I)),0|o(),-2097152&x|0,0|X)),0|o(),0|aA,0|P),aA=0|o(),I=0|ig(0|(X=0|vg(0|M,0|TA,1048576,0)),0|(x=0|o()),21),S=0|o(),S=0|vg(0|(eA=0|Ug(0|(T=0|vg(0|(gA=0|vg(0|(C=0|vg(0|(cA=0|vg(0|(wA=0|vg(0|(AA=0|vg(0|QA,0|CA,0|IA,0|AA)),0|o(),0|yA,0|wA)),0|o(),0|oA,0|cA)),0|o(),0|V,0|C)),0|o(),0|FA,0|gA)),0|o(),0|j,0|T)),0|o(),-2097152&iA|0,0|eA)),0|o(),0|I,0|S),I=0|o(),T=0|ig(0|(eA=0|vg(0|K,0|g,1048576,0)),0|(iA=0|o()),21),j=0|o(),j=0|vg(0|(qA=0|Ug(0|(W=0|vg(0|(_=0|vg(0|(b=0|vg(0|(uA=0|vg(0|YA,0|kA,0|L,0|uA)),0|o(),0|EA,0|b)),0|o(),0|R,0|_)),0|o(),0|z,0|W)),0|o(),-2097152&ZA|0,0|qA)),0|o(),0|T,0|j),T=0|o(),iA=0|Ug(0|K,0|g,-2097152&eA|0,0|iA),eA=0|o(),qA=0|ig(0|(g=0|vg(0|J,0|$,1048576,0)),0|(K=0|o()),21),ZA=0|o(),ZA=0|vg(0|(v=0|Ug(0|(N=0|vg(0|(SA=0|vg(0|sA,0|q,0|UA,0|SA)),0|o(),0|hA,0|N)),0|o(),-2097152&DA|0,0|v)),0|o(),0|qA,0|ZA),qA=0|o(),K=0|Ug(0|J,0|$,-2097152&g|0,0|K),g=0|o(),G=0|vg(0|(v=0|ig(0|($=0|vg(0|d,0|m,1048576,0)),0|(J=0|o()),21)),0|o(),0|pA,0|G),pA=0|o(),J=0|Ug(0|d,0|m,-2097152&$|0,0|J),$=0|o(),v=0|ig(0|(m=0|vg(0|tA,0|fA,1048576,0)),0|(d=0|o()),21),DA=0|o(),SA=0|ig(0|(N=0|vg(0|P,0|aA,1048576,0)),0|(hA=0|o()),21),UA=0|o(),eA=0|vg(0|(W=0|ig(0|(q=0|vg(0|S,0|I,1048576,0)),0|(sA=0|o()),21)),0|o(),0|iA,0|eA),iA=0|o(),sA=0|Ug(0|S,0|I,-2097152&q|0,0|sA),q=0|o(),g=0|vg(0|(W=0|ig(0|(I=0|vg(0|j,0|T,1048576,0)),0|(S=0|o()),21)),0|o(),0|K,0|g),K=0|o(),S=0|Ug(0|j,0|T,-2097152&I|0,0|S),I=0|o(),$=0|vg(0|(W=0|ig(0|(T=0|vg(0|ZA,0|qA,1048576,0)),0|(j=0|o()),21)),0|o(),0|J,0|$),J=0|o(),j=0|Ug(0|ZA,0|qA,-2097152&T|0,0|j),T=0|o(),qA=0|vg(0|$A,0|BA,0|(qA=0|Qg(0|G,0|pA,666643,0)),0|o()),BA=0|o(),$A=0|Qg(0|G,0|pA,470296,0),ZA=0|o(),W=0|Qg(0|G,0|pA,654183,0),z=0|o(),_=0|Qg(0|G,0|pA,-997805,-1),R=0|o(),b=0|Qg(0|G,0|pA,136657,0),EA=0|o(),x=0|Ug(0|(UA=0|vg(0|(pA=0|vg(0|M,0|TA,0|(pA=0|Qg(0|G,0|pA,-683901,-1)),0|o())),0|o(),0|SA,0|UA)),0|o(),-2097152&X|0,0|x),X=0|o(),UA=0|Qg(0|$,0|J,666643,0),SA=0|o(),pA=0|vg(0|qA,0|BA,0|(pA=0|Qg(0|$,0|J,470296,0)),0|o()),BA=0|o(),qA=0|Qg(0|$,0|J,654183,0),TA=0|o(),M=0|Qg(0|$,0|J,-997805,-1),G=0|o(),uA=0|Qg(0|$,0|J,136657,0),L=0|o(),J=0|Qg(0|$,0|J,-683901,-1),$=0|o(),kA=0|vg(0|MA,0|HA,0|(kA=0|Qg(0|j,0|T,666643,0)),0|o()),HA=0|o(),MA=0|Qg(0|j,0|T,470296,0),YA=0|o(),gA=0|vg(0|pA,0|BA,0|(gA=0|Qg(0|j,0|T,654183,0)),0|o()),BA=0|o(),pA=0|Qg(0|j,0|T,-997805,-1),FA=0|o(),C=0|Qg(0|j,0|T,136657,0),V=0|o(),T=0|Qg(0|j,0|T,-683901,-1),j=0|o(),j=0|vg(0|(L=0|vg(0|(Z=0|Ug(0|(DA=0|vg(0|(R=0|vg(0|_A,0|lA,0|_,0|R)),0|o(),0|v,0|DA)),0|o(),-2097152&O|0,0|Z)),0|o(),0|uA,0|L)),0|o(),0|T,0|j),T=0|o(),L=0|Qg(0|g,0|K,666643,0),uA=0|o(),Z=0|Qg(0|g,0|K,470296,0),O=0|o(),DA=0|Qg(0|g,0|K,654183,0),v=0|o(),R=0|Qg(0|g,0|K,-997805,-1),_=0|o(),lA=0|Qg(0|g,0|K,136657,0),_A=0|o(),K=0|Qg(0|g,0|K,-683901,-1),g=0|o(),cA=0|Qg(0|S,0|I,666643,0),oA=0|o(),wA=0|Qg(0|S,0|I,470296,0),yA=0|o(),AA=0|Qg(0|S,0|I,654183,0),IA=0|o(),CA=0|Qg(0|S,0|I,-997805,-1),QA=0|o(),U=0|Qg(0|S,0|I,136657,0),Y=0|o(),I=0|Qg(0|S,0|I,-683901,-1),S=0|o(),S=0|vg(0|(_A=0|vg(0|(FA=0|vg(0|(TA=0|vg(0|(VA=0|Ug(0|(WA=0|vg(0|$A,0|ZA,0|OA,0|WA)),0|o(),-2097152&zA|0,0|VA)),0|o(),0|qA,0|TA)),0|o(),0|pA,0|FA)),0|o(),0|lA,0|_A)),0|o(),0|I,0|S),I=0|o(),nA=0|vg(0|(_A=0|Qg(0|eA,0|iA,666643,0)),0|o(),0|rA,0|nA),rA=0|o(),_A=0|Qg(0|eA,0|iA,470296,0),lA=0|o(),FA=0|Qg(0|eA,0|iA,654183,0),pA=0|o(),yA=0|vg(0|(uA=0|vg(0|(pA=0|vg(0|(mA=0|Ug(0|(xA=0|vg(0|jA,0|XA,0|KA,0|xA)),0|o(),-2097152&LA|0,0|mA)),0|o(),0|FA,0|pA)),0|o(),0|L,0|uA)),0|o(),0|wA,0|yA),wA=0|o(),uA=0|Qg(0|eA,0|iA,-997805,-1),L=0|o(),pA=0|Qg(0|eA,0|iA,136657,0),FA=0|o(),QA=0|vg(0|(v=0|vg(0|(FA=0|vg(0|(YA=0|vg(0|(SA=0|vg(0|(vA=0|Ug(0|(JA=0|vg(0|NA,0|RA,0|PA,0|JA)),0|o(),-2097152&bA|0,0|vA)),0|o(),0|UA,0|SA)),0|o(),0|MA,0|YA)),0|o(),0|pA,0|FA)),0|o(),0|DA,0|v)),0|o(),0|CA,0|QA),CA=0|o(),iA=0|Qg(0|eA,0|iA,-683901,-1),eA=0|o(),FA=0|ig(0|(v=0|vg(0|nA,0|rA,1048576,0)),0|(DA=0|o()),21),pA=0|o(),pA=0|vg(0|(oA=0|vg(0|(lA=0|vg(0|dA,0|GA,0|_A,0|lA)),0|o(),0|cA,0|oA)),0|o(),0|FA,0|pA),FA=0|o(),DA=0|Ug(0|nA,0|rA,-2097152&v|0,0|DA),v=0|o(),oA=0|ig(0|(rA=0|vg(0|yA,0|wA,1048576,0)),0|(nA=0|o()),21),cA=0|o(),cA=0|vg(0|(IA=0|vg(0|(O=0|vg(0|(L=0|vg(0|kA,0|HA,0|uA,0|L)),0|o(),0|Z,0|O)),0|o(),0|AA,0|IA)),0|o(),0|oA,0|cA),oA=0|o(),O=0|ig(0|(IA=0|vg(0|QA,0|CA,1048576,0)),0|(AA=0|o()),21),Z=0|o(),Z=0|vg(0|(Y=0|vg(0|(_=0|vg(0|(eA=0|vg(0|gA,0|BA,0|iA,0|eA)),0|o(),0|R,0|_)),0|o(),0|U,0|Y)),0|o(),0|O,0|Z),O=0|o(),_=0|ig(0|(Y=0|vg(0|S,0|I,1048576,0)),0|(U=0|o()),21),R=0|o(),R=0|vg(0|(g=0|vg(0|(V=0|vg(0|(G=0|vg(0|(d=0|Ug(0|(z=0|vg(0|tA,0|fA,0|W,0|z)),0|o(),-2097152&m|0,0|d)),0|o(),0|M,0|G)),0|o(),0|C,0|V)),0|o(),0|K,0|g)),0|o(),0|_,0|R),_=0|o(),U=0|Ug(0|S,0|I,-2097152&Y|0,0|U),Y=0|o(),g=0|ig(0|(I=0|vg(0|j,0|T,1048576,0)),0|(S=0|o()),21),K=0|o(),K=0|vg(0|(hA=0|Ug(0|(aA=0|vg(0|(EA=0|vg(0|J,0|$,0|b,0|EA)),0|o(),0|P,0|aA)),0|o(),-2097152&N|0,0|hA)),0|o(),0|g,0|K),g=0|o(),S=0|Ug(0|j,0|T,-2097152&I|0,0|S),I=0|o(),hA=0|vg(0|sA,0|q,0|(hA=0|ig(0|(T=0|vg(0|x,0|X,1048576,0)),0|(j=0|o()),21)),0|o()),q=0|o(),aA=0|ig(0|(sA=0|vg(0|pA,0|FA,1048576,0)),0|(N=0|o()),21),P=0|o(),$=0|ig(0|(EA=0|vg(0|cA,0|oA,1048576,0)),0|(b=0|o()),21),J=0|o(),G=0|vg(0|U,0|Y,0|(G=0|ig(0|(V=0|vg(0|Z,0|O,1048576,0)),0|(C=0|o()),21)),0|o()),Y=0|o(),d=0|vg(0|S,0|I,0|(d=0|ig(0|(U=0|vg(0|R,0|_,1048576,0)),0|(M=0|o()),21)),0|o()),I=0|o(),M=0|Ug(0|R,0|_,-2097152&U|0,0|M),U=0|o(),S=0|ig(0|(_=0|vg(0|K,0|g,1048576,0)),0|(R=0|o()),21),m=0|o(),R=0|Ug(0|K,0|g,-2097152&_|0,0|R),_=0|o(),z=0|ig(0|(g=0|vg(0|hA,0|q,1048576,0)),0|(K=0|o()),21),W=0|o(),K=0|Ug(0|hA,0|q,-2097152&g|0,0|K),g=0|o(),q=0|vg(0|DA,0|v,0|(q=0|Qg(0|z,0|W,666643,0)),0|o()),v=0|o(),DA=0|Qg(0|z,0|W,470296,0),hA=0|o(),fA=0|Qg(0|z,0|W,654183,0),tA=0|o(),eA=0|Qg(0|z,0|W,-997805,-1),iA=0|o(),BA=0|Qg(0|z,0|W,136657,0),gA=0|o(),W=0|Qg(0|z,0|W,-683901,-1),z=0|o(),v=0|ig(0|q,0|v,21),L=0|o(),v=0|ig(0|(L=0|vg(0|(N=0|Ug(0|(hA=0|vg(0|pA,0|FA,0|DA,0|hA)),0|o(),-2097152&sA|0,0|N)),0|o(),0|v,0|L)),0|o(),21),N=0|o(),v=0|ig(0|(N=0|vg(0|(P=0|vg(0|(nA=0|Ug(0|(tA=0|vg(0|yA,0|wA,0|fA,0|tA)),0|o(),-2097152&rA|0,0|nA)),0|o(),0|aA,0|P)),0|o(),0|v,0|N)),0|o(),21),P=0|o(),v=0|ig(0|(P=0|vg(0|(b=0|Ug(0|(iA=0|vg(0|cA,0|oA,0|eA,0|iA)),0|o(),-2097152&EA|0,0|b)),0|o(),0|v,0|P)),0|o(),21),b=0|o(),v=0|ig(0|(b=0|vg(0|(J=0|vg(0|(AA=0|Ug(0|(gA=0|vg(0|QA,0|CA,0|BA,0|gA)),0|o(),-2097152&IA|0,0|AA)),0|o(),0|$,0|J)),0|o(),0|v,0|b)),0|o(),21),J=0|o(),R=0|ig(0|(_=0|vg(0|(I=0|ig(0|(M=0|vg(0|d,0|I,0|(M=0|ig(0|(U=0|vg(0|(Y=0|ig(0|(v=0|vg(0|G,0|Y,0|(v=0|ig(0|(J=0|vg(0|(C=0|Ug(0|(z=0|vg(0|Z,0|O,0|W,0|z)),0|o(),-2097152&V|0,0|C)),0|o(),0|v,0|J)),0|o(),21)),0|o())),0|o(),21)),0|o(),0|M,0|U)),0|o(),21)),0|o())),0|o(),21)),0|o(),0|R,0|_)),0|o(),21),I=0|o(),q=0|vg(0|(j=0|Qg(0|(K=0|ig(0|(g=0|vg(0|(R=0|ig(0|(I=0|vg(0|(j=0|Ug(0|(X=0|vg(0|S,0|m,0|x,0|X)),0|o(),-2097152&T|0,0|j)),0|o(),0|R,0|I)),0|o(),21)),0|o(),0|K,0|g)),0|o(),21)),0|(R=0|o()),666643,0)),0|o(),2097151&q|0,0),j=0|o(),L=0|vg(0|(T=0|Qg(0|K,0|R,470296,0)),0|o(),2097151&L|0,0),T=0|o(),N=0|vg(0|(X=0|Qg(0|K,0|R,654183,0)),0|o(),2097151&N|0,0),X=0|o(),P=0|vg(0|(x=0|Qg(0|K,0|R,-997805,-1)),0|o(),2097151&P|0,0),x=0|o(),b=0|vg(0|(m=0|Qg(0|K,0|R,136657,0)),0|o(),2097151&b|0,0),m=0|o(),g=0|vg(0|(C=0|ig(0|(I=0|vg(0|(G=0|ig(0|(_=0|vg(0|(Y=0|ig(0|(M=0|vg(0|(d=0|ig(0|(U=0|vg(0|(S=0|ig(0|(v=0|vg(0|(J=0|ig(0|(b=0|vg(0|(J=0|vg(0|(R=0|Qg(0|K,0|R,-683901,-1)),0|o(),2097151&J|0,0)),0|(R=0|o()),0|(b=0|ig(0|(P=0|vg(0|b,0|m,0|(P=0|ig(0|(N=0|vg(0|P,0|x,0|(N=0|ig(0|(L=0|vg(0|N,0|X,0|(L=0|ig(0|(K=0|vg(0|L,0|T,0|(K=0|ig(0|q,0|j,21)),0|o())),0|(T=0|o()),21)),0|o())),0|(X=0|o()),21)),0|o())),0|(x=0|o()),21)),0|o())),0|(m=0|o()),21)),0|o())),0|(R=0|o()),21)),0|o(),2097151&v|0,0)),0|(J=0|o()),21)),0|o(),2097151&U|0,0)),0|(S=0|o()),21)),0|o(),2097151&M|0,0)),0|(d=0|o()),21)),0|o(),2097151&_|0,0)),0|(Y=0|o()),21)),0|o(),2097151&I|0,0)),0|(G=0|o()),21)),0|o(),2097151&g|0,0),C=0|o(),B[A>>0]=q,V=0|yg(0|q,0|j,8),o(),B[A+1>>0]=V,j=0|yg(0|q,0|j,16),o(),q=0|rg(2097151&K|0,0,5),o(),B[A+2>>0]=q|31&j,j=0|yg(0|K,0|T,3),o(),B[A+3>>0]=j,T=0|yg(0|K,0|T,11),o(),B[A+4>>0]=T,K=0|yg(2097151&K|0,0,19),T=0|o(),j=0|rg(2097151&L|0,0,2),o(),B[A+5>>0]=j|K,X=0|yg(0|L,0|X,6),o(),B[A+6>>0]=X,L=0|yg(2097151&L|0,0,14),X=0|o(),K=0|rg(2097151&N|0,0,7),o(),B[A+7>>0]=K|L,L=0|yg(0|N,0|x,1),o(),B[A+8>>0]=L,x=0|yg(0|N,0|x,9),o(),B[A+9>>0]=x,N=0|yg(2097151&N|0,0,17),x=0|o(),L=0|rg(2097151&P|0,0,4),o(),B[A+10>>0]=L|N,N=0|yg(0|P,0|m,4),o(),B[A+11>>0]=N,m=0|yg(0|P,0|m,12),o(),B[A+12>>0]=m,P=0|yg(2097151&P|0,0,20),m=0|o(),N=0|rg(2097151&b|0,0,1),o(),B[A+13>>0]=N|P,R=0|yg(0|b,0|R,7),o(),B[A+14>>0]=R,b=0|yg(2097151&b|0,0,15),R=0|o(),P=0|rg(2097151&v|0,0,6),o(),B[A+15>>0]=P|b,b=0|yg(0|v,0|J,2),o(),B[A+16>>0]=b,J=0|yg(0|v,0|J,10),o(),B[A+17>>0]=J,v=0|yg(2097151&v|0,0,18),J=0|o(),b=0|rg(0|U,0|S,3),o(),B[A+18>>0]=b|v,v=0|yg(0|U,0|S,5),o(),B[A+19>>0]=v,S=0|yg(0|U,0|S,13),o(),B[A+20>>0]=S,B[A+21>>0]=M,S=0|yg(0|M,0|d,8),o(),B[A+22>>0]=S,d=0|yg(0|M,0|d,16),o(),M=0|rg(2097151&_|0,0,5),o(),B[A+23>>0]=M|31&d,d=0|yg(0|_,0|Y,3),o(),B[A+24>>0]=d,Y=0|yg(0|_,0|Y,11),o(),B[A+25>>0]=Y,_=0|yg(2097151&_|0,0,19),Y=0|o(),d=0|rg(2097151&I|0,0,2),o(),B[A+26>>0]=d|_,G=0|yg(0|I,0|G,6),o(),B[A+27>>0]=G,I=0|yg(2097151&I|0,0,14),G=0|o(),_=0|rg(0|g,0|C,7),o(),B[A+28>>0]=_|I,I=0|yg(0|g,0|C,1),o(),B[A+29>>0]=I,I=0|yg(0|g,0|C,9),o(),B[A+30>>0]=I,C=0|ig(0|g,0|C,17),o(),B[A+31>>0]=C}function D(A,I,g,B){A|=0,B|=0;var Q=0,E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0,m=0,L=0,x=0,K=0,X=0;!function(A,I){A|=0,I|=0;var g=0,B=0,Q=0,E=0;g=0;do{E=0|jA(I+(g<<3)|0),Q=0|o(),C[(B=A+(g<<3)|0)>>2]=E,C[B+4>>2]=Q,g=g+1|0}while(16!=(0|g))}(g|=0,I|=0),Q=A,E=(I=B)+64|0;do{C[I>>2]=C[Q>>2],I=I+4|0,Q=Q+4|0}while((0|I)<(0|E));I=0|C[g>>2],Q=0|C[g+4>>2],D=0;do{if(y=0|ZI(H=0|C[B+32>>2],e=0|C[B+32+4>>2],14),r=0|o(),G=0|ZI(H,e,18),r=(0|o())^r,L=0|ZI(H,e,41),r^=0|o(),b=0|C[B+40>>2],i=0|C[B+40+4>>2],h=0|C[B+48>>2],E=0|C[B+48+4>>2],c=0|C[(P=32416+(D<<3)|0)>>2],P=0|C[P+4>>2],t=0|C[B+56>>2],u=0|C[B+56+4>>2],P=0|vg(0|(u=0|vg(0|(P=0|vg(0|(P=0|vg(0|(r=0|vg(0|I,0|Q,G^y^L|0,0|r)),0|o(),0|c,0|P)),0|o(),(h^b)&H^h|0,(E^i)&e^E|0)),0|o(),0|t,0|u)),0|(t=0|o()),0|C[B+24>>2],0|C[B+24+4>>2]),c=0|o(),C[B+24>>2]=P,C[B+24+4>>2]=c,y=0|ZI(r=0|C[B>>2],L=0|C[B+4>>2],28),I=0|o(),G=0|ZI(r,L,34),I=(0|o())^I,U=0|ZI(r,L,39),I^=0|o(),n=0|C[B+8>>2],m=0|C[B+8+4>>2],a=0|C[B+16>>2],N=0|C[B+16+4>>2],t=0|vg(0|(t=0|vg(G^y^U|0,0|I,0|u,0|t)),0|o(),(a|n)&r|a&n|0,(N|m)&L|N&m|0),u=0|o(),C[B+56>>2]=t,C[B+56+4>>2]=u,I=0|ZI(P,c,14),U=0|o(),y=0|ZI(P,c,18),U=(0|o())^U,G=0|ZI(P,c,41),U^=0|o(),f=0|C[g+((w=1|D)<<3)>>2],Q=0|C[g+(w<<3)+4>>2],s=0|C[32416+(w<<3)>>2],d=0|C[32416+(w<<3)+4>>2],N=0|vg(0|(d=0|vg(0|(Q=0|vg(0|(U=0|vg(0|(E=0|vg(P&(b^H)^b|0,c&(i^e)^i|0,0|h,0|E)),0|o(),y^I^G|0,0|U)),0|o(),0|f,0|Q)),0|o(),0|s,0|d)),0|(s=0|o()),0|a,0|N),a=0|o(),C[B+16>>2]=N,C[B+16+4>>2]=a,Q=0|ZI(t,u,28),f=0|o(),U=0|ZI(t,u,34),f=(0|o())^f,G=0|ZI(t,u,39),f^=0|o(),f=0|vg(0|(s=0|vg(0|d,0|s,t&(n|r)|n&r|0,u&(m|L)|m&L|0)),0|o(),U^Q^G|0,0|f),G=0|o(),C[B+48>>2]=f,C[B+48+4>>2]=G,Q=0|ZI(N,a,14),U=0|o(),s=0|ZI(N,a,18),U=(0|o())^U,d=0|ZI(N,a,41),U^=0|o(),y=0|C[g+((I=2|D)<<3)>>2],E=0|C[g+(I<<3)+4>>2],h=0|C[32416+(I<<3)>>2],Y=0|C[32416+(I<<3)+4>>2],m=0|vg(0|(Y=0|vg(0|(E=0|vg(0|(U=0|vg(0|(i=0|vg(N&(P^H)^H|0,a&(c^e)^e|0,0|b,0|i)),0|o(),s^Q^d|0,0|U)),0|o(),0|y,0|E)),0|o(),0|h,0|Y)),0|(h=0|o()),0|n,0|m),n=0|o(),C[B+8>>2]=m,C[B+8+4>>2]=n,E=0|ZI(f,G,28),y=0|o(),U=0|ZI(f,G,34),y=(0|o())^y,d=0|ZI(f,G,39),y^=0|o(),y=0|vg(0|(h=0|vg(0|Y,0|h,f&(t|r)|t&r|0,G&(u|L)|u&L|0)),0|o(),U^E^d|0,0|y),d=0|o(),C[B+40>>2]=y,C[B+40+4>>2]=d,E=0|ZI(m,n,14),U=0|o(),h=0|ZI(m,n,18),U=(0|o())^U,Y=0|ZI(m,n,41),U^=0|o(),s=0|C[g+((Q=3|D)<<3)>>2],i=0|C[g+(Q<<3)+4>>2],b=0|C[32416+(Q<<3)>>2],F=0|C[32416+(Q<<3)+4>>2],L=0|vg(0|(F=0|vg(0|(i=0|vg(0|(U=0|vg(0|(e=0|vg(m&(N^P)^P|0,n&(a^c)^c|0,0|H,0|e)),0|o(),h^E^Y|0,0|U)),0|o(),0|s,0|i)),0|o(),0|b,0|F)),0|(b=0|o()),0|r,0|L),r=0|o(),C[B>>2]=L,C[B+4>>2]=r,i=0|ZI(y,d,28),s=0|o(),U=0|ZI(y,d,34),s=(0|o())^s,Y=0|ZI(y,d,39),s^=0|o(),s=0|vg(0|(b=0|vg(0|F,0|b,y&(f|t)|f&t|0,d&(G|u)|G&u|0)),0|o(),U^i^Y|0,0|s),Y=0|o(),C[B+32>>2]=s,C[B+32+4>>2]=Y,i=0|ZI(L,r,14),U=0|o(),b=0|ZI(L,r,18),U=(0|o())^U,F=0|ZI(L,r,41),U^=0|o(),h=0|C[g+((E=4|D)<<3)>>2],e=0|C[g+(E<<3)+4>>2],H=0|C[32416+(E<<3)>>2],J=0|C[32416+(E<<3)+4>>2],u=0|vg(0|(J=0|vg(0|(e=0|vg(0|(U=0|vg(0|(c=0|vg(L&(m^N)^N|0,r&(n^a)^a|0,0|P,0|c)),0|o(),b^i^F|0,0|U)),0|o(),0|h,0|e)),0|o(),0|H,0|J)),0|(H=0|o()),0|t,0|u),t=0|o(),C[B+56>>2]=u,C[B+56+4>>2]=t,e=0|ZI(s,Y,28),h=0|o(),U=0|ZI(s,Y,34),h=(0|o())^h,F=0|ZI(s,Y,39),h^=0|o(),h=0|vg(0|(H=0|vg(0|J,0|H,s&(y|f)|y&f|0,Y&(d|G)|d&G|0)),0|o(),U^e^F|0,0|h),F=0|o(),C[B+24>>2]=h,C[B+24+4>>2]=F,e=0|ZI(u,t,14),U=0|o(),H=0|ZI(u,t,18),U=(0|o())^U,J=0|ZI(u,t,41),U^=0|o(),b=0|C[g+((i=5|D)<<3)>>2],c=0|C[g+(i<<3)+4>>2],P=0|C[32416+(i<<3)>>2],M=0|C[32416+(i<<3)+4>>2],G=0|vg(0|(M=0|vg(0|(c=0|vg(0|(U=0|vg(0|(a=0|vg(u&(L^m)^m|0,t&(r^n)^n|0,0|N,0|a)),0|o(),H^e^J|0,0|U)),0|o(),0|b,0|c)),0|o(),0|P,0|M)),0|(P=0|o()),0|f,0|G),f=0|o(),C[B+48>>2]=G,C[B+48+4>>2]=f,c=0|ZI(h,F,28),b=0|o(),U=0|ZI(h,F,34),b=(0|o())^b,J=0|ZI(h,F,39),b^=0|o(),b=0|vg(0|(P=0|vg(0|M,0|P,h&(s|y)|s&y|0,F&(Y|d)|Y&d|0)),0|o(),U^c^J|0,0|b),J=0|o(),C[B+16>>2]=b,C[B+16+4>>2]=J,c=0|ZI(G,f,14),U=0|o(),P=0|ZI(G,f,18),U=(0|o())^U,M=0|ZI(G,f,41),U^=0|o(),H=0|C[g+((e=6|D)<<3)>>2],a=0|C[g+(e<<3)+4>>2],N=0|C[32416+(e<<3)>>2],R=0|C[32416+(e<<3)+4>>2],d=0|vg(0|(R=0|vg(0|(a=0|vg(0|(U=0|vg(0|(n=0|vg(G&(u^L)^L|0,f&(t^r)^r|0,0|m,0|n)),0|o(),P^c^M|0,0|U)),0|o(),0|H,0|a)),0|o(),0|N,0|R)),0|(N=0|o()),0|y,0|d),y=0|o(),C[B+40>>2]=d,C[B+40+4>>2]=y,a=0|ZI(b,J,28),H=0|o(),U=0|ZI(b,J,34),H=(0|o())^H,M=0|ZI(b,J,39),H^=0|o(),H=0|vg(0|(N=0|vg(0|R,0|N,b&(h|s)|h&s|0,J&(F|Y)|F&Y|0)),0|o(),U^a^M|0,0|H),M=0|o(),C[B+8>>2]=H,C[B+8+4>>2]=M,a=0|ZI(d,y,14),U=0|o(),N=0|ZI(d,y,18),U=(0|o())^U,R=0|ZI(d,y,41),U^=0|o(),P=0|C[g+((c=7|D)<<3)>>2],n=0|C[g+(c<<3)+4>>2],m=0|C[32416+(c<<3)>>2],x=0|C[32416+(c<<3)+4>>2],Y=0|vg(0|(x=0|vg(0|(n=0|vg(0|(U=0|vg(0|(r=0|vg(d&(G^u)^u|0,y&(f^t)^t|0,0|L,0|r)),0|o(),N^a^R|0,0|U)),0|o(),0|P,0|n)),0|o(),0|m,0|x)),0|(m=0|o()),0|s,0|Y),s=0|o(),C[B+32>>2]=Y,C[B+32+4>>2]=s,n=0|ZI(H,M,28),P=0|o(),U=0|ZI(H,M,34),P=(0|o())^P,R=0|ZI(H,M,39),P^=0|o(),P=0|vg(0|(m=0|vg(0|x,0|m,H&(b|h)|b&h|0,M&(J|F)|J&F|0)),0|o(),U^n^R|0,0|P),R=0|o(),C[B>>2]=P,C[B+4>>2]=R,n=0|ZI(Y,s,14),U=0|o(),m=0|ZI(Y,s,18),U=(0|o())^U,x=0|ZI(Y,s,41),U^=0|o(),N=0|C[g+((a=8|D)<<3)>>2],r=0|C[g+(a<<3)+4>>2],L=0|C[32416+(a<<3)>>2],K=0|C[32416+(a<<3)+4>>2],F=0|vg(0|(K=0|vg(0|(r=0|vg(0|(U=0|vg(0|(t=0|vg(Y&(d^G)^G|0,s&(y^f)^f|0,0|u,0|t)),0|o(),m^n^x|0,0|U)),0|o(),0|N,0|r)),0|o(),0|L,0|K)),0|(L=0|o()),0|h,0|F),h=0|o(),C[B+24>>2]=F,C[B+24+4>>2]=h,r=0|ZI(P,R,28),N=0|o(),U=0|ZI(P,R,34),N=(0|o())^N,x=0|ZI(P,R,39),N^=0|o(),N=0|vg(0|(L=0|vg(0|K,0|L,P&(H|b)|H&b|0,R&(M|J)|M&J|0)),0|o(),U^r^x|0,0|N),x=0|o(),C[B+56>>2]=N,C[B+56+4>>2]=x,r=0|ZI(F,h,14),U=0|o(),L=0|ZI(F,h,18),U=(0|o())^U,K=0|ZI(F,h,41),U^=0|o(),m=0|C[g+((n=9|D)<<3)>>2],t=0|C[g+(n<<3)+4>>2],u=0|C[32416+(n<<3)>>2],X=0|C[32416+(n<<3)+4>>2],J=0|vg(0|(X=0|vg(0|(t=0|vg(0|(U=0|vg(0|(f=0|vg(F&(Y^d)^d|0,h&(s^y)^y|0,0|G,0|f)),0|o(),L^r^K|0,0|U)),0|o(),0|m,0|t)),0|o(),0|u,0|X)),0|(u=0|o()),0|b,0|J),b=0|o(),C[B+16>>2]=J,C[B+16+4>>2]=b,t=0|ZI(N,x,28),m=0|o(),U=0|ZI(N,x,34),m=(0|o())^m,K=0|ZI(N,x,39),m^=0|o(),m=0|vg(0|(u=0|vg(0|X,0|u,N&(P|H)|P&H|0,x&(R|M)|R&M|0)),0|o(),U^t^K|0,0|m),K=0|o(),C[B+48>>2]=m,C[B+48+4>>2]=K,t=0|ZI(J,b,14),U=0|o(),u=0|ZI(J,b,18),U=(0|o())^U,X=0|ZI(J,b,41),U^=0|o(),L=0|C[g+((r=10|D)<<3)>>2],f=0|C[g+(r<<3)+4>>2],G=0|C[32416+(r<<3)>>2],p=0|C[32416+(r<<3)+4>>2],M=0|vg(0|(p=0|vg(0|(f=0|vg(0|(U=0|vg(0|(y=0|vg(J&(F^Y)^Y|0,b&(h^s)^s|0,0|d,0|y)),0|o(),u^t^X|0,0|U)),0|o(),0|L,0|f)),0|o(),0|G,0|p)),0|(G=0|o()),0|H,0|M),H=0|o(),C[B+8>>2]=M,C[B+8+4>>2]=H,f=0|ZI(m,K,28),L=0|o(),U=0|ZI(m,K,34),L=(0|o())^L,X=0|ZI(m,K,39),L^=0|o(),L=0|vg(0|(G=0|vg(0|p,0|G,m&(N|P)|N&P|0,K&(x|R)|x&R|0)),0|o(),U^f^X|0,0|L),X=0|o(),C[B+40>>2]=L,C[B+40+4>>2]=X,f=0|ZI(M,H,14),U=0|o(),G=0|ZI(M,H,18),U=(0|o())^U,p=0|ZI(M,H,41),U^=0|o(),u=0|C[g+((t=11|D)<<3)>>2],y=0|C[g+(t<<3)+4>>2],d=0|C[32416+(t<<3)>>2],k=0|C[32416+(t<<3)+4>>2],R=0|vg(0|(k=0|vg(0|(y=0|vg(0|(U=0|vg(0|(s=0|vg(M&(J^F)^F|0,H&(b^h)^h|0,0|Y,0|s)),0|o(),G^f^p|0,0|U)),0|o(),0|u,0|y)),0|o(),0|d,0|k)),0|(d=0|o()),0|P,0|R),P=0|o(),C[B>>2]=R,C[B+4>>2]=P,y=0|ZI(L,X,28),u=0|o(),U=0|ZI(L,X,34),u=(0|o())^u,p=0|ZI(L,X,39),u^=0|o(),u=0|vg(0|(d=0|vg(0|k,0|d,L&(m|N)|m&N|0,X&(K|x)|K&x|0)),0|o(),U^y^p|0,0|u),p=0|o(),C[B+32>>2]=u,C[B+32+4>>2]=p,y=0|ZI(R,P,14),U=0|o(),d=0|ZI(R,P,18),U=(0|o())^U,k=0|ZI(R,P,41),U^=0|o(),G=0|C[g+((f=12|D)<<3)>>2],s=0|C[g+(f<<3)+4>>2],Y=0|C[32416+(f<<3)>>2],l=0|C[32416+(f<<3)+4>>2],x=0|vg(0|(l=0|vg(0|(s=0|vg(0|(U=0|vg(0|(h=0|vg(R&(M^J)^J|0,P&(H^b)^b|0,0|F,0|h)),0|o(),d^y^k|0,0|U)),0|o(),0|G,0|s)),0|o(),0|Y,0|l)),0|(Y=0|o()),0|N,0|x),N=0|o(),C[B+56>>2]=x,C[B+56+4>>2]=N,s=0|ZI(u,p,28),G=0|o(),U=0|ZI(u,p,34),G=(0|o())^G,k=0|ZI(u,p,39),G^=0|o(),G=0|vg(0|(Y=0|vg(0|l,0|Y,u&(L|m)|L&m|0,p&(X|K)|X&K|0)),0|o(),U^s^k|0,0|G),k=0|o(),C[B+24>>2]=G,C[B+24+4>>2]=k,s=0|ZI(x,N,14),U=0|o(),Y=0|ZI(x,N,18),U=(0|o())^U,l=0|ZI(x,N,41),U^=0|o(),d=0|C[g+((y=13|D)<<3)>>2],h=0|C[g+(y<<3)+4>>2],F=0|C[32416+(y<<3)>>2],_=0|C[32416+(y<<3)+4>>2],K=0|vg(0|(_=0|vg(0|(h=0|vg(0|(U=0|vg(0|(b=0|vg(x&(R^M)^M|0,N&(P^H)^H|0,0|J,0|b)),0|o(),Y^s^l|0,0|U)),0|o(),0|d,0|h)),0|o(),0|F,0|_)),0|(F=0|o()),0|m,0|K),m=0|o(),C[B+48>>2]=K,C[B+48+4>>2]=m,h=0|ZI(G,k,28),d=0|o(),U=0|ZI(G,k,34),d=(0|o())^d,l=0|ZI(G,k,39),d^=0|o(),d=0|vg(0|(F=0|vg(0|_,0|F,G&(u|L)|u&L|0,k&(p|X)|p&X|0)),0|o(),U^h^l|0,0|d),l=0|o(),C[B+16>>2]=d,C[B+16+4>>2]=l,h=0|ZI(K,m,14),U=0|o(),F=0|ZI(K,m,18),U=(0|o())^U,_=0|ZI(K,m,41),U^=0|o(),Y=0|C[g+((s=14|D)<<3)>>2],b=0|C[g+(s<<3)+4>>2],J=0|C[32416+(s<<3)>>2],v=0|C[32416+(s<<3)+4>>2],X=0|vg(0|(v=0|vg(0|(b=0|vg(0|(U=0|vg(0|(H=0|vg(K&(x^R)^R|0,m&(N^P)^P|0,0|M,0|H)),0|o(),F^h^_|0,0|U)),0|o(),0|Y,0|b)),0|o(),0|J,0|v)),0|(J=0|o()),0|L,0|X),L=0|o(),C[B+40>>2]=X,C[B+40+4>>2]=L,b=0|ZI(d,l,28),Y=0|o(),U=0|ZI(d,l,34),Y=(0|o())^Y,_=0|ZI(d,l,39),Y^=0|o(),Y=0|vg(0|(J=0|vg(0|v,0|J,d&(G|u)|G&u|0,l&(k|p)|k&p|0)),0|o(),U^b^_|0,0|Y),_=0|o(),C[B+8>>2]=Y,C[B+8+4>>2]=_,b=0|ZI(X,L,14),U=0|o(),J=0|ZI(X,L,18),U=(0|o())^U,v=0|ZI(X,L,41),U^=0|o(),F=0|C[g+((h=15|D)<<3)>>2],H=0|C[g+(h<<3)+4>>2],M=0|C[32416+(h<<3)>>2],S=0|C[32416+(h<<3)+4>>2],p=0|vg(0|(S=0|vg(0|(H=0|vg(0|(U=0|vg(0|(P=0|vg(X&(K^x)^x|0,L&(m^N)^N|0,0|R,0|P)),0|o(),J^b^v|0,0|U)),0|o(),0|F,0|H)),0|o(),0|M,0|S)),0|(M=0|o()),0|u,0|p),u=0|o(),C[B+32>>2]=p,C[B+32+4>>2]=u,u=0|ZI(Y,_,28),p=0|o(),H=0|ZI(Y,_,34),p=(0|o())^p,F=0|ZI(Y,_,39),p^=0|o(),p=0|vg(0|(k=0|vg(0|S,0|M,Y&(d|G)|d&G|0,_&(l|k)|l&k|0)),0|o(),H^u^F|0,0|p),F=0|o(),C[B>>2]=p,C[B+4>>2]=F,64==(0|D))break;d=0|ZI(K=0|C[g+(s<<3)>>2],X=0|C[g+(s<<3)+4>>2],19),N=0|o(),H=0|ZI(K,X,61),k=0|o(),k=0|vg((R=0|yg(0|K,0|X,6))^d^H|0,0|(k=(0|o())^N^k),0|(N=0|C[g+(n<<3)>>2]),0|(Y=0|C[g+(n<<3)+4>>2])),H=0|o(),b=0|ZI(d=0|C[g+(w<<3)>>2],R=0|C[g+(w<<3)+4>>2],1),p=0|o(),m=0|ZI(d,R,8),P=0|o(),J=0|yg(0|d,0|R,7),P=(0|o())^p^P,P=0|vg(0|(p=0|vg(0|k,0|H,0|C[(p=g+(D<<3)|0)>>2],0|C[p+4>>2])),0|o(),J^b^m|0,0|P),m=0|o(),C[(b=g+((D=D+16|0)<<3)|0)>>2]=P,C[b+4>>2]=m,p=0|ZI(b=0|C[g+(h<<3)>>2],J=0|C[g+(h<<3)+4>>2],19),H=0|o(),k=0|ZI(b,J,61),l=0|o(),F=0|yg(0|b,0|J,6),l=(0|o())^H^l,H=0|C[g+(w+9<<3)>>2],L=0|C[g+(w+9<<3)+4>>2],u=0|ZI(_=0|C[g+(w+1<<3)>>2],M=0|C[g+(w+1<<3)+4>>2],1),U=0|o(),G=0|ZI(_,M,8),S=0|o(),v=0|yg(0|_,0|M,7),S=(0|o())^U^S,S=0|vg(0|(l=0|vg(0|(R=0|vg(0|H,0|L,0|d,0|R)),0|o(),F^p^k|0,0|l)),0|o(),v^u^G|0,0|S),G=0|o(),C[g+(w+16<<3)>>2]=S,C[g+(w+16<<3)+4>>2]=G,u=0|ZI(P,m,19),v=0|o(),l=0|ZI(P,m,61),w=0|o(),w=0|vg((m=0|yg(0|P,0|m,6))^u^l|0,0|(w=(0|o())^v^w),0|(v=0|C[g+(t<<3)>>2]),0|(P=0|C[g+(t<<3)+4>>2])),l=0|o(),k=0|ZI(u=0|C[g+(Q<<3)>>2],m=0|C[g+(Q<<3)+4>>2],1),p=0|o(),F=0|ZI(u,m,8),R=0|o(),d=0|yg(0|u,0|m,7),R=(0|o())^p^R,R=0|vg(0|(M=0|vg(0|w,0|l,0|_,0|M)),0|o(),d^k^F|0,0|R),F=0|o(),C[g+(I+16<<3)>>2]=R,C[g+(I+16<<3)+4>>2]=F,k=0|ZI(S,G,19),d=0|o(),M=0|ZI(S,G,61),_=0|o(),G=0|yg(0|S,0|G,6),_=(0|o())^d^_,d=0|C[g+(Q+9<<3)>>2],S=0|C[g+(Q+9<<3)+4>>2],w=0|ZI(l=0|C[g+(Q+1<<3)>>2],I=0|C[g+(Q+1<<3)+4>>2],1),p=0|o(),L=0|ZI(l,I,8),H=0|o(),U=0|yg(0|l,0|I,7),H=(0|o())^p^H,H=0|vg(0|(_=0|vg(0|(m=0|vg(0|d,0|S,0|u,0|m)),0|o(),G^k^M|0,0|_)),0|o(),U^w^L|0,0|H),L=0|o(),C[g+(Q+16<<3)>>2]=H,C[g+(Q+16<<3)+4>>2]=L,w=0|ZI(R,F,19),U=0|o(),_=0|ZI(R,F,61),M=0|o(),M=0|vg((F=0|yg(0|R,0|F,6))^w^_|0,0|(M=(0|o())^U^M),0|(U=0|C[g+(y<<3)>>2]),0|(R=0|C[g+(y<<3)+4>>2])),_=0|o(),k=0|ZI(w=0|C[g+(i<<3)>>2],F=0|C[g+(i<<3)+4>>2],1),G=0|o(),m=0|ZI(w,F,8),u=0|o(),S=0|yg(0|w,0|F,7),u=(0|o())^G^u,u=0|vg(0|(I=0|vg(0|M,0|_,0|l,0|I)),0|o(),S^k^m|0,0|u),m=0|o(),C[g+(E+16<<3)>>2]=u,C[g+(E+16<<3)+4>>2]=m,k=0|ZI(H,L,19),S=0|o(),I=0|ZI(H,L,61),l=0|o(),L=0|yg(0|H,0|L,6),l=(0|o())^S^l,S=0|C[g+(i+9<<3)>>2],H=0|C[g+(i+9<<3)+4>>2],G=0|ZI(_=0|C[g+(i+1<<3)>>2],M=0|C[g+(i+1<<3)+4>>2],1),d=0|o(),p=0|ZI(_,M,8),x=0|o(),Q=0|yg(0|_,0|M,7),x=(0|o())^d^x,x=0|vg(0|(l=0|vg(0|(F=0|vg(0|S,0|H,0|w,0|F)),0|o(),L^k^I|0,0|l)),0|o(),Q^G^p|0,0|x),p=0|o(),C[g+(i+16<<3)>>2]=x,C[g+(i+16<<3)+4>>2]=p,G=0|ZI(u,m,19),Q=0|o(),l=0|ZI(u,m,61),I=0|o(),I=0|vg((m=0|yg(0|u,0|m,6))^G^l|0,(0|o())^Q^I|0,0|b,0|J),Q=0|o(),m=0|ZI(l=0|C[g+(c<<3)>>2],G=0|C[g+(c<<3)+4>>2],1),u=0|o(),k=0|ZI(l,G,8),L=0|o(),F=0|yg(0|l,0|G,7),L=(0|o())^u^L,L=0|vg(0|(M=0|vg(0|I,0|Q,0|_,0|M)),0|o(),F^m^k|0,0|L),k=0|o(),C[g+(e+16<<3)>>2]=L,C[g+(e+16<<3)+4>>2]=k,m=0|ZI(x,p,19),F=0|o(),M=0|ZI(x,p,61),_=0|o(),p=0|yg(0|x,0|p,6),_=(0|o())^F^_,F=0|C[g+(c+9<<3)>>2],x=0|C[g+(c+9<<3)+4>>2],u=0|ZI(Q=0|C[g+(c+1<<3)>>2],I=0|C[g+(c+1<<3)+4>>2],1),w=0|o(),H=0|ZI(Q,I,8),S=0|o(),d=0|yg(0|Q,0|I,7),S=(0|o())^w^S,S=0|vg(0|(_=0|vg(0|(G=0|vg(0|F,0|x,0|l,0|G)),0|o(),p^m^M|0,0|_)),0|o(),d^u^H|0,0|S),H=0|o(),C[g+(c+16<<3)>>2]=S,C[g+(c+16<<3)+4>>2]=H,u=0|ZI(L,k,19),d=0|o(),_=0|ZI(L,k,61),M=0|o(),M=0|vg((k=0|yg(0|L,0|k,6))^u^_|0,0|(M=(0|o())^d^M),0|C[g+(a+9<<3)>>2],0|C[g+(a+9<<3)+4>>2]),_=0|o(),u=0|ZI(N,Y,1),k=0|o(),d=0|ZI(N,Y,8),L=0|o(),m=0|yg(0|N,0|Y,7),L=k^(0|o())^L,L=0|vg(0|(I=0|vg(0|M,0|_,0|Q,0|I)),0|o(),u^m^d|0,0|L),d=0|o(),C[g+(a+16<<3)>>2]=L,C[g+(a+16<<3)+4>>2]=d,m=0|ZI(S,H,19),u=0|o(),I=0|ZI(S,H,61),Q=0|o(),H=0|yg(0|S,0|H,6),Q=(0|o())^u^Q,u=0|C[g+(n+9<<3)>>2],S=0|C[g+(n+9<<3)+4>>2],k=0|ZI(_=0|C[g+(n+1<<3)>>2],M=0|C[g+(n+1<<3)+4>>2],1),p=0|o(),G=0|ZI(_,M,8),l=0|o(),x=0|yg(0|_,0|M,7),l=(0|o())^p^l,l=0|vg(0|(Q=0|vg(0|(Y=0|vg(0|u,0|S,0|N,0|Y)),0|o(),H^m^I|0,0|Q)),0|o(),x^k^G|0,0|l),G=0|o(),C[g+(n+16<<3)>>2]=l,C[g+(n+16<<3)+4>>2]=G,k=0|ZI(L,d,19),x=0|o(),Q=0|ZI(L,d,61),I=0|o(),I=0|vg((d=0|yg(0|L,0|d,6))^k^Q|0,0|(I=(0|o())^x^I),0|C[g+(r+9<<3)>>2],0|C[g+(r+9<<3)+4>>2]),Q=0|o(),k=0|ZI(v,P,1),d=0|o(),x=0|ZI(v,P,8),L=0|o(),m=0|yg(0|v,0|P,7),L=d^(0|o())^L,L=0|vg(0|(M=0|vg(0|I,0|Q,0|_,0|M)),0|o(),k^m^x|0,0|L),x=0|o(),C[g+(r+16<<3)>>2]=L,C[g+(r+16<<3)+4>>2]=x,m=0|ZI(l,G,19),k=0|o(),M=0|ZI(l,G,61),_=0|o(),G=0|yg(0|l,0|G,6),_=(0|o())^k^_,k=0|C[g+(t+9<<3)>>2],l=0|C[g+(t+9<<3)+4>>2],d=0|ZI(Q=0|C[g+(t+1<<3)>>2],I=0|C[g+(t+1<<3)+4>>2],1),H=0|o(),Y=0|ZI(Q,I,8),N=0|o(),S=0|yg(0|Q,0|I,7),N=(0|o())^H^N,N=0|vg(0|(_=0|vg(0|(P=0|vg(0|k,0|l,0|v,0|P)),0|o(),G^m^M|0,0|_)),0|o(),S^d^Y|0,0|N),Y=0|o(),C[g+(t+16<<3)>>2]=N,C[g+(t+16<<3)+4>>2]=Y,d=0|ZI(L,x,19),S=0|o(),_=0|ZI(L,x,61),M=0|o(),M=0|vg((x=0|yg(0|L,0|x,6))^d^_|0,0|(M=(0|o())^S^M),0|C[g+(f+9<<3)>>2],0|C[g+(f+9<<3)+4>>2]),_=0|o(),d=0|ZI(U,R,1),x=0|o(),S=0|ZI(U,R,8),L=0|o(),m=0|yg(0|U,0|R,7),L=x^(0|o())^L,L=0|vg(0|(I=0|vg(0|M,0|_,0|Q,0|I)),0|o(),d^m^S|0,0|L),S=0|o(),C[g+(f+16<<3)>>2]=L,C[g+(f+16<<3)+4>>2]=S,m=0|ZI(N,Y,19),d=0|o(),I=0|ZI(N,Y,61),Q=0|o(),Y=0|yg(0|N,0|Y,6),Q=(0|o())^d^Q,d=0|C[g+(y+9<<3)>>2],N=0|C[g+(y+9<<3)+4>>2],x=0|ZI(_=0|C[g+(y+1<<3)>>2],M=0|C[g+(y+1<<3)+4>>2],1),G=0|o(),P=0|ZI(_,M,8),v=0|o(),M=0|yg(0|_,0|M,7),v=(0|o())^G^v,v=0|vg(0|(Q=0|vg(0|(R=0|vg(0|d,0|N,0|U,0|R)),0|o(),Y^m^I|0,0|Q)),0|o(),M^x^P|0,0|v),P=0|o(),C[g+(y+16<<3)>>2]=v,C[g+(y+16<<3)+4>>2]=P,x=0|ZI(L,S,19),M=0|o(),Q=0|ZI(L,S,61),I=0|o(),S=0|yg(0|L,0|S,6),I=(0|o())^M^I,M=0|C[g+(s+9<<3)>>2],L=0|C[g+(s+9<<3)+4>>2],m=0|ZI(b,J,1),Y=0|o(),R=0|ZI(b,J,8),U=0|o(),N=0|yg(0|b,0|J,7),U=Y^(0|o())^U,U=0|vg(0|(I=0|vg(0|(X=0|vg(0|M,0|L,0|K,0|X)),0|o(),S^x^Q|0,0|I)),0|o(),m^N^R|0,0|U),R=0|o(),C[g+(s+16<<3)>>2]=U,C[g+(s+16<<3)+4>>2]=R,R=0|ZI(v,P,19),U=0|o(),N=0|ZI(v,P,61),m=0|o(),P=0|yg(0|v,0|P,6),m=(0|o())^U^m,U=0|C[g+(h+9<<3)>>2],v=0|C[g+(h+9<<3)+4>>2],x=0|ZI(I=0|C[g+(h+1<<3)>>2],Q=0|C[g+(h+1<<3)+4>>2],1),S=0|o(),X=0|ZI(I,Q,8),K=0|o(),L=0|yg(0|I,0|Q,7),K=(0|o())^S^K,K=0|vg(0|(m=0|vg(0|(J=0|vg(0|U,0|v,0|b,0|J)),0|o(),P^R^N|0,0|m)),0|o(),L^x^X|0,0|K),X=0|o(),C[g+(h+16<<3)>>2]=K,C[g+(h+16<<3)+4>>2]=X}while(D>>>0<80);I=0;do{x=B+(I<<3)|0,x=0|vg(0|C[(X=A+(I<<3)|0)>>2],0|C[X+4>>2],0|C[x>>2],0|C[x+4>>2]),K=0|o(),C[X>>2]=x,C[X+4>>2]=K,I=I+1|0}while(8!=(0|I))}function F(A){A|=0;var I,g=0,B=0,Q=0,E=0,i=0,e=0,o=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,s=0,h=0,D=0,F=0,p=0,u=0;I=y,f=y=y+63&-64,y=y+16|0;do{if(A>>>0<245){if(t=A>>>0<11?16:A+11&-8,(n=0|C[8679])>>>(t>>>3)&3|0)return A=0|C[8+(B=34756+((n>>>(t>>>3)&1^1)+(t>>>3)<<1<<2)|0)>>2],(0|(g=0|C[A+8>>2]))==(0|B)?C[8679]=n&~(1<<(n>>>(t>>>3)&1^1)+(t>>>3)):(C[g+12>>2]=B,C[B+8>>2]=g),u=(n>>>(t>>>3)&1^1)+(t>>>3)<<3,C[A+4>>2]=3|u,C[A+u+4>>2]=1|C[A+u+4>>2],y=I,0|A+8;if(t>>>0>(r=0|C[8681])>>>0){if(n>>>(t>>>3)|0)return Q=0|C[34756+((E=((Q=(((A=n>>>(t>>>3)<<(t>>>3)&(2<<(t>>>3)|0-(2<<(t>>>3))))&0-A)-1|0)>>>(((A&0-A)-1|0)>>>12&16))>>>5&8|((A&0-A)-1|0)>>>12&16|Q>>>(Q>>>5&8)>>>2&4|(E=Q>>>(Q>>>5&8)>>>(Q>>>(Q>>>5&8)>>>2&4))>>>1&2|E>>>(E>>>1&2)>>>1&1)+(E>>>(E>>>1&2)>>>(E>>>(E>>>1&2)>>>1&1))|0)<<1<<2)+8>>2],(0|(A=0|C[Q+8>>2]))==(34756+(E<<1<<2)|0)?(C[8679]=n&~(1<>2]=34756+(E<<1<<2),C[34756+(E<<1<<2)+8>>2]=A,A=n),C[Q+4>>2]=3|t,C[Q+t+4>>2]=(E<<3)-t|1,C[Q+(E<<3)>>2]=(E<<3)-t,0|r&&(B=0|C[8684],A&1<<(r>>>3)?(A=34756+(r>>>3<<1<<2)+8|0,g=0|C[34756+(r>>>3<<1<<2)+8>>2]):(C[8679]=A|1<<(r>>>3),A=34756+(r>>>3<<1<<2)+8|0,g=34756+(r>>>3<<1<<2)|0),C[A>>2]=B,C[g+12>>2]=B,C[B+8>>2]=g,C[B+12>>2]=34756+(r>>>3<<1<<2)),C[8681]=(E<<3)-t,C[8684]=Q+t,y=I,0|Q+8;if(e=0|C[8680]){for(a=0|C[35020+(((c=((e&0-e)-1|0)>>>(((e&0-e)-1|0)>>>12&16))>>>5&8|((e&0-e)-1|0)>>>12&16|c>>>(c>>>5&8)>>>2&4|(a=c>>>(c>>>5&8)>>>(c>>>(c>>>5&8)>>>2&4))>>>1&2|a>>>(a>>>1&2)>>>1&1)+(a>>>(a>>>1&2)>>>(a>>>(a>>>1&2)>>>1&1))<<2)>>2],c=(-8&C[a+4>>2])-t|0,g=a;(A=0|C[g+16>>2])||(A=0|C[g+20>>2]);)c=(o=(g=(-8&C[A+4>>2])-t|0)>>>0>>0)?g:c,g=A,a=o?A:a;if((o=a+t|0)>>>0>a>>>0){E=0|C[a+24>>2],A=0|C[a+12>>2];do{if((0|A)==(0|a)){if(!(A=0|C[(g=a+20|0)>>2])&&!(A=0|C[(g=a+16|0)>>2])){g=0;break}for(;;)if(B=0|C[(Q=A+20|0)>>2])A=B,g=Q;else{if(!(B=0|C[(Q=A+16|0)>>2]))break;A=B,g=Q}C[g>>2]=0,g=A}else g=0|C[a+8>>2],C[g+12>>2]=A,C[A+8>>2]=g,g=A}while(0);do{if(0|E){if(A=0|C[a+28>>2],(0|a)==(0|C[35020+(A<<2)>>2])){if(C[35020+(A<<2)>>2]=g,!g){C[8680]=e&~(1<>2])==(0|a)?E+16|0:E+20|0)>>2]=g,!g)break;C[g+24>>2]=E,0|(A=0|C[a+16>>2])&&(C[g+16>>2]=A,C[A+24>>2]=g),0|(A=0|C[a+20>>2])&&(C[g+20>>2]=A,C[A+24>>2]=g)}}while(0);return c>>>0<16?(u=c+t|0,C[a+4>>2]=3|u,C[(u=a+u+4|0)>>2]=1|C[u>>2]):(C[a+4>>2]=3|t,C[o+4>>2]=1|c,C[o+c>>2]=c,0|r&&(B=0|C[8684],1<<(r>>>3)&n?(A=34756+(r>>>3<<1<<2)+8|0,g=0|C[34756+(r>>>3<<1<<2)+8>>2]):(C[8679]=1<<(r>>>3)|n,A=34756+(r>>>3<<1<<2)+8|0,g=34756+(r>>>3<<1<<2)|0),C[A>>2]=B,C[g+12>>2]=B,C[B+8>>2]=g,C[B+12>>2]=34756+(r>>>3<<1<<2)),C[8681]=c,C[8684]=o),y=I,0|a+8}}}}else if(A>>>0<=4294967231){if(t=A+11&-8,Q=0|C[8680]){c=(A+11|0)>>>8?t>>>0>16777215?31:t>>>(7+(c=14-((520192+(c=(A+11|0)>>>8<<((1048320+((A+11|0)>>>8)|0)>>>16&8))|0)>>>16&4|(1048320+((A+11|0)>>>8)|0)>>>16&8|(245760+(c<<((c+520192|0)>>>16&4))|0)>>>16&2)+(c<<((c+520192|0)>>>16&4)<<((245760+(c<<((c+520192|0)>>>16&4))|0)>>>16&2)>>>15)|0)|0)&1|c<<1:0,A=0|C[35020+(c<<2)>>2];A:do{if(A)for(B=0-t|0,g=0,o=t<<(31==(0|c)?0:25-(c>>>1)|0),e=0;;){if((E=(-8&C[A+4>>2])-t|0)>>>0>>0){if(!E){B=0,g=A,h=65;break A}B=E,e=A}if(g=0==(0|(h=0|C[A+20>>2]))|(0|h)==(0|(A=0|C[A+16+(o>>>31<<2)>>2]))?g:h,!A){A=e,h=61;break}o<<=1}else B=0-t|0,g=0,A=0,h=61}while(0);if(61==(0|h)){if(0==(0|g)&0==(0|A)){if(!(((A=2<>>(r>>>12&16)>>>5&8|r>>>12&16|(A=r>>>(r>>>12&16)>>>(r>>>(r>>>12&16)>>>5&8))>>>2&4|A>>>(A>>>2&4)>>>1&2|(g=A>>>(A>>>2&4)>>>(A>>>(A>>>2&4)>>>1&2))>>>1&1)+(g>>>(g>>>1&1))<<2)>>2],A=0}g?h=65:(e=B,o=A)}if(65==(0|h))for(;;){if(B=(E=(r=(-8&C[g+4>>2])-t|0)>>>0>>0)?r:B,E=E?g:A,(A=0|C[g+16>>2])||(A=0|C[g+20>>2]),!A){e=B,o=E;break}g=A,A=E}if(0!=(0|o)&&e>>>0<((0|C[8681])-t|0)>>>0&&(a=o+t|0)>>>0>o>>>0){i=0|C[o+24>>2],A=0|C[o+12>>2];do{if((0|A)==(0|o)){if(!(A=0|C[(g=o+20|0)>>2])&&!(A=0|C[(g=o+16|0)>>2])){A=0;break}for(;;)if(B=0|C[(E=A+20|0)>>2])A=B,g=E;else{if(!(B=0|C[(E=A+16|0)>>2]))break;A=B,g=E}C[g>>2]=0}else u=0|C[o+8>>2],C[u+12>>2]=A,C[A+8>>2]=u}while(0);do{if(i){if(g=0|C[o+28>>2],(0|o)==(0|C[35020+(g<<2)>>2])){if(C[35020+(g<<2)>>2]=A,!A){C[8680]=Q&~(1<>2])==(0|o)?i+16|0:i+20|0)>>2]=A,!A)break;C[A+24>>2]=i,0|(g=0|C[o+16>>2])&&(C[A+16>>2]=g,C[g+24>>2]=A),(g=0|C[o+20>>2])&&(C[A+20>>2]=g,C[g+24>>2]=A)}}while(0);A:do{if(e>>>0<16)u=e+t|0,C[o+4>>2]=3|u,C[(u=o+u+4|0)>>2]=1|C[u>>2];else{if(C[o+4>>2]=3|t,C[a+4>>2]=1|e,C[a+e>>2]=e,B=e>>>3,e>>>0<256){(A=0|C[8679])&1<>2]):(C[8679]=A|1<>2]=a,C[g+12>>2]=a,C[a+8>>2]=g,C[a+12>>2]=34756+(B<<1<<2);break}if(A=35020+((B=(A=e>>>8)?e>>>0>16777215?31:e>>>(7+(B=14-((520192+(A<<((A+1048320|0)>>>16&8))|0)>>>16&4|(A+1048320|0)>>>16&8|(245760+(B=A<<((A+1048320|0)>>>16&8)<<((520192+(A<<((A+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(B<<((B+245760|0)>>>16&2)>>>15)|0)|0)&1|B<<1:0)<<2)|0,C[a+28>>2]=B,C[a+16+4>>2]=0,C[a+16>>2]=0,!(Q&(g=1<>2]=a,C[a+24>>2]=A,C[a+12>>2]=a,C[a+8>>2]=a;break}A=0|C[A>>2];I:do{if((-8&C[A+4>>2]|0)!=(0|e)){for(Q=e<<(31==(0|B)?0:25-(B>>>1)|0);g=0|C[(B=A+16+(Q>>>31<<2)|0)>>2];){if((-8&C[g+4>>2]|0)==(0|e)){A=g;break I}Q<<=1,A=g}C[B>>2]=a,C[a+24>>2]=A,C[a+12>>2]=a,C[a+8>>2]=a;break A}}while(0);u=0|C[(p=A+8|0)>>2],C[u+12>>2]=a,C[p>>2]=a,C[a+8>>2]=u,C[a+12>>2]=A,C[a+24>>2]=0}}while(0);return y=I,0|o+8}}}else t=-1}while(0);if((B=0|C[8681])>>>0>=t>>>0)return g=B-t|0,A=0|C[8684],g>>>0>15?(u=A+t|0,C[8684]=u,C[8681]=g,C[u+4>>2]=1|g,C[A+B>>2]=g,C[A+4>>2]=3|t):(C[8681]=0,C[8684]=0,C[A+4>>2]=3|B,C[A+B+4>>2]=1|C[A+B+4>>2]),y=I,0|A+8;if((E=0|C[8682])>>>0>t>>>0)return F=E-t|0,C[8682]=F,p=(u=0|C[8685])+t|0,C[8685]=p,C[p+4>>2]=1|F,C[u+4>>2]=3|t,y=I,0|u+8;if(0|C[8797]?A=0|C[8799]:(C[8799]=4096,C[8798]=4096,C[8800]=-1,C[8801]=-1,C[8802]=0,C[8790]=0,C[8797]=-16&f^1431655768,A=4096),e=t+48|0,((a=A+(o=t+47|0)|0)&(c=0-A|0))>>>0<=t>>>0)return y=I,0;if(0|(A=0|C[8789])&&(((f=0|C[8787])+(a&c)|0)>>>0<=f>>>0||(f+(a&c)|0)>>>0>A>>>0))return y=I,0;A:do{if(4&C[8790])A=0,h=143;else{g=0|C[8685];I:do{if(g){for(B=35164;!((A=0|C[B>>2])>>>0<=g>>>0&&(A+(0|C[(s=B+4|0)>>2])|0)>>>0>g>>>0);){if(!(A=0|C[B+8>>2])){h=128;break I}B=A}if((a-E&c)>>>0<2147483647)if((0|(A=0|bI(a-E&c)))==((0|C[B>>2])+(0|C[s>>2])|0)){if(-1!=(0|A)){e=A,i=a-E&c,h=145;break A}A=a-E&c}else Q=A,B=a-E&c,h=136;else A=0}else h=128}while(0);do{if(128==(0|h))if(-1!=(0|(g=0|bI(0)))&&(i=(0==((i=0|C[8798])-1&g|0)?0:(i+-1+g&0-i)-g|0)+(a&c)|0,w=0|C[8787],i>>>0>t>>>0&i>>>0<2147483647)){if(0|(s=0|C[8789])&&(i+w|0)>>>0<=w>>>0|(i+w|0)>>>0>s>>>0){A=0;break}if((0|(A=0|bI(i)))==(0|g)){e=g,h=145;break A}Q=A,B=i,h=136}else A=0}while(0);do{if(136==(0|h)){if(g=0-B|0,!(e>>>0>B>>>0&B>>>0<2147483647&-1!=(0|Q))){if(-1==(0|Q)){A=0;break}e=Q,i=B,h=145;break A}if((A=o-B+(A=0|C[8799])&0-A)>>>0>=2147483647){e=Q,i=B,h=145;break A}if(-1==(0|bI(A))){bI(g),A=0;break}e=Q,i=A+B|0,h=145;break A}}while(0);C[8790]=4|C[8790],h=143}}while(0);if(143==(0|h)&&(a&c)>>>0<2147483647&&!(-1==(0|(D=0|bI(a&c)))|1^(p=((F=0|bI(0))-D|0)>>>0>(t+40|0)>>>0)|D>>>0>>0&-1!=(0|D)&-1!=(0|F)^1)&&(e=D,i=p?F-D|0:A,h=145),145==(0|h)){A=(0|C[8787])+i|0,C[8787]=A,A>>>0>(0|C[8788])>>>0&&(C[8788]=A),c=0|C[8685];A:do{if(c){for(E=35164;;){if((0|e)==((A=0|C[E>>2])+(g=0|C[(Q=E+4|0)>>2])|0)){h=154;break}if(!(B=0|C[E+8>>2]))break;E=B}if(154==(0|h)&&0==(8&C[E+12>>2]|0)&&e>>>0>c>>>0&A>>>0<=c>>>0){C[Q>>2]=g+i,u=(0|C[8682])+i|0,p=0==(c+8&7|0)?0:0-(c+8)&7,C[8685]=c+p,C[8682]=u-p,C[c+p+4>>2]=u-p|1,C[c+u+4>>2]=40,C[8686]=C[8801];break}for(e>>>0<(0|C[8683])>>>0&&(C[8683]=e),B=e+i|0,g=35164;;){if((0|C[g>>2])==(0|B)){h=162;break}if(!(A=0|C[g+8>>2]))break;g=A}if(162==(0|h)&&0==(8&C[g+12>>2]|0)){C[g>>2]=e,C[(n=g+4|0)>>2]=(0|C[n>>2])+i,a=(n=e+(0==(7&(n=e+8|0)|0)?0:0-n&7)|0)+t|0,o=(A=B+(0==(B+8&7|0)?0:0-(B+8)&7)|0)-n-t|0,C[n+4>>2]=3|t;I:do{if((0|c)==(0|A))u=(0|C[8682])+o|0,C[8682]=u,C[8685]=a,C[a+4>>2]=1|u;else{if((0|C[8684])==(0|A)){u=(0|C[8681])+o|0,C[8681]=u,C[8684]=a,C[a+4>>2]=1|u,C[a+u>>2]=u;break}if(1==(3&(e=0|C[A+4>>2])|0)){g:do{if(e>>>0<256){if(g=0|C[A+8>>2],(0|(B=0|C[A+12>>2]))==(0|g)){C[8679]=C[8679]&~(1<<(e>>>3));break}C[g+12>>2]=B,C[B+8>>2]=g;break}i=0|C[A+24>>2],g=0|C[A+12>>2];do{if((0|g)==(0|A)){if(g=0|C[A+16+4>>2])B=A+16+4|0;else{if(!(g=0|C[A+16>>2])){g=0;break}B=A+16|0}for(;;)if(Q=0|C[(E=g+20|0)>>2])g=Q,B=E;else{if(!(Q=0|C[(E=g+16|0)>>2]))break;g=Q,B=E}C[B>>2]=0}else u=0|C[A+8>>2],C[u+12>>2]=g,C[g+8>>2]=u}while(0);if(!i)break;B=0|C[A+28>>2];do{if((0|C[35020+(B<<2)>>2])==(0|A)){if(C[35020+(B<<2)>>2]=g,0|g)break;C[8680]=C[8680]&~(1<>2])==(0|A)?i+16|0:i+20|0)>>2]=g,!g)break g}while(0);if(C[g+24>>2]=i,0|(B=0|C[A+16>>2])&&(C[g+16>>2]=B,C[B+24>>2]=g),!(B=0|C[A+16+4>>2]))break;C[g+20>>2]=B,C[B+24>>2]=g}while(0);A=A+(-8&e)|0,E=(-8&e)+o|0}else E=o;if(C[(B=A+4|0)>>2]=-2&C[B>>2],C[a+4>>2]=1|E,C[a+E>>2]=E,B=E>>>3,E>>>0<256){(A=0|C[8679])&1<>2]):(C[8679]=A|1<>2]=a,C[g+12>>2]=a,C[a+8>>2]=g,C[a+12>>2]=34756+(B<<1<<2);break}A=E>>>8;do{if(A){if(E>>>0>16777215){Q=31;break}Q=E>>>(7+(Q=14-((520192+(A<<((A+1048320|0)>>>16&8))|0)>>>16&4|(A+1048320|0)>>>16&8|(245760+(Q=A<<((A+1048320|0)>>>16&8)<<((520192+(A<<((A+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(Q<<((Q+245760|0)>>>16&2)>>>15)|0)|0)&1|Q<<1}else Q=0}while(0);if(g=35020+(Q<<2)|0,C[a+28>>2]=Q,C[a+16+4>>2]=0,C[a+16>>2]=0,!((A=0|C[8680])&(B=1<>2]=a,C[a+24>>2]=g,C[a+12>>2]=a,C[a+8>>2]=a;break}A=0|C[g>>2];g:do{if((-8&C[A+4>>2]|0)!=(0|E)){for(Q=E<<(31==(0|Q)?0:25-(Q>>>1)|0);g=0|C[(B=A+16+(Q>>>31<<2)|0)>>2];){if((-8&C[g+4>>2]|0)==(0|E)){A=g;break g}Q<<=1,A=g}C[B>>2]=a,C[a+24>>2]=A,C[a+12>>2]=a,C[a+8>>2]=a;break I}}while(0);u=0|C[(p=A+8|0)>>2],C[u+12>>2]=a,C[p>>2]=a,C[a+8>>2]=u,C[a+12>>2]=A,C[a+24>>2]=0}}while(0);return y=I,0|n+8}for(g=35164;!((A=0|C[g>>2])>>>0<=c>>>0&&(u=A+(0|C[g+4>>2])|0)>>>0>c>>>0);)g=0|C[g+8>>2];E=(E=u+-47+(0==(u+-47+8&7|0)?0:0-(u+-47+8)&7)|0)>>>0<(c+16|0)>>>0?c:E,A=i+-40|0,p=e+(F=0==(7&(F=e+8|0)|0)?0:0-F&7)|0,C[8685]=p,C[8682]=A-F,C[p+4>>2]=A-F|1,C[e+A+4>>2]=40,C[8686]=C[8801],C[E+4>>2]=27,C[E+8>>2]=C[8791],C[E+8+4>>2]=C[8792],C[E+8+8>>2]=C[8793],C[E+8+12>>2]=C[8794],C[8791]=e,C[8792]=i,C[8794]=0,C[8793]=E+8,A=E+24|0;do{p=A,C[(A=A+4|0)>>2]=7}while((p+8|0)>>>0>>0);if((0|E)!=(0|c)){if(C[E+4>>2]=-2&C[E+4>>2],C[c+4>>2]=E-c|1,C[E>>2]=E-c,(E-c|0)>>>0<256){B=34756+((E-c|0)>>>3<<1<<2)|0,(A=0|C[8679])&1<<((E-c|0)>>>3)?(A=B+8|0,g=0|C[B+8>>2]):(C[8679]=A|1<<((E-c|0)>>>3),A=B+8|0,g=B),C[A>>2]=c,C[g+12>>2]=c,C[c+8>>2]=g,C[c+12>>2]=B;break}if(g=35020+((Q=(E-c|0)>>>8?(E-c|0)>>>0>16777215?31:(E-c|0)>>>(7+(Q=14-((520192+(Q=(E-c|0)>>>8<<((1048320+((E-c|0)>>>8)|0)>>>16&8))|0)>>>16&4|(1048320+((E-c|0)>>>8)|0)>>>16&8|(245760+(Q<<((Q+520192|0)>>>16&4))|0)>>>16&2)+(Q<<((Q+520192|0)>>>16&4)<<((245760+(Q<<((Q+520192|0)>>>16&4))|0)>>>16&2)>>>15)|0)|0)&1|Q<<1:0)<<2)|0,C[c+28>>2]=Q,C[c+20>>2]=0,C[c+16>>2]=0,!((A=0|C[8680])&(B=1<>2]=c,C[c+24>>2]=g,C[c+12>>2]=c,C[c+8>>2]=c;break}A=0|C[g>>2];I:do{if((-8&C[A+4>>2]|0)!=(E-c|0)){for(Q=E-c<<(31==(0|Q)?0:25-(Q>>>1)|0);g=0|C[(B=A+16+(Q>>>31<<2)|0)>>2];){if((-8&C[g+4>>2]|0)==(E-c|0)){A=g;break I}Q<<=1,A=g}C[B>>2]=c,C[c+24>>2]=A,C[c+12>>2]=c,C[c+8>>2]=c;break A}}while(0);u=0|C[(p=A+8|0)>>2],C[u+12>>2]=c,C[p>>2]=c,C[c+8>>2]=u,C[c+12>>2]=A,C[c+24>>2]=0}}else 0==(0|(u=0|C[8683]))|e>>>0>>0&&(C[8683]=e),C[8791]=e,C[8792]=i,C[8794]=0,C[8688]=C[8797],C[8687]=-1,C[8692]=34756,C[8691]=34756,C[8694]=34764,C[8693]=34764,C[8696]=34772,C[8695]=34772,C[8698]=34780,C[8697]=34780,C[8700]=34788,C[8699]=34788,C[8702]=34796,C[8701]=34796,C[8704]=34804,C[8703]=34804,C[8706]=34812,C[8705]=34812,C[8708]=34820,C[8707]=34820,C[8710]=34828,C[8709]=34828,C[8712]=34836,C[8711]=34836,C[8714]=34844,C[8713]=34844,C[8716]=34852,C[8715]=34852,C[8718]=34860,C[8717]=34860,C[8720]=34868,C[8719]=34868,C[8722]=34876,C[8721]=34876,C[8724]=34884,C[8723]=34884,C[8726]=34892,C[8725]=34892,C[8728]=34900,C[8727]=34900,C[8730]=34908,C[8729]=34908,C[8732]=34916,C[8731]=34916,C[8734]=34924,C[8733]=34924,C[8736]=34932,C[8735]=34932,C[8738]=34940,C[8737]=34940,C[8740]=34948,C[8739]=34948,C[8742]=34956,C[8741]=34956,C[8744]=34964,C[8743]=34964,C[8746]=34972,C[8745]=34972,C[8748]=34980,C[8747]=34980,C[8750]=34988,C[8749]=34988,C[8752]=34996,C[8751]=34996,C[8754]=35004,C[8753]=35004,u=i+-40|0,p=e+(F=0==(7&(F=e+8|0)|0)?0:0-F&7)|0,C[8685]=p,C[8682]=u-F,C[p+4>>2]=u-F|1,C[e+u+4>>2]=40,C[8686]=C[8801]}while(0);if((A=0|C[8682])>>>0>t>>>0)return F=A-t|0,C[8682]=F,p=(u=0|C[8685])+t|0,C[8685]=p,C[p+4>>2]=1|F,C[u+4>>2]=3|t,y=I,0|u+8}return C[8678]=48,y=I,0}function p(A){var I,g,C,Q,E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0,m=0,L=0,x=0,K=0,X=0,j=0,T=0,q=0,V=0,z=0,W=0,O=0,Z=0,$=0,AA=0,IA=0,gA=0,BA=0,CA=0,QA=0,EA=0,iA=0,eA=0,oA=0,cA=0,aA=0,nA=0,rA=0,tA=0,fA=0,wA=0,yA=0;j=0|Bg(0|B[(A|=0)>>0],0|B[A+1>>0],0|B[A+2>>0]),o(),V=0|yg(0|(V=0|kI(A+2|0)),0|o(),5),o(),J=0|yg(0|(J=0|Bg(0|B[A+5>>0],0|B[A+6>>0],0|B[A+7>>0])),0|o(),2),o(),y=0|yg(0|(y=0|kI(A+7|0)),0|o(),7),o(),T=0|yg(0|(T=0|kI(A+10|0)),0|o(),4),o(),Z=0|yg(0|(Z=0|Bg(0|B[A+13>>0],0|B[A+14>>0],0|B[A+15>>0])),0|o(),1),o(),l=0|yg(0|(l=0|kI(A+15|0)),0|o(),6),o(),oA=0|yg(0|(oA=0|Bg(0|B[A+18>>0],0|B[A+19>>0],0|B[A+20>>0])),0|o(),3),o(),rA=0|Bg(0|B[A+21>>0],0|B[A+22>>0],0|B[A+23>>0]),o(),EA=0|yg(0|(EA=0|kI(A+23|0)),0|o(),5),o(),nA=0|yg(0|(nA=0|Bg(0|B[A+26>>0],0|B[A+27>>0],0|B[A+28>>0])),0|o(),2),o(),gA=0|yg(0|(gA=0|kI(A+28|0)),0|o(),7),o(),wA=0|yg(0|(wA=0|kI(A+31|0)),0|o(),4),o(),Y=0|yg(0|(Y=0|Bg(0|B[A+34>>0],0|B[A+35>>0],0|B[A+36>>0])),0|o(),1),o(),K=0|yg(0|(K=0|kI(A+36|0)),0|o(),6),o(),p=0|yg(0|(p=0|Bg(0|B[A+39>>0],0|B[A+40>>0],0|B[A+41>>0])),0|o(),3),o(),e=0|Bg(0|B[A+42>>0],0|B[A+43>>0],0|B[A+44>>0]),o(),L=0|yg(0|(L=0|kI(A+44|0)),0|o(),5),o(),CA=0|yg(0|(CA=0|Bg(0|B[A+47>>0],0|B[A+48>>0],0|B[A+49>>0])),0|o(),2),o(),yA=0|yg(0|(yA=0|kI(A+49|0)),0|o(),7),o(),f=0|yg(0|(f=0|kI(A+52|0)),0|o(),4),o(),G=0|yg(0|(G=0|Bg(0|B[A+55>>0],0|B[A+56>>0],0|B[A+57>>0])),0|o(),1),o(),U=0|yg(0|(U=0|kI(A+57|0)),0|o(),6),o(),r=0|Qg(0|(q=0|yg(0|(q=0|kI(A+60|0)),0|o(),3)),0|(c=0|o()),666643,0),F=0|o(),aA=0|Qg(0|q,0|c,470296,0),u=0|o(),M=0|Qg(0|q,0|c,654183,0),a=0|o(),_=0|Qg(0|q,0|c,-997805,-1),t=0|o(),p=0|vg(0|(E=0|Qg(0|q,0|c,136657,0)),0|o(),2097151&p|0,0),E=0|o(),e=0|vg(0|(c=0|Qg(0|q,0|c,-683901,-1)),0|o(),2097151&e|0,0),c=0|o(),q=0|Qg(2097151&U|0,0,666643,0),x=0|o(),k=0|Qg(2097151&U|0,0,470296,0),IA=0|o(),v=0|Qg(2097151&U|0,0,654183,0),i=0|o(),W=0|Qg(2097151&U|0,0,-997805,-1),z=0|o(),X=0|Qg(2097151&U|0,0,136657,0),D=0|o(),U=0|vg(0|p,0|E,0|(U=0|Qg(2097151&U|0,0,-683901,-1)),0|o()),E=0|o(),p=0|Qg(2097151&G|0,0,666643,0),O=0|o(),d=0|Qg(2097151&G|0,0,470296,0),BA=0|o(),m=0|Qg(2097151&G|0,0,654183,0),n=0|o(),tA=0|Qg(2097151&G|0,0,-997805,-1),cA=0|o(),AA=0|Qg(2097151&G|0,0,136657,0),b=0|o(),D=0|vg(0|(t=0|vg(0|(K=0|vg(0|(G=0|Qg(2097151&G|0,0,-683901,-1)),0|o(),2097151&K|0,0)),0|o(),0|_,0|t)),0|o(),0|X,0|D),X=0|o(),t=0|Qg(2097151&f|0,0,666643,0),_=0|o(),K=0|Qg(2097151&f|0,0,470296,0),G=0|o(),s=0|Qg(2097151&f|0,0,654183,0),$=0|o(),P=0|Qg(2097151&f|0,0,-997805,-1),R=0|o(),Q=0|Qg(2097151&f|0,0,136657,0),fA=0|o(),f=0|Qg(2097151&f|0,0,-683901,-1),w=0|o(),h=0|Qg(2097151&yA|0,0,666643,0),S=0|o(),iA=0|Qg(2097151&yA|0,0,470296,0),eA=0|o(),g=0|Qg(2097151&yA|0,0,654183,0),QA=0|o(),C=0|Qg(2097151&yA|0,0,-997805,-1),N=0|o(),I=0|Qg(2097151&yA|0,0,136657,0),H=0|o(),i=0|vg(0|(u=0|vg(0|(cA=0|vg(0|(fA=0|vg(0|(wA=0|vg(0|(yA=0|Qg(2097151&yA|0,0,-683901,-1)),0|o(),2097151&wA|0,0)),0|o(),0|Q,0|fA)),0|o(),0|tA,0|cA)),0|o(),0|aA,0|u)),0|o(),0|v,0|i),v=0|o(),l=0|vg(0|(u=0|Qg(2097151&CA|0,0,666643,0)),0|o(),2097151&l|0,0),u=0|o(),aA=0|Qg(2097151&CA|0,0,470296,0),cA=0|o(),_=0|vg(0|(eA=0|vg(0|(rA=0|vg(0|(tA=0|Qg(2097151&CA|0,0,654183,0)),0|o(),2097151&rA|0,0)),0|o(),0|iA,0|eA)),0|o(),0|t,0|_),t=0|o(),eA=0|Qg(2097151&CA|0,0,-997805,-1),iA=0|o(),x=0|vg(0|(BA=0|vg(0|($=0|vg(0|(N=0|vg(0|(nA=0|vg(0|(rA=0|Qg(2097151&CA|0,0,136657,0)),0|o(),2097151&nA|0,0)),0|o(),0|C,0|N)),0|o(),0|s,0|$)),0|o(),0|d,0|BA)),0|o(),0|q,0|x),q=0|o(),CA=0|Qg(2097151&CA|0,0,-683901,-1),BA=0|o(),s=0|yg(0|(d=0|vg(0|l,0|u,1048576,0)),0|($=0|o()),21),N=0|o(),N=0|vg(0|(S=0|vg(0|(oA=0|vg(0|aA,0|cA,2097151&oA|0,0)),0|o(),0|h,0|S)),0|o(),0|s,0|N),s=0|o(),$=0|Ug(0|l,0|u,-2097152&d|0,2047&$|0),d=0|o(),S=0|yg(0|(u=0|vg(0|_,0|t,1048576,0)),0|(l=0|o()),21),h=0|o(),h=0|vg(0|(O=0|vg(0|(G=0|vg(0|(QA=0|vg(0|(EA=0|vg(0|eA,0|iA,2097151&EA|0,0)),0|o(),0|g,0|QA)),0|o(),0|K,0|G)),0|o(),0|p,0|O)),0|o(),0|S,0|h),S=0|o(),G=0|ig(0|(O=0|vg(0|x,0|q,1048576,0)),0|(p=0|o()),21),K=0|o(),K=0|vg(0|(IA=0|vg(0|(F=0|vg(0|(n=0|vg(0|(R=0|vg(0|(H=0|vg(0|(gA=0|vg(0|CA,0|BA,2097151&gA|0,0)),0|o(),0|I,0|H)),0|o(),0|P,0|R)),0|o(),0|m,0|n)),0|o(),0|r,0|F)),0|o(),0|k,0|IA)),0|o(),0|G,0|K),G=0|o(),F=0|ig(0|(IA=0|vg(0|i,0|v,1048576,0)),0|(k=0|o()),21),r=0|o(),r=0|vg(0|(z=0|vg(0|(a=0|vg(0|(b=0|vg(0|(Y=0|vg(0|f,0|w,2097151&Y|0,0)),0|o(),0|AA,0|b)),0|o(),0|M,0|a)),0|o(),0|W,0|z)),0|o(),0|F,0|r),F=0|o(),k=0|Ug(0|i,0|v,-2097152&IA|0,0|k),IA=0|o(),z=0|vg(0|U,0|E,0|(z=0|ig(0|(v=0|vg(0|D,0|X,1048576,0)),0|(i=0|o()),21)),0|o()),E=0|o(),i=0|Ug(0|D,0|X,-2097152&v|0,0|i),v=0|o(),L=0|vg(0|(U=0|ig(0|(X=0|vg(0|e,0|c,1048576,0)),0|(D=0|o()),21)),0|o(),2097151&L|0,0),U=0|o(),D=0|Ug(0|e,0|c,-2097152&X|0,0|D),X=0|o(),W=0|yg(0|(c=0|vg(0|N,0|s,1048576,0)),0|(e=0|o()),21),a=0|o(),e=0|Ug(0|N,0|s,-2097152&c|0,0|e),c=0|o(),M=0|ig(0|(s=0|vg(0|h,0|S,1048576,0)),0|(N=0|o()),21),b=0|o(),IA=0|vg(0|(w=0|ig(0|(AA=0|vg(0|K,0|G,1048576,0)),0|(Y=0|o()),21)),0|o(),0|k,0|IA),k=0|o(),Y=0|Ug(0|K,0|G,-2097152&AA|0,0|Y),AA=0|o(),v=0|vg(0|(w=0|ig(0|(G=0|vg(0|r,0|F,1048576,0)),0|(K=0|o()),21)),0|o(),0|i,0|v),i=0|o(),K=0|Ug(0|r,0|F,-2097152&G|0,0|K),G=0|o(),X=0|vg(0|(w=0|ig(0|(F=0|vg(0|z,0|E,1048576,0)),0|(r=0|o()),21)),0|o(),0|D,0|X),D=0|o(),r=0|Ug(0|z,0|E,-2097152&F|0,0|r),F=0|o(),Z=0|vg(0|(E=0|Qg(0|L,0|U,666643,0)),0|o(),2097151&Z|0,0),E=0|o(),z=0|vg(0|$,0|d,0|(z=0|Qg(0|L,0|U,470296,0)),0|o()),d=0|o(),$=0|vg(0|e,0|c,0|($=0|Qg(0|L,0|U,654183,0)),0|o()),c=0|o(),e=0|Qg(0|L,0|U,-997805,-1),w=0|o(),f=0|Qg(0|L,0|U,136657,0),n=0|o(),p=0|Ug(0|(b=0|vg(0|(q=0|vg(0|(U=0|Qg(0|L,0|U,-683901,-1)),0|o(),0|x,0|q)),0|o(),0|M,0|b)),0|o(),-2097152&O|0,0|p),O=0|o(),T=0|vg(0|(b=0|Qg(0|X,0|D,666643,0)),0|o(),2097151&T|0,0),b=0|o(),M=0|vg(0|Z,0|E,0|(M=0|Qg(0|X,0|D,470296,0)),0|o()),E=0|o(),Z=0|vg(0|z,0|d,0|(Z=0|Qg(0|X,0|D,654183,0)),0|o()),d=0|o(),z=0|vg(0|$,0|c,0|(z=0|Qg(0|X,0|D,-997805,-1)),0|o()),c=0|o(),$=0|Qg(0|X,0|D,136657,0),q=0|o(),D=0|Qg(0|X,0|D,-683901,-1),X=0|o(),y=0|vg(0|(x=0|Qg(0|r,0|F,666643,0)),0|o(),2097151&y|0,0),x=0|o(),U=0|vg(0|T,0|b,0|(U=0|Qg(0|r,0|F,470296,0)),0|o()),b=0|o(),T=0|vg(0|M,0|E,0|(T=0|Qg(0|r,0|F,654183,0)),0|o()),E=0|o(),M=0|vg(0|Z,0|d,0|(M=0|Qg(0|r,0|F,-997805,-1)),0|o()),d=0|o(),Z=0|vg(0|z,0|c,0|(Z=0|Qg(0|r,0|F,136657,0)),0|o()),c=0|o(),F=0|Qg(0|r,0|F,-683901,-1),r=0|o(),r=0|vg(0|(q=0|vg(0|(w=0|vg(0|(l=0|Ug(0|(t=0|vg(0|W,0|a,0|_,0|t)),0|o(),-2097152&u|0,0|l)),0|o(),0|e,0|w)),0|o(),0|$,0|q)),0|o(),0|F,0|r),F=0|o(),J=0|vg(0|(q=0|Qg(0|v,0|i,666643,0)),0|o(),2097151&J|0,0),q=0|o(),$=0|vg(0|y,0|x,0|($=0|Qg(0|v,0|i,470296,0)),0|o()),x=0|o(),y=0|vg(0|U,0|b,0|(y=0|Qg(0|v,0|i,654183,0)),0|o()),b=0|o(),U=0|vg(0|T,0|E,0|(U=0|Qg(0|v,0|i,-997805,-1)),0|o()),E=0|o(),T=0|vg(0|M,0|d,0|(T=0|Qg(0|v,0|i,136657,0)),0|o()),d=0|o(),i=0|vg(0|Z,0|c,0|(i=0|Qg(0|v,0|i,-683901,-1)),0|o()),c=0|o(),V=0|vg(0|(Z=0|Qg(0|K,0|G,666643,0)),0|o(),2097151&V|0,0),Z=0|o(),v=0|vg(0|J,0|q,0|(v=0|Qg(0|K,0|G,470296,0)),0|o()),q=0|o(),J=0|vg(0|$,0|x,0|(J=0|Qg(0|K,0|G,654183,0)),0|o()),x=0|o(),$=0|vg(0|y,0|b,0|($=0|Qg(0|K,0|G,-997805,-1)),0|o()),b=0|o(),y=0|vg(0|U,0|E,0|(y=0|Qg(0|K,0|G,136657,0)),0|o()),E=0|o(),G=0|vg(0|T,0|d,0|(G=0|Qg(0|K,0|G,-683901,-1)),0|o()),d=0|o(),j=0|vg(0|(T=0|Qg(0|IA,0|k,666643,0)),0|o(),2097151&j|0,0),T=0|o(),K=0|vg(0|V,0|Z,0|(K=0|Qg(0|IA,0|k,470296,0)),0|o()),Z=0|o(),V=0|vg(0|v,0|q,0|(V=0|Qg(0|IA,0|k,654183,0)),0|o()),q=0|o(),v=0|vg(0|J,0|x,0|(v=0|Qg(0|IA,0|k,-997805,-1)),0|o()),x=0|o(),J=0|vg(0|$,0|b,0|(J=0|Qg(0|IA,0|k,136657,0)),0|o()),b=0|o(),k=0|vg(0|y,0|E,0|(k=0|Qg(0|IA,0|k,-683901,-1)),0|o()),E=0|o(),$=0|vg(0|K,0|Z,0|($=0|ig(0|(y=0|vg(0|j,0|T,1048576,0)),0|(IA=0|o()),21)),0|o()),Z=0|o(),IA=0|Ug(0|j,0|T,-2097152&y|0,0|IA),y=0|o(),K=0|vg(0|v,0|x,0|(K=0|ig(0|(T=0|vg(0|V,0|q,1048576,0)),0|(j=0|o()),21)),0|o()),x=0|o(),M=0|vg(0|k,0|E,0|(M=0|ig(0|(v=0|vg(0|J,0|b,1048576,0)),0|(U=0|o()),21)),0|o()),E=0|o(),e=0|vg(0|i,0|c,0|(e=0|ig(0|(k=0|vg(0|G,0|d,1048576,0)),0|(w=0|o()),21)),0|o()),c=0|o(),w=0|Ug(0|G,0|d,-2097152&k|0,0|w),k=0|o(),i=0|ig(0|(d=0|vg(0|r,0|F,1048576,0)),0|(G=0|o()),21),l=0|o(),l=0|vg(0|(X=0|vg(0|(N=0|Ug(0|(S=0|vg(0|f,0|n,0|h,0|S)),0|o(),-2097152&s|0,0|N)),0|o(),0|D,0|X)),0|o(),0|i,0|l),i=0|o(),G=0|Ug(0|r,0|F,-2097152&d|0,0|G),d=0|o(),AA=0|vg(0|(X=0|ig(0|(F=0|vg(0|p,0|O,1048576,0)),0|(r=0|o()),21)),0|o(),0|Y,0|AA),Y=0|o(),r=0|Ug(0|p,0|O,-2097152&F|0,0|r),F=0|o(),X=0|ig(0|(O=0|vg(0|$,0|Z,1048576,0)),0|(p=0|o()),21),D=0|o(),S=0|ig(0|(N=0|vg(0|K,0|x,1048576,0)),0|(s=0|o()),21),h=0|o(),u=0|vg(0|w,0|k,0|(u=0|ig(0|(n=0|vg(0|M,0|E,1048576,0)),0|(f=0|o()),21)),0|o()),k=0|o(),_=0|vg(0|G,0|d,0|(_=0|ig(0|(w=0|vg(0|e,0|c,1048576,0)),0|(t=0|o()),21)),0|o()),d=0|o(),t=0|Ug(0|e,0|c,-2097152&w|0,0|t),w=0|o(),G=0|vg(0|r,0|F,0|(G=0|ig(0|(c=0|vg(0|l,0|i,1048576,0)),0|(e=0|o()),21)),0|o()),F=0|o(),e=0|Ug(0|l,0|i,-2097152&c|0,0|e),c=0|o(),r=0|ig(0|(i=0|vg(0|AA,0|Y,1048576,0)),0|(l=0|o()),21),a=0|o(),l=0|Ug(0|AA,0|Y,-2097152&i|0,0|l),i=0|o(),Y=0|vg(0|IA,0|y,0|(Y=0|Qg(0|r,0|a,666643,0)),0|o()),y=0|o(),IA=0|Qg(0|r,0|a,470296,0),AA=0|o(),W=0|Qg(0|r,0|a,654183,0),z=0|o(),L=0|Qg(0|r,0|a,-997805,-1),m=0|o(),R=0|Qg(0|r,0|a,136657,0),P=0|o(),a=0|Qg(0|r,0|a,-683901,-1),r=0|o(),y=0|ig(0|Y,0|y,21),H=0|o(),y=0|ig(0|(H=0|vg(0|(p=0|Ug(0|(Z=0|vg(0|IA,0|AA,0|$,0|Z)),0|o(),-2097152&O|0,0|p)),0|o(),0|y,0|H)),0|o(),21),p=0|o(),y=0|ig(0|(p=0|vg(0|(D=0|vg(0|(j=0|Ug(0|(q=0|vg(0|W,0|z,0|V,0|q)),0|o(),-2097152&T|0,0|j)),0|o(),0|X,0|D)),0|o(),0|y,0|p)),0|o(),21),D=0|o(),y=0|ig(0|(D=0|vg(0|(s=0|Ug(0|(m=0|vg(0|K,0|x,0|L,0|m)),0|o(),-2097152&N|0,0|s)),0|o(),0|y,0|D)),0|o(),21),s=0|o(),y=0|ig(0|(s=0|vg(0|(h=0|vg(0|(U=0|Ug(0|(b=0|vg(0|R,0|P,0|J,0|b)),0|o(),-2097152&v|0,0|U)),0|o(),0|S,0|h)),0|o(),0|y,0|s)),0|o(),21),h=0|o(),Y=0|vg(0|(G=0|Qg(0|(l=0|ig(0|(i=0|vg(0|(F=0|ig(0|(e=0|vg(0|G,0|F,0|(e=0|ig(0|(c=0|vg(0|(d=0|ig(0|(t=0|vg(0|_,0|d,0|(t=0|ig(0|(w=0|vg(0|(k=0|ig(0|(y=0|vg(0|u,0|k,0|(y=0|ig(0|(h=0|vg(0|(f=0|Ug(0|(r=0|vg(0|M,0|E,0|a,0|r)),0|o(),-2097152&n|0,0|f)),0|o(),0|y,0|h)),0|o(),21)),0|o())),0|o(),21)),0|o(),0|t,0|w)),0|o(),21)),0|o())),0|o(),21)),0|o(),0|e,0|c)),0|o(),21)),0|o())),0|o(),21)),0|o(),0|l,0|i)),0|o(),21)),0|(F=0|o()),666643,0)),0|o(),2097151&Y|0,0),G=0|o(),H=0|vg(0|(d=0|Qg(0|l,0|F,470296,0)),0|o(),2097151&H|0,0),d=0|o(),p=0|vg(0|(_=0|Qg(0|l,0|F,654183,0)),0|o(),2097151&p|0,0),_=0|o(),D=0|vg(0|(k=0|Qg(0|l,0|F,-997805,-1)),0|o(),2097151&D|0,0),k=0|o(),s=0|vg(0|(u=0|Qg(0|l,0|F,136657,0)),0|o(),2097151&s|0,0),u=0|o(),i=0|vg(0|(E=0|ig(0|(e=0|vg(0|(a=0|ig(0|(c=0|vg(0|(r=0|ig(0|(t=0|vg(0|(n=0|ig(0|(w=0|vg(0|(f=0|ig(0|(y=0|vg(0|(h=0|ig(0|(s=0|vg(0|(h=0|vg(0|(F=0|Qg(0|l,0|F,-683901,-1)),0|o(),2097151&h|0,0)),0|(F=0|o()),0|(s=0|ig(0|(D=0|vg(0|s,0|u,0|(D=0|ig(0|(p=0|vg(0|D,0|k,0|(p=0|ig(0|(H=0|vg(0|p,0|_,0|(H=0|ig(0|(l=0|vg(0|H,0|d,0|(l=0|ig(0|Y,0|G,21)),0|o())),0|(d=0|o()),21)),0|o())),0|(_=0|o()),21)),0|o())),0|(k=0|o()),21)),0|o())),0|(u=0|o()),21)),0|o())),0|(F=0|o()),21)),0|o(),2097151&y|0,0)),0|(h=0|o()),21)),0|o(),2097151&w|0,0)),0|(f=0|o()),21)),0|o(),2097151&t|0,0)),0|(n=0|o()),21)),0|o(),2097151&c|0,0)),0|(r=0|o()),21)),0|o(),2097151&e|0,0)),0|(a=0|o()),21)),0|o(),2097151&i|0,0),E=0|o(),B[A>>0]=Y,M=0|yg(0|Y,0|G,8),o(),B[A+1>>0]=M,G=0|yg(0|Y,0|G,16),o(),Y=0|rg(2097151&l|0,0,5),o(),B[A+2>>0]=Y|31&G,G=0|yg(0|l,0|d,3),o(),B[A+3>>0]=G,d=0|yg(0|l,0|d,11),o(),B[A+4>>0]=d,l=0|yg(2097151&l|0,0,19),d=0|o(),G=0|rg(2097151&H|0,0,2),o(),B[A+5>>0]=G|l,_=0|yg(0|H,0|_,6),o(),B[A+6>>0]=_,H=0|yg(2097151&H|0,0,14),_=0|o(),l=0|rg(2097151&p|0,0,7),o(),B[A+7>>0]=l|H,H=0|yg(0|p,0|k,1),o(),B[A+8>>0]=H,k=0|yg(0|p,0|k,9),o(),B[A+9>>0]=k,p=0|yg(2097151&p|0,0,17),k=0|o(),H=0|rg(2097151&D|0,0,4),o(),B[A+10>>0]=H|p,p=0|yg(0|D,0|u,4),o(),B[A+11>>0]=p,u=0|yg(0|D,0|u,12),o(),B[A+12>>0]=u,D=0|yg(2097151&D|0,0,20),u=0|o(),p=0|rg(2097151&s|0,0,1),o(),B[A+13>>0]=p|D,F=0|yg(0|s,0|F,7),o(),B[A+14>>0]=F,s=0|yg(2097151&s|0,0,15),F=0|o(),D=0|rg(2097151&y|0,0,6),o(),B[A+15>>0]=D|s,s=0|yg(0|y,0|h,2),o(),B[A+16>>0]=s,h=0|yg(0|y,0|h,10),o(),B[A+17>>0]=h,y=0|yg(2097151&y|0,0,18),h=0|o(),s=0|rg(0|w,0|f,3),o(),B[A+18>>0]=s|y,y=0|yg(0|w,0|f,5),o(),B[A+19>>0]=y,f=0|yg(0|w,0|f,13),o(),B[A+20>>0]=f,B[A+21>>0]=t,f=0|yg(0|t,0|n,8),o(),B[A+22>>0]=f,n=0|yg(0|t,0|n,16),o(),t=0|rg(2097151&c|0,0,5),o(),B[A+23>>0]=t|31&n,n=0|yg(0|c,0|r,3),o(),B[A+24>>0]=n,r=0|yg(0|c,0|r,11),o(),B[A+25>>0]=r,c=0|yg(2097151&c|0,0,19),r=0|o(),n=0|rg(2097151&e|0,0,2),o(),B[A+26>>0]=n|c,a=0|yg(0|e,0|a,6),o(),B[A+27>>0]=a,e=0|yg(2097151&e|0,0,14),a=0|o(),c=0|rg(0|i,0|E,7),o(),B[A+28>>0]=c|e,e=0|yg(0|i,0|E,1),o(),B[A+29>>0]=e,e=0|yg(0|i,0|E,9),o(),B[A+30>>0]=e,E=0|ig(0|i,0|E,17),o(),B[A+31>>0]=E}function u(A,I,g){A|=0,g|=0;var B,Q,E,i,e,c,a,n,r,t,f,w,y,s,h,D,F,p,u,H,k,l,_,G,d,Y,M,S,U,v,b,J,P,R,N,m,L,x,K,X,j,T,q,V,z,W,O,Z,$,AA,IA,gA,BA,CA,QA,EA,iA,eA,oA,cA,aA,nA,rA,tA,fA,wA,yA,sA,hA,DA,FA,pA,uA,HA,kA,lA,_A,GA,dA,YA,MA,SA,UA,vA,bA,JA,PA,RA,NA,mA=0,LA=0,xA=0,KA=0,XA=0,jA=0,TA=0,qA=0,VA=0,zA=0,WA=0,OA=0,ZA=0,$A=0,AI=0,II=0,gI=0,BI=0,CI=0,QI=0,EI=0,iI=0,eI=0,oI=0,cI=0,aI=0,nI=0,rI=0,tI=0,fI=0,wI=0,yI=0,sI=0,hI=0,DI=0,FI=0,pI=0,uI=0,HI=0,kI=0,lI=0,_I=0,GI=0,dI=0,YI=0,MI=0,SI=0,UI=0,vI=0,bI=0,JI=0,PI=0,RI=0,NI=0,mI=0,LI=0,xI=0,KI=0,XI=0,jI=0,TI=0,qI=0,VI=0,zI=0,WI=0,OI=0,ZI=0,$I=0,Ag=0,Ig=0,gg=0,Bg=0,Cg=0,Eg=0,eg=0,og=0,cg=0,ag=0,ng=0,rg=0,tg=0,fg=0,wg=0,sg=0,hg=0,Dg=0,Fg=0,pg=0,ug=0,Hg=0,kg=0,lg=0,_g=0,Gg=0,dg=0,Yg=0,Mg=0,Sg=0,bg=0,Jg=0,Pg=0,Rg=0,Ng=0,mg=0,Lg=0,xg=0,Kg=0,Xg=0,jg=0,Tg=0;AI=0|C[(I|=0)>>2],qA=0|C[I+4>>2],jA=0|C[I+8>>2],ZA=0|C[I+12>>2],SI=0|C[I+16>>2],OA=0|C[I+20>>2],eg=0|C[I+24>>2],mA=0|C[I+28>>2],pI=0|C[I+32>>2],nI=0|C[I+36>>2],oI=0|C[g>>2],Tg=0|C[g+4>>2],lg=0|C[g+8>>2],Bg=0|C[g+12>>2],RI=0|C[g+16>>2],Yg=0|C[g+20>>2],ag=0|C[g+24>>2],KI=0|C[g+28>>2],uI=0|C[g+32>>2],NA=0|C[g+36>>2],PA=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),jg=0|o(),dA=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),GA=0|o(),gA=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),Cg=0|o(),P=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),NI=0|o(),pA=0|Qg(0|RI,((0|RI)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),Sg=0|o(),eA=0|Qg(0|Yg,((0|Yg)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),rg=0|o(),K=0|Qg(0|ag,((0|ag)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),jI=0|o(),H=0|Qg(0|KI,((0|KI)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),kI=0|o(),t=0|Qg(0|uI,((0|uI)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),rI=0|o(),AI=0|Qg(0|NA,((0|NA)<0)<<31>>31|0,0|AI,((0|AI)<0)<<31>>31|0),$A=0|o(),_g=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|qA,((0|qA)<0)<<31>>31|0),Gg=0|o(),QA=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,qA<<1|0,((qA<<1|0)<0)<<31>>31|0),CA=0|o(),R=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|qA,((0|qA)<0)<<31>>31|0),mI=0|o(),uA=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,qA<<1|0,((qA<<1|0)<0)<<31>>31|0),bg=0|o(),oA=0|Qg(0|RI,((0|RI)<0)<<31>>31|0,0|qA,((0|qA)<0)<<31>>31|0),tg=0|o(),X=0|Qg(0|Yg,((0|Yg)<0)<<31>>31|0,qA<<1|0,((qA<<1|0)<0)<<31>>31|0),TI=0|o(),k=0|Qg(0|ag,((0|ag)<0)<<31>>31|0,0|qA,((0|qA)<0)<<31>>31|0),lI=0|o(),f=0|Qg(0|KI,((0|KI)<0)<<31>>31|0,qA<<1|0,((qA<<1|0)<0)<<31>>31|0),tI=0|o(),B=0|Qg(0|uI,((0|uI)<0)<<31>>31|0,0|qA,((0|qA)<0)<<31>>31|0),II=0|o(),qA=0|Qg(19*NA|0,0|(aI=((19*NA|0)<0)<<31>>31),qA<<1|0,((qA<<1|0)<0)<<31>>31|0),I=0|o(),BA=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),Eg=0|o(),L=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),m=0|o(),HA=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),Jg=0|o(),cA=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),fg=0|o(),j=0|Qg(0|RI,((0|RI)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),qI=0|o(),l=0|Qg(0|Yg,((0|Yg)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),_I=0|o(),w=0|Qg(0|ag,((0|ag)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),fI=0|o(),Q=0|Qg(0|KI,((0|KI)<0)<<31>>31|0,0|jA,((0|jA)<0)<<31>>31|0),gI=0|o(),YA=0|Qg(19*uI|0,0|(HI=((19*uI|0)<0)<<31>>31),0|jA,((0|jA)<0)<<31>>31|0),Rg=0|o(),jA=0|Qg(19*NA|0,0|aI,0|jA,((0|jA)<0)<<31>>31|0),TA=0|o(),N=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|ZA,((0|ZA)<0)<<31>>31|0),LI=0|o(),_A=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,ZA<<1|0,((ZA<<1|0)<0)<<31>>31|0),lA=0|o(),aA=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|ZA,((0|ZA)<0)<<31>>31|0),wg=0|o(),T=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,ZA<<1|0,((ZA<<1|0)<0)<<31>>31|0),VI=0|o(),_=0|Qg(0|RI,((0|RI)<0)<<31>>31|0,0|ZA,((0|ZA)<0)<<31>>31|0),GI=0|o(),y=0|Qg(0|Yg,((0|Yg)<0)<<31>>31|0,ZA<<1|0,((ZA<<1|0)<0)<<31>>31|0),wI=0|o(),E=0|Qg(0|ag,((0|ag)<0)<<31>>31|0,0|ZA,((0|ZA)<0)<<31>>31|0),BI=0|o(),MA=0|Qg(19*KI|0,0|(XI=((19*KI|0)<0)<<31>>31),ZA<<1|0,((ZA<<1|0)<0)<<31>>31|0),Ng=0|o(),fA=0|Qg(19*uI|0,0|HI,0|ZA,((0|ZA)<0)<<31>>31|0),hg=0|o(),ZA=0|Qg(19*NA|0,0|aI,ZA<<1|0,((ZA<<1|0)<0)<<31>>31|0),XA=0|o(),kA=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|SI,((0|SI)<0)<<31>>31|0),Pg=0|o(),tA=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,0|SI,((0|SI)<0)<<31>>31|0),rA=0|o(),q=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|SI,((0|SI)<0)<<31>>31|0),zI=0|o(),G=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,0|SI,((0|SI)<0)<<31>>31|0),dI=0|o(),s=0|Qg(0|RI,((0|RI)<0)<<31>>31|0,0|SI,((0|SI)<0)<<31>>31|0),yI=0|o(),i=0|Qg(0|Yg,((0|Yg)<0)<<31>>31|0,0|SI,((0|SI)<0)<<31>>31|0),CI=0|o(),SA=0|Qg(19*ag|0,0|(ng=((19*ag|0)<0)<<31>>31),0|SI,((0|SI)<0)<<31>>31|0),mg=0|o(),wA=0|Qg(19*KI|0,0|XI,0|SI,((0|SI)<0)<<31>>31|0),Dg=0|o(),O=0|Qg(19*uI|0,0|HI,0|SI,((0|SI)<0)<<31>>31|0),OI=0|o(),SI=0|Qg(19*NA|0,0|aI,0|SI,((0|SI)<0)<<31>>31|0),xA=0|o(),nA=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|OA,((0|OA)<0)<<31>>31|0),sg=0|o(),W=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,OA<<1|0,((OA<<1|0)<0)<<31>>31|0),z=0|o(),d=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|OA,((0|OA)<0)<<31>>31|0),YI=0|o(),h=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,OA<<1|0,((OA<<1|0)<0)<<31>>31|0),sI=0|o(),e=0|Qg(0|RI,((0|RI)<0)<<31>>31|0,0|OA,((0|OA)<0)<<31>>31|0),QI=0|o(),UA=0|Qg(19*Yg|0,0|(Mg=((19*Yg|0)<0)<<31>>31),OA<<1|0,((OA<<1|0)<0)<<31>>31|0),Lg=0|o(),yA=0|Qg(19*ag|0,0|ng,0|OA,((0|OA)<0)<<31>>31|0),Fg=0|o(),Z=0|Qg(19*KI|0,0|XI,OA<<1|0,((OA<<1|0)<0)<<31>>31|0),ZI=0|o(),U=0|Qg(19*uI|0,0|HI,0|OA,((0|OA)<0)<<31>>31|0),UI=0|o(),OA=0|Qg(19*NA|0,0|aI,OA<<1|0,((OA<<1|0)<0)<<31>>31|0),LA=0|o(),V=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|eg,((0|eg)<0)<<31>>31|0),WI=0|o(),S=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,0|eg,((0|eg)<0)<<31>>31|0),M=0|o(),D=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|eg,((0|eg)<0)<<31>>31|0),hI=0|o(),c=0|Qg(0|Bg,((0|Bg)<0)<<31>>31|0,0|eg,((0|eg)<0)<<31>>31|0),EI=0|o(),vA=0|Qg(19*RI|0,((19*RI|0)<0)<<31>>31|0,0|eg,((0|eg)<0)<<31>>31|0),xg=0|o(),sA=0|Qg(19*Yg|0,0|Mg,0|eg,((0|eg)<0)<<31>>31|0),pg=0|o(),$=0|Qg(19*ag|0,0|ng,0|eg,((0|eg)<0)<<31>>31|0),$I=0|o(),v=0|Qg(19*KI|0,0|XI,0|eg,((0|eg)<0)<<31>>31|0),vI=0|o(),VA=0|Qg(19*uI|0,0|HI,0|eg,((0|eg)<0)<<31>>31|0),zA=0|o(),eg=0|Qg(19*NA|0,0|aI,0|eg,((0|eg)<0)<<31>>31|0),KA=0|o(),Y=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|mA,((0|mA)<0)<<31>>31|0),MI=0|o(),u=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,mA<<1|0,((mA<<1|0)<0)<<31>>31|0),p=0|o(),a=0|Qg(0|lg,((0|lg)<0)<<31>>31|0,0|mA,((0|mA)<0)<<31>>31|0),iI=0|o(),bA=0|Qg(19*Bg|0,((19*Bg|0)<0)<<31>>31|0,mA<<1|0,((mA<<1|0)<0)<<31>>31|0),Kg=0|o(),hA=0|Qg(19*RI|0,((19*RI|0)<0)<<31>>31|0,0|mA,((0|mA)<0)<<31>>31|0),ug=0|o(),AA=0|Qg(19*Yg|0,0|Mg,mA<<1|0,((mA<<1|0)<0)<<31>>31|0),Ag=0|o(),b=0|Qg(19*ag|0,0|ng,0|mA,((0|mA)<0)<<31>>31|0),bI=0|o(),cI=0|Qg(19*KI|0,0|XI,mA<<1|0,((mA<<1|0)<0)<<31>>31|0),WA=0|o(),EA=0|Qg(19*uI|0,0|HI,0|mA,((0|mA)<0)<<31>>31|0),og=0|o(),g=0|Qg(19*NA|0,0|aI,mA<<1|0,((mA<<1|0)<0)<<31>>31|0),mA=0|o(),F=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|pI,((0|pI)<0)<<31>>31|0),DI=0|o(),r=0|Qg(0|Tg,((0|Tg)<0)<<31>>31|0,0|pI,((0|pI)<0)<<31>>31|0),n=0|o(),JA=0|Qg(19*lg|0,((19*lg|0)<0)<<31>>31|0,0|pI,((0|pI)<0)<<31>>31|0),Xg=0|o(),DA=0|Qg(19*Bg|0,((19*Bg|0)<0)<<31>>31|0,0|pI,((0|pI)<0)<<31>>31|0),Hg=0|o(),IA=0|Qg(19*RI|0,((19*RI|0)<0)<<31>>31|0,0|pI,((0|pI)<0)<<31>>31|0),Ig=0|o(),J=0|Qg(19*Yg|0,0|Mg,0|pI,((0|pI)<0)<<31>>31|0),JI=0|o(),FA=0|Qg(19*ag|0,0|ng,0|pI,((0|pI)<0)<<31>>31|0),dg=0|o(),iA=0|Qg(19*KI|0,0|XI,0|pI,((0|pI)<0)<<31>>31|0),cg=0|o(),x=0|Qg(19*uI|0,0|HI,0|pI,((0|pI)<0)<<31>>31|0),xI=0|o(),pI=0|Qg(19*NA|0,0|aI,0|pI,((0|pI)<0)<<31>>31|0),FI=0|o(),oI=0|Qg(0|oI,((0|oI)<0)<<31>>31|0,0|nI,((0|nI)<0)<<31>>31|0),eI=0|o(),Tg=0|Qg(19*Tg|0,((19*Tg|0)<0)<<31>>31|0,nI<<1|0,((nI<<1|0)<0)<<31>>31|0),RA=0|o(),lg=0|Qg(19*lg|0,((19*lg|0)<0)<<31>>31|0,0|nI,((0|nI)<0)<<31>>31|0),kg=0|o(),Bg=0|Qg(19*Bg|0,((19*Bg|0)<0)<<31>>31|0,nI<<1|0,((nI<<1|0)<0)<<31>>31|0),gg=0|o(),RI=0|Qg(19*RI|0,((19*RI|0)<0)<<31>>31|0,0|nI,((0|nI)<0)<<31>>31|0),PI=0|o(),Mg=0|Qg(19*Yg|0,0|Mg,nI<<1|0,((nI<<1|0)<0)<<31>>31|0),Yg=0|o(),ng=0|Qg(19*ag|0,0|ng,0|nI,((0|nI)<0)<<31>>31|0),ag=0|o(),XI=0|Qg(19*KI|0,0|XI,nI<<1|0,((nI<<1|0)<0)<<31>>31|0),KI=0|o(),HI=0|Qg(19*uI|0,0|HI,0|nI,((0|nI)<0)<<31>>31|0),uI=0|o(),nI=0|Qg(19*NA|0,0|aI,nI<<1|0,((nI<<1|0)<0)<<31>>31|0),aI=0|o(),I=0|vg(0|(Rg=0|vg(0|(Ng=0|vg(0|(mg=0|vg(0|(Lg=0|vg(0|(xg=0|vg(0|(Kg=0|vg(0|(Xg=0|vg(0|(jg=0|vg(0|Tg,0|RA,0|PA,0|jg)),0|o(),0|JA,0|Xg)),0|o(),0|bA,0|Kg)),0|o(),0|vA,0|xg)),0|o(),0|UA,0|Lg)),0|o(),0|SA,0|mg)),0|o(),0|MA,0|Ng)),0|o(),0|YA,0|Rg)),0|o(),0|qA,0|I),qA=0|o(),Gg=0|vg(0|dA,0|GA,0|_g,0|Gg),_g=0|o(),LA=0|vg(0|(zA=0|vg(0|(WA=0|vg(0|(dg=0|vg(0|(Yg=0|vg(0|(Sg=0|vg(0|(bg=0|vg(0|(Jg=0|vg(0|(Pg=0|vg(0|_A,0|lA,0|kA,0|Pg)),0|o(),0|HA,0|Jg)),0|o(),0|uA,0|bg)),0|o(),0|pA,0|Sg)),0|o(),0|Mg,0|Yg)),0|o(),0|FA,0|dg)),0|o(),0|cI,0|WA)),0|o(),0|VA,0|zA)),0|o(),0|OA,0|LA),OA=0|o(),WA=0|ig(0|(zA=0|vg(0|I,0|qA,33554432,0)),0|(VA=0|o()),26),cI=0|o(),cI=0|vg(0|(TA=0|vg(0|(hg=0|vg(0|(Dg=0|vg(0|(Fg=0|vg(0|(pg=0|vg(0|(ug=0|vg(0|(Hg=0|vg(0|(kg=0|vg(0|Gg,0|_g,0|lg,0|kg)),0|o(),0|DA,0|Hg)),0|o(),0|hA,0|ug)),0|o(),0|sA,0|pg)),0|o(),0|yA,0|Fg)),0|o(),0|wA,0|Dg)),0|o(),0|fA,0|hg)),0|o(),0|jA,0|TA)),0|o(),0|WA,0|cI),WA=0|o(),VA=0|Ug(0|I,0|qA,-67108864&zA|0,0|VA),zA=0|o(),TA=0|ig(0|(qA=0|vg(0|LA,0|OA,33554432,0)),0|(I=0|o()),26),jA=0|o(),jA=0|vg(0|(KA=0|vg(0|(og=0|vg(0|(cg=0|vg(0|(ag=0|vg(0|(rg=0|vg(0|(tg=0|vg(0|(fg=0|vg(0|(wg=0|vg(0|(sg=0|vg(0|tA,0|rA,0|nA,0|sg)),0|o(),0|aA,0|wg)),0|o(),0|cA,0|fg)),0|o(),0|oA,0|tg)),0|o(),0|eA,0|rg)),0|o(),0|ng,0|ag)),0|o(),0|iA,0|cg)),0|o(),0|EA,0|og)),0|o(),0|eg,0|KA)),0|o(),0|TA,0|jA),TA=0|o(),I=0|Ug(0|LA,0|OA,-67108864&qA|0,0|I),qA=0|o(),LA=0|ig(0|(OA=0|vg(0|cI,0|WA,16777216,0)),0|o(),25),KA=0|o(),KA=0|vg(0|(XA=0|vg(0|(OI=0|vg(0|(ZI=0|vg(0|($I=0|vg(0|(Ag=0|vg(0|(Ig=0|vg(0|(gg=0|vg(0|(Cg=0|vg(0|(Eg=0|vg(0|QA,0|CA,0|BA,0|Eg)),0|o(),0|gA,0|Cg)),0|o(),0|Bg,0|gg)),0|o(),0|IA,0|Ig)),0|o(),0|AA,0|Ag)),0|o(),0|$,0|$I)),0|o(),0|Z,0|ZI)),0|o(),0|O,0|OI)),0|o(),0|ZA,0|XA)),0|o(),0|LA,0|KA),LA=0|o(),OA=0|Ug(0|cI,0|WA,-33554432&OA|0,0),WA=0|o(),XA=0|ig(0|(cI=0|vg(0|jA,0|TA,16777216,0)),0|o(),25),ZA=0|o(),ZA=0|vg(0|(mA=0|vg(0|(xI=0|vg(0|(KI=0|vg(0|(jI=0|vg(0|(TI=0|vg(0|(qI=0|vg(0|(VI=0|vg(0|(zI=0|vg(0|(WI=0|vg(0|W,0|z,0|V,0|WI)),0|o(),0|q,0|zI)),0|o(),0|T,0|VI)),0|o(),0|j,0|qI)),0|o(),0|X,0|TI)),0|o(),0|K,0|jI)),0|o(),0|XI,0|KI)),0|o(),0|x,0|xI)),0|o(),0|g,0|mA)),0|o(),0|XA,0|ZA),XA=0|o(),cI=0|Ug(0|jA,0|TA,-33554432&cI|0,0),TA=0|o(),mA=0|ig(0|(jA=0|vg(0|KA,0|LA,33554432,0)),0|o(),26),g=0|o(),g=0|vg(0|(xA=0|vg(0|(UI=0|vg(0|(vI=0|vg(0|(bI=0|vg(0|(JI=0|vg(0|(PI=0|vg(0|(NI=0|vg(0|(mI=0|vg(0|(LI=0|vg(0|L,0|m,0|N,0|LI)),0|o(),0|R,0|mI)),0|o(),0|P,0|NI)),0|o(),0|RI,0|PI)),0|o(),0|J,0|JI)),0|o(),0|b,0|bI)),0|o(),0|v,0|vI)),0|o(),0|U,0|UI)),0|o(),0|SI,0|xA)),0|o(),0|mA,0|g),mA=0|o(),jA=0|Ug(0|KA,0|LA,-67108864&jA|0,0),o(),KA=0|ig(0|(LA=0|vg(0|ZA,0|XA,33554432,0)),0|o(),26),xA=0|o(),xA=0|vg(0|(FI=0|vg(0|(uI=0|vg(0|(kI=0|vg(0|(lI=0|vg(0|(_I=0|vg(0|(GI=0|vg(0|(dI=0|vg(0|(YI=0|vg(0|(MI=0|vg(0|S,0|M,0|Y,0|MI)),0|o(),0|d,0|YI)),0|o(),0|G,0|dI)),0|o(),0|_,0|GI)),0|o(),0|l,0|_I)),0|o(),0|k,0|lI)),0|o(),0|H,0|kI)),0|o(),0|HI,0|uI)),0|o(),0|pI,0|FI)),0|o(),0|KA,0|xA),KA=0|o(),LA=0|Ug(0|ZA,0|XA,-67108864&LA|0,0),o(),qA=0|vg(0|(ZA=0|ig(0|(XA=0|vg(0|g,0|mA,16777216,0)),0|o(),25)),0|o(),0|I,0|qA),I=0|o(),XA=0|Ug(0|g,0|mA,-33554432&XA|0,0),o(),g=0|ig(0|(mA=0|vg(0|xA,0|KA,16777216,0)),0|o(),25),ZA=0|o(),ZA=0|vg(0|(aI=0|vg(0|(rI=0|vg(0|(tI=0|vg(0|(fI=0|vg(0|(wI=0|vg(0|(yI=0|vg(0|(sI=0|vg(0|(hI=0|vg(0|(DI=0|vg(0|u,0|p,0|F,0|DI)),0|o(),0|D,0|hI)),0|o(),0|h,0|sI)),0|o(),0|s,0|yI)),0|o(),0|y,0|wI)),0|o(),0|w,0|fI)),0|o(),0|f,0|tI)),0|o(),0|t,0|rI)),0|o(),0|nI,0|aI)),0|o(),0|g,0|ZA),g=0|o(),mA=0|Ug(0|xA,0|KA,-33554432&mA|0,0),o(),xA=0|vg(0|cI,0|TA,0|(xA=0|yg(0|(KA=0|vg(0|qA,0|I,33554432,0)),0|o(),26)),0|o()),o(),KA=0|Ug(0|qA,0|I,-67108864&KA|0,0),o(),qA=0|ig(0|(I=0|vg(0|ZA,0|g,33554432,0)),0|o(),26),TA=0|o(),TA=0|vg(0|($A=0|vg(0|(II=0|vg(0|(gI=0|vg(0|(BI=0|vg(0|(CI=0|vg(0|(QI=0|vg(0|(EI=0|vg(0|(iI=0|vg(0|(eI=0|vg(0|r,0|n,0|oI,0|eI)),0|o(),0|a,0|iI)),0|o(),0|c,0|EI)),0|o(),0|e,0|QI)),0|o(),0|i,0|CI)),0|o(),0|E,0|BI)),0|o(),0|Q,0|gI)),0|o(),0|B,0|II)),0|o(),0|AI,0|$A)),0|o(),0|qA,0|TA),qA=0|o(),I=0|Ug(0|ZA,0|g,-67108864&I|0,0),o(),zA=0|vg(0|(ZA=0|Qg(0|(ZA=0|ig(0|(g=0|vg(0|TA,0|qA,16777216,0)),0|o(),25)),0|o(),19,0)),0|o(),0|VA,0|zA),VA=0|o(),g=0|Ug(0|TA,0|qA,-33554432&g|0,0),o(),TA=0|vg(0|OA,0|WA,0|(TA=0|yg(0|(qA=0|vg(0|zA,0|VA,33554432,0)),0|o(),26)),0|o()),o(),qA=0|Ug(0|zA,0|VA,-67108864&qA|0,0),o(),C[A>>2]=qA,C[A+4>>2]=TA,C[A+8>>2]=jA,C[A+12>>2]=XA,C[A+16>>2]=KA,C[A+20>>2]=xA,C[A+24>>2]=LA,C[A+28>>2]=mA,C[A+32>>2]=I,C[A+36>>2]=g}function H(A,I,g){A|=0,g|=0;var B,Q,E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0;B=y,Q=y=y+63&-64,y=y+2048|0,fB(Q+1024|0,I|=0),SI(Q+1024|0,A),fB(Q,Q+1024|0),SI(Q,g),A=0;do{i=0|C[Q+1024+((4|(I=A<<4))<<3)>>2],e=0|C[Q+1024+((4|I)<<3)+4>>2],b=0|uI(0|C[Q+1024+(I<<3)>>2],0|C[Q+1024+(I<<3)+4>>2],i,e),N=0|o(),Y=0|ZI(C[Q+1024+((12|I)<<3)>>2]^b,C[Q+1024+((12|I)<<3)+4>>2]^N,32),H=0|o(),H=0|ZI((N=0|uI(b,N,e=0|ZI((F=0|uI(0|C[Q+1024+((8|I)<<3)>>2],0|C[Q+1024+((8|I)<<3)+4>>2],Y,H))^i,(D=0|o())^e,24),i=0|o()))^Y,(b=0|o())^H,16),Y=0|o(),C[Q+1024+((12|I)<<3)>>2]=H,C[Q+1024+((12|I)<<3)+4>>2]=Y,D=0|uI(F,D,H,Y),F=0|o(),C[Q+1024+((8|I)<<3)>>2]=D,C[Q+1024+((8|I)<<3)+4>>2]=F,i=0|ZI(D^e,F^i,63),e=0|o(),C[Q+1024+((4|I)<<3)>>2]=i,C[Q+1024+((4|I)<<3)+4>>2]=e,U=0|C[Q+1024+((5|I)<<3)>>2],v=0|C[Q+1024+((5|I)<<3)+4>>2],_=0|uI(0|C[Q+1024+((1|I)<<3)>>2],0|C[Q+1024+((1|I)<<3)+4>>2],U,v),M=0|o(),p=0|ZI(C[Q+1024+((13|I)<<3)>>2]^_,C[Q+1024+((13|I)<<3)+4>>2]^M,32),f=0|o(),a=0|uI(n=0|uI(0|C[Q+1024+((9|I)<<3)>>2],0|C[Q+1024+((9|I)<<3)+4>>2],p,f),a=0|o(),f=0|ZI((M=0|uI(_,M,v=0|ZI(n^U,a^v,24),U=0|o()))^p,(_=0|o())^f,16),p=0|o()),n=0|o(),C[Q+1024+((9|I)<<3)>>2]=a,C[Q+1024+((9|I)<<3)+4>>2]=n,U=0|ZI(a^v,n^U,63),v=0|o(),k=0|C[Q+1024+((6|I)<<3)>>2],l=0|C[Q+1024+((6|I)<<3)+4>>2],h=0|uI(0|C[Q+1024+((2|I)<<3)>>2],0|C[Q+1024+((2|I)<<3)+4>>2],k,l),u=0|o(),r=0|ZI(C[Q+1024+((14|I)<<3)>>2]^h,C[Q+1024+((14|I)<<3)+4>>2]^u,32),E=0|o(),k=0|ZI((J=0|uI(P=0|uI(0|C[Q+1024+((10|I)<<3)>>2],0|C[Q+1024+((10|I)<<3)+4>>2],r,E),J=0|o(),E=0|ZI((u=0|uI(h,u,l=0|ZI(P^k,J^l,24),k=0|o()))^r,(h=0|o())^E,16),r=0|o()))^l,(P=0|o())^k,63),l=0|o(),w=0|C[Q+1024+((7|I)<<3)>>2],s=0|C[Q+1024+((7|I)<<3)+4>>2],c=0|uI(0|C[Q+1024+((3|I)<<3)>>2],0|C[Q+1024+((3|I)<<3)+4>>2],w,s),t=0|o(),R=0|ZI(C[Q+1024+((15|I)<<3)>>2]^c,C[Q+1024+((15|I)<<3)+4>>2]^t,32),S=0|o(),w=0|ZI((G=0|uI(d=0|uI(0|C[Q+1024+((11|I)<<3)>>2],0|C[Q+1024+((11|I)<<3)+4>>2],R,S),G=0|o(),S=0|ZI((t=0|uI(c,t,s=0|ZI(d^w,G^s,24),w=0|o()))^R,(c=0|o())^S,16),R=0|o()))^s,(d=0|o())^w,63),s=0|o(),N=0|uI(b=0|uI(N,b,U,v),N=0|o(),v=0|ZI((P=0|uI(J,P,R=0|ZI(b^S,N^R,32),S=0|o()))^U,(J=0|o())^v,24),U=0|o()),b=0|o(),C[Q+1024+(I<<3)>>2]=N,C[Q+1024+(I<<3)+4>>2]=b,S=0|ZI(N^R,b^S,16),b=0|o(),C[Q+1024+((15|I)<<3)>>2]=S,C[Q+1024+((15|I)<<3)+4>>2]=b,b=0|uI(P,J,S,b),S=0|o(),C[Q+1024+((10|I)<<3)>>2]=b,C[Q+1024+((10|I)<<3)+4>>2]=S,U=0|ZI(b^v,S^U,63),S=0|o(),C[Q+1024+((5|I)<<3)>>2]=U,C[Q+1024+((5|I)<<3)+4>>2]=S,M=0|uI(_=0|uI(M,_,k,l),M=0|o(),l=0|ZI((d=0|uI(G,d,Y=0|ZI(_^H,M^Y,32),H=0|o()))^k,(G=0|o())^l,24),k=0|o()),_=0|o(),C[Q+1024+((1|I)<<3)>>2]=M,C[Q+1024+((1|I)<<3)+4>>2]=_,H=0|ZI(M^Y,_^H,16),_=0|o(),C[Q+1024+((12|I)<<3)>>2]=H,C[Q+1024+((12|I)<<3)+4>>2]=_,_=0|uI(d,G,H,_),H=0|o(),C[Q+1024+((11|I)<<3)>>2]=_,C[Q+1024+((11|I)<<3)+4>>2]=H,k=0|ZI(_^l,H^k,63),H=0|o(),C[Q+1024+((6|I)<<3)>>2]=k,C[Q+1024+((6|I)<<3)+4>>2]=H,u=0|uI(h=0|uI(u,h,w,s),u=0|o(),s=0|ZI((F=0|uI(D,F,p=0|ZI(h^f,u^p,32),f=0|o()))^w,(D=0|o())^s,24),w=0|o()),h=0|o(),C[Q+1024+((2|I)<<3)>>2]=u,C[Q+1024+((2|I)<<3)+4>>2]=h,f=0|ZI(u^p,h^f,16),h=0|o(),C[Q+1024+((13|I)<<3)>>2]=f,C[Q+1024+((13|I)<<3)+4>>2]=h,h=0|uI(F,D,f,h),f=0|o(),C[Q+1024+((8|I)<<3)>>2]=h,C[Q+1024+((8|I)<<3)+4>>2]=f,w=0|ZI(h^s,f^w,63),f=0|o(),C[Q+1024+((7|I)<<3)>>2]=w,C[Q+1024+((7|I)<<3)+4>>2]=f,t=0|uI(c=0|uI(t,c,i,e),t=0|o(),e=0|ZI((n=0|uI(a,n,r=0|ZI(c^E,t^r,32),E=0|o()))^i,(a=0|o())^e,24),i=0|o()),c=0|o(),C[Q+1024+((3|I)<<3)>>2]=t,C[Q+1024+((3|I)<<3)+4>>2]=c,E=0|ZI(t^r,c^E,16),c=0|o(),C[Q+1024+((14|I)<<3)>>2]=E,C[Q+1024+((14|I)<<3)+4>>2]=c,c=0|uI(n,a,E,c),E=0|o(),C[Q+1024+((9|I)<<3)>>2]=c,C[Q+1024+((9|I)<<3)+4>>2]=E,i=0|ZI(c^e,E^i,63),E=0|o(),C[Q+1024+((4|I)<<3)>>2]=i,C[Q+1024+((4|I)<<3)+4>>2]=E,A=A+1|0}while(8!=(0|A));A=0;do{P=0|C[(J=Q+1024+(32+(N=A<<1)<<3)|0)>>2],J=0|C[J+4>>2],c=0|uI(0|C[Q+1024+(N<<3)>>2],0|C[Q+1024+(N<<3)+4>>2],P,J),I=0|o(),f=0|ZI(C[(f=Q+1024+(N+96<<3)|0)>>2]^c,C[f+4>>2]^I,32),F=0|o(),F=0|ZI((I=0|uI(c,I,J=0|ZI((k=0|uI(0|C[(k=Q+1024+(N+64<<3)|0)>>2],0|C[k+4>>2],f,F))^P,(l=0|o())^J,24),P=0|o()))^f,(c=0|o())^F,16),f=0|o(),C[(r=Q+1024+(N+96<<3)|0)>>2]=F,C[r+4>>2]=f,l=0|uI(k,l,F,f),k=0|o(),C[(r=Q+1024+(N+64<<3)|0)>>2]=l,C[r+4>>2]=k,P=0|ZI(l^J,k^P,63),J=0|o(),C[(r=Q+1024+(N+32<<3)|0)>>2]=P,C[r+4>>2]=J,a=0|C[(r=Q+1024+(N+33<<3)|0)>>2],r=0|C[r+4>>2],h=0|uI(0|C[Q+1024+((1|N)<<3)>>2],0|C[Q+1024+((1|N)<<3)+4>>2],a,r),t=0|o(),H=0|ZI(C[(H=Q+1024+(N+97<<3)|0)>>2]^h,C[H+4>>2]^t,32),d=0|o(),v=0|uI(U=0|uI(0|C[(U=Q+1024+(N+65<<3)|0)>>2],0|C[U+4>>2],H,d),v=0|o(),d=0|ZI((t=0|uI(h,t,r=0|ZI(U^a,v^r,24),a=0|o()))^H,(h=0|o())^d,16),H=0|o()),U=0|o(),C[(_=Q+1024+(N+65<<3)|0)>>2]=v,C[_+4>>2]=U,a=0|ZI(v^r,U^a,63),r=0|o(),_=Q+1024+(N+16<<3)|0,D=0|C[(p=Q+1024+(N+48<<3)|0)>>2],p=0|C[p+4>>2],_=0|uI(0|C[_>>2],0|C[_+4>>2],D,p),u=0|o(),S=0|ZI(C[(S=Q+1024+(N+112<<3)|0)>>2]^_,C[S+4>>2]^u,32),R=0|o(),D=0|ZI((e=0|uI(i=0|uI(0|C[(i=Q+1024+(N+80<<3)|0)>>2],0|C[i+4>>2],S,R),e=0|o(),R=0|ZI((u=0|uI(_,u,p=0|ZI(i^D,e^p,24),D=0|o()))^S,(_=0|o())^R,16),S=0|o()))^p,(i=0|o())^D,63),p=0|o(),b=Q+1024+(N+17<<3)|0,G=0|C[(Y=Q+1024+(N+49<<3)|0)>>2],Y=0|C[Y+4>>2],b=0|uI(0|C[b>>2],0|C[b+4>>2],G,Y),M=0|o(),E=0|ZI(C[(E=Q+1024+(N+113<<3)|0)>>2]^b,C[E+4>>2]^M,32),n=0|o(),G=0|ZI((s=0|uI(w=0|uI(0|C[(w=Q+1024+(N+81<<3)|0)>>2],0|C[w+4>>2],E,n),s=0|o(),n=0|ZI((M=0|uI(b,M,Y=0|ZI(w^G,s^Y,24),G=0|o()))^E,(b=0|o())^n,16),E=0|o()))^Y,(w=0|o())^G,63),Y=0|o(),I=0|uI(c=0|uI(I,c,a,r),I=0|o(),r=0|ZI((i=0|uI(e,i,E=0|ZI(c^n,I^E,32),n=0|o()))^a,(e=0|o())^r,24),a=0|o()),c=0|o(),C[Q+1024+(N<<3)>>2]=I,C[Q+1024+(N<<3)+4>>2]=c,n=0|ZI(I^E,c^n,16),c=0|o(),C[(E=Q+1024+(N+113<<3)|0)>>2]=n,C[E+4>>2]=c,c=0|uI(i,e,n,c),n=0|o(),C[(e=Q+1024+(N+80<<3)|0)>>2]=c,C[e+4>>2]=n,a=0|ZI(c^r,n^a,63),n=0|o(),C[(r=Q+1024+(N+33<<3)|0)>>2]=a,C[r+4>>2]=n,t=0|uI(h=0|uI(t,h,D,p),t=0|o(),p=0|ZI((w=0|uI(s,w,f=0|ZI(h^F,t^f,32),F=0|o()))^D,(s=0|o())^p,24),D=0|o()),h=0|o(),C[Q+1024+((1|N)<<3)>>2]=t,C[Q+1024+((1|N)<<3)+4>>2]=h,F=0|ZI(t^f,h^F,16),h=0|o(),C[(f=Q+1024+(N+96<<3)|0)>>2]=F,C[f+4>>2]=h,h=0|uI(w,s,F,h),F=0|o(),C[(s=Q+1024+(N+81<<3)|0)>>2]=h,C[s+4>>2]=F,D=0|ZI(h^p,F^D,63),F=0|o(),C[(p=Q+1024+(N+48<<3)|0)>>2]=D,C[p+4>>2]=F,u=0|uI(_=0|uI(u,_,G,Y),u=0|o(),Y=0|ZI((k=0|uI(l,k,H=0|ZI(_^d,u^H,32),d=0|o()))^G,(l=0|o())^Y,24),G=0|o()),_=0|o(),C[(p=Q+1024+(N+16<<3)|0)>>2]=u,C[p+4>>2]=_,d=0|ZI(u^H,_^d,16),_=0|o(),C[(H=Q+1024+(N+97<<3)|0)>>2]=d,C[H+4>>2]=_,_=0|uI(k,l,d,_),d=0|o(),C[(l=Q+1024+(N+64<<3)|0)>>2]=_,C[l+4>>2]=d,G=0|ZI(_^Y,d^G,63),d=0|o(),C[(Y=Q+1024+(N+49<<3)|0)>>2]=G,C[Y+4>>2]=d,M=0|uI(b=0|uI(M,b,P,J),M=0|o(),J=0|ZI((U=0|uI(v,U,S=0|ZI(b^R,M^S,32),R=0|o()))^P,(v=0|o())^J,24),P=0|o()),b=0|o(),C[(Y=Q+1024+(N+17<<3)|0)>>2]=M,C[Y+4>>2]=b,R=0|ZI(M^S,b^R,16),b=0|o(),C[(S=Q+1024+(N+112<<3)|0)>>2]=R,C[S+4>>2]=b,b=0|uI(U,v,R,b),R=0|o(),C[(v=Q+1024+(N+65<<3)|0)>>2]=b,C[v+4>>2]=R,P=0|ZI(b^J,R^P,63),R=0|o(),C[(N=Q+1024+(N+32<<3)|0)>>2]=P,C[N+4>>2]=R,A=A+1|0}while(8!=(0|A));fB(g,Q),SI(g,Q+1024|0),y=B}function k(A,I,g){A|=0,g|=0;var B,Q,E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0;B=y,Q=y=y+63&-64,y=y+2048|0,fB(Q+1024|0,I|=0),SI(Q+1024|0,A),fB(Q,Q+1024|0),A=0;do{i=0|C[Q+1024+((4|(I=A<<4))<<3)>>2],e=0|C[Q+1024+((4|I)<<3)+4>>2],b=0|uI(0|C[Q+1024+(I<<3)>>2],0|C[Q+1024+(I<<3)+4>>2],i,e),N=0|o(),Y=0|ZI(C[Q+1024+((12|I)<<3)>>2]^b,C[Q+1024+((12|I)<<3)+4>>2]^N,32),H=0|o(),H=0|ZI((N=0|uI(b,N,e=0|ZI((F=0|uI(0|C[Q+1024+((8|I)<<3)>>2],0|C[Q+1024+((8|I)<<3)+4>>2],Y,H))^i,(D=0|o())^e,24),i=0|o()))^Y,(b=0|o())^H,16),Y=0|o(),C[Q+1024+((12|I)<<3)>>2]=H,C[Q+1024+((12|I)<<3)+4>>2]=Y,D=0|uI(F,D,H,Y),F=0|o(),C[Q+1024+((8|I)<<3)>>2]=D,C[Q+1024+((8|I)<<3)+4>>2]=F,i=0|ZI(D^e,F^i,63),e=0|o(),C[Q+1024+((4|I)<<3)>>2]=i,C[Q+1024+((4|I)<<3)+4>>2]=e,U=0|C[Q+1024+((5|I)<<3)>>2],v=0|C[Q+1024+((5|I)<<3)+4>>2],_=0|uI(0|C[Q+1024+((1|I)<<3)>>2],0|C[Q+1024+((1|I)<<3)+4>>2],U,v),M=0|o(),p=0|ZI(C[Q+1024+((13|I)<<3)>>2]^_,C[Q+1024+((13|I)<<3)+4>>2]^M,32),f=0|o(),a=0|uI(n=0|uI(0|C[Q+1024+((9|I)<<3)>>2],0|C[Q+1024+((9|I)<<3)+4>>2],p,f),a=0|o(),f=0|ZI((M=0|uI(_,M,v=0|ZI(n^U,a^v,24),U=0|o()))^p,(_=0|o())^f,16),p=0|o()),n=0|o(),C[Q+1024+((9|I)<<3)>>2]=a,C[Q+1024+((9|I)<<3)+4>>2]=n,U=0|ZI(a^v,n^U,63),v=0|o(),k=0|C[Q+1024+((6|I)<<3)>>2],l=0|C[Q+1024+((6|I)<<3)+4>>2],h=0|uI(0|C[Q+1024+((2|I)<<3)>>2],0|C[Q+1024+((2|I)<<3)+4>>2],k,l),u=0|o(),r=0|ZI(C[Q+1024+((14|I)<<3)>>2]^h,C[Q+1024+((14|I)<<3)+4>>2]^u,32),E=0|o(),k=0|ZI((J=0|uI(P=0|uI(0|C[Q+1024+((10|I)<<3)>>2],0|C[Q+1024+((10|I)<<3)+4>>2],r,E),J=0|o(),E=0|ZI((u=0|uI(h,u,l=0|ZI(P^k,J^l,24),k=0|o()))^r,(h=0|o())^E,16),r=0|o()))^l,(P=0|o())^k,63),l=0|o(),w=0|C[Q+1024+((7|I)<<3)>>2],s=0|C[Q+1024+((7|I)<<3)+4>>2],c=0|uI(0|C[Q+1024+((3|I)<<3)>>2],0|C[Q+1024+((3|I)<<3)+4>>2],w,s),t=0|o(),R=0|ZI(C[Q+1024+((15|I)<<3)>>2]^c,C[Q+1024+((15|I)<<3)+4>>2]^t,32),S=0|o(),w=0|ZI((G=0|uI(d=0|uI(0|C[Q+1024+((11|I)<<3)>>2],0|C[Q+1024+((11|I)<<3)+4>>2],R,S),G=0|o(),S=0|ZI((t=0|uI(c,t,s=0|ZI(d^w,G^s,24),w=0|o()))^R,(c=0|o())^S,16),R=0|o()))^s,(d=0|o())^w,63),s=0|o(),N=0|uI(b=0|uI(N,b,U,v),N=0|o(),v=0|ZI((P=0|uI(J,P,R=0|ZI(b^S,N^R,32),S=0|o()))^U,(J=0|o())^v,24),U=0|o()),b=0|o(),C[Q+1024+(I<<3)>>2]=N,C[Q+1024+(I<<3)+4>>2]=b,S=0|ZI(N^R,b^S,16),b=0|o(),C[Q+1024+((15|I)<<3)>>2]=S,C[Q+1024+((15|I)<<3)+4>>2]=b,b=0|uI(P,J,S,b),S=0|o(),C[Q+1024+((10|I)<<3)>>2]=b,C[Q+1024+((10|I)<<3)+4>>2]=S,U=0|ZI(b^v,S^U,63),S=0|o(),C[Q+1024+((5|I)<<3)>>2]=U,C[Q+1024+((5|I)<<3)+4>>2]=S,M=0|uI(_=0|uI(M,_,k,l),M=0|o(),l=0|ZI((d=0|uI(G,d,Y=0|ZI(_^H,M^Y,32),H=0|o()))^k,(G=0|o())^l,24),k=0|o()),_=0|o(),C[Q+1024+((1|I)<<3)>>2]=M,C[Q+1024+((1|I)<<3)+4>>2]=_,H=0|ZI(M^Y,_^H,16),_=0|o(),C[Q+1024+((12|I)<<3)>>2]=H,C[Q+1024+((12|I)<<3)+4>>2]=_,_=0|uI(d,G,H,_),H=0|o(),C[Q+1024+((11|I)<<3)>>2]=_,C[Q+1024+((11|I)<<3)+4>>2]=H,k=0|ZI(_^l,H^k,63),H=0|o(),C[Q+1024+((6|I)<<3)>>2]=k,C[Q+1024+((6|I)<<3)+4>>2]=H,u=0|uI(h=0|uI(u,h,w,s),u=0|o(),s=0|ZI((F=0|uI(D,F,p=0|ZI(h^f,u^p,32),f=0|o()))^w,(D=0|o())^s,24),w=0|o()),h=0|o(),C[Q+1024+((2|I)<<3)>>2]=u,C[Q+1024+((2|I)<<3)+4>>2]=h,f=0|ZI(u^p,h^f,16),h=0|o(),C[Q+1024+((13|I)<<3)>>2]=f,C[Q+1024+((13|I)<<3)+4>>2]=h,h=0|uI(F,D,f,h),f=0|o(),C[Q+1024+((8|I)<<3)>>2]=h,C[Q+1024+((8|I)<<3)+4>>2]=f,w=0|ZI(h^s,f^w,63),f=0|o(),C[Q+1024+((7|I)<<3)>>2]=w,C[Q+1024+((7|I)<<3)+4>>2]=f,t=0|uI(c=0|uI(t,c,i,e),t=0|o(),e=0|ZI((n=0|uI(a,n,r=0|ZI(c^E,t^r,32),E=0|o()))^i,(a=0|o())^e,24),i=0|o()),c=0|o(),C[Q+1024+((3|I)<<3)>>2]=t,C[Q+1024+((3|I)<<3)+4>>2]=c,E=0|ZI(t^r,c^E,16),c=0|o(),C[Q+1024+((14|I)<<3)>>2]=E,C[Q+1024+((14|I)<<3)+4>>2]=c,c=0|uI(n,a,E,c),E=0|o(),C[Q+1024+((9|I)<<3)>>2]=c,C[Q+1024+((9|I)<<3)+4>>2]=E,i=0|ZI(c^e,E^i,63),E=0|o(),C[Q+1024+((4|I)<<3)>>2]=i,C[Q+1024+((4|I)<<3)+4>>2]=E,A=A+1|0}while(8!=(0|A));A=0;do{P=0|C[(J=Q+1024+(32+(N=A<<1)<<3)|0)>>2],J=0|C[J+4>>2],c=0|uI(0|C[Q+1024+(N<<3)>>2],0|C[Q+1024+(N<<3)+4>>2],P,J),I=0|o(),f=0|ZI(C[(f=Q+1024+(N+96<<3)|0)>>2]^c,C[f+4>>2]^I,32),F=0|o(),F=0|ZI((I=0|uI(c,I,J=0|ZI((k=0|uI(0|C[(k=Q+1024+(N+64<<3)|0)>>2],0|C[k+4>>2],f,F))^P,(l=0|o())^J,24),P=0|o()))^f,(c=0|o())^F,16),f=0|o(),C[(r=Q+1024+(N+96<<3)|0)>>2]=F,C[r+4>>2]=f,l=0|uI(k,l,F,f),k=0|o(),C[(r=Q+1024+(N+64<<3)|0)>>2]=l,C[r+4>>2]=k,P=0|ZI(l^J,k^P,63),J=0|o(),C[(r=Q+1024+(N+32<<3)|0)>>2]=P,C[r+4>>2]=J,a=0|C[(r=Q+1024+(N+33<<3)|0)>>2],r=0|C[r+4>>2],h=0|uI(0|C[Q+1024+((1|N)<<3)>>2],0|C[Q+1024+((1|N)<<3)+4>>2],a,r),t=0|o(),H=0|ZI(C[(H=Q+1024+(N+97<<3)|0)>>2]^h,C[H+4>>2]^t,32),d=0|o(),v=0|uI(U=0|uI(0|C[(U=Q+1024+(N+65<<3)|0)>>2],0|C[U+4>>2],H,d),v=0|o(),d=0|ZI((t=0|uI(h,t,r=0|ZI(U^a,v^r,24),a=0|o()))^H,(h=0|o())^d,16),H=0|o()),U=0|o(),C[(_=Q+1024+(N+65<<3)|0)>>2]=v,C[_+4>>2]=U,a=0|ZI(v^r,U^a,63),r=0|o(),_=Q+1024+(N+16<<3)|0,D=0|C[(p=Q+1024+(N+48<<3)|0)>>2],p=0|C[p+4>>2],_=0|uI(0|C[_>>2],0|C[_+4>>2],D,p),u=0|o(),S=0|ZI(C[(S=Q+1024+(N+112<<3)|0)>>2]^_,C[S+4>>2]^u,32),R=0|o(),D=0|ZI((e=0|uI(i=0|uI(0|C[(i=Q+1024+(N+80<<3)|0)>>2],0|C[i+4>>2],S,R),e=0|o(),R=0|ZI((u=0|uI(_,u,p=0|ZI(i^D,e^p,24),D=0|o()))^S,(_=0|o())^R,16),S=0|o()))^p,(i=0|o())^D,63),p=0|o(),b=Q+1024+(N+17<<3)|0,G=0|C[(Y=Q+1024+(N+49<<3)|0)>>2],Y=0|C[Y+4>>2],b=0|uI(0|C[b>>2],0|C[b+4>>2],G,Y),M=0|o(),E=0|ZI(C[(E=Q+1024+(N+113<<3)|0)>>2]^b,C[E+4>>2]^M,32),n=0|o(),G=0|ZI((s=0|uI(w=0|uI(0|C[(w=Q+1024+(N+81<<3)|0)>>2],0|C[w+4>>2],E,n),s=0|o(),n=0|ZI((M=0|uI(b,M,Y=0|ZI(w^G,s^Y,24),G=0|o()))^E,(b=0|o())^n,16),E=0|o()))^Y,(w=0|o())^G,63),Y=0|o(),I=0|uI(c=0|uI(I,c,a,r),I=0|o(),r=0|ZI((i=0|uI(e,i,E=0|ZI(c^n,I^E,32),n=0|o()))^a,(e=0|o())^r,24),a=0|o()),c=0|o(),C[Q+1024+(N<<3)>>2]=I,C[Q+1024+(N<<3)+4>>2]=c,n=0|ZI(I^E,c^n,16),c=0|o(),C[(E=Q+1024+(N+113<<3)|0)>>2]=n,C[E+4>>2]=c,c=0|uI(i,e,n,c),n=0|o(),C[(e=Q+1024+(N+80<<3)|0)>>2]=c,C[e+4>>2]=n,a=0|ZI(c^r,n^a,63),n=0|o(),C[(r=Q+1024+(N+33<<3)|0)>>2]=a,C[r+4>>2]=n,t=0|uI(h=0|uI(t,h,D,p),t=0|o(),p=0|ZI((w=0|uI(s,w,f=0|ZI(h^F,t^f,32),F=0|o()))^D,(s=0|o())^p,24),D=0|o()),h=0|o(),C[Q+1024+((1|N)<<3)>>2]=t,C[Q+1024+((1|N)<<3)+4>>2]=h,F=0|ZI(t^f,h^F,16),h=0|o(),C[(f=Q+1024+(N+96<<3)|0)>>2]=F,C[f+4>>2]=h,h=0|uI(w,s,F,h),F=0|o(),C[(s=Q+1024+(N+81<<3)|0)>>2]=h,C[s+4>>2]=F,D=0|ZI(h^p,F^D,63),F=0|o(),C[(p=Q+1024+(N+48<<3)|0)>>2]=D,C[p+4>>2]=F,u=0|uI(_=0|uI(u,_,G,Y),u=0|o(),Y=0|ZI((k=0|uI(l,k,H=0|ZI(_^d,u^H,32),d=0|o()))^G,(l=0|o())^Y,24),G=0|o()),_=0|o(),C[(p=Q+1024+(N+16<<3)|0)>>2]=u,C[p+4>>2]=_,d=0|ZI(u^H,_^d,16),_=0|o(),C[(H=Q+1024+(N+97<<3)|0)>>2]=d,C[H+4>>2]=_,_=0|uI(k,l,d,_),d=0|o(),C[(l=Q+1024+(N+64<<3)|0)>>2]=_,C[l+4>>2]=d,G=0|ZI(_^Y,d^G,63),d=0|o(),C[(Y=Q+1024+(N+49<<3)|0)>>2]=G,C[Y+4>>2]=d,M=0|uI(b=0|uI(M,b,P,J),M=0|o(),J=0|ZI((U=0|uI(v,U,S=0|ZI(b^R,M^S,32),R=0|o()))^P,(v=0|o())^J,24),P=0|o()),b=0|o(),C[(Y=Q+1024+(N+17<<3)|0)>>2]=M,C[Y+4>>2]=b,R=0|ZI(M^S,b^R,16),b=0|o(),C[(S=Q+1024+(N+112<<3)|0)>>2]=R,C[S+4>>2]=b,b=0|uI(U,v,R,b),R=0|o(),C[(v=Q+1024+(N+65<<3)|0)>>2]=b,C[v+4>>2]=R,P=0|ZI(b^J,R^P,63),R=0|o(),C[(N=Q+1024+(N+32<<3)|0)>>2]=P,C[N+4>>2]=R,A=A+1|0}while(8!=(0|A));fB(g,Q),SI(g,Q+1024|0),y=B}function l(A,I){A|=0;var g,B,Q,E,i,e,c,a,n,r,t,f,w,y,s,h,D,F,p,u,H,k,l,_,G,d,Y,M,S,U,v,b,J,P,R,N,m,L,x,K,X,j,T,q,V,z,W,O,Z,$,AA,IA,gA=0,BA=0,CA=0,QA=0,EA=0,iA=0,eA=0,oA=0,cA=0,aA=0,nA=0,rA=0,tA=0,fA=0,wA=0,yA=0,sA=0,hA=0,DA=0,FA=0,pA=0,uA=0,HA=0,kA=0,lA=0,_A=0,GA=0,dA=0,YA=0,MA=0,SA=0,UA=0,vA=0,bA=0,JA=0,PA=0,RA=0,NA=0,mA=0,LA=0,xA=0,KA=0,XA=0,jA=0,TA=0,qA=0,VA=0,zA=0,WA=0,OA=0,ZA=0,$A=0,AI=0,II=0,gI=0,BI=0,CI=0;oA=0|C[(I|=0)>>2],wA=0|C[I+4>>2],rA=0|C[I+8>>2],FA=0|C[I+12>>2],BA=0|C[I+16>>2],pA=0|C[I+20>>2],yA=0|C[I+24>>2],iA=0|C[I+28>>2],EA=0|C[I+32>>2],I=0|C[I+36>>2],$=0|Qg(0|oA,((0|oA)<0)<<31>>31|0,0|oA,((0|oA)<0)<<31>>31|0),CI=0|o(),q=0|Qg(oA<<1|0,0|(cA=((oA<<1|0)<0)<<31>>31),0|wA,((0|wA)<0)<<31>>31|0),AI=0|o(),X=0|Qg(0|rA,((0|rA)<0)<<31>>31|0,oA<<1|0,0|cA),K=0|o(),R=0|Qg(0|FA,((0|FA)<0)<<31>>31|0,oA<<1|0,0|cA),P=0|o(),Y=0|Qg(0|BA,((0|BA)<0)<<31>>31|0,oA<<1|0,0|cA),KA=0|o(),k=0|Qg(0|pA,((0|pA)<0)<<31>>31|0,oA<<1|0,0|cA),RA=0|o(),h=0|Qg(0|yA,((0|yA)<0)<<31>>31|0,oA<<1|0,0|cA),vA=0|o(),t=0|Qg(0|iA,((0|iA)<0)<<31>>31|0,oA<<1|0,0|cA),dA=0|o(),i=0|Qg(0|EA,((0|EA)<0)<<31>>31|0,oA<<1|0,0|cA),kA=0|o(),cA=0|Qg(0|I,((0|I)<0)<<31>>31|0,oA<<1|0,0|cA),oA=0|o(),x=0|Qg(wA<<1|0,0|(gA=((wA<<1|0)<0)<<31>>31),0|wA,((0|wA)<0)<<31>>31|0),OA=0|o(),J=0|Qg(wA<<1|0,0|gA,0|rA,((0|rA)<0)<<31>>31|0),qA=0|o(),U=0|Qg(FA<<1|0,0|(CA=((FA<<1|0)<0)<<31>>31),wA<<1|0,0|gA),S=0|o(),G=0|Qg(0|BA,((0|BA)<0)<<31>>31|0,wA<<1|0,0|gA),_=0|o(),D=0|Qg(pA<<1|0,((pA<<1|0)<0)<<31>>31|0,wA<<1|0,0|gA),bA=0|o(),f=0|Qg(0|yA,((0|yA)<0)<<31>>31|0,wA<<1|0,0|gA),YA=0|o(),e=0|Qg(iA<<1|0,((iA<<1|0)<0)<<31>>31|0,wA<<1|0,0|gA),lA=0|o(),aA=0|Qg(0|EA,((0|EA)<0)<<31>>31|0,wA<<1|0,0|gA),nA=0|o(),gA=0|Qg(38*I|0,0|(fA=((38*I|0)<0)<<31>>31),wA<<1|0,0|gA),wA=0|o(),M=0|Qg(0|rA,((0|rA)<0)<<31>>31|0,0|rA,((0|rA)<0)<<31>>31|0),XA=0|o(),l=0|Qg(rA<<1|0,((rA<<1|0)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),NA=0|o(),F=0|Qg(0|BA,((0|BA)<0)<<31>>31|0,rA<<1|0,((rA<<1|0)<0)<<31>>31|0),JA=0|o(),s=0|Qg(0|pA,((0|pA)<0)<<31>>31|0,rA<<1|0,((rA<<1|0)<0)<<31>>31|0),y=0|o(),r=0|Qg(0|yA,((0|yA)<0)<<31>>31|0,rA<<1|0,((rA<<1|0)<0)<<31>>31|0),n=0|o(),g=0|Qg(0|iA,((0|iA)<0)<<31>>31|0,rA<<1|0,((rA<<1|0)<0)<<31>>31|0),uA=0|o(),W=0|Qg(19*EA|0,0|(UA=((19*EA|0)<0)<<31>>31),rA<<1|0,((rA<<1|0)<0)<<31>>31|0),II=0|o(),rA=0|Qg(38*I|0,0|fA,0|rA,((0|rA)<0)<<31>>31|0),sA=0|o(),u=0|Qg(FA<<1|0,0|CA,0|FA,((0|FA)<0)<<31>>31|0),p=0|o(),w=0|Qg(FA<<1|0,0|CA,0|BA,((0|BA)<0)<<31>>31|0),MA=0|o(),c=0|Qg(pA<<1|0,((pA<<1|0)<0)<<31>>31|0,FA<<1|0,0|CA),_A=0|o(),E=0|Qg(0|yA,((0|yA)<0)<<31>>31|0,FA<<1|0,0|CA),Q=0|o(),O=0|Qg(38*iA|0,0|(xA=((38*iA|0)<0)<<31>>31),FA<<1|0,0|CA),gI=0|o(),j=0|Qg(19*EA|0,0|UA,FA<<1|0,0|CA),ZA=0|o(),CA=0|Qg(38*I|0,0|fA,FA<<1|0,0|CA),FA=0|o(),a=0|Qg(0|BA,((0|BA)<0)<<31>>31|0,0|BA,((0|BA)<0)<<31>>31|0),GA=0|o(),B=0|Qg(BA<<1|0,((BA<<1|0)<0)<<31>>31|0,0|pA,((0|pA)<0)<<31>>31|0),HA=0|o(),Z=0|Qg(19*yA|0,((19*yA|0)<0)<<31>>31|0,BA<<1|0,((BA<<1|0)<0)<<31>>31|0),BI=0|o(),T=0|Qg(38*iA|0,0|xA,0|BA,((0|BA)<0)<<31>>31|0),$A=0|o(),N=0|Qg(19*EA|0,0|UA,BA<<1|0,((BA<<1|0)<0)<<31>>31|0),VA=0|o(),BA=0|Qg(38*I|0,0|fA,0|BA,((0|BA)<0)<<31>>31|0),hA=0|o(),IA=0|Qg(38*pA|0,((38*pA|0)<0)<<31>>31|0,0|pA,((0|pA)<0)<<31>>31|0),AA=0|o(),z=0|Qg(19*yA|0,((19*yA|0)<0)<<31>>31|0,pA<<1|0,((pA<<1|0)<0)<<31>>31|0),V=0|o(),m=0|Qg(38*iA|0,0|xA,pA<<1|0,((pA<<1|0)<0)<<31>>31|0),zA=0|o(),v=0|Qg(19*EA|0,0|UA,pA<<1|0,((pA<<1|0)<0)<<31>>31|0),jA=0|o(),pA=0|Qg(38*I|0,0|fA,pA<<1|0,((pA<<1|0)<0)<<31>>31|0),tA=0|o(),L=0|Qg(19*yA|0,((19*yA|0)<0)<<31>>31|0,0|yA,((0|yA)<0)<<31>>31|0),WA=0|o(),b=0|Qg(38*iA|0,0|xA,0|yA,((0|yA)<0)<<31>>31|0),TA=0|o(),d=0|Qg(19*EA|0,0|UA,yA<<1|0,((yA<<1|0)<0)<<31>>31|0),mA=0|o(),yA=0|Qg(38*I|0,0|fA,0|yA,((0|yA)<0)<<31>>31|0),eA=0|o(),xA=0|Qg(38*iA|0,0|xA,0|iA,((0|iA)<0)<<31>>31|0),LA=0|o(),H=0|Qg(19*EA|0,0|UA,iA<<1|0,((iA<<1|0)<0)<<31>>31|0),PA=0|o(),iA=0|Qg(38*I|0,0|fA,iA<<1|0,((iA<<1|0)<0)<<31>>31|0),DA=0|o(),UA=0|Qg(19*EA|0,0|UA,0|EA,((0|EA)<0)<<31>>31|0),SA=0|o(),EA=0|Qg(38*I|0,0|fA,0|EA,((0|EA)<0)<<31>>31|0),QA=0|o(),I=0|Qg(38*I|0,0|fA,0|I,((0|I)<0)<<31>>31|0),fA=0|o(),wA=0|vg(0|(II=0|vg(0|(gI=0|vg(0|(BI=0|vg(0|(CI=0|vg(0|IA,0|AA,0|$,0|CI)),0|o(),0|Z,0|BI)),0|o(),0|O,0|gI)),0|o(),0|W,0|II)),0|o(),0|gA,0|wA),gA=0|o(),sA=0|vg(0|(ZA=0|vg(0|($A=0|vg(0|(AI=0|vg(0|z,0|V,0|q,0|AI)),0|o(),0|T,0|$A)),0|o(),0|j,0|ZA)),0|o(),0|rA,0|sA),rA=0|o(),FA=0|vg(0|(VA=0|vg(0|(zA=0|vg(0|(WA=0|vg(0|(OA=0|vg(0|X,0|K,0|x,0|OA)),0|o(),0|L,0|WA)),0|o(),0|m,0|zA)),0|o(),0|N,0|VA)),0|o(),0|CA,0|FA),CA=0|o(),hA=0|vg(0|(jA=0|vg(0|(TA=0|vg(0|(qA=0|vg(0|R,0|P,0|J,0|qA)),0|o(),0|b,0|TA)),0|o(),0|v,0|jA)),0|o(),0|BA,0|hA),BA=0|o(),tA=0|vg(0|(mA=0|vg(0|(LA=0|vg(0|(KA=0|vg(0|(XA=0|vg(0|U,0|S,0|M,0|XA)),0|o(),0|Y,0|KA)),0|o(),0|xA,0|LA)),0|o(),0|d,0|mA)),0|o(),0|pA,0|tA),pA=0|o(),eA=0|vg(0|(PA=0|vg(0|(RA=0|vg(0|(NA=0|vg(0|G,0|_,0|l,0|NA)),0|o(),0|k,0|RA)),0|o(),0|H,0|PA)),0|o(),0|yA,0|eA),yA=0|o(),DA=0|vg(0|(SA=0|vg(0|(vA=0|vg(0|(bA=0|vg(0|(JA=0|vg(0|u,0|p,0|F,0|JA)),0|o(),0|D,0|bA)),0|o(),0|h,0|vA)),0|o(),0|UA,0|SA)),0|o(),0|iA,0|DA),iA=0|o(),QA=0|vg(0|(dA=0|vg(0|(YA=0|vg(0|(MA=0|vg(0|s,0|y,0|w,0|MA)),0|o(),0|f,0|YA)),0|o(),0|t,0|dA)),0|o(),0|EA,0|QA),EA=0|o(),fA=0|vg(0|(kA=0|vg(0|(lA=0|vg(0|(_A=0|vg(0|(GA=0|vg(0|r,0|n,0|a,0|GA)),0|o(),0|c,0|_A)),0|o(),0|e,0|lA)),0|o(),0|i,0|kA)),0|o(),0|I,0|fA),I=0|o(),oA=0|vg(0|(nA=0|vg(0|(uA=0|vg(0|(HA=0|vg(0|E,0|Q,0|B,0|HA)),0|o(),0|g,0|uA)),0|o(),0|aA,0|nA)),0|o(),0|cA,0|oA),cA=0|o(),gA=0|rg(0|wA,0|gA,1),wA=0|o(),rA=0|rg(0|sA,0|rA,1),sA=0|o(),CA=0|rg(0|FA,0|CA,1),FA=0|o(),BA=0|rg(0|hA,0|BA,1),hA=0|o(),pA=0|rg(0|tA,0|pA,1),tA=0|o(),yA=0|rg(0|eA,0|yA,1),eA=0|o(),iA=0|rg(0|DA,0|iA,1),DA=0|o(),EA=0|rg(0|QA,0|EA,1),QA=0|o(),I=0|rg(0|fA,0|I,1),fA=0|o(),cA=0|rg(0|oA,0|cA,1),oA=0|o(),sA=0|vg(0|(uA=0|ig(0|(nA=0|vg(0|gA,0|wA,33554432,0)),0|(aA=0|o()),26)),0|o(),0|rA,0|sA),rA=0|o(),aA=0|Ug(0|gA,0|wA,-67108864&nA|0,0|aA),nA=0|o(),eA=0|vg(0|(uA=0|ig(0|(wA=0|vg(0|pA,0|tA,33554432,0)),0|(gA=0|o()),26)),0|o(),0|yA,0|eA),yA=0|o(),gA=0|Ug(0|pA,0|tA,-67108864&wA|0,0|gA),wA=0|o(),FA=0|vg(0|(pA=0|ig(0|(tA=0|vg(0|sA,0|rA,16777216,0)),0|o(),25)),0|o(),0|CA,0|FA),CA=0|o(),tA=0|Ug(0|sA,0|rA,-33554432&tA|0,0),rA=0|o(),DA=0|vg(0|(pA=0|ig(0|(sA=0|vg(0|eA,0|yA,16777216,0)),0|o(),25)),0|o(),0|iA,0|DA),iA=0|o(),sA=0|Ug(0|eA,0|yA,-33554432&sA|0,0),yA=0|o(),hA=0|vg(0|(pA=0|ig(0|(eA=0|vg(0|FA,0|CA,33554432,0)),0|o(),26)),0|o(),0|BA,0|hA),BA=0|o(),eA=0|Ug(0|FA,0|CA,-67108864&eA|0,0),o(),QA=0|vg(0|(FA=0|ig(0|(CA=0|vg(0|DA,0|iA,33554432,0)),0|o(),26)),0|o(),0|EA,0|QA),EA=0|o(),CA=0|Ug(0|DA,0|iA,-67108864&CA|0,0),o(),wA=0|vg(0|(DA=0|ig(0|(iA=0|vg(0|hA,0|BA,16777216,0)),0|o(),25)),0|o(),0|gA,0|wA),gA=0|o(),iA=0|Ug(0|hA,0|BA,-33554432&iA|0,0),o(),fA=0|vg(0|(hA=0|ig(0|(BA=0|vg(0|QA,0|EA,16777216,0)),0|o(),25)),0|o(),0|I,0|fA),I=0|o(),BA=0|Ug(0|QA,0|EA,-33554432&BA|0,0),o(),QA=0|vg(0|sA,0|yA,0|(QA=0|yg(0|(EA=0|vg(0|wA,0|gA,33554432,0)),0|o(),26)),0|o()),o(),EA=0|Ug(0|wA,0|gA,-67108864&EA|0,0),o(),oA=0|vg(0|(wA=0|ig(0|(gA=0|vg(0|fA,0|I,33554432,0)),0|o(),26)),0|o(),0|cA,0|oA),cA=0|o(),gA=0|Ug(0|fA,0|I,-67108864&gA|0,0),o(),nA=0|vg(0|(fA=0|Qg(0|(fA=0|ig(0|(I=0|vg(0|oA,0|cA,16777216,0)),0|o(),25)),0|o(),19,0)),0|o(),0|aA,0|nA),aA=0|o(),I=0|Ug(0|oA,0|cA,-33554432&I|0,0),o(),oA=0|vg(0|tA,0|rA,0|(oA=0|yg(0|(cA=0|vg(0|nA,0|aA,33554432,0)),0|o(),26)),0|o()),o(),cA=0|Ug(0|nA,0|aA,-67108864&cA|0,0),o(),C[A>>2]=cA,C[A+4>>2]=oA,C[A+8>>2]=eA,C[A+12>>2]=iA,C[A+16>>2]=EA,C[A+20>>2]=QA,C[A+24>>2]=CA,C[A+28>>2]=BA,C[A+32>>2]=gA,C[A+36>>2]=I}function _(A,I){A|=0;var g,B,Q,E,i,e,c,a,n,r,t,f,w,y,s,h,D,F,p,u,H,k,l,_,G,d,Y,M,S,U,v,b,J,P,R,N,m,L,x,K,X,j,T,q,V,z,W,O,Z,$,AA=0,IA=0,gA=0,BA=0,CA=0,QA=0,EA=0,iA=0,eA=0,oA=0,cA=0,aA=0,nA=0,rA=0,tA=0,fA=0,wA=0,yA=0,sA=0,hA=0,DA=0,FA=0,pA=0,uA=0,HA=0,kA=0,lA=0,_A=0,GA=0,dA=0,YA=0,MA=0,SA=0,UA=0,vA=0,bA=0,JA=0,PA=0,RA=0,NA=0,mA=0,LA=0,xA=0,KA=0,XA=0,jA=0,TA=0,qA=0,VA=0,zA=0,WA=0,OA=0,ZA=0,$A=0,AI=0,II=0,gI=0,BI=0,CI=0;tA=0|C[(I|=0)>>2],AA=0|C[I+4>>2],EA=0|C[I+8>>2],QA=0|C[I+12>>2],MA=0|C[I+16>>2],nA=0|C[I+20>>2],TA=0|C[I+24>>2],IA=0|C[I+28>>2],_A=0|C[I+32>>2],FA=0|C[I+36>>2],O=0|Qg(0|tA,((0|tA)<0)<<31>>31|0,0|tA,((0|tA)<0)<<31>>31|0),CI=0|o(),P=0|Qg(tA<<1|0,0|(fA=((tA<<1|0)<0)<<31>>31),0|AA,((0|AA)<0)<<31>>31|0),ZA=0|o(),q=0|Qg(0|EA,((0|EA)<0)<<31>>31|0,tA<<1|0,0|fA),T=0|o(),j=0|Qg(0|QA,((0|QA)<0)<<31>>31|0,tA<<1|0,0|fA),X=0|o(),m=0|Qg(0|MA,((0|MA)<0)<<31>>31|0,tA<<1|0,0|fA),$A=0|o(),M=0|Qg(0|nA,((0|nA)<0)<<31>>31|0,tA<<1|0,0|fA),VA=0|o(),p=0|Qg(0|TA,((0|TA)<0)<<31>>31|0,tA<<1|0,0|fA),RA=0|o(),f=0|Qg(0|IA,((0|IA)<0)<<31>>31|0,tA<<1|0,0|fA),GA=0|o(),e=0|Qg(0|_A,((0|_A)<0)<<31>>31|0,tA<<1|0,0|fA),pA=0|o(),fA=0|Qg(0|FA,((0|FA)<0)<<31>>31|0,tA<<1|0,0|fA),tA=0|o(),XA=0|Qg(AA<<1|0,0|(eA=((AA<<1|0)<0)<<31>>31),0|AA,((0|AA)<0)<<31>>31|0),jA=0|o(),vA=0|Qg(AA<<1|0,0|eA,0|EA,((0|EA)<0)<<31>>31|0),bA=0|o(),K=0|Qg(QA<<1|0,0|(rA=((QA<<1|0)<0)<<31>>31),AA<<1|0,0|eA),x=0|o(),v=0|Qg(0|MA,((0|MA)<0)<<31>>31|0,AA<<1|0,0|eA),U=0|o(),u=0|Qg(nA<<1|0,((nA<<1|0)<0)<<31>>31|0,AA<<1|0,0|eA),NA=0|o(),w=0|Qg(0|TA,((0|TA)<0)<<31>>31|0,AA<<1|0,0|eA),dA=0|o(),c=0|Qg(IA<<1|0,((IA<<1|0)<0)<<31>>31|0,AA<<1|0,0|eA),uA=0|o(),g=0|Qg(0|_A,((0|_A)<0)<<31>>31|0,AA<<1|0,0|eA),wA=0|o(),eA=0|Qg(38*FA|0,0|(DA=((38*FA|0)<0)<<31>>31),AA<<1|0,0|eA),AA=0|o(),L=0|Qg(0|EA,((0|EA)<0)<<31>>31|0,0|EA,((0|EA)<0)<<31>>31|0),AI=0|o(),S=0|Qg(EA<<1|0,((EA<<1|0)<0)<<31>>31|0,0|QA,((0|QA)<0)<<31>>31|0),zA=0|o(),H=0|Qg(0|MA,((0|MA)<0)<<31>>31|0,EA<<1|0,((EA<<1|0)<0)<<31>>31|0),mA=0|o(),h=0|Qg(0|nA,((0|nA)<0)<<31>>31|0,EA<<1|0,((EA<<1|0)<0)<<31>>31|0),s=0|o(),t=0|Qg(0|TA,((0|TA)<0)<<31>>31|0,EA<<1|0,((EA<<1|0)<0)<<31>>31|0),r=0|o(),B=0|Qg(0|IA,((0|IA)<0)<<31>>31|0,EA<<1|0,((EA<<1|0)<0)<<31>>31|0),yA=0|o(),V=0|Qg(19*_A|0,0|(PA=((19*_A|0)<0)<<31>>31),EA<<1|0,((EA<<1|0)<0)<<31>>31|0),II=0|o(),EA=0|Qg(38*FA|0,0|DA,0|EA,((0|EA)<0)<<31>>31|0),iA=0|o(),l=0|Qg(QA<<1|0,0|rA,0|QA,((0|QA)<0)<<31>>31|0),k=0|o(),y=0|Qg(QA<<1|0,0|rA,0|MA,((0|MA)<0)<<31>>31|0),YA=0|o(),a=0|Qg(nA<<1|0,((nA<<1|0)<0)<<31>>31|0,QA<<1|0,0|rA),HA=0|o(),i=0|Qg(0|TA,((0|TA)<0)<<31>>31|0,QA<<1|0,0|rA),E=0|o(),z=0|Qg(38*IA|0,0|(hA=((38*IA|0)<0)<<31>>31),QA<<1|0,0|rA),gI=0|o(),b=0|Qg(19*_A|0,0|PA,QA<<1|0,0|rA),WA=0|o(),rA=0|Qg(38*FA|0,0|DA,QA<<1|0,0|rA),QA=0|o(),n=0|Qg(0|MA,((0|MA)<0)<<31>>31|0,0|MA,((0|MA)<0)<<31>>31|0),kA=0|o(),Q=0|Qg(MA<<1|0,((MA<<1|0)<0)<<31>>31|0,0|nA,((0|nA)<0)<<31>>31|0),sA=0|o(),W=0|Qg(19*TA|0,((19*TA|0)<0)<<31>>31|0,MA<<1|0,((MA<<1|0)<0)<<31>>31|0),BI=0|o(),J=0|Qg(38*IA|0,0|hA,0|MA,((0|MA)<0)<<31>>31|0),OA=0|o(),_=0|Qg(19*_A|0,0|PA,MA<<1|0,((MA<<1|0)<0)<<31>>31|0),LA=0|o(),MA=0|Qg(38*FA|0,0|DA,0|MA,((0|MA)<0)<<31>>31|0),BA=0|o(),$=0|Qg(38*nA|0,((38*nA|0)<0)<<31>>31|0,0|nA,((0|nA)<0)<<31>>31|0),Z=0|o(),N=0|Qg(19*TA|0,((19*TA|0)<0)<<31>>31|0,nA<<1|0,((nA<<1|0)<0)<<31>>31|0),R=0|o(),G=0|Qg(38*IA|0,0|hA,nA<<1|0,((nA<<1|0)<0)<<31>>31|0),xA=0|o(),D=0|Qg(19*_A|0,0|PA,nA<<1|0,((nA<<1|0)<0)<<31>>31|0),SA=0|o(),nA=0|Qg(38*FA|0,0|DA,nA<<1|0,((nA<<1|0)<0)<<31>>31|0),gA=0|o(),d=0|Qg(19*TA|0,((19*TA|0)<0)<<31>>31|0,0|TA,((0|TA)<0)<<31>>31|0),KA=0|o(),F=0|Qg(38*IA|0,0|hA,0|TA,((0|TA)<0)<<31>>31|0),UA=0|o(),oA=0|Qg(19*_A|0,0|PA,TA<<1|0,((TA<<1|0)<0)<<31>>31|0),cA=0|o(),TA=0|Qg(38*FA|0,0|DA,0|TA,((0|TA)<0)<<31>>31|0),CA=0|o(),hA=0|Qg(38*IA|0,0|hA,0|IA,((0|IA)<0)<<31>>31|0),aA=0|o(),Y=0|Qg(19*_A|0,0|PA,IA<<1|0,((IA<<1|0)<0)<<31>>31|0),qA=0|o(),I=0|Qg(38*FA|0,0|DA,IA<<1|0,((IA<<1|0)<0)<<31>>31|0),IA=0|o(),PA=0|Qg(19*_A|0,0|PA,0|_A,((0|_A)<0)<<31>>31|0),JA=0|o(),_A=0|Qg(38*FA|0,0|DA,0|_A,((0|_A)<0)<<31>>31|0),lA=0|o(),FA=0|Qg(38*FA|0,0|DA,0|FA,((0|FA)<0)<<31>>31|0),DA=0|o(),AA=0|vg(0|(II=0|vg(0|(gI=0|vg(0|(BI=0|vg(0|(CI=0|vg(0|$,0|Z,0|O,0|CI)),0|o(),0|W,0|BI)),0|o(),0|z,0|gI)),0|o(),0|V,0|II)),0|o(),0|eA,0|AA),eA=0|o(),jA=0|vg(0|q,0|T,0|XA,0|jA),XA=0|o(),bA=0|vg(0|j,0|X,0|vA,0|bA),vA=0|o(),gA=0|vg(0|(cA=0|vg(0|(aA=0|vg(0|($A=0|vg(0|(AI=0|vg(0|K,0|x,0|L,0|AI)),0|o(),0|m,0|$A)),0|o(),0|hA,0|aA)),0|o(),0|oA,0|cA)),0|o(),0|nA,0|gA),nA=0|o(),aA=0|ig(0|(cA=0|vg(0|AA,0|eA,33554432,0)),0|(oA=0|o()),26),hA=0|o(),hA=0|vg(0|(iA=0|vg(0|(WA=0|vg(0|(OA=0|vg(0|(ZA=0|vg(0|N,0|R,0|P,0|ZA)),0|o(),0|J,0|OA)),0|o(),0|b,0|WA)),0|o(),0|EA,0|iA)),0|o(),0|aA,0|hA),aA=0|o(),oA=0|Ug(0|AA,0|eA,-67108864&cA|0,0|oA),cA=0|o(),iA=0|ig(0|(eA=0|vg(0|gA,0|nA,33554432,0)),0|(AA=0|o()),26),EA=0|o(),EA=0|vg(0|(CA=0|vg(0|(qA=0|vg(0|(VA=0|vg(0|(zA=0|vg(0|v,0|U,0|S,0|zA)),0|o(),0|M,0|VA)),0|o(),0|Y,0|qA)),0|o(),0|TA,0|CA)),0|o(),0|iA,0|EA),iA=0|o(),AA=0|Ug(0|gA,0|nA,-67108864&eA|0,0|AA),eA=0|o(),gA=0|ig(0|(nA=0|vg(0|hA,0|aA,16777216,0)),0|o(),25),CA=0|o(),CA=0|vg(0|(QA=0|vg(0|(LA=0|vg(0|(xA=0|vg(0|(KA=0|vg(0|jA,0|XA,0|d,0|KA)),0|o(),0|G,0|xA)),0|o(),0|_,0|LA)),0|o(),0|rA,0|QA)),0|o(),0|gA,0|CA),gA=0|o(),nA=0|Ug(0|hA,0|aA,-33554432&nA|0,0),aA=0|o(),QA=0|ig(0|(hA=0|vg(0|EA,0|iA,16777216,0)),0|o(),25),rA=0|o(),rA=0|vg(0|(IA=0|vg(0|(JA=0|vg(0|(RA=0|vg(0|(NA=0|vg(0|(mA=0|vg(0|l,0|k,0|H,0|mA)),0|o(),0|u,0|NA)),0|o(),0|p,0|RA)),0|o(),0|PA,0|JA)),0|o(),0|I,0|IA)),0|o(),0|QA,0|rA),QA=0|o(),hA=0|Ug(0|EA,0|iA,-33554432&hA|0,0),iA=0|o(),IA=0|ig(0|(EA=0|vg(0|CA,0|gA,33554432,0)),0|o(),26),I=0|o(),I=0|vg(0|(BA=0|vg(0|(SA=0|vg(0|(UA=0|vg(0|bA,0|vA,0|F,0|UA)),0|o(),0|D,0|SA)),0|o(),0|MA,0|BA)),0|o(),0|IA,0|I),IA=0|o(),EA=0|Ug(0|CA,0|gA,-67108864&EA|0,0),o(),CA=0|ig(0|(gA=0|vg(0|rA,0|QA,33554432,0)),0|o(),26),BA=0|o(),BA=0|vg(0|(lA=0|vg(0|(GA=0|vg(0|(dA=0|vg(0|(YA=0|vg(0|h,0|s,0|y,0|YA)),0|o(),0|w,0|dA)),0|o(),0|f,0|GA)),0|o(),0|_A,0|lA)),0|o(),0|CA,0|BA),CA=0|o(),gA=0|Ug(0|rA,0|QA,-67108864&gA|0,0),o(),eA=0|vg(0|(rA=0|ig(0|(QA=0|vg(0|I,0|IA,16777216,0)),0|o(),25)),0|o(),0|AA,0|eA),AA=0|o(),QA=0|Ug(0|I,0|IA,-33554432&QA|0,0),o(),I=0|ig(0|(IA=0|vg(0|BA,0|CA,16777216,0)),0|o(),25),rA=0|o(),rA=0|vg(0|(DA=0|vg(0|(pA=0|vg(0|(uA=0|vg(0|(HA=0|vg(0|(kA=0|vg(0|t,0|r,0|n,0|kA)),0|o(),0|a,0|HA)),0|o(),0|c,0|uA)),0|o(),0|e,0|pA)),0|o(),0|FA,0|DA)),0|o(),0|I,0|rA),I=0|o(),IA=0|Ug(0|BA,0|CA,-33554432&IA|0,0),o(),BA=0|vg(0|hA,0|iA,0|(BA=0|yg(0|(CA=0|vg(0|eA,0|AA,33554432,0)),0|o(),26)),0|o()),o(),CA=0|Ug(0|eA,0|AA,-67108864&CA|0,0),o(),eA=0|ig(0|(AA=0|vg(0|rA,0|I,33554432,0)),0|o(),26),iA=0|o(),iA=0|vg(0|(tA=0|vg(0|(wA=0|vg(0|(yA=0|vg(0|(sA=0|vg(0|i,0|E,0|Q,0|sA)),0|o(),0|B,0|yA)),0|o(),0|g,0|wA)),0|o(),0|fA,0|tA)),0|o(),0|eA,0|iA),eA=0|o(),AA=0|Ug(0|rA,0|I,-67108864&AA|0,0),o(),cA=0|vg(0|(rA=0|Qg(0|(rA=0|ig(0|(I=0|vg(0|iA,0|eA,16777216,0)),0|o(),25)),0|o(),19,0)),0|o(),0|oA,0|cA),oA=0|o(),I=0|Ug(0|iA,0|eA,-33554432&I|0,0),o(),iA=0|vg(0|nA,0|aA,0|(iA=0|yg(0|(eA=0|vg(0|cA,0|oA,33554432,0)),0|o(),26)),0|o()),o(),eA=0|Ug(0|cA,0|oA,-67108864&eA|0,0),o(),C[A>>2]=eA,C[A+4>>2]=iA,C[A+8>>2]=EA,C[A+12>>2]=QA,C[A+16>>2]=CA,C[A+20>>2]=BA,C[A+24>>2]=gA,C[A+28>>2]=IA,C[A+32>>2]=AA,C[A+36>>2]=I}function G(A,I,g,B,C){A|=0,I|=0,g|=0,B|=0;var E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0;if(n=0|qI(C|=0),t=0|o(),E=0|qI(C+8|0),i=0|o(),B=0|rg(0|g,0|B,56),C=0|o(),(I+g+(0-(7&g))|0)==(0|I))y=2037671283^E,e=1952801890^i,w=1886610805^n,r=1936682341^t,a=1852075885^E,c=1685025377^i,F=1852142177^n,E=1819895653^t,i=I;else for(D=2037671283^E,e=1952801890^i,y=1886610805^n,r=1936682341^t,a=1852075885^E,c=1685025377^i,i=1852142177^n,E=1819895653^t,w=I;;){if(u=(s=0|qI(w))^D,e^=h=0|o(),F=0|vg(0|y,0|r,0|a,0|c),D=0|o(),n=0|$I(a,c,13),a=(0|o())^D,c=0|$I(F,D,32),D=0|o(),t=0|vg(0|u,0|e,0|i,0|E),f=0|o(),D=0|vg((e=0|$I(u,e,16))^t|0,0|(i=(0|o())^f),0|c,0|D),c=0|o(),i=0|$I(e^t,i,21),e=c^(0|o()),f=0|vg(0|t,0|f,n^F|0,0|a),t=0|o(),a=0|$I(n^F,a,17),E=(0|o())^t,t=0|$I(f,t,32),F=0|o(),c=0|vg(a^f|0,0|E,0|D,0|c),n=0|o(),E=0|$I(a^f,E,13),f=(0|o())^n,n=0|$I(c,n,32),a=0|o(),F=0|vg(0|t,0|F,D^i|0,0|e),t=0|o(),a=0|vg((e=0|$I(D^i,e,16))^F|0,0|(i=(0|o())^t),0|n,0|a),n=0|o(),i=0|$I(e^F,i,21),e=n^(0|o()),t=0|vg(E^c|0,0|f,0|F,0|t),F=0|o(),f=0|$I(E^c,f,17),c=(0|o())^F,F=0|$I(t,F,32),E=0|o(),(0|(w=w+8|0))==(I+g+(0-(7&g))|0)){y=a^i,w=a^s,r=n^h,a=f^t,i=I+g+(0-(7&g))|0;break}D=a^i,y=a^s,r=n^h,a=f^t,i=F}switch(7&g){case 7:p=0|rg(0|Q[i+6>>0],0,48),C=0|o()|C,B|=p,p=6;break;case 6:p=6;break;case 5:p=7;break;case 4:p=8;break;case 3:p=9;break;case 2:p=10;break;case 1:p=11}6==(0|p)&&(u=0|rg(0|Q[i+5>>0],0,40),C=0|o()|C,B|=u,p=7),7==(0|p)&&(C=0|Q[i+4>>0]|C,p=8),8==(0|p)&&(B|=u=0|rg(0|Q[i+3>>0],0,24),C=0|o()|C,p=9),9==(0|p)&&(B|=u=0|rg(0|Q[i+2>>0],0,16),C=0|o()|C,p=10),10==(0|p)&&(B|=u=0|rg(0|Q[i+1>>0],0,8),C=0|o()|C,p=11),11==(0|p)&&(B=0|B|Q[i>>0]),g=B^y,h=C^e,w=0|vg(0|w,0|r,0|a,0|c),y=0|o(),s=0|$I(a,c,13),I=(0|o())^y,y=0|$I(w,y,32),p=0|o(),F=0|vg(0|g,0|h,0|F,0|E),u=0|o(),p=0|vg((h=0|$I(g,h,16))^F|0,0|(g=(0|o())^u),0|y,0|p),y=0|o(),g=0|$I(h^F,g,21),h=y^(0|o()),u=0|vg(0|F,0|u,s^w|0,0|I),F=0|o(),I=0|$I(s^w,I,17),w=(0|o())^F,F=0|$I(u,F,32),s=0|o(),y=0|vg(I^u|0,0|w,0|p,0|y),D=0|o(),w=0|$I(I^u,w,13),u=(0|o())^D,D=0|$I(y,D,32),I=0|o(),s=0|vg(0|F,0|s,p^g|0,0|h),F=0|o(),I=0|vg((h=0|$I(p^g,h,16))^s|0,0|(g=(0|o())^F),0|D,0|I),D=0|o(),g=0|$I(h^s,g,21),h=D^(0|o()),F=0|vg(w^y|0,0|u,0|s,0|F),s=0|o(),u=0|$I(w^y,u,17),y=(0|o())^s,s=0|$I(F,s,32),w=0|o(),D=0|vg(I^B|0,D^C|0,u^F|0,0|y),p=0|o(),y=0|$I(u^F,y,13),F=(0|o())^p,p=0|$I(D,p,32),u=0|o(),w=0|vg(255^s|0,0|w,I^g|0,0|h),s=0|o(),u=0|vg((h=0|$I(I^g,h,16))^w|0,0|(g=(0|o())^s),0|p,0|u),p=0|o(),g=0|$I(h^w,g,21),h=p^(0|o()),s=0|vg(0|w,0|s,y^D|0,0|F),w=0|o(),F=0|$I(y^D,F,17),D=(0|o())^w,w=0|$I(s,w,32),y=0|o(),p=0|vg(F^s|0,0|D,0|u,0|p),I=0|o(),D=0|$I(F^s,D,13),s=(0|o())^I,I=0|$I(p,I,32),F=0|o(),y=0|vg(0|w,0|y,u^g|0,0|h),w=0|o(),F=0|vg((h=0|$I(u^g,h,16))^y|0,0|(g=(0|o())^w),0|I,0|F),I=0|o(),g=0|$I(h^y,g,21),h=I^(0|o()),w=0|vg(D^p|0,0|s,0|y,0|w),y=0|o(),s=0|$I(D^p,s,17),p=(0|o())^y,y=0|$I(w,y,32),D=0|o(),I=0|vg(s^w|0,0|p,0|F,0|I),u=0|o(),p=0|$I(s^w,p,13),w=(0|o())^u,u=0|$I(I,u,32),s=0|o(),D=0|vg(0|y,0|D,F^g|0,0|h),y=0|o(),s=0|vg((h=0|$I(F^g,h,16))^D|0,0|(g=(0|o())^y),0|u,0|s),u=0|o(),g=0|$I(h^D,g,21),h=u^(0|o()),y=0|vg(p^I|0,0|w,0|D,0|y),D=0|o(),w=0|$I(p^I,w,17),I=(0|o())^D,D=0|$I(y,D,32),p=0|o(),u=0|vg(w^y|0,0|I,0|s,0|u),F=0|o(),I=0|$I(w^y,I,13),F=(0|o())^F,p=0|vg(0|D,0|p,s^g|0,0|h),D=0|o(),h=0|$I((h=0|$I(s^g,h,16))^p,(0|o())^D,21),g=0|o(),D=0|vg(I^u|0,0|F,0|p,0|D),p=0|o(),F=0|$I(I^u,F,17),u=0|o(),LI(A,h^D^F^(I=0|$I(D,p,32)),g^p^u^(0|o()))}function d(A){var I=0,g=0,B=0,Q=0,E=0,i=0,e=0,o=0,c=0;if(A|=0){I=0|C[8683],c=A+-8+(-8&(g=0|C[A+-4>>2]))|0;do{if(1&g)e=A+-8|0,o=A+-8|0,A=-8&g;else{if(B=0|C[A+-8>>2],!(3&g))return;if(i=B+(-8&g)|0,(E=A+-8+(0-B)|0)>>>0>>0)return;if((0|C[8684])==(0|E)){if(3!=(3&(A=0|C[c+4>>2])|0)){e=E,o=E,A=i;break}return C[8681]=i,C[c+4>>2]=-2&A,C[E+4>>2]=1|i,void(C[E+i>>2]=i)}if(B>>>0<256){if(A=0|C[E+8>>2],(0|(I=0|C[E+12>>2]))==(0|A)){C[8679]=C[8679]&~(1<<(B>>>3)),e=E,o=E,A=i;break}C[A+12>>2]=I,C[I+8>>2]=A,e=E,o=E,A=i;break}Q=0|C[E+24>>2],A=0|C[E+12>>2];do{if((0|A)==(0|E)){if(A=0|C[E+16+4>>2])I=E+16+4|0;else{if(!(A=0|C[E+16>>2])){A=0;break}I=E+16|0}for(;;)if(g=0|C[(B=A+20|0)>>2])A=g,I=B;else{if(!(g=0|C[(B=A+16|0)>>2]))break;A=g,I=B}C[I>>2]=0}else o=0|C[E+8>>2],C[o+12>>2]=A,C[A+8>>2]=o}while(0);if(Q){if(I=0|C[E+28>>2],(0|C[35020+(I<<2)>>2])==(0|E)){if(C[35020+(I<<2)>>2]=A,!A){C[8680]=C[8680]&~(1<>2])==(0|E)?Q+16|0:Q+20|0)>>2]=A,!A){e=E,o=E,A=i;break}C[A+24>>2]=Q,0|(I=0|C[E+16>>2])&&(C[A+16>>2]=I,C[I+24>>2]=A),(I=0|C[E+16+4>>2])?(C[A+20>>2]=I,C[I+24>>2]=A,e=E,o=E,A=i):(e=E,o=E,A=i)}else e=E,o=E,A=i}}while(0);if(!(e>>>0>=c>>>0)&&1&(g=0|C[c+4>>2])){if(2&g)C[c+4>>2]=-2&g,C[o+4>>2]=1|A,C[e+A>>2]=A,Q=A;else{if((0|C[8685])==(0|c)){if(c=(0|C[8682])+A|0,C[8682]=c,C[8685]=o,C[o+4>>2]=1|c,(0|o)!=(0|C[8684]))return;return C[8684]=0,void(C[8681]=0)}if((0|C[8684])==(0|c))return c=(0|C[8681])+A|0,C[8681]=c,C[8684]=e,C[o+4>>2]=1|c,void(C[e+c>>2]=c);Q=(-8&g)+A|0;do{if(g>>>0<256){if(I=0|C[c+8>>2],(0|(A=0|C[c+12>>2]))==(0|I)){C[8679]=C[8679]&~(1<<(g>>>3));break}C[I+12>>2]=A,C[A+8>>2]=I;break}E=0|C[c+24>>2],A=0|C[c+12>>2];do{if((0|A)==(0|c)){if(A=0|C[c+16+4>>2])I=c+16+4|0;else{if(!(A=0|C[c+16>>2])){I=0;break}I=c+16|0}for(;;)if(g=0|C[(B=A+20|0)>>2])A=g,I=B;else{if(!(g=0|C[(B=A+16|0)>>2]))break;A=g,I=B}C[I>>2]=0,I=A}else I=0|C[c+8>>2],C[I+12>>2]=A,C[A+8>>2]=I,I=A}while(0);if(0|E){if(A=0|C[c+28>>2],(0|C[35020+(A<<2)>>2])==(0|c)){if(C[35020+(A<<2)>>2]=I,!I){C[8680]=C[8680]&~(1<>2])==(0|c)?E+16|0:E+20|0)>>2]=I,!I)break;C[I+24>>2]=E,0|(A=0|C[c+16>>2])&&(C[I+16>>2]=A,C[A+24>>2]=I),0|(A=0|C[c+16+4>>2])&&(C[I+20>>2]=A,C[A+24>>2]=I)}}while(0);if(C[o+4>>2]=1|Q,C[e+Q>>2]=Q,(0|o)==(0|C[8684]))return void(C[8681]=Q)}if(g=Q>>>3,Q>>>0<256)return(A=0|C[8679])&1<>2]):(C[8679]=A|1<>2]=o,C[I+12>>2]=o,C[o+8>>2]=I,void(C[o+12>>2]=34756+(g<<1<<2));I=35020+((B=(A=Q>>>8)?Q>>>0>16777215?31:Q>>>(7+(B=14-((520192+(A<<((A+1048320|0)>>>16&8))|0)>>>16&4|(A+1048320|0)>>>16&8|(245760+(B=A<<((A+1048320|0)>>>16&8)<<((520192+(A<<((A+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(B<<((B+245760|0)>>>16&2)>>>15)|0)|0)&1|B<<1:0)<<2)|0,C[o+28>>2]=B,C[o+20>>2]=0,C[o+16>>2]=0,A=0|C[8680],g=1<>2];I:do{if((-8&C[A+4>>2]|0)!=(0|Q)){for(B=Q<<(31==(0|B)?0:25-(B>>>1)|0);I=0|C[(g=A+16+(B>>>31<<2)|0)>>2];){if((-8&C[I+4>>2]|0)==(0|Q)){A=I;break I}B<<=1,A=I}C[g>>2]=o,C[o+24>>2]=A,C[o+12>>2]=o,C[o+8>>2]=o;break A}}while(0);c=0|C[(e=A+8|0)>>2],C[c+12>>2]=o,C[e>>2]=o,C[o+8>>2]=c,C[o+12>>2]=A,C[o+24>>2]=0}else C[8680]=A|g,C[I>>2]=o,C[o+24>>2]=I,C[o+12>>2]=o,C[o+8>>2]=o}while(0);if(c=(0|C[8687])-1|0,C[8687]=c,!(0|c)){for(A=35172;A=0|C[A>>2];)A=A+8|0;C[8687]=-1}}}}function Y(A,I){I|=0;var g=0,B=0,Q=0,E=0,i=0,e=0,o=0;g=0|C[4+(A|=0)>>2];do{if(1&g)o=A,g=I;else{if(e=0|C[A>>2],!(3&g))return;if((0|C[8684])==(A+(0-e)|0)){if(3!=(3&(g=0|C[A+I+4>>2])|0)){o=A+(0-e)|0,g=e+I|0;break}return C[8681]=e+I,C[A+I+4>>2]=-2&g,C[A+(0-e)+4>>2]=e+I|1,void(C[A+I>>2]=e+I)}if(e>>>0<256){if(g=0|C[A+(0-e)+8>>2],(0|(B=0|C[A+(0-e)+12>>2]))==(0|g)){C[8679]=C[8679]&~(1<<(e>>>3)),o=A+(0-e)|0,g=e+I|0;break}C[g+12>>2]=B,C[B+8>>2]=g,o=A+(0-e)|0,g=e+I|0;break}i=0|C[A+(0-e)+24>>2],g=0|C[A+(0-e)+12>>2];do{if((0|g)==(A+(0-e)|0)){if(g=0|C[4+(B=A+(0-e)+16|0)>>2])B=B+4|0;else if(!(g=0|C[B>>2])){B=0;break}for(;;)if(Q=0|C[(E=g+20|0)>>2])g=Q,B=E;else{if(!(Q=0|C[(E=g+16|0)>>2]))break;g=Q,B=E}C[B>>2]=0,B=g}else B=0|C[A+(0-e)+8>>2],C[B+12>>2]=g,C[g+8>>2]=B,B=g}while(0);if(i){if(g=0|C[A+(0-e)+28>>2],(0|C[35020+(g<<2)>>2])==(A+(0-e)|0)){if(C[35020+(g<<2)>>2]=B,!B){C[8680]=C[8680]&~(1<>2])==(A+(0-e)|0)?i+16|0:i+20|0)>>2]=B,!B){o=A+(0-e)|0,g=e+I|0;break}C[B+24>>2]=i,0|(g=0|C[A+(0-e)+16>>2])&&(C[B+16>>2]=g,C[g+24>>2]=B),(g=0|C[A+(0-e)+16+4>>2])?(C[B+20>>2]=g,C[g+24>>2]=B,o=A+(0-e)|0,g=e+I|0):(o=A+(0-e)|0,g=e+I|0)}else o=A+(0-e)|0,g=e+I|0}}while(0);if(2&(Q=0|C[A+I+4>>2]))C[A+I+4>>2]=-2&Q,C[o+4>>2]=1|g,C[o+g>>2]=g,i=g;else{if((0|C[8685])==(A+I|0)){if(I=(0|C[8682])+g|0,C[8682]=I,C[8685]=o,C[o+4>>2]=1|I,(0|o)!=(0|C[8684]))return;return C[8684]=0,void(C[8681]=0)}if((0|C[8684])==(A+I|0))return I=(0|C[8681])+g|0,C[8681]=I,C[8684]=o,C[o+4>>2]=1|I,void(C[o+I>>2]=I);i=(-8&Q)+g|0;do{if(Q>>>0<256){if(B=0|C[A+I+8>>2],(0|(g=0|C[A+I+12>>2]))==(0|B)){C[8679]=C[8679]&~(1<<(Q>>>3));break}C[B+12>>2]=g,C[g+8>>2]=B;break}e=0|C[A+I+24>>2],g=0|C[A+I+12>>2];do{if((0|g)==(A+I|0)){if(g=0|C[A+I+16+4>>2])B=A+I+16+4|0;else{if(!(g=0|C[A+I+16>>2])){B=0;break}B=A+I+16|0}for(;;)if(Q=0|C[(E=g+20|0)>>2])g=Q,B=E;else{if(!(Q=0|C[(E=g+16|0)>>2]))break;g=Q,B=E}C[B>>2]=0,B=g}else B=0|C[A+I+8>>2],C[B+12>>2]=g,C[g+8>>2]=B,B=g}while(0);if(0|e){if(g=0|C[A+I+28>>2],(0|C[35020+(g<<2)>>2])==(A+I|0)){if(C[35020+(g<<2)>>2]=B,!B){C[8680]=C[8680]&~(1<>2])==(A+I|0)?e+16|0:e+20|0)>>2]=B,!B)break;C[B+24>>2]=e,0|(g=0|C[A+I+16>>2])&&(C[B+16>>2]=g,C[g+24>>2]=B),0|(g=0|C[A+I+16+4>>2])&&(C[B+20>>2]=g,C[g+24>>2]=B)}}while(0);if(C[o+4>>2]=1|i,C[o+i>>2]=i,(0|o)==(0|C[8684]))return void(C[8681]=i)}if(Q=i>>>3,i>>>0<256)return(g=0|C[8679])&1<>2]):(C[8679]=g|1<>2]=o,C[B+12>>2]=o,C[o+8>>2]=B,void(C[o+12>>2]=34756+(Q<<1<<2));if(B=35020+((E=(g=i>>>8)?i>>>0>16777215?31:i>>>(7+(E=14-((520192+(g<<((g+1048320|0)>>>16&8))|0)>>>16&4|(g+1048320|0)>>>16&8|(245760+(E=g<<((g+1048320|0)>>>16&8)<<((520192+(g<<((g+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(E<<((E+245760|0)>>>16&2)>>>15)|0)|0)&1|E<<1:0)<<2)|0,C[o+28>>2]=E,C[o+20>>2]=0,C[o+16>>2]=0,!((g=0|C[8680])&(Q=1<>2]=o,C[o+24>>2]=B,C[o+12>>2]=o,void(C[o+8>>2]=o);g=0|C[B>>2];A:do{if((-8&C[g+4>>2]|0)!=(0|i)){for(E=i<<(31==(0|E)?0:25-(E>>>1)|0);B=0|C[(Q=g+16+(E>>>31<<2)|0)>>2];){if((-8&C[B+4>>2]|0)==(0|i)){g=B;break A}E<<=1,g=B}return C[Q>>2]=o,C[o+24>>2]=g,C[o+12>>2]=o,void(C[o+8>>2]=o)}}while(0);I=0|C[(A=g+8|0)>>2],C[I+12>>2]=o,C[A>>2]=o,C[o+8>>2]=I,C[o+12>>2]=g,C[o+24>>2]=0}function M(A,I,g,Q,E){A|=0,I|=0,g|=0;var i,e,c=0,a=0,n=0,r=0,t=0,f=0,w=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0,m=0,L=0,x=0,K=0,X=0,j=0,T=0,q=0,V=0,z=0,W=0,O=0,Z=0,$=0,AA=0,IA=0,gA=0,BA=0,CA=0,QA=0,EA=0,iA=0,eA=0,oA=0,cA=0,aA=0,nA=0,rA=0;if(e=y,i=y=y+63&-64,y=y+64|0,!(0==(0|(Q|=0))&0==(0|(E|=0)))){for(L=0|C[A>>2],x=0|C[A+4>>2],K=0|C[A+8>>2],X=0|C[A+12>>2],j=0|C[A+16>>2],S=0|C[A+20>>2],U=0|C[A+24>>2],v=0|C[A+28>>2],b=0|C[A+32>>2],J=0|C[A+36>>2],P=0|C[A+40>>2],R=0|C[A+44>>2],N=0|C[A+56>>2],m=0|C[A+60>>2],a=0,Y=0|C[A+48>>2],M=0|C[A+52>>2],n=I;;){if(d=E>>>0<0|0==(0|E)&Q>>>0<64){c=(I=i)+64|0;do{C[I>>2]=0,I=I+4|0}while((0|I)<(0|c));I=0;do{B[i+I>>0]=0|B[n+I>>0],I=I+1|0}while(E>>>0>0|0==(0|E)&Q>>>0>I>>>0);G=i,a=g,n=i}else G=g;g=20,I=L,c=x,r=P,t=R,f=Y,w=M,s=N,h=m,D=K,F=X,p=j,u=S,H=U,k=v,l=b,_=J;do{W=0|wB((AA=0|wB((nA=0|wB(($=(AA=0|wB((aA=I+p|0)^f,16))+l|0)^p,12))+aA^AA,8))+$^nA,7),rA=0|wB((V=0|wB((eA=0|wB((q=(V=0|wB((iA=c+u|0)^w,16))+_|0)^u,12))+iA^V,8))+q^eA,7),oA=0|wB((z=0|wB((BA=0|wB((IA=(z=0|wB((gA=D+H|0)^s,16))+r|0)^H,12))+gA^z,8))+IA^BA,7),CA=0|wB((QA=0|wB((Z=0|wB((T=(QA=0|wB((O=F+k|0)^h,16))+t|0)^k,12))+O^QA,8))+T^Z,7),u=0|wB((r=(h=0|wB((I=(EA=0|wB((cA=0|wB(QA^rA+(nA+aA),16))+(z+IA)^rA,12))+(rA+(nA+aA))|0)^cA,8))+(cA+(z+IA))|0)^EA,7),H=0|wB((t=(f=0|wB((c=(IA=0|wB((EA=0|wB(oA+(eA+iA)^AA,16))+(QA+T)^oA,12))+(oA+(eA+iA))|0)^EA,8))+(EA+(QA+T))|0)^IA,7),k=0|wB((l=(w=0|wB((D=(T=0|wB((IA=0|wB(CA+(BA+gA)^V,16))+(AA+$)^CA,12))+(CA+(BA+gA))|0)^IA,8))+(IA+(AA+$))|0)^T,7),p=0|wB((_=(s=0|wB((F=(T=0|wB((z=0|wB(Z+O+W^z,16))+(V+q)^W,12))+(Z+O+W)|0)^z,8))+(z+(V+q))|0)^T,7),g=g+-2|0}while(0!=(0|g));if(Z=(0|Vg(n))^I+L,$=(0|Vg(n+4|0))^c+x,AA=(0|Vg(n+8|0))^D+K,IA=(0|Vg(n+12|0))^F+X,gA=(0|Vg(n+16|0))^p+j,BA=(0|Vg(n+20|0))^u+S,CA=(0|Vg(n+24|0))^H+U,QA=(0|Vg(n+28|0))^k+v,EA=(0|Vg(n+32|0))^l+b,iA=(0|Vg(n+36|0))^_+J,eA=(0|Vg(n+40|0))^r+P,oA=(0|Vg(n+44|0))^t+R,cA=(0|Vg(n+48|0))^f+Y,aA=(0|Vg(n+52|0))^w+M,nA=(0|Vg(n+56|0))^s+N,rA=(0|Vg(n+60|0))^h+m,c=M+(0==(0|(I=Y+1|0))&1)|0,Pg(G,Z),Pg(G+4|0,$),Pg(G+8|0,AA),Pg(G+12|0,IA),Pg(G+16|0,gA),Pg(G+20|0,BA),Pg(G+24|0,CA),Pg(G+28|0,QA),Pg(G+32|0,EA),Pg(G+36|0,iA),Pg(G+40|0,eA),Pg(G+44|0,oA),Pg(G+48|0,cA),Pg(G+52|0,aA),Pg(G+56|0,nA),Pg(G+60|0,rA),E>>>0<0|0==(0|E)&Q>>>0<65)break;g=0|vg(0|Q,0|E,-64,-1),E=0|o(),Q=g,g=G+64|0,Y=I,M=c,n=n+64|0}if(d&&0|Q){E=0;do{B[a+E>>0]=0|B[G+E>>0],E=E+1|0}while((0|E)!=(0|Q))}C[A+48>>2]=I,C[A+52>>2]=c}y=e}function S(A,I,g,Q){I|=0,g|=0,Q|=0;var E,i,e,c,a,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0;if(a=0==(0|B[80+(A|=0)>>0])?16777216:0,E=0|C[A+4>>2],i=0|C[A+8>>2],e=0|C[A+12>>2],c=0|C[A+16>>2],w=0|C[A+20>>2],f=0|C[A+24>>2],t=0|C[A+28>>2],r=0|C[A+32>>2],n=0|C[A+36>>2],Q>>>0>0|0==(0|Q)&g>>>0>15)for(D=0|C[A>>2];;){if(k=(67108863&(0|Vg(I)))+w|0,l=((0|Vg(I+3|0))>>>2&67108863)+f|0,H=((0|Vg(I+6|0))>>>4&67108863)+t|0,u=((0|Vg(I+9|0))>>>6)+r|0,w=((0|Vg(I+12|0))>>>8|a)+n|0,n=0|Qg(0|k,0,0|D,0),y=0|o(),t=0|vg(0|(y=0|vg(0|(t=0|vg(0|(y=0|vg(0|(t=0|Qg(0|l,0,5*c|0,0)),0|o(),0|n,0|y)),0|(n=0|o()),0|(t=0|Qg(0|H,0,5*e|0,0)),0|o())),0|(n=0|o()),0|(y=0|Qg(0|u,0,5*i|0,0)),0|o())),0|(n=0|o()),0|(t=0|Qg(0|w,0,5*E|0,0)),0|o()),n=0|o(),y=0|Qg(0|k,0,0|E,0),s=0|o(),p=0|vg(0|(s=0|vg(0|(p=0|vg(0|(s=0|vg(0|(p=0|Qg(0|l,0,0|D,0)),0|o(),0|y,0|s)),0|(y=0|o()),0|(p=0|Qg(0|H,0,5*c|0,0)),0|o())),0|(y=0|o()),0|(s=0|Qg(0|u,0,5*e|0,0)),0|o())),0|(y=0|o()),0|(p=0|Qg(0|w,0,5*i|0,0)),0|o()),y=0|o(),s=0|Qg(0|k,0,0|i,0),h=0|o(),F=0|vg(0|(h=0|vg(0|(F=0|vg(0|(h=0|vg(0|(F=0|Qg(0|l,0,0|E,0)),0|o(),0|s,0|h)),0|(s=0|o()),0|(F=0|Qg(0|H,0,0|D,0)),0|o())),0|(s=0|o()),0|(h=0|Qg(0|u,0,5*c|0,0)),0|o())),0|(s=0|o()),0|(F=0|Qg(0|w,0,5*e|0,0)),0|o()),s=0|o(),h=0|Qg(0|k,0,0|e,0),r=0|o(),f=0|vg(0|(r=0|vg(0|(f=0|vg(0|(r=0|vg(0|(f=0|Qg(0|l,0,0|i,0)),0|o(),0|h,0|r)),0|(h=0|o()),0|(f=0|Qg(0|H,0,0|E,0)),0|o())),0|(h=0|o()),0|(r=0|Qg(0|u,0,0|D,0)),0|o())),0|(h=0|o()),0|(f=0|Qg(0|w,0,5*c|0,0)),0|o()),h=0|o(),r=0|Qg(0|k,0,0|c,0),k=0|o(),w=0|vg(0|(u=0|vg(0|(H=0|vg(0|(k=0|vg(0|(l=0|Qg(0|l,0,0|e,0)),0|o(),0|r,0|k)),0|(r=0|o()),0|(H=0|Qg(0|H,0,0|i,0)),0|o())),0|(r=0|o()),0|(u=0|Qg(0|u,0,0|E,0)),0|o())),0|(r=0|o()),0|(w=0|Qg(0|w,0,0|D,0)),0|o()),r=0|o(),n=0|yg(0|t,0|n,26),o(),y=0|yg(0|(n=0|vg(0|p,0|y,0|n,0)),0|o(),26),o(),s=0|yg(0|(y=0|vg(0|F,0|s,0|y,0)),0|o(),26),o(),h=0|yg(0|(s=0|vg(0|f,0|h,0|s,0)),0|o(),26),o(),r=0|yg(0|(h=0|vg(0|w,0|r,0|h,0)),0|o(),26),o(),g=0|vg(0|g,0|Q,-16,-1),!((Q=0|o())>>>0>0|0==(0|Q)&g>>>0>15)){g=(5*r|0)+(67108863&t)&67108863,f=(((5*r|0)+(67108863&t)|0)>>>26)+(67108863&n)|0,t=67108863&y,r=67108863&s,n=67108863&h;break}w=(5*r|0)+(67108863&t)&67108863,f=(((5*r|0)+(67108863&t)|0)>>>26)+(67108863&n)|0,t=67108863&y,r=67108863&s,n=67108863&h,I=I+16|0}else g=w;C[A+20>>2]=g,C[A+24>>2]=f,C[A+28>>2]=t,C[A+32>>2]=r,C[A+36>>2]=n}function U(A,I){A|=0;var g=0,Q=0,E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0;a=0|kI(I|=0),c=0|o(),u=0|rg(0|(u=0|Bg(0|B[I+4>>0],0|B[I+5>>0],0|B[I+6>>0])),0|o(),6),H=0|o(),e=0|rg(0|(e=0|Bg(0|B[I+7>>0],0|B[I+8>>0],0|B[I+9>>0])),0|o(),5),i=0|o(),F=0|rg(0|(F=0|Bg(0|B[I+10>>0],0|B[I+11>>0],0|B[I+12>>0])),0|o(),3),p=0|o(),E=0|rg(0|(E=0|Bg(0|B[I+13>>0],0|B[I+14>>0],0|B[I+15>>0])),0|o(),2),Q=0|o(),h=0|kI(I+16|0),D=0|o(),n=0|rg(0|(n=0|Bg(0|B[I+20>>0],0|B[I+21>>0],0|B[I+22>>0])),0|o(),7),g=0|o(),r=0|rg(0|(r=0|Bg(0|B[I+23>>0],0|B[I+24>>0],0|B[I+25>>0])),0|o(),5),s=0|o(),t=0|rg(0|(t=0|Bg(0|B[I+26>>0],0|B[I+27>>0],0|B[I+28>>0])),0|o(),4),f=0|o(),w=0|rg(0|(w=0|Bg(0|B[I+29>>0],0|B[I+30>>0],0|B[I+31>>0])),0|o(),2),o(),k=0|Ug(0,0,0|(k=0|yg(0|(y=0|vg(33554428&w|0,0,16777216,0)),0|o(),25)),0|o()),o(),c=0|vg(19&k|0,0,0|a,0|c),a=0|o(),y=0|Ug(33554428&w|0,0,33554432&y|0,0),w=0|o(),i=0|vg(0|(I=0|ig(0|(k=0|vg(0|u,0|H,16777216,0)),0|o(),25)),0|o(),0|e,0|i),e=0|o(),k=0|Ug(0|u,0|H,-33554432&k|0,0),H=0|o(),Q=0|vg(0|(I=0|ig(0|(u=0|vg(0|F,0|p,16777216,0)),0|o(),25)),0|o(),0|E,0|Q),E=0|o(),u=0|Ug(0|F,0|p,-33554432&u|0,0),p=0|o(),I=0|vg(0|n,0|g,0|(I=0|ig(0|(F=0|vg(0|h,0|D,16777216,0)),0|o(),25)),0|o()),g=0|o(),F=0|Ug(0|h,0|D,-33554432&F|0,0),D=0|o(),f=0|vg(0|(n=0|ig(0|(h=0|vg(0|r,0|s,16777216,0)),0|o(),25)),0|o(),0|t,0|f),t=0|o(),h=0|Ug(0|r,0|s,-33554432&h|0,0),s=0|o(),n=0|vg(0|k,0|H,0|(n=0|yg(0|(r=0|vg(0|c,0|a,33554432,0)),0|o(),26)),0|o()),o(),r=0|Ug(0|c,0|a,-67108864&r|0,0),o(),c=0|vg(0|u,0|p,0|(c=0|yg(0|(a=0|vg(0|i,0|e,33554432,0)),0|o(),26)),0|o()),o(),a=0|Ug(0|i,0|e,-67108864&a|0,0),o(),i=0|vg(0|F,0|D,0|(i=0|yg(0|(e=0|vg(0|Q,0|E,33554432,0)),0|o(),26)),0|o()),o(),e=0|Ug(0|Q,0|E,-67108864&e|0,0),o(),Q=0|vg(0|h,0|s,0|(Q=0|yg(0|(E=0|vg(0|I,0|g,33554432,0)),0|o(),26)),0|o()),o(),E=0|Ug(0|I,0|g,-67108864&E|0,0),o(),I=0|vg(0|y,0|w,0|(I=0|yg(0|(g=0|vg(0|f,0|t,33554432,0)),0|o(),26)),0|o()),o(),g=0|Ug(0|f,0|t,-67108864&g|0,0),o(),C[A>>2]=r,C[A+4>>2]=n,C[A+8>>2]=a,C[A+12>>2]=c,C[A+16>>2]=e,C[A+20>>2]=i,C[A+24>>2]=E,C[A+28>>2]=Q,C[A+32>>2]=g,C[A+36>>2]=I}function v(A,I){A|=0;var g=0,B=0,Q=0,E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0;c=0|C[(I|=0)>>2],p=0|C[I+4>>2],i=0|C[I+8>>2],D=0|C[I+12>>2],Q=0|C[I+16>>2],s=0|C[I+20>>2],g=0|C[I+24>>2],n=0|C[I+28>>2],r=0|C[I+32>>2],H=0|C[I+36>>2],c=0|Qg(0|c,((0|c)<0)<<31>>31|0,121666,0),e=0|o(),p=0|Qg(0|p,((0|p)<0)<<31>>31|0,121666,0),u=0|o(),i=0|Qg(0|i,((0|i)<0)<<31>>31|0,121666,0),E=0|o(),D=0|Qg(0|D,((0|D)<0)<<31>>31|0,121666,0),F=0|o(),Q=0|Qg(0|Q,((0|Q)<0)<<31>>31|0,121666,0),B=0|o(),s=0|Qg(0|s,((0|s)<0)<<31>>31|0,121666,0),h=0|o(),g=0|Qg(0|g,((0|g)<0)<<31>>31|0,121666,0),I=0|o(),n=0|Qg(0|n,((0|n)<0)<<31>>31|0,121666,0),y=0|o(),r=0|Qg(0|r,((0|r)<0)<<31>>31|0,121666,0),t=0|o(),e=0|vg(0|(a=0|Qg(0|(a=0|ig(0|(w=0|vg(0|(H=0|Qg(0|H,((0|H)<0)<<31>>31|0,121666,0)),0|(f=0|o()),16777216,0)),0|o(),25)),0|o(),19,0)),0|o(),0|c,0|e),c=0|o(),w=0|Ug(0|H,0|f,-33554432&w|0,0),f=0|o(),E=0|vg(0|(a=0|ig(0|(H=0|vg(0|p,0|u,16777216,0)),0|o(),25)),0|o(),0|i,0|E),i=0|o(),H=0|Ug(0|p,0|u,-33554432&H|0,0),u=0|o(),B=0|vg(0|(a=0|ig(0|(p=0|vg(0|D,0|F,16777216,0)),0|o(),25)),0|o(),0|Q,0|B),Q=0|o(),p=0|Ug(0|D,0|F,-33554432&p|0,0),F=0|o(),I=0|vg(0|(a=0|ig(0|(D=0|vg(0|s,0|h,16777216,0)),0|o(),25)),0|o(),0|g,0|I),g=0|o(),D=0|Ug(0|s,0|h,-33554432&D|0,0),h=0|o(),t=0|vg(0|(a=0|ig(0|(s=0|vg(0|n,0|y,16777216,0)),0|o(),25)),0|o(),0|r,0|t),r=0|o(),s=0|Ug(0|n,0|y,-33554432&s|0,0),y=0|o(),a=0|vg(0|H,0|u,0|(a=0|yg(0|(n=0|vg(0|e,0|c,33554432,0)),0|o(),26)),0|o()),o(),n=0|Ug(0|e,0|c,-67108864&n|0,0),o(),e=0|vg(0|p,0|F,0|(e=0|yg(0|(c=0|vg(0|E,0|i,33554432,0)),0|o(),26)),0|o()),o(),c=0|Ug(0|E,0|i,-67108864&c|0,0),o(),E=0|vg(0|D,0|h,0|(E=0|yg(0|(i=0|vg(0|B,0|Q,33554432,0)),0|o(),26)),0|o()),o(),i=0|Ug(0|B,0|Q,-67108864&i|0,0),o(),B=0|vg(0|s,0|y,0|(B=0|yg(0|(Q=0|vg(0|I,0|g,33554432,0)),0|o(),26)),0|o()),o(),Q=0|Ug(0|I,0|g,-67108864&Q|0,0),o(),I=0|vg(0|w,0|f,0|(I=0|yg(0|(g=0|vg(0|t,0|r,33554432,0)),0|o(),26)),0|o()),o(),g=0|Ug(0|t,0|r,-67108864&g|0,0),o(),C[A>>2]=n,C[A+4>>2]=a,C[A+8>>2]=c,C[A+12>>2]=e,C[A+16>>2]=i,C[A+20>>2]=E,C[A+24>>2]=Q,C[A+28>>2]=B,C[A+32>>2]=g,C[A+36>>2]=I}function b(A,I,g){A|=0,I|=0;var C,E,i=0,e=0,o=0;if(E=y,C=y=y+63&-64,y=y+64|0,(g|=0)<<24>>24&&(255&g)<=64){if(0|function(A,I){return 1&(0!=(0|(A|=0))|0!=(0|(I|=0)))|0}(Q[A+80>>0]|Q[A+80+1>>0]<<8|Q[A+80+2>>0]<<16|Q[A+80+3>>0]<<24,Q[A+80+4>>0]|Q[A+80+4+1>>0]<<8|Q[A+80+4+2>>0]<<16|Q[A+80+4+3>>0]<<24))i=-1;else{i=Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24;do{if(i>>>0>128){if(aA(A,128,0),s(A,A+96|0),i=(Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24)-128|0,B[A+352>>0]=i,B[A+352+1>>0]=i>>8,B[A+352+2>>0]=i>>16,B[A+352+3>>0]=i>>24,i>>>0<129){BA(A+96|0,A+224|0,0|i),e=Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24,o=A+96|0;break}c(33456,33488,306,33533)}else e=i,o=A+96|0}while(0);aA(A,e,0),function(A){0|B[356+(A|=0)>>0]&&function(A){B[88+(A|=0)>>0]=-1,B[A+88+1>>0]=-1,B[A+88+2>>0]=-1,B[A+88+3>>0]=-1,B[A+88+4>>0]=-1,B[A+88+4+1>>0]=-1,B[A+88+4+2>>0]=-1,B[A+88+4+3>>0]=-1}(A),B[A+80>>0]=-1,B[A+80+1>>0]=-1,B[A+80+2>>0]=-1,B[A+80+3>>0]=-1,B[A+80+4>>0]=-1,B[A+80+4+1>>0]=-1,B[A+80+4+2>>0]=-1,B[A+80+4+3>>0]=-1}(A),YA(A+96+(i=Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24)|0,0,256-i|0),s(A,o),LI(C,Q[A>>0]|Q[A+1>>0]<<8|Q[A+2>>0]<<16|Q[A+3>>0]<<24,Q[A+4>>0]|Q[A+4+1>>0]<<8|Q[A+4+2>>0]<<16|Q[A+4+3>>0]<<24),LI(C+8|0,Q[A+8>>0]|Q[A+8+1>>0]<<8|Q[A+8+2>>0]<<16|Q[A+8+3>>0]<<24,Q[A+8+4>>0]|Q[A+8+4+1>>0]<<8|Q[A+8+4+2>>0]<<16|Q[A+8+4+3>>0]<<24),LI(C+16|0,Q[A+16>>0]|Q[A+16+1>>0]<<8|Q[A+16+2>>0]<<16|Q[A+16+3>>0]<<24,Q[A+16+4>>0]|Q[A+16+4+1>>0]<<8|Q[A+16+4+2>>0]<<16|Q[A+16+4+3>>0]<<24),LI(C+24|0,Q[A+24>>0]|Q[A+24+1>>0]<<8|Q[A+24+2>>0]<<16|Q[A+24+3>>0]<<24,Q[A+24+4>>0]|Q[A+24+4+1>>0]<<8|Q[A+24+4+2>>0]<<16|Q[A+24+4+3>>0]<<24),LI(C+32|0,Q[A+32>>0]|Q[A+32+1>>0]<<8|Q[A+32+2>>0]<<16|Q[A+32+3>>0]<<24,Q[A+32+4>>0]|Q[A+32+4+1>>0]<<8|Q[A+32+4+2>>0]<<16|Q[A+32+4+3>>0]<<24),LI(C+40|0,Q[A+40>>0]|Q[A+40+1>>0]<<8|Q[A+40+2>>0]<<16|Q[A+40+3>>0]<<24,Q[A+40+4>>0]|Q[A+40+4+1>>0]<<8|Q[A+40+4+2>>0]<<16|Q[A+40+4+3>>0]<<24),LI(C+48|0,Q[A+48>>0]|Q[A+48+1>>0]<<8|Q[A+48+2>>0]<<16|Q[A+48+3>>0]<<24,Q[A+48+4>>0]|Q[A+48+4+1>>0]<<8|Q[A+48+4+2>>0]<<16|Q[A+48+4+3>>0]<<24),LI(C+56|0,Q[A+56>>0]|Q[A+56+1>>0]<<8|Q[A+56+2>>0]<<16|Q[A+56+3>>0]<<24,Q[A+56+4>>0]|Q[A+56+4+1>>0]<<8|Q[A+56+4+2>>0]<<16|Q[A+56+4+3>>0]<<24),BA(0|I,0|C,255&g|0),MI(A,64),MI(o,256),i=0}return y=E,0|i}return SB(),0}function J(A,I,g,Q){A|=0,I|=0,g|=0;var E,i,e=0,o=0,c=0,a=0,n=0,r=0;switch(i=y,E=y=y+63&-64,y=y+16|0,0|(Q|=0)){case 2:if(I>>>0<13)Q=-31;else{e=33688,o=(Q=A)+13|0;do{B[Q>>0]=0|B[e>>0],Q=Q+1|0,e=e+1|0}while((0|Q)<(0|o));A=A+12|0,o=I+-12|0,e=6}break;case 1:if(I>>>0<12)Q=-31;else{e=33701,o=(Q=A)+12|0;do{B[Q>>0]=0|B[e>>0],Q=Q+1|0,e=e+1|0}while((0|Q)<(0|o));A=A+11|0,o=I+-11|0,e=6}break;default:Q=-31}do{if(6==(0|e)&&!(Q=0|oA(g))){if(cI(E,19),e=A+(Q=0|ZA(E))|0,a=o-Q|0,o>>>0<=Q>>>0){Q=-31;break}if(BA(0|A,0|E,Q+1|0),a>>>0>=4){if(B[e>>0]=36,B[e+1>>0]=109,B[e+2>>0]=61,B[e+3>>0]=0,cI(E,0|C[g+44>>2]),o=e+3+(A=0|ZA(E))|0,(a+-3|0)>>>0<=A>>>0){Q=-31;break}if(BA(e+3|0,0|E,A+1|0),(a+-3-A|0)>>>0>=4){if(B[o>>0]=44,B[o+1>>0]=116,B[o+2>>0]=61,B[o+3>>0]=0,cI(E,0|C[g+40>>2]),I=o+3+(Q=0|ZA(E))|0,c=a+-3-A-3-Q|0,(a+-3-A-3|0)>>>0<=Q>>>0){Q=-31;break}if(BA(o+3|0,0|E,Q+1|0),c>>>0>=4){if(B[I>>0]=44,B[I+1>>0]=112,B[I+2>>0]=61,B[I+3>>0]=0,cI(E,0|C[g+48>>2]),(c+-3|0)>>>0<=(e=0|ZA(E))>>>0){Q=-31;break}if(BA(I+3|0,0|E,e+1|0),Q=I+3+e+1|0,(c+-3-e|0)>>>0>=2&&(B[I+3+e>>0]=36,B[I+3+e+1>>0]=0,q(Q,c+-3-e-1|0,0|C[g+16>>2],0|C[g+20>>2],3),(r=c+-3-e-1-(n=0|ZA(Q))|0)>>>0>=2))return B[Q+n>>0]=36,B[Q+n+1>>0]=0,q(Q+n+1|0,r+-1|0,0|C[g>>2],0|C[g+4>>2],3),y=i,0;Q=-31}else Q=-31}else Q=-31}else Q=-31}}while(0);return y=i,0|Q}function P(A,I,g,Q){A|=0,I|=0,g|=0,Q|=0;var E,i,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,s=0;i=y,E=y=y+63&-64,y=y+704|0;A:do{if(!(0==(0|g)&0==(0|Q))){if(r=0|yg(0|(s=0|C[A+72>>2]),0|(f=0|C[A+72+4>>2]),3),o(),t=0|rg(0|g,0|Q,3),w=0|o(),a=0|yg(0|g,0|Q,61),n=0|o(),f=0|vg(0|s,0|f,0|t,0|w),s=0|o(),C[A+72>>2]=f,C[A+72+4>>2]=s,e=0|C[A+64>>2],c=0|C[A+64+4>>2],s>>>0>>0|(0|s)==(0|w)&f>>>0>>0&&(e=0|vg(0|e,0|c,1,0),c=0|o(),C[A+64>>2]=e,C[A+64+4>>2]=c),e=0|vg(0|e,0|c,0|a,0|n),n=0|o(),C[A+64>>2]=e,C[A+64+4>>2]=n,n=0|Ug(128,0,127&r|0,0),(e=0|o())>>>0>Q>>>0|(0|e)==(0|Q)&n>>>0>g>>>0)for(e=0,c=0;;)if(w=0|B[I+e>>0],s=0|vg(0|e,0|c,127&r|0,0),o(),B[A+80+s>>0]=w,e=0|vg(0|e,0|c,1,0),!((c=0|o())>>>0>>0|(0|c)==(0|Q)&e>>>0>>0))break A;if(!(0==(0|n)&0==(0|e))){c=0,a=0;do{w=0|B[I+c>>0],s=0|vg(0|c,0|a,127&r|0,0),o(),B[A+80+s>>0]=w,c=0|vg(0|c,0|a,1,0),a=0|o()}while(a>>>0>>0|(0|a)==(0|e)&c>>>0>>0)}if(D(A,A+80|0,E,E+640|0),e=0|Ug(0|g,0|Q,0|n,0|e),(a=0|o())>>>0>0|0==(0|a)&e>>>0>127){c=I+n|0;do{D(A,c,E,E+640|0),c=c+128|0,e=0|vg(0|e,0|a,-128,-1),a=0|o()}while(a>>>0>0|0==(0|a)&e>>>0>127)}else c=I+n|0;if(!(0==(0|(n=127&e))&!0)){e=0,a=0;do{B[A+80+e>>0]=0|B[c+e>>0],e=0|vg(0|e,0|a,1,0),a=0|o()}while(a>>>0<0|0==(0|a)&e>>>0>>0)}MI(E,704)}}while(0);y=i}function R(A,I,g){A|=0,I|=0;var B=0,C=0,Q=0,E=0,i=0,e=0,o=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0;C=0|Vg(g|=0),Q=0|Vg(g+4|0),E=0|Vg(g+8|0),i=0|Vg(g+12|0),e=0|Vg(g+16|0),o=0|Vg(g+20|0),r=0|Vg(g+24|0),t=0|Vg(g+28|0),f=0|Vg(I),w=0|Vg(I+4|0),y=0|Vg(I+8|0),c=0,a=1634760805,n=857760878,g=0|Vg(I+12|0),I=2036477234,B=1797285236;do{p=0|wB((l=0|wB((R=0|wB((k=(l=0|wB(f^(P=C+a|0),16))+e|0)^C,12))+P^l,8))+k^R,7),N=0|wB((D=0|wB((v=0|wB((h=(D=0|wB(w^(U=Q+n|0),16))+o|0)^Q,12))+U^D,8))+h^v,7),b=0|wB((F=0|wB((d=0|wB((_=(F=0|wB(y^(G=E+I|0),16))+r|0)^E,12))+G^F,8))+_^d,7),Y=0|wB((M=0|wB((H=0|wB((s=(M=0|wB(g^(u=i+B|0),16))+t|0)^i,12))+u^M,8))+s^H,7),Q=0|wB((r=(g=0|wB((a=(S=0|wB((J=0|wB(M^N+(R+P),16))+(F+_)^N,12))+(N+(R+P))|0)^J,8))+(J+(F+_))|0)^S,7),E=0|wB((t=(f=0|wB((n=(_=0|wB((S=0|wB(b+(v+U)^l,16))+(M+s)^b,12))+(b+(v+U))|0)^S,8))+(S+(M+s))|0)^_,7),i=0|wB((e=(w=0|wB((I=(s=0|wB((_=0|wB(Y+(d+G)^D,16))+(l+k)^Y,12))+(Y+(d+G))|0)^_,8))+(_+(l+k))|0)^s,7),C=0|wB((o=(y=0|wB((B=(s=0|wB((F=0|wB(H+u+p^F,16))+(D+h)^p,12))+(H+u+p)|0)^F,8))+(F+(D+h))|0)^s,7),c=c+1|0}while(10!=(0|c));Pg(A,a),Pg(A+4|0,n),Pg(A+8|0,I),Pg(A+12|0,B),Pg(A+16|0,f),Pg(A+20|0,w),Pg(A+24|0,y),Pg(A+28|0,g)}function N(A,I,g,C){A|=0,g|=0,C|=0;var Q,E,i=0,e=0;for(Q=y,E=y=y+63&-64,y=y+2272|0,yA(E+1536|0,I|=0),yA(E+1280|0,C),eg(E,g),og(E+2112|0,g),Eg(E+1792|0,E+2112|0),gI(E+2112|0,E+1792|0,E),Eg(E+1952|0,E+2112|0),eg(E+160|0,E+1952|0),gI(E+2112|0,E+1792|0,E+160|0),Eg(E+1952|0,E+2112|0),eg(E+320|0,E+1952|0),gI(E+2112|0,E+1792|0,E+320|0),Eg(E+1952|0,E+2112|0),eg(E+480|0,E+1952|0),gI(E+2112|0,E+1792|0,E+480|0),Eg(E+1952|0,E+2112|0),eg(E+640|0,E+1952|0),gI(E+2112|0,E+1792|0,E+640|0),Eg(E+1952|0,E+2112|0),eg(E+800|0,E+1952|0),gI(E+2112|0,E+1792|0,E+800|0),Eg(E+1952|0,E+2112|0),eg(E+960|0,E+1952|0),gI(E+2112|0,E+1792|0,E+960|0),Eg(E+1952|0,E+2112|0),eg(E+1120|0,E+1952|0),function(A){Kg(A|=0),Sg(A+40|0),Sg(A+80|0)}(A),g=255;;){if(0|B[E+1536+g>>0]){i=g,e=5;break}if(0|B[E+1280+g>>0]){i=g,e=5;break}if(!g)break;g=g+-1|0}if(5==(0|e)&&(0|i)>-1)for(;aI(E+2112|0,A),(g=0|B[E+1536+i>>0])<<24>>24<=0?g<<24>>24<0&&(Eg(E+1952|0,E+2112|0),II(E+2112|0,E+1952|0,E+(160*(((g<<24>>24)/-2|0)<<24>>24)|0)|0)):(Eg(E+1952|0,E+2112|0),gI(E+2112|0,E+1952|0,E+(160*((255&g)>>>1&255)|0)|0)),(g=0|B[E+1280+i>>0])<<24>>24<=0?g<<24>>24<0&&(Eg(E+1952|0,E+2112|0),BI(E+2112|0,E+1952|0,160+(120*(((g<<24>>24)/-2|0)<<24>>24)|0)|0)):(Eg(E+1952|0,E+2112|0),CI(E+2112|0,E+1952|0,160+(120*((255&g)>>>1&255)|0)|0)),Hg(A,E+2112|0),(0|i)>0;)i=i+-1|0;y=Q}function m(A,I,g,Q,E,i,e,o){A|=0,I|=0,g|=0,Q|=0,E|=0,i|=0,e|=0,o|=0;var c,a,n=0,r=0,t=0,f=0,w=0,s=0,h=0;if(a=y,c=y=y+63&-64,y=y+16|0,C[c>>2]=0,EB(o),Q){f=0,r=0,t=0,n=0;A:for(;;){for(s=n;n=0|B[g+s>>0],255==(0|(w=4&o?0|VA(n):0|zA(n)));){if(!E){w=18;break A}if(!(0|qg(E,n))){w=19;break A}if(!((n=s+1|0)>>>0>>0)){w=17;break A}s=n}if(f=w+(f<<6)|0,(n=r+6|0)>>>0>7){if(r=r+-2|0,t>>>0>=I>>>0){w=13;break}B[A+t>>0]=f>>>r,t=t+1|0}else r=n;if((n=s+1|0)>>>0>=Q>>>0){w=16;break}}13==(0|w)?(C[c>>2]=s,C[8678]=68,n=-1):16==(0|w)?(C[c>>2]=n,n=0):17==(0|w)?(C[c>>2]=n,n=0):18==(0|w)?(C[c>>2]=s,n=0):19==(0|w)&&(C[c>>2]=s,n=0),r>>>0>4?(t=0,n=-1):w=21}else f=0,r=0,t=0,n=0,w=21;do{if(21==(0|w))if((1<>>1)),n)t=0;else if(0!=(0|E)&&(h=0|C[c>>2])>>>0>>0){for(n=h;;){if(!(0|qg(E,0|B[g+n>>0]))){w=31;break}if((n=n+1|0)>>>0>=Q>>>0){w=30;break}}if(30==(0|w)){C[c>>2]=n,n=0;break}if(31==(0|w)){C[c>>2]=n,n=0;break}}else n=0}while(0);return r=0|C[c>>2],e?C[e>>2]=g+r:(0|r)!=(0|Q)&&(C[8678]=28,n=-1),0|i&&(C[i>>2]=t),y=a,0|n}function L(A,I,g){I|=0,g|=0;var Q,E,i,e=0,o=0,c=0;switch(i=y,E=y=y+63&-64,y=y+16|0,c=0|C[20+(A|=0)>>2],Q=0|C[A+4>>2],C[A+20>>2]=0,C[A+4>>2]=0,0|g){case 2:0|oI(I,33653,9)?I=-32:(I=I+9|0,o=4);break;case 1:0|oI(I,33663,8)?I=-32:(I=I+8|0,o=4);break;default:I=-26}do{if(4==(0|o))if(0==(0|oI(I,33672,3))&&0!=(0|(e=0|qA(I+3|0,E+4|0))))if(19==(0|C[E+4>>2]))if(0|oI(e,33676,3))I=-32;else{if(!(I=0|qA(e+3|0,E+4|0))){I=-32;break}if(C[A+44>>2]=C[E+4>>2],0|oI(I,33680,3))I=-32;else{if(!(I=0|qA(I+3|0,E+4|0))){I=-32;break}if(C[A+40>>2]=C[E+4>>2],0|oI(I,33684,3))I=-32;else{if(!(I=0|qA(I+3|0,E+4|0))){I=-32;break}if(o=0|C[E+4>>2],C[A+48>>2]=o,C[A+52>>2]=o,I=(o=36==(0|B[I>>0]))?I+1|0:I,o){if(C[E+4>>2]=c,0|m(o=0|C[A+16>>2],c,I,0|ZA(I),0,E+4|0,E,3)){I=-32;break}if(C[A+20>>2]=C[E+4>>2],I=0|C[E>>2],I=(c=36==(0|B[I>>0]))?I+1|0:I,c){if(C[E+4>>2]=Q,0|m(c=0|C[A>>2],Q,I,0|ZA(I),0,E+4|0,E,3)){I=-32;break}C[A+4>>2]=C[E+4>>2],g=0|C[E>>2],(I=0|oA(A))||(I=0==(0|B[g>>0])?0:-32)}else I=-32}else I=-32}}}else I=-26;else I=-32}while(0);return y=i,0|I}function x(A,I,g){A|=0,I|=0;var B=0,C=0,Q=0,E=0,i=0,e=0,o=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0;Q=0|Vg(g|=0),n=0|Vg(g+4|0),r=0|Vg(g+8|0),t=0|Vg(g+12|0),i=0|Vg(g+16|0),e=0|Vg(g+20|0),o=0|Vg(g+24|0),c=0|Vg(g+28|0),w=0|Vg(I),y=0|Vg(I+4|0),s=0|Vg(I+8|0),B=20,C=1634760805,E=2036477234,a=1797285236,f=857760878,g=0|Vg(I+12|0);do{Y=(0|wB((F=(0|wB((H=(0|wB((_=(0|wB(e+C|0,7))^t)+C|0,9))^s)+_|0,13))^e)+H|0,18))^C,l=(0|wB((U=(0|wB((D=(0|wB((u=(0|wB(f+Q|0,7))^g)+f|0,9))^o)+u|0,13))^Q)+D|0,18))^f,p=(0|wB((d=(0|wB((S=(0|wB((h=(0|wB(E+w|0,7))^c)+E|0,9))^n)+h|0,13))^w)+S|0,18))^E,I=(0|wB((k=(0|wB((G=(0|wB((M=(0|wB(a+i|0,7))^r)+a|0,9))^y)+M|0,13))^i)+G|0,18))^a,C=(0|wB((r=(0|wB((n=(0|wB((Q=(0|wB(M+Y|0,7))^U)+Y|0,9))^S)+Q|0,13))^M)+n|0,18))^Y,f=(0|wB((t=(0|wB((y=(0|wB((w=(0|wB(l+_|0,7))^d)+l|0,9))^G)+w|0,13))^_)+y|0,18))^l,E=(0|wB((g=(0|wB((s=(0|wB((i=(0|wB(p+u|0,7))^k)+p|0,9))^H)+i|0,13))^u)+s|0,18))^p,a=(0|wB((c=(0|wB((o=(0|wB((e=(0|wB(I+h|0,7))^F)+I|0,9))^D)+e|0,13))^h)+o|0,18))^I,B=B+-2|0}while(0!=(0|B));Pg(A,C),Pg(A+4|0,f),Pg(A+8|0,E),Pg(A+12|0,a),Pg(A+16|0,w),Pg(A+20|0,y),Pg(A+24|0,s),Pg(A+28|0,g)}function K(A,I,g,Q){I|=0,g|=0,Q|=0;var E=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0;if(0==(0|(i=0|C[56+(A|=0)>>2]))&0==(0|(E=0|C[A+56+4>>2])))r=7;else{if(c=0|Ug(16,0,0|i,0|E),!(0==(0|(n=(a=0|o())>>>0>Q>>>0|(0|a)==(0|Q)&c>>>0>g>>>0?g:c))&0==(0|(a=a>>>0>Q>>>0|(0|a)==(0|Q)&c>>>0>g>>>0?Q:a)))){c=0,e=0;do{t=0|B[I+c>>0],i=0|vg(0|i,0|E,0|c,0|e),o(),B[A+64+i>>0]=t,c=0|vg(0|c,0|e,1,0),e=0|o(),i=0|C[A+56>>2],E=0|C[A+56+4>>2]}while(e>>>0>>0|(0|e)==(0|a)&c>>>0>>0)}t=0|vg(0|i,0|E,0|n,0|a),c=0|o(),C[A+56>>2]=t,C[A+56+4>>2]=c,c>>>0<0|0==(0|c)&t>>>0<16||(g=0|Ug(0|g,0|Q,0|n,0|a),Q=0|o(),S(A,A+64|0,16,0),C[A+56>>2]=0,C[A+56+4>>2]=0,I=I+n|0,r=7)}if(7==(0|r)&&(E=-16&g,Q>>>0>0|0==(0|Q)&g>>>0>15?(i=0|Ug(0|g,0|Q,0|E,0|Q),t=0|o(),S(A,I,E,Q),Q=t,I=I+E|0):i=g,!(0==(0|i)&0==(0|Q)))){E=0,g=0;do{r=0|B[I+E>>0],t=0|vg(0|C[A+56>>2],0|C[A+56+4>>2],0|E,0|g),o(),B[A+64+t>>0]=r,E=0|vg(0|E,0|g,1,0),g=0|o()}while(g>>>0>>0|(0|g)==(0|Q)&E>>>0>>0);r=0|vg(0|C[A+56>>2],0|C[A+56+4>>2],0|i,0|Q),t=0|o(),C[A+56>>2]=r,C[A+56+4>>2]=t}}function X(A,I){A|=0,I|=0;var g=0,i=0,e=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0;A:do{if(0|A){do{if(2==(0|C[A+36>>2])){if(0==(0|(g=0|C[I>>2]))&&(0|Q[I+8>>0])<=1){i=6;break}t=0|C[A+4>>2],r=0}else i=6}while(0);if(6==(0|i)&&(QA(A,I,t=0|C[A+4>>2]),g=0|C[I>>2],r=1),g=0==(0|g)&(e=0|B[I+8>>0])<<24>>24==0?2:0,i=0|C[A+24>>2],a=0|E(i,0|C[I+4>>2]),n=0|C[A+20>>2],e=a+g+(0|E(n,255&e))|0,g>>>0>>0)for(c=i,n=e,i=(0==(0|(e>>>0)%(i>>>0))?i+-1|0:-1)+e|0;;){if(a=1==(0|(n>>>0)%(c>>>0))?n+-1|0:i,i=r?t+(g<<3)|0:(0|C[4+(0|C[A>>2])>>2])+(a<<10)|0,y=0|C[(c=i)>>2],c=0|Ag(0|C[c+4>>2],0,0|C[A+28>>2],0),e=0|o(),f=0|C[I>>2],i=0|B[I+8>>0],w=0|C[I+4>>2],c=0==(0|f)&i<<24>>24==0?w:c,C[I+12>>2]=g,e=0|DA(A,f,i,g,y,1&((0|c)==(0|w)?0==(0|(0==(0|f)&i<<24>>24==0?0:e)):0)),e=(i=0|C[4+(0|C[A>>2])>>2])+((0|E(0|C[A+24>>2],c))<<10)+(e<<10)|0,c=i+(n<<10)|0,f?H(i+(a<<10)|0,e,c):k(i+(a<<10)|0,e,c),(g=g+1|0)>>>0>=(0|C[A+20>>2])>>>0)break A;c=0|C[A+24>>2],n=n+1|0,i=a+1|0}}}while(0)}function j(A,I,g){var B,Q;g|=0,B=y,Q=y=y+63&-64,y=y+400|0,0==(0|(A|=0))|0==(0|(I|=0))||(HI(Q,0,0,64),Pg(Q+384|0,0|C[I+48>>2]),Xg(Q,Q+384|0,4,0),Pg(Q+384|0,0|C[I+4>>2]),Xg(Q,Q+384|0,4,0),Pg(Q+384|0,0|C[I+44>>2]),Xg(Q,Q+384|0,4,0),Pg(Q+384|0,0|C[I+40>>2]),Xg(Q,Q+384|0,4,0),Pg(Q+384|0,19),Xg(Q,Q+384|0,4,0),Pg(Q+384|0,g),Xg(Q,Q+384|0,4,0),Pg(Q+384|0,0|C[I+12>>2]),Xg(Q,Q+384|0,4,0),0|(g=0|C[I+8>>2])&&(Xg(Q,g,0|C[I+12>>2],0),1&C[I+56>>2]|0)&&(MI(0|C[I+8>>2],0|C[I+12>>2]),C[I+12>>2]=0),Pg(Q+384|0,0|C[I+20>>2]),Xg(Q,Q+384|0,4,0),0|(g=0|C[I+16>>2])&&Xg(Q,g,0|C[I+20>>2],0),Pg(Q+384|0,0|C[I+28>>2]),Xg(Q,Q+384|0,4,0),0|(g=0|C[I+24>>2])&&(Xg(Q,g,0|C[I+28>>2],0),2&C[I+56>>2]|0)&&(MI(0|C[I+24>>2],0|C[I+28>>2]),C[I+28>>2]=0),Pg(Q+384|0,0|C[I+36>>2]),Xg(Q,Q+384|0,4,0),0|(g=0|C[I+32>>2])&&Xg(Q,g,0|C[I+36>>2],0),fg(Q,A,64)),y=B}function T(A,I,g,Q){A|=0,I|=0,g|=0,Q|=0;var E,i,e=0,o=0,c=0;if(E=y,i=y=y+63&-64,y=y+528|0,C[i+512>>2]=0,Pg(i+512|0,I),I>>>0<65)(0|HI(i,0,0,I))>=0&&(Xg(i,i+512|0,4,0),Xg(i,g,Q,0),fg(i,A,I));else A:do{if((0|HI(i,0,0,64))>=0&&(Xg(i,i+512|0,4,0),Xg(i,g,Q,0),(0|fg(i,i+448|0,64))>=0)){o=i+448|0,c=(e=A)+32|0;do{B[e>>0]=0|B[o>>0],e=e+1|0,o=o+1|0}while((0|e)<(0|c));o=i+448|0,c=64+(e=i+384|0)|0;do{C[e>>2]=C[o>>2],e=e+4|0,o=o+4|0}while((0|e)<(0|c));if((I+-32|0)>>>0>64){Q=A+32|0,g=I+-32|0;do{if((0|TI(i+448|0,64,i+384|0,64,0,0,0))<0)break A;o=i+448|0,c=(e=Q)+32|0;do{B[e>>0]=0|B[o>>0],e=e+1|0,o=o+1|0}while((0|e)<(0|c));g=g+-32|0,Q=Q+32|0,o=i+448|0,c=64+(e=i+384|0)|0;do{C[e>>2]=C[o>>2],e=e+4|0,o=o+4|0}while((0|e)<(0|c))}while(g>>>0>64)}else Q=A+32|0,g=I+-32|0;(0|TI(i+448|0,g,i+384|0,64,0,0,0))>=0&&BA(0|Q,i+448|0,0|g)}}while(0);MI(i,384),y=E}function q(A,I,g,C,i){A|=0,I|=0,g|=0,C|=0;var e=0,o=0,a=0,n=0,r=0,t=0;EB(i|=0),o=(0|E((C>>>0)/3|0,-3))+C|0,e=((C>>>0)/3|0)<<2;do{if(o){if(2&i){e=(2|e)+(o>>>1)|0;break}e=e+4|0;break}}while(0);if(e>>>0>=I>>>0&&SB(),4&i)if(0|C){n=0,i=0,o=0,r=0;do{if(t=r,r=r+1|0,n=n<<8|0|Q[g+t>>0],(i=i+8|0)>>>0>5)for(;;){if(t=255&(0|XI(n>>>(i=i+-6|0)&63)),a=o+1|0,B[A+o>>0]=t,!(i>>>0>5)){o=a;break}o=a}}while((0|r)!=(0|C));i&&(t=255&(0|XI(n<<6-i&63)),B[A+o>>0]=t,o=o+1|0)}else o=0;else if(0|C){n=0,i=0,o=0,r=0;do{if(a=r,r=r+1|0,n=n<<8|0|Q[g+a>>0],(i=i+8|0)>>>0>5)for(;;){if(t=255&(0|jI(n>>>(i=i+-6|0)&63)),a=o+1|0,B[A+o>>0]=t,!(i>>>0>5)){o=a;break}o=a}}while((0|r)!=(0|C));i&&(t=255&(0|jI(n<<6-i&63)),B[A+o>>0]=t,o=o+1|0)}else o=0;return e>>>0>>0&&c(34564,34583,230,34599),e>>>0>o>>>0?YA(A+o|0,61,e-o|0):e=o,YA(A+e|0,0,((t=e+1|0)>>>0>>0?I:t)-e|0),0|A}function V(A,I,g,E,i,e,c,a){A|=0,I|=0,i|=0,e|=0,c|=0,a|=0;var n,r,t=0,f=0;if(n=y,r=y=y+63&-64,y=y+112|0,!(0==(0|(g|=0))&0==(0|(E|=0)))){t=(f=r)+32|0;do{B[f>>0]=0|B[a>>0],f=f+1|0,a=a+1|0}while((0|f)<(0|t));a=Q[i+4>>0]|Q[i+4+1>>0]<<8|Q[i+4+2>>0]<<16|Q[i+4+3>>0]<<24,C[r+96>>2]=Q[i>>0]|Q[i+1>>0]<<8|Q[i+2>>0]<<16|Q[i+3>>0]<<24,C[r+96+4>>2]=a,a=8;do{B[r+96+a>>0]=e,e=0|yg(0|e,0|c,8),c=0|o(),a=a+1|0}while(16!=(0|a));if(E>>>0>0|0==(0|E)&g>>>0>63)for(e=E;;){iB(r+32|0,r+96|0,r),c=0;do{B[A+c>>0]=B[r+32+c>>0]^B[I+c>>0],c=c+1|0}while(64!=(0|c));for(a=8,c=1;c=c+(0|Q[(E=r+96+a|0)>>0])|0,B[E>>0]=c,16!=(0|(a=a+1|0));)c>>>=8;if(c=0|vg(0|g,0|e,-64,-1),A=A+64|0,I=I+64|0,!((a=0|o())>>>0>0|0==(0|a)&c>>>0>63)){e=c;break}g=c,e=a}else e=g,a=E;if(!(0==(0|e)&0==(0|a))&&(iB(r+32|0,r+96|0,r),0|e)){c=0;do{B[A+c>>0]=B[r+32+c>>0]^B[I+c>>0],c=c+1|0}while((0|c)!=(0|e))}MI(r+32|0,64),MI(r,32)}y=n}function z(A,I){I|=0;var g,Q,E,i,e,c,a=0,n=0,r=0,t=0;0==(0|(n=0|C[56+(A|=0)>>2]))&0==(0|(a=0|C[A+56+4>>2]))||(B[A+64+n>>0]=1,a=0|vg(0|n,0|a,1,0),(r=0|o())>>>0<0|0==(0|r)&a>>>0<16&&YA(A+64+a|0,0,14-n+1|0),B[A+80>>0]=1,S(A,A+64|0,16,0)),n=0|C[A+24>>2],t=(E=(-67108864|(Q=((t=((r=(0|C[A+28>>2])+(n>>>26)|0)>>>26)+(0|C[A+32>>2])|0)>>>26)+(0|C[A+36>>2])|0))+((((((i=((c=(5*(Q>>>26)|0)+(0|C[A+20>>2])|0)>>>26)+(67108863&n)+((5+(67108863&c)|0)>>>26)|0)>>>26)+(67108863&r)|0)>>>26)+(67108863&t)|0)>>>26)|0)>>31&67108863&t|(e=(E>>>31)-1&67108863)&(((i>>>26)+(67108863&r)|0)>>>26)+(67108863&t),g=0|vg(E>>31&67108863&c|e&5+(67108863&c)|(E>>31&(c>>>26)+(67108863&n)|e&i)<<26|0,0,0|C[A+40>>2],0),a=0|o(),a=0|vg(0|(n=0|vg((E>>31&(c>>>26)+(67108863&n)|e&i)>>>6|(E>>31&67108863&r|e&(i>>>26)+(67108863&r))<<20|0,0,0|C[A+44>>2],0)),0|o(),0|a,0),n=0|o(),n=0|vg(0|(r=0|vg((E>>31&67108863&r|e&(i>>>26)+(67108863&r))>>>12|t<<14|0,0,0|C[A+48>>2],0)),0|o(),0|n,0),r=0|o(),r=0|vg(0|(t=0|vg(((E>>>31)-1&E|E>>31&Q)<<8|t>>>18|0,0,0|C[A+52>>2],0)),0|o(),0|r,0),o(),Pg(I,g),Pg(I+4|0,a),Pg(I+8|0,n),Pg(I+12|0,r),MI(A,88)}function W(A,I){var g,B;A|=0,g=y,B=y=y+63&-64,y=y+192|0,_(B+144|0,I|=0),_(B+96|0,B+144|0),_(B+96|0,B+96|0),u(B+96|0,I,B+96|0),u(B+144|0,B+144|0,B+96|0),_(B+48|0,B+144|0),u(B+96|0,B+96|0,B+48|0),_(B+48|0,B+96|0),I=1;do{_(B+48|0,B+48|0),I=I+1|0}while(5!=(0|I));u(B+96|0,B+48|0,B+96|0),_(B+48|0,B+96|0),I=1;do{_(B+48|0,B+48|0),I=I+1|0}while(10!=(0|I));u(B+48|0,B+48|0,B+96|0),_(B,B+48|0),I=1;do{_(B,B),I=I+1|0}while(20!=(0|I));u(B+48|0,B,B+48|0),_(B+48|0,B+48|0),I=1;do{_(B+48|0,B+48|0),I=I+1|0}while(10!=(0|I));u(B+96|0,B+48|0,B+96|0),_(B+48|0,B+96|0),I=1;do{_(B+48|0,B+48|0),I=I+1|0}while(50!=(0|I));u(B+48|0,B+48|0,B+96|0),_(B,B+48|0),I=1;do{_(B,B),I=I+1|0}while(100!=(0|I));u(B+48|0,B,B+48|0),_(B+48|0,B+48|0),I=1;do{_(B+48|0,B+48|0),I=I+1|0}while(50!=(0|I));u(B+96|0,B+48|0,B+96|0),_(B+96|0,B+96|0),I=1;do{_(B+96|0,B+96|0),I=I+1|0}while(5!=(0|I));u(A,B+96|0,B+144|0),y=g}function O(A,I){A|=0;var g,C,Q=0;for(g=y,C=y=y+63&-64,y=y+1760|0,eg(C,I|=0),og(C+1600|0,I),Eg(C+1280|0,C+1600|0),gI(C+1600|0,C+1280|0,C),Eg(C+1440|0,C+1600|0),eg(C+160|0,C+1440|0),gI(C+1600|0,C+1280|0,C+160|0),Eg(C+1440|0,C+1600|0),eg(C+320|0,C+1440|0),gI(C+1600|0,C+1280|0,C+320|0),Eg(C+1440|0,C+1600|0),eg(C+480|0,C+1440|0),gI(C+1600|0,C+1280|0,C+480|0),Eg(C+1440|0,C+1600|0),eg(C+640|0,C+1440|0),gI(C+1600|0,C+1280|0,C+640|0),Eg(C+1440|0,C+1600|0),eg(C+800|0,C+1440|0),gI(C+1600|0,C+1280|0,C+800|0),Eg(C+1440|0,C+1600|0),eg(C+960|0,C+1440|0),gI(C+1600|0,C+1280|0,C+960|0),Eg(C+1440|0,C+1600|0),eg(C+1120|0,C+1440|0),Og(A),Q=252;og(C+1600|0,A),(I=0|B[31840+Q>>0])<<24>>24<=0?I<<24>>24<0&&(Eg(C+1440|0,C+1600|0),II(C+1600|0,C+1440|0,C+(160*(((I<<24>>24)/-2|0)<<24>>24)|0)|0)):(Eg(C+1440|0,C+1600|0),gI(C+1600|0,C+1440|0,C+(160*((255&I)>>>1&255)|0)|0)),Eg(A,C+1600|0),Q;)Q=Q+-1|0;y=g}function Z(A,I,g,B,Q,E,i){A|=0,I|=0,g|=0,B|=0,Q|=0;var e,c,a=0,n=0;return e=y,c=y=y+63&-64,y=y+352|0,x(c,E|=0,i|=0),A>>>0>g>>>0&&0>>0|0==(0|Q)&(A-g|0)>>>0>>0?n=5:g>>>0>A>>>0&&0>>0|0==(0|Q)&(g-A|0)>>>0>>0?n=5:a=g,5==(0|n)&&(YI(0|A,0|g,0|B),a=A),C[c+32>>2]=0,C[c+32+4>>2]=0,C[c+32+8>>2]=0,C[c+32+12>>2]=0,C[c+32+16>>2]=0,C[c+32+20>>2]=0,C[c+32+24>>2]=0,C[c+32+28>>2]=0,0==(0|(i=Q>>>0>0|0==(0|Q)&B>>>0>32?32:B))&0==(0|(g=Q>>>0>0|0==(0|Q)&B>>>0>32?0:Q))||BA(c+32+32|0,0|a,-2-(n=~Q>>>0>4294967295|-1==(0|~Q)&~B>>>0>4294967263?~B:-33)+1|0),Yg(c+32|0,c+32|0,n=0|vg(0|i,0|g,32,0),0|o(),E+16|0,c),gB(c+96|0,c+32|0),0==(0|i)&0==(0|g)||BA(0|A,c+32+32|0,-2-(n=~Q>>>0>4294967295|-1==(0|~Q)&~B>>>0>4294967263?~B:-33)+1|0),MI(c+32|0,64),Q>>>0>0|0==(0|Q)&B>>>0>32&&_g(A+i|0,a+i|0,n=0|Ug(0|B,0|Q,0|i,0|g),0|o(),E+16|0,c),MI(c,32),bg(c+96|0,A,B,Q),IB(c+96|0,I),MI(c+96|0,256),y=e,0}function $(A,I,g,C){A|=0,I|=0,g|=0,C|=0;var E=0,i=0,e=0,c=0;A:do{if(!(0==(0|g)&0==(0|C))){for(E=Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24,e=I;I=A+96+E|0,C>>>0>0|0==(0|C)&g>>>0>(c=256-E|0)>>>0;){BA(0|I,0|e,0|c),I=(Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24)+c|0,B[A+352>>0]=I,B[A+352+1>>0]=I>>8,B[A+352+2>>0]=I>>16,B[A+352+3>>0]=I>>24,aA(A,128,0),s(A,A+96|0),E=A+224|0,i=128+(I=A+96|0)|0;do{B[I>>0]=0|B[E>>0],I=I+1|0,E=E+1|0}while((0|I)<(0|i));if(E=(Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24)-128|0,B[A+352>>0]=E,B[A+352+1>>0]=E>>8,B[A+352+2>>0]=E>>16,B[A+352+3>>0]=E>>24,0==(0|(g=0|Ug(0|g,0|C,0|c,0)))&0==(0|(C=0|o())))break A;e=e+c|0}BA(0|I,0|e,0|g),c=(Q[A+352>>0]|Q[A+352+1>>0]<<8|Q[A+352+2>>0]<<16|Q[A+352+3>>0]<<24)+g|0,B[A+352>>0]=c,B[A+352+1>>0]=c>>8,B[A+352+2>>0]=c>>16,B[A+352+3>>0]=c>>24}}while(0)}function AA(A,I,g){var B,Q,E,i,e,o,c,a,n,r,t,f,w,y,s,h,D,F,p,u;I|=0,g|=0,u=0|C[(A|=0)>>2],F=0|C[A+4>>2],h=0|C[A+8>>2],y=0|C[A+12>>2],f=0|C[A+16>>2],r=0|C[A+20>>2],a=0|C[A+24>>2],o=0|C[A+28>>2],i=0|C[A+32>>2],Q=0|C[A+36>>2],p=0|C[I>>2],D=0|C[I+4>>2],s=0|C[I+8>>2],w=0|C[I+12>>2],t=0|C[I+16>>2],n=0|C[I+20>>2],c=0|C[I+24>>2],e=0|C[I+28>>2],E=0|C[I+32>>2],B=0|C[I+36>>2],C[A>>2]=(p^u)&0-g^u,C[A+4>>2]=(D^F)&0-g^F,C[A+8>>2]=(s^h)&0-g^h,C[A+12>>2]=(w^y)&0-g^y,C[A+16>>2]=(t^f)&0-g^f,C[A+20>>2]=(n^r)&0-g^r,C[A+24>>2]=(c^a)&0-g^a,C[A+28>>2]=(e^o)&0-g^o,C[A+32>>2]=(E^i)&0-g^i,C[A+36>>2]=(B^Q)&0-g^Q,C[I>>2]=(p^u)&0-g^p,C[I+4>>2]=(D^F)&0-g^D,C[I+8>>2]=(s^h)&0-g^s,C[I+12>>2]=(w^y)&0-g^w,C[I+16>>2]=(t^f)&0-g^t,C[I+20>>2]=(n^r)&0-g^n,C[I+24>>2]=(c^a)&0-g^c,C[I+28>>2]=(e^o)&0-g^e,C[I+32>>2]=(E^i)&0-g^E,C[I+36>>2]=(B^Q)&0-g^B}function IA(A,I,g,E,i){A|=0,E|=0,i|=0;var e,c,a=0,n=0,r=0,t=0,f=0;if(e=y,c=y=y+63&-64,y=y+112|0,!(0==(0|(I|=0))&0==(0|(g|=0)))){a=(n=c)+32|0;do{B[n>>0]=0|B[i>>0],n=n+1|0,i=i+1|0}while((0|n)<(0|a));if(n=Q[E+4>>0]|Q[E+4+1>>0]<<8|Q[E+4+2>>0]<<16|Q[E+4+3>>0]<<24,C[c+96>>2]=Q[E>>0]|Q[E+1>>0]<<8|Q[E+2>>0]<<16|Q[E+3>>0]<<24,C[c+96+4>>2]=n,C[c+96+8>>2]=0,C[c+96+8+4>>2]=0,g>>>0>0|0==(0|g)&I>>>0>63){do{for(iB(A,c+96|0,c),a=8,i=1;i=i+(0|Q[(n=c+96+a|0)>>0])|0,B[n>>0]=i,16!=(0|(a=a+1|0));)i>>>=8;I=0|vg(0|I,0|g,-64,-1),g=0|o(),A=A+64|0}while(g>>>0>0|0==(0|g)&I>>>0>63);0==(0|I)&0==(0|g)||(t=A,f=I,r=8)}else t=A,f=I,r=8;if(8==(0|r)&&(iB(c+32|0,c+96|0,c),0|f)){i=0;do{B[t+i>>0]=0|B[c+32+i>>0],i=i+1|0}while((0|i)!=(0|f))}MI(c+32|0,64),MI(c,32)}y=e}function gA(A,I,g,B,C,Q,E){A|=0,I|=0,g|=0,B|=0,C|=0;var i,e,c=0;return e=y,i=y=y+63&-64,y=y+96|0,x(i,Q|=0,E|=0),function(A,I,g){IA(A|=0,32,0,I|=0,g|=0)}(i+32|0,Q+16|0,i),0|function(A,I,g,B,C){return 0|function(A,I,g,B,C){var Q,E;return A|=0,Q=y,E=y=y+63&-64,y=y+16|0,function(A,I,g,B,C){var Q,E;A|=0,I|=0,g|=0,B|=0,Q=y,E=y=y+63&-64,y=y+96|0,MA(E,C|=0),K(E,I,g,B),z(E,A),y=Q}(E,I|=0,g|=0,B|=0,C|=0),C=0|tB(A,E),y=Q,0|C}(A|=0,I|=0,g|=0,B|=0,C|=0)}(g,I,B,C,i+32|0)?(MI(i,32),I=-1):A?(I>>>0>=A>>>0&&0>>0|0==(0|C)&(I-A|0)>>>0>>0?c=8:A>>>0>=I>>>0&&0>>0|0==(0|C)&(A-I|0)>>>0>>0?c=8:g=I,8==(0|c)&&(YI(0|A,0|I,0|B),g=A),0==(0|(I=C>>>0>0|0==(0|C)&B>>>0>32?32:B))&0==(0|(E=C>>>0>0|0==(0|C)&B>>>0>32?0:C))?Yg(i+32|0,i+32|0,32,0,Q+16|0,i):(BA(i+32+32|0,0|g,-2-(c=~C>>>0>4294967295|-1==(0|~C)&~B>>>0>4294967263?~B:-33)+1|0),Yg(i+32|0,i+32|0,0|vg(0|I,0|E,32,0),0|o(),Q+16|0,i),BA(0|A,i+32+32|0,-2-c+1|0)),C>>>0>0|0==(0|C)&B>>>0>32&&_g(A+I|0,g+I|0,0|Ug(0|B,0|C,0|I,0|E),0|o(),Q+16|0,i),MI(i,32),I=0):I=0,y=e,0|I}function BA(A,I,g){A|=0,I|=0;var Q,E,i=0;if((0|(g|=0))>=8192)return t(0|A,0|I,0|g),0|A;if(E=0|A,Q=A+g|0,(3&A)==(3&I)){for(;3&A;){if(!g)return 0|E;B[A>>0]=0|B[I>>0],A=A+1|0,I=I+1|0,g=g-1|0}for(i=(g=-4&Q|0)-64|0;(0|A)<=(0|i);)C[A>>2]=C[I>>2],C[A+4>>2]=C[I+4>>2],C[A+8>>2]=C[I+8>>2],C[A+12>>2]=C[I+12>>2],C[A+16>>2]=C[I+16>>2],C[A+20>>2]=C[I+20>>2],C[A+24>>2]=C[I+24>>2],C[A+28>>2]=C[I+28>>2],C[A+32>>2]=C[I+32>>2],C[A+36>>2]=C[I+36>>2],C[A+40>>2]=C[I+40>>2],C[A+44>>2]=C[I+44>>2],C[A+48>>2]=C[I+48>>2],C[A+52>>2]=C[I+52>>2],C[A+56>>2]=C[I+56>>2],C[A+60>>2]=C[I+60>>2],A=A+64|0,I=I+64|0;for(;(0|A)<(0|g);)C[A>>2]=C[I>>2],A=A+4|0,I=I+4|0}else for(g=Q-4|0;(0|A)<(0|g);)B[A>>0]=0|B[I>>0],B[A+1>>0]=0|B[I+1>>0],B[A+2>>0]=0|B[I+2>>0],B[A+3>>0]=0|B[I+3>>0],A=A+4|0,I=I+4|0;for(;(0|A)<(0|Q);)B[A>>0]=0|B[I>>0],A=A+1|0,I=I+1|0;return 0|E}function CA(A,I){A|=0;var g,Q,E=0;g=y,Q=y=y+63&-64,y=y+48|0,function(A,I){var g,B,Q,E,i,e,o,c,a,n,r;A|=0,a=0|C[(I|=0)>>2],r=0|C[I+4>>2],o=0|C[I+8>>2],e=0|C[I+12>>2],i=0|C[I+16>>2],n=0|C[I+20>>2],Q=0|C[I+24>>2],B=0|C[I+28>>2],g=0|C[I+32>>2],E=(((((c=((19*((((((((((((16777216+(19*(I=0|C[I+36>>2])|0)|0)>>>25)+a>>26)+r>>25)+o>>26)+e>>25)+i>>26)+n>>25)+Q>>26)+B>>25)+g>>26)+I>>25)|0)+a>>26)+r|0)>>25)+o>>26)+e>>25)+i>>26)+n|0,C[A>>2]=(19*((((((((((((16777216+(19*I|0)|0)>>>25)+a>>26)+r>>25)+o>>26)+e>>25)+i>>26)+n>>25)+Q>>26)+B>>25)+g>>26)+I>>25)|0)+a&67108863,C[A+4>>2]=33554431&c,C[A+8>>2]=(c>>25)+o&67108863,C[A+12>>2]=((c>>25)+o>>26)+e&33554431,C[A+16>>2]=(((c>>25)+o>>26)+e>>25)+i&67108863,C[A+20>>2]=33554431&E,C[A+24>>2]=(E>>25)+Q&67108863,C[A+28>>2]=((E>>25)+Q>>26)+B&33554431,C[A+32>>2]=(((E>>25)+Q>>26)+B>>25)+g&67108863,C[A+36>>2]=((((E>>25)+Q>>26)+B>>25)+g>>26)+I&33554431}(Q,I|=0),I=0|C[Q>>2],B[A>>0]=I,B[A+1>>0]=I>>>8,B[A+2>>0]=I>>>16,E=0|C[Q+4>>2],B[A+3>>0]=E<<2|I>>>24,B[A+4>>0]=E>>>6,B[A+5>>0]=E>>>14,I=0|C[Q+8>>2],B[A+6>>0]=I<<3|E>>>22,B[A+7>>0]=I>>>5,B[A+8>>0]=I>>>13,E=0|C[Q+12>>2],B[A+9>>0]=E<<5|I>>>21,B[A+10>>0]=E>>>3,B[A+11>>0]=E>>>11,I=0|C[Q+16>>2],B[A+12>>0]=I<<6|E>>>19,B[A+13>>0]=I>>>2,B[A+14>>0]=I>>>10,B[A+15>>0]=I>>>18,I=0|C[Q+20>>2],B[A+16>>0]=I,B[A+17>>0]=I>>>8,B[A+18>>0]=I>>>16,E=0|C[Q+24>>2],B[A+19>>0]=E<<1|I>>>24,B[A+20>>0]=E>>>7,B[A+21>>0]=E>>>15,I=0|C[Q+28>>2],B[A+22>>0]=I<<3|E>>>23,B[A+23>>0]=I>>>5,B[A+24>>0]=I>>>13,E=0|C[Q+32>>2],B[A+25>>0]=E<<4|I>>>21,B[A+26>>0]=E>>>4,B[A+27>>0]=E>>>12,I=0|C[Q+36>>2],B[A+28>>0]=I<<6|E>>>20,B[A+29>>0]=I>>>2,B[A+30>>0]=I>>>10,B[A+31>>0]=I>>>18,y=g}function QA(A,I,g){A|=0,I|=0,g|=0;var B,E,i=0,e=0,c=0;if(B=y,E=y=y+63&-64,y=y+4096|0,yB(E+3072|0),yB(E+2048|0),0!=(0|A)&0!=(0|I)&&(C[E+2048>>2]=C[I>>2],C[E+2048+4>>2]=0,C[E+2048+8>>2]=C[I+4>>2],C[E+2048+8+4>>2]=0,C[E+2048+16>>2]=Q[I+8>>0],C[E+2048+16+4>>2]=0,C[E+2048+24>>2]=C[A+16>>2],C[E+2048+24+4>>2]=0,C[E+2048+32>>2]=C[A+8>>2],C[E+2048+32+4>>2]=0,C[E+2048+40>>2]=C[A+36>>2],C[E+2048+40+4>>2]=0,0|C[A+20>>2])){I=0;do{(i=127&I)||(c=0|vg(0|C[E+2048+48>>2],0|C[E+2048+48+4>>2],1,0),e=0|o(),C[E+2048+48>>2]=c,C[E+2048+48+4>>2]=e,yB(E),yB(E+1024|0),H(E+3072|0,E+2048|0,E),H(E+3072|0,E,E+1024|0)),e=0|C[E+1024+(i<<3)+4>>2],C[(c=g+(I<<3)|0)>>2]=C[E+1024+(i<<3)>>2],C[c+4>>2]=e,I=I+1|0}while(I>>>0<(0|C[A+20>>2])>>>0)}y=B}function EA(A,I,g,B){A|=0,I|=0,g|=0,B|=0;var Q,E,i,e,o=0,c=0,a=0;e=y,i=y=y+63&-64,y=y+64|0,c=52+(o=i+8|0)|0;do{C[o>>2]=0,o=o+4|0}while((0|o)<(0|c));o=0|ZA(A),C[i+36>>2]=o,C[i+20>>2]=o,C[i+4>>2]=o,c=0|F(o),C[i+32>>2]=c,Q=0|F(o),C[i+16>>2]=Q,E=0|F(o),C[i>>2]=E;do{if(0==(0|c)|0==(0|Q)|0==(0|E))d(c),d(Q),d(E),o=-22;else{if(!(a=0|F(o))){d(c),d(Q),d(E),o=-22;break}if(0|(o=0|L(i,A,B))){d(0|C[i+32>>2]),d(0|C[i+16>>2]),d(0|C[i>>2]),d(a);break}B=0|nA(0|C[i+40>>2],0|C[i+44>>2],0|C[i+52>>2],I,g,0|C[i+16>>2],0|C[i+20>>2],a,0|C[i+4>>2],0,0,B),d(0|C[i+32>>2]),d(0|C[i+16>>2]),o=0==(0|B)&&0==(0|EI(a,0|C[i>>2],0|C[i+4>>2]))?0:-35,d(a),d(0|C[i>>2])}}while(0);return y=e,0|o}function iA(A,I){A|=0,I|=0;var g,C,E=0,i=0,e=0;g=y,C=y=y+63&-64,y=y+464|0,E=0;do{e=0|B[I+E>>0],B[C+(i=E<<1)>>0]=15&e,B[C+(1|i)>>0]=(255&e)>>>4,E=E+1|0}while(32!=(0|E));I=0,E=0;do{I=134217728+((i=I+(0|Q[(e=C+E|0)>>0])|0)<<24)>>28,B[e>>0]=i-(I<<4),E=E+1|0}while(63!=(0|E));B[C+63>>0]=I+(0|Q[C+63>>0]),Og(A),I=1;do{$g(C+64|0,I>>>1,0|B[C+I>>0]),CI(C+304|0,A,C+64|0),Eg(A,C+304|0),I=I+2|0}while(I>>>0<64);og(C+304|0,A),Hg(C+184|0,C+304|0),aI(C+304|0,C+184|0),Hg(C+184|0,C+304|0),aI(C+304|0,C+184|0),Hg(C+184|0,C+304|0),aI(C+304|0,C+184|0),Eg(A,C+304|0),I=0;do{$g(C+64|0,I>>>1,0|B[C+I>>0]),CI(C+304|0,A,C+64|0),Eg(A,C+304|0),I=I+2|0}while(I>>>0<64);y=g}function eA(A,I,g,B,C,Q,E,i,e,c,a){var n;A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0,i|=0,e|=0,n=y,y=y+352|0,OI(n+16|0,64,0,c|=0,a|=0),gB(n+80|0,n+16|0),MI(n+16|0,64),bg(n+80|0,E,i,e),I=0|Ug(0,0,0|i,0|e),o(),bg(n+80|0,34624,15&I,0),bg(n+80|0,g,B,C),I=0|Ug(0,0,0|B,0|C),o(),bg(n+80|0,34624,15&I,0),LI(n+336|0,i,e),bg(n+80|0,n+336|0,8,0),LI(n+336|0,B,C),bg(n+80|0,n+336|0,8,0),IB(n+80|0,n),MI(n+80|0,256),I=0|tB(n,Q),MI(n,16);do{if(A){if(I){YA(0|A,0,0|B),I=-1;break}rI(A,g,B,C,c,1,a),I=0;break}}while(0);return y=n,0|I}function oA(A){A|=0;var I=0,g=0;do{if(A)if(0|C[A>>2])if((0|C[A+4>>2])>>>0>=16){if(0==(0|C[A+8>>2])&&0|C[A+12>>2]){I=-18;break}if(I=0|C[A+20>>2],!(0|C[A+16>>2]))return 0|(0==(0|I)?-6:-19);if(I>>>0>=8){if(0==(0|C[A+24>>2])&&0|C[A+28>>2]){I=-20;break}if(0==(0|C[A+32>>2])&&0|C[A+36>>2]){I=-21;break}if((I=0|C[A+44>>2])>>>0>=8)if(I>>>0<=2097152)if(I>>>0>=(g=0|C[A+48>>2])<<3>>>0)if(0|C[A+40>>2])if(g){if(!(g>>>0>16777215))return 0|(0==(0|(A=0|C[A+52>>2]))?-28:A>>>0>16777215?-29:0);I=-17}else I=-16;else I=-12;else I=-14;else I=-15;else I=-14}else I=-6}else I=-2;else I=-1;else I=-25}while(0);return 0|I}function cA(A,I,g,Q,E){var i,e;A|=0,g|=0,Q|=0,E|=0,i=y,e=y=y+63&-64,y=y+192|0,((I|=0)-1&255)>63&&SB(),g||SB(),B[e+128>>0]=I,B[e+128+1>>0]=32,B[e+128+2>>0]=1,B[e+128+3>>0]=1,Wg(e+128+4|0),LI(e+128+8|0,0,0),C[e+128+16>>2]=0,C[e+128+16+4>>2]=0,C[e+128+16+8>>2]=0,C[e+128+16+12>>2]=0,Q?function(A,I){I|=0;var g=0;A=16+(g=32+(A|=0)|0)|0;do{B[g>>0]=0|B[I>>0],g=g+1|0,I=I+1|0}while((0|g)<(0|A))}(e+128|0,Q):(C[e+128+32>>2]=0,C[e+128+32+4>>2]=0,C[e+128+32+8>>2]=0,C[e+128+32+12>>2]=0),E?function(A,I){I|=0;var g=0;A=16+(g=48+(A|=0)|0)|0;do{B[g>>0]=0|B[I>>0],g=g+1|0,I=I+1|0}while((0|g)<(0|A))}(e+128|0,E):(C[e+128+48>>2]=0,C[e+128+48+4>>2]=0,C[e+128+48+8>>2]=0,C[e+128+48+12>>2]=0),XA(A,e+128|0),E=96+(I=e+32|0)|0;do{C[I>>2]=0,I=I+4|0}while((0|I)<(0|E));E=(I=e)+32|0;do{B[I>>0]=0|B[g>>0],I=I+1|0,g=g+1|0}while((0|I)<(0|E));$(A,e,128,0),MI(e,128),y=i}function aA(A,I,g){var C,E;I|=0,g|=0,C=0|vg(Q[64+(A|=0)>>0]|Q[A+64+1>>0]<<8|Q[A+64+2>>0]<<16|Q[A+64+3>>0]<<24|0,Q[A+64+4>>0]|Q[A+64+4+1>>0]<<8|Q[A+64+4+2>>0]<<16|Q[A+64+4+3>>0]<<24|0,0|I,0|g),E=0|o(),B[A+64>>0]=C,B[A+64+1>>0]=C>>8,B[A+64+2>>0]=C>>16,B[A+64+3>>0]=C>>24,B[A+64+4>>0]=E,B[A+64+4+1>>0]=E>>8,B[A+64+4+2>>0]=E>>16,B[A+64+4+3>>0]=E>>24,I=0|vg(Q[A+72>>0]|Q[A+72+1>>0]<<8|Q[A+72+2>>0]<<16|Q[A+72+3>>0]<<24|0,Q[A+72+4>>0]|Q[A+72+4+1>>0]<<8|Q[A+72+4+2>>0]<<16|Q[A+72+4+3>>0]<<24|0,1&(E>>>0>>0|(0|E)==(0|g)&C>>>0>>0)|0,0),g=0|o(),B[A+72>>0]=I,B[A+72+1>>0]=I>>8,B[A+72+2>>0]=I>>16,B[A+72+3>>0]=I>>24,B[A+72+4>>0]=g,B[A+72+4+1>>0]=g>>8,B[A+72+4+2>>0]=g>>16,B[A+72+4+3>>0]=g>>24}function nA(A,I,g,B,Q,E,i,e,o,c,a,n){var r,t,f;A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0,f=y,t=y=y+63&-64,y=y+64|0,r=0|F(o|=0);do{if(r){if(C[t>>2]=r,C[t+4>>2]=o,C[t+8>>2]=B,C[t+12>>2]=Q,C[t+16>>2]=E,C[t+20>>2]=i,C[t+24>>2]=0,C[t+24+4>>2]=0,C[t+24+8>>2]=0,C[t+24+12>>2]=0,C[t+40>>2]=A,C[t+44>>2]=I,C[t+48>>2]=g,C[t+52>>2]=g,C[t+56>>2]=0,0|(I=0|pA(t,n))){MI(r,o),d(r);break}if(0|e&&BA(0|e,0|r,0|o),0!=(0|c)&0!=(0|a)&&0|J(c,a,t,n)){MI(r,o),MI(c,a),d(r),I=-31;break}MI(r,o),d(r),I=0}else I=-22}while(0);return y=f,0|I}function rA(A,I){var g,B,C=0;return B=y,g=y=y+63&-64,y=y+288|0,U(40+(A|=0)|0,I|=0),Sg(A+80|0),_(g+240|0,A+40|0),u(g+192|0,g+240|0,16),lA(g+240|0,g+240|0,A+80|0),_A(g+192|0,g+192|0,A+80|0),_(g+144|0,g+192|0),u(g+144|0,g+144|0,g+192|0),_(A,g+144|0),u(A,A,g+192|0),u(A,A,g+240|0),function(A,I){A|=0;var g,B,C=0;g=y,B=y=y+63&-64,y=y+144|0,_(B+96|0,I|=0),_(B+48|0,B+96|0),_(B+48|0,B+48|0),u(B+48|0,I,B+48|0),u(B+96|0,B+96|0,B+48|0),_(B+96|0,B+96|0),u(B+96|0,B+48|0,B+96|0),_(B+48|0,B+96|0),C=1;do{_(B+48|0,B+48|0),C=C+1|0}while(5!=(0|C));u(B+96|0,B+48|0,B+96|0),_(B+48|0,B+96|0),C=1;do{_(B+48|0,B+48|0),C=C+1|0}while(10!=(0|C));u(B+48|0,B+48|0,B+96|0),_(B,B+48|0),C=1;do{_(B,B),C=C+1|0}while(20!=(0|C));u(B+48|0,B,B+48|0),_(B+48|0,B+48|0),C=1;do{_(B+48|0,B+48|0),C=C+1|0}while(10!=(0|C));u(B+96|0,B+48|0,B+96|0),_(B+48|0,B+96|0),C=1;do{_(B+48|0,B+48|0),C=C+1|0}while(50!=(0|C));u(B+48|0,B+48|0,B+96|0),_(B,B+48|0),C=1;do{_(B,B),C=C+1|0}while(100!=(0|C));u(B+48|0,B,B+48|0),_(B+48|0,B+48|0),C=1;do{_(B+48|0,B+48|0),C=C+1|0}while(50!=(0|C));u(B+96|0,B+48|0,B+96|0),_(B+96|0,B+96|0),_(B+96|0,B+96|0),u(A,B+96|0,I),y=g}(A,A),u(A,A,g+144|0),u(A,A,g+240|0),_(g+96|0,A),u(g+96|0,g+96|0,g+192|0),lA(g+48|0,g+96|0,g+240|0),0|cg(g+48|0)?C=4:(_A(g,g+96|0,g+240|0),0|cg(g)?(u(A,A,64),C=4):A=-1),4==(0|C)&&((0|(C=0|sg(A)))==((0|Q[I+31>>0])>>>7|0)&&xA(A,A),u(A+120|0,A,A+40|0),A=0),y=B,0|A}function tA(A,I,g){var B,Q,E,i,e,o,c,a,n,r,t,f,w,y,s,h,D,F,p;I|=0,g|=0,p=0|C[(A|=0)>>2],D=0|C[A+4>>2],s=0|C[A+8>>2],w=0|C[A+12>>2],t=0|C[A+16>>2],n=0|C[A+20>>2],c=0|C[A+24>>2],e=0|C[A+28>>2],E=0|C[A+32>>2],B=0|C[A+36>>2],F=(C[I+4>>2]^D)&0-g,h=(C[I+8>>2]^s)&0-g,y=(C[I+12>>2]^w)&0-g,f=(C[I+16>>2]^t)&0-g,r=(C[I+20>>2]^n)&0-g,a=(C[I+24>>2]^c)&0-g,o=(C[I+28>>2]^e)&0-g,i=(C[I+32>>2]^E)&0-g,Q=(C[I+36>>2]^B)&0-g,C[A>>2]=(C[I>>2]^p)&0-g^p,C[A+4>>2]=F^D,C[A+8>>2]=h^s,C[A+12>>2]=y^w,C[A+16>>2]=f^t,C[A+20>>2]=r^n,C[A+24>>2]=a^c,C[A+28>>2]=o^e,C[A+32>>2]=i^E,C[A+36>>2]=Q^B}function fA(A,I,g,B,Q,E,i,e,c,a,n,r){return A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,c|=0,a|=0,a=y,y=y+336|0,OI(a,64,0,n|=0,r|=0),gB(a+64|0,a),MI(a,64),bg(a+64|0,i,e,c),i=0|Ug(0,0,0|e,0|c),o(),bg(a+64|0,34624,15&i,0),rI(A,B,Q,E,n,1,r),bg(a+64|0,A,Q,E),n=0|Ug(0,0,0|Q,0|E),o(),bg(a+64|0,34624,15&n,0),LI(a+320|0,e,c),bg(a+64|0,a+320|0,8,0),LI(a+320|0,Q,E),bg(a+64|0,a+320|0,8,0),IB(a+64|0,I),MI(a+64|0,256),0|g&&(C[g>>2]=16,C[g+4>>2]=0),y=a,0}function wA(A){var I,g,E=0,i=0,e=0;I=y,g=y=y+63&-64,y=y+48|0,i=A|=0,e=(E=g)+32|0;do{B[E>>0]=0|B[i>>0],E=E+1|0,i=i+1|0}while((0|E)<(0|e));E=Q[A+36+4>>0]|Q[A+36+4+1>>0]<<8|Q[A+36+4+2>>0]<<16|Q[A+36+4+3>>0]<<24,C[g+32>>2]=Q[A+36>>0]|Q[A+36+1>>0]<<8|Q[A+36+2>>0]<<16|Q[A+36+3>>0]<<24,C[g+32+4>>2]=E,function(A,I,g,B){!function(A,I,g,B){fI(A|=0,I|=0,40,0,g|=0,0,B|=0)}(A|=0,I|=0,g|=0,B|=0)}(g,g,A+32|0,A),i=g,e=(E=A)+32|0;do{B[E>>0]=0|B[i>>0],E=E+1|0,i=i+1|0}while((0|E)<(0|e));i=0|C[g+32>>2],e=0|C[g+32+4>>2],B[A+36>>0]=i,B[A+36+1>>0]=i>>8,B[A+36+2>>0]=i>>16,B[A+36+3>>0]=i>>24,B[A+36+4>>0]=e,B[A+36+4+1>>0]=e>>8,B[A+36+4+2>>0]=e>>16,B[A+36+4+3>>0]=e>>24,Mg(A),y=I}function yA(A,I){A|=0,I|=0;var g=0,C=0,E=0,i=0,e=0;g=0;do{B[A+g>>0]=(0|Q[I+(g>>>3)>>0])>>>(7&g)&1,g=g+1|0}while(256!=(0|g));e=0;do{E=A+e|0;A:do{if(0|B[E>>0]){i=1;do{if((g=i+e|0)>>>0>=256)break A;I=0|B[A+g>>0];I:do{if(I<<24>>24){if(((C=I<<24>>24<>0])|0)<16){B[E>>0]=C+I,B[A+g>>0]=0;break}if((I-C|0)<-15)break A;for(B[E>>0]=I-C;0|B[(I=A+g|0)>>0];)if(B[I>>0]=0,(g=g+1|0)>>>0>=256)break I;B[I>>0]=1}}while(0);i=i+1|0}while(i>>>0<7)}}while(0);e=e+1|0}while(256!=(0|e))}function sA(A,I,g,B,C,Q,E,i,e,o,c){var a;A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0,i|=0,e|=0,a=y,y=y+352|0,QB(a+16|0,o|=0,c|=0),gB(a+80|0,a+16|0),MI(a+16|0,64),bg(a+80|0,E,i,e),LI(a+336|0,i,e),bg(a+80|0,a+336|0,8,0),bg(a+80|0,g,B,C),LI(a+336|0,B,C),bg(a+80|0,a+336|0,8,0),IB(a+80|0,a),MI(a+80|0,256),I=0|tB(a,Q),MI(a,16);do{if(A){if(I){YA(0|A,0,0|B),I=-1;break}zI(A,g,B,C,o,c),I=0;break}}while(0);return y=a,0|I}function hA(A,I,g,B,Q,E,i){var e,o;A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,e=y,o=y=y+63&-64,y=y+560|0,Jg(o+192|0,i|=0),RI(o+128|0,E,32,0),P(o+192|0,o+128+32|0,32,0),P(o+192|0,g,B,Q),VI(o+192|0,o+64|0),YI(A+32|0,E+32|0,32),p(o+64|0),iA(o+400|0,o+64|0),sI(A,o+400|0),Jg(o+192|0,i),P(o+192|0,A,64,0),P(o+192|0,g,B,Q),VI(o+192|0,o),p(o),Tg(o+128|0),h(A+32|0,o,o+128|0,o+64|0),MI(o+128|0,64),MI(o+64|0,64),0|I&&(C[I>>2]=64,C[I+4>>2]=0),y=e}function DA(A,I,g,B,Q,i){A|=0,I|=0,g|=0,B|=0,Q|=0,i|=0;var e=0;do{if(I){if(e=(0|C[A+24>>2])-(0|C[A+20>>2])|0,i){e=B+-1+e|0;break}e=e+((0==(0|B))<<31>>31)|0;break}if(!(g<<24>>24)){e=B+-1|0;break}if(e=0|E(0|C[A+20>>2],255&g),i){e=B+-1+e|0;break}e=e+((0==(0|B))<<31>>31)|0;break}while(0);return Qg(0|Q,0,0|Q,0),Qg(0|o(),0,0|e,0),i=0|Ug(e+-1|0,0,0|o(),0),Q=0|o(),0==(0|I)|g<<24>>24==3?(e=0,B=0):(e=0|E(0|C[A+20>>2],1+(255&g)|0),B=0),A=0|Ag(0|(I=0|vg(0|i,0|Q,0|e,0|B)),0|(g=0|o()),0|C[A+24>>2],0),o(),0|A}function FA(A,I,g,B,Q){B|=0,Q|=0;var E,i,e,o=0;if(e=y,i=y=y+63&-64,y=y+64|0,(g|=0)>>>0>0|0==(0|g)&(I|=0)>>>0>4294967295|(E=0|ZA(A|=0))>>>0>127)C[8678]=28,g=-1;else{o=(g=i)+60|0;do{C[g>>2]=0,g=g+4|0}while((0|g)<(0|o));(o=0|function(A){var I;return(I=0|F(A|=0))&&3&C[I+-4>>2]?(YA(0|I,0,0|A),0|I):0|I}(E))?(C[i+16>>2]=o,C[i+8>>2]=o,C[i>>2]=o,C[i+20>>2]=E,C[i+12>>2]=E,C[i+4>>2]=E,C[i+24>>2]=0,C[i+24+4>>2]=0,C[i+24+8>>2]=0,C[i+24+12>>2]=0,0|L(i,A,Q)?(C[8678]=28,g=-1):g=(0|C[i+40>>2])==(0|I)?(0|C[i+44>>2])!=(B>>>10|0)&1:1,d(o)):g=-1}return y=e,0|g}function pA(A,I){I|=0;var g,B,Q=0,i=0,e=0;if(B=y,g=y=y+63&-64,y=y+48|0,!(Q=0|oA(A|=0)))if((I+-1|0)>>>0<=1){if(i=0|C[A+44>>2],Q=0|C[A+48>>2],e=0|E(i=((i>>>0>>0?Q<<3:i)>>>0)/(Q<<2>>>0)|0,Q<<2),C[g>>2]=0,C[g+8>>2]=C[A+40>>2],C[g+12>>2]=-1,C[g+16>>2]=e,C[g+20>>2]=i,C[g+24>>2]=i<<2,C[g+28>>2]=Q,C[g+32>>2]=C[A+52>>2],C[g+36>>2]=I,!(Q=0|function(A,I){A|=0,I|=0;var g,B,Q=0;B=y,g=y=y+63&-64,y=y+80|0;do{if(0==(0|A)|0==(0|I))Q=-25;else{if(Q=0|F(C[A+20>>2]<<3),C[A+4>>2]=Q,Q){if(Q=0|bA(A,0|C[A+16>>2])){ug(A,0|C[I+56>>2]);break}j(g,I,0|C[A+36>>2]),MI(g+64|0,8),KA(g,A),MI(g,72),Q=0;break}Q=-22}}while(0);return y=B,0|Q}(g,A))){if(0|C[g+8>>2]){Q=0;do{UA(g,Q),Q=Q+1|0}while(Q>>>0<(0|C[g+8>>2])>>>0)}!function(A,I){var g,B,Q=0,i=0;if(g=y,B=y=y+63&-64,y=y+2048|0,0!=(0|(A|=0))&0!=(0|(I|=0))){if(fB(B+1024|0,(0|C[4+(0|C[I>>2])>>2])+(C[I+24>>2]<<10)-1024|0),(0|C[I+28>>2])>>>0>1){Q=1;do{i=(i=0|C[I+24>>2])-1+(0|E(i,Q))|0,SI(B+1024|0,(0|C[4+(0|C[I>>2])>>2])+(i<<10)|0),Q=Q+1|0}while(Q>>>0<(0|C[I+28>>2])>>>0)}!function(A,I){A|=0,I|=0;var g=0,B=0;g=0;do{LI(A+(g<<3)|0,0|C[(B=I+(g<<3)|0)>>2],0|C[B+4>>2]),g=g+1|0}while(128!=(0|g))}(B,B+1024|0),T(0|C[A>>2],0|C[A+4>>2],B,1024),MI(B+1024|0,1024),MI(B,1024),ug(I,0|C[A+56>>2])}y=g}(A,g),Q=0}}else Q=-26;return y=B,0|Q}function uA(A,I,g,B,C,Q){var E,i;return I|=0,g|=0,B|=0,C|=0,Q|=0,i=y,E=y=y+63&-64,y=y+592|0,0!=(0|pI(32+(A|=0)|0))&&0==(0|GA(A))&&0!=(0|WI(C))&&0==(0|GA(C))&&0==(0|rA(E+424|0,C))?(Jg(E+96|0,Q),P(E+96|0,A,32,0),P(E+96|0,C,32,0),P(E+96|0,I,g,B),VI(E+96|0,E+32|0),p(E+32|0),N(E+304|0,E+32|0,E+424|0,A+32|0),sI(E,E+304|0),g=0|rB(E,A),g=0|((0|E)==(0|A)?-1:g)|EI(A,E,32)):g=-1,y=i,0|g}function HA(A,I){A|=0,I|=0;var g=0,Q=0;A:do{if(255&I){if(3&A)do{if((Q=0|B[A>>0])<<24>>24==0||Q<<24>>24==(255&I)<<24>>24)break A;A=A+1|0}while(0!=(3&A|0));Q=0|E(255&I,16843009),g=0|C[A>>2];I:do{if(!((-2139062144&g^-2139062144)&g+-16843009))do{if((-2139062144&(g^=Q)^-2139062144)&g+-16843009|0)break I;g=0|C[(A=A+4|0)>>2]}while(!((-2139062144&g^-2139062144)&g+-16843009|0))}while(0);for(;(Q=0|B[A>>0])<<24>>24!=0&&Q<<24>>24!=(255&I)<<24>>24;)A=A+1|0}else A=A+(0|ZA(A))|0}while(0);return 0|A}function kA(A,I){I|=0;var g,Q=0,E=0;g=y,y=y+192|0,PI(A|=0),E=128+(Q=g+64|0)|0;do{C[Q>>2]=909522486,Q=Q+4|0}while((0|Q)<(0|E));B[g+64>>0]=54^B[I>>0],Q=1;do{B[(E=g+64+Q|0)>>0]=B[E>>0]^B[I+Q>>0],Q=Q+1|0}while(32!=(0|Q));P(A,g+64|0,128,0),PI(A+208|0),E=128+(Q=g+64|0)|0;do{C[Q>>2]=1549556828,Q=Q+4|0}while((0|Q)<(0|E));B[g+64>>0]=92^B[I>>0],Q=1;do{B[(E=g+64+Q|0)>>0]=B[E>>0]^B[I+Q>>0],Q=Q+1|0}while(32!=(0|Q));P(A+208|0,g+64|0,128,0),MI(g+64|0,128),MI(g,64),y=g}function lA(A,I,g){var B,Q,E,i,e,o,c,a,n;A|=0,g|=0,n=(0|C[4+(I|=0)>>2])-(0|C[g+4>>2])|0,a=(0|C[I+8>>2])-(0|C[g+8>>2])|0,c=(0|C[I+12>>2])-(0|C[g+12>>2])|0,o=(0|C[I+16>>2])-(0|C[g+16>>2])|0,e=(0|C[I+20>>2])-(0|C[g+20>>2])|0,i=(0|C[I+24>>2])-(0|C[g+24>>2])|0,E=(0|C[I+28>>2])-(0|C[g+28>>2])|0,Q=(0|C[I+32>>2])-(0|C[g+32>>2])|0,B=(0|C[I+36>>2])-(0|C[g+36>>2])|0,C[A>>2]=(0|C[I>>2])-(0|C[g>>2]),C[A+4>>2]=n,C[A+8>>2]=a,C[A+12>>2]=c,C[A+16>>2]=o,C[A+20>>2]=e,C[A+24>>2]=i,C[A+28>>2]=E,C[A+32>>2]=Q,C[A+36>>2]=B}function _A(A,I,g){var B,Q,E,i,e,o,c,a,n;A|=0,I|=0,n=(0|C[4+(g|=0)>>2])+(0|C[I+4>>2])|0,a=(0|C[g+8>>2])+(0|C[I+8>>2])|0,c=(0|C[g+12>>2])+(0|C[I+12>>2])|0,o=(0|C[g+16>>2])+(0|C[I+16>>2])|0,e=(0|C[g+20>>2])+(0|C[I+20>>2])|0,i=(0|C[g+24>>2])+(0|C[I+24>>2])|0,E=(0|C[g+28>>2])+(0|C[I+28>>2])|0,Q=(0|C[g+32>>2])+(0|C[I+32>>2])|0,B=(0|C[g+36>>2])+(0|C[I+36>>2])|0,C[A>>2]=(0|C[g>>2])+(0|C[I>>2]),C[A+4>>2]=n,C[A+8>>2]=a,C[A+12>>2]=c,C[A+16>>2]=o,C[A+20>>2]=e,C[A+24>>2]=i,C[A+28>>2]=E,C[A+32>>2]=Q,C[A+36>>2]=B}function GA(A){A|=0;var I,g,C=0,E=0,i=0,e=0;I=y,g=y=y+63&-64,y=y+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,i=0;do{C=0|B[A+i>>0],E=0;do{B[(e=g+E|0)>>0]=B[e>>0]|B[32096+(E<<5)+i>>0]^C,E=E+1|0}while(7!=(0|E));i=i+1|0}while(31!=(0|i));C=127&B[A+31>>0],E=0;do{B[(e=g+E|0)>>0]=B[e>>0]|C^B[32096+(E<<5)+31>>0],E=E+1|0}while(7!=(0|E));C=0,E=0;do{E=(0|Q[g+C>>0])-1|E,C=C+1|0}while(7!=(0|C));return y=I,E>>>8&1|0}function dA(A,I,g,B,Q,E,i,e,o,c,a,n){return A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,o|=0,c|=0,c=y,y=y+336|0,QB(c,a|=0,n|=0),gB(c+64|0,c),MI(c,64),bg(c+64|0,i,e,o),LI(c+320|0,e,o),bg(c+64|0,c+320|0,8,0),zI(A,B,Q,E,a,n),bg(c+64|0,A,Q,E),LI(c+320|0,Q,E),bg(c+64|0,c+320|0,8,0),IB(c+64|0,I),MI(c+64|0,256),0|g&&(C[g>>2]=16,C[g+4>>2]=0),y=c,0}function YA(A,I,g){I|=0;var Q,E=0;if(Q=(A|=0)+(g|=0)|0,I&=255,(0|g)>=67){for(;3&A;)B[A>>0]=I,A=A+1|0;for(E=I|I<<8|I<<16|I<<24;(0|A)<=((-4&Q)-64|0);)C[A>>2]=E,C[A+4>>2]=E,C[A+8>>2]=E,C[A+12>>2]=E,C[A+16>>2]=E,C[A+20>>2]=E,C[A+24>>2]=E,C[A+28>>2]=E,C[A+32>>2]=E,C[A+36>>2]=E,C[A+40>>2]=E,C[A+44>>2]=E,C[A+48>>2]=E,C[A+52>>2]=E,C[A+56>>2]=E,C[A+60>>2]=E,A=A+64|0;for(;(0|A)<(-4&Q|0);)C[A>>2]=E,A=A+4|0}for(;(0|A)<(0|Q);)B[A>>0]=I,A=A+1|0;return Q-g|0}function MA(A,I){A|=0;var g=0;g=67108863&(0|Vg(I|=0)),C[A>>2]=g,g=(0|Vg(I+3|0))>>>2&67108611,C[A+4>>2]=g,g=(0|Vg(I+6|0))>>>4&67092735,C[A+8>>2]=g,g=(0|Vg(I+9|0))>>>6&66076671,C[A+12>>2]=g,g=(0|Vg(I+12|0))>>>8&1048575,C[A+16>>2]=g,C[A+20>>2]=0,C[A+20+4>>2]=0,C[A+20+8>>2]=0,C[A+20+12>>2]=0,C[A+20+16>>2]=0,g=0|Vg(I+16|0),C[A+40>>2]=g,g=0|Vg(I+20|0),C[A+44>>2]=g,g=0|Vg(I+24|0),C[A+48>>2]=g,I=0|Vg(I+28|0),C[A+52>>2]=I,C[A+56>>2]=0,C[A+56+4>>2]=0,B[A+80>>0]=0}function SA(A,I,g,B,Q,E){A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0;var i=0,e=0,c=0;do{if(Q>>>0<0|0==(0|Q)&B>>>0<64||(i=0|vg(0|B,0|Q,-64,-1),(e=0|o())>>>0>0|0==(0|e)&i>>>0>4294967231))c=10;else{if(0|dg(g,g+64|0,i,e,E)){if(!A){c=10;break}YA(0|A,0,0|i),c=10;break}0|I&&(C[I>>2]=i,C[I+4>>2]=e),A?(YI(0|A,g+64|0,0|i),B=0):B=0}}while(0);return 10==(0|c)&&(I?(C[I>>2]=0,C[I+4>>2]=0,B=-1):B=-1),0|B}function UA(A,I){I|=0;var g,Q,E=0,i=0;if(g=y,Q=y=y+63&-64,y=y+32|0,0|(A|=0)&&0|(E=0|C[A+28>>2])){C[Q>>2]=I,i=0;do{if(B[Q+8>>0]=i,E){I=0;do{C[Q+4>>2]=I,C[Q+12>>2]=0,C[Q+16>>2]=C[Q>>2],C[Q+16+4>>2]=C[Q+4>>2],C[Q+16+8>>2]=C[Q+8>>2],C[Q+16+12>>2]=C[Q+12>>2],X(A,Q+16|0),I=I+1|0,E=0|C[A+28>>2]}while(I>>>0>>0)}else E=0;i=i+1|0}while(4!=(0|i))}y=g}function vA(A,I,g,Q){A|=0,g|=0,Q|=0;var E,i,e=0;if(E=y,i=y=y+63&-64,y=y+192|0,((I|=0)-1&255)>63&&SB(),!((Q+-1&255)>63|0==(0|g))){B[i+128>>0]=I,B[i+128+1>>0]=Q,B[i+128+2>>0]=1,B[i+128+3>>0]=1,Wg(i+128+4|0),LI(i+128+8|0,0,0),e=48+(I=i+128+16|0)|0;do{C[I>>2]=0,I=I+4|0}while((0|I)<(0|e));return XA(A,i+128|0),YA(i+(255&Q)|0,0,128-(255&Q)|0),BA(0|i,0|g,255&Q|0),$(A,i,128,0),MI(i,128),void(y=E)}SB()}function bA(A,I){A|=0,I|=0;var g,B,Q=0;B=y,g=y=y+63&-64,y=y+16|0;do{if(0!=(0|A)&&0!=(0|I)&&1024==(0|(I<<10>>>0)/(I>>>0))&&(Q=0|F(12),C[A>>2]=Q,0!=(0|Q))){if(C[Q+4>>2]=0,C[Q>>2]=0,Q=0|wg(g,I<<10),C[8678]=Q,Q)C[g>>2]=0;else if(0|(Q=0|C[g>>2])){C[C[A>>2]>>2]=Q,C[4+(0|C[A>>2])>>2]=Q,C[8+(0|C[A>>2])>>2]=I<<10,Q=0;break}d(0|C[A>>2]),C[A>>2]=0,Q=-22}else Q=-22}while(0);return y=B,0|Q}function JA(A,I,g,B,E,i){var e,o,c;return A|=0,I|=0,g|=0,B|=0,i|=0,o=y,e=y=y+63&-64,y=y+32|0,c=Q[4+(E|=0)>>0]|Q[E+4+1>>0]<<8|Q[E+4+2>>0]<<16|Q[E+4+3>>0]<<24,C[e+16>>2]=Q[E>>0]|Q[E+1>>0]<<8|Q[E+2>>0]<<16|Q[E+3>>0]<<24,C[e+16+4>>2]=c,C[e+16+8>>2]=0,C[e+16+8+4>>2]=0,LI(e,g,B),C[e+8>>2]=0,C[e+8+4>>2]=0,(I+-16|0)>>>0>48?(C[8678]=28,g=-1):g=0|function(A,I,g,B,C){return g|=0,((I|=0)-1|0)>>>0>63?g=-1:(function(A,I,g,B,C){var Q,E;if(I|=0,g|=0,B|=0,C|=0,Q=y,E=y=y+63&-64,y=y+368|0,(A|=0)||SB(),(g+-1&255)>63&&SB(),I)return cA(E,g,I,B,C),$(E,0,0,0),b(E,A,g),void(y=Q);SB()}(A|=0,g,255&I,B|=0,C|=0),g=0),0|g}(A,I,i,e,e+16|0),y=o,0|g}function PA(A,I,g,B,E,i,e,c,a,n,r){var t;return A|=0,I|=0,g|=0,B|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0,r|=0,t=y,y=y+48|0,C[t+32>>2]=0,R(t,n,r),I=Q[n+16+4>>0]|Q[n+16+4+1>>0]<<8|Q[n+16+4+2>>0]<<16|Q[n+16+4+3>>0]<<24,C[t+32+4>>2]=Q[n+16>>0]|Q[n+16+1>>0]<<8|Q[n+16+2>>0]<<16|Q[n+16+3>>0]<<24,C[t+32+4+4>>2]=I,I=0|function(A,I,g,B,C,Q,E,i,e,c){var a;A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0,i|=0,a=y,y=y+352|0,gg(a+16|0,64,0,e|=0,c|=0),gB(a+80|0,a+16|0),MI(a+16|0,64),bg(a+80|0,Q,E,i),Q=0|Ug(0,0,0|E,0|i),o(),bg(a+80|0,34640,15&Q,0),bg(a+80|0,I,g,B),Q=0|Ug(0,0,0|g,0|B),o(),bg(a+80|0,34640,15&Q,0),LI(a+336|0,E,i),bg(a+80|0,a+336|0,8,0),LI(a+336|0,g,B),bg(a+80|0,a+336|0,8,0),IB(a+80|0,a),MI(a+80|0,256),E=0|tB(a,C),MI(a,16);do{if(A){if(E){YA(0|A,0,0|g),E=-1;break}mI(A,I,g,B,e,1,c),E=0;break}}while(0);return y=a,0|E}(A,g,B,E,i,e,c,a,t+32|0,t),MI(t,32),y=t,0|I}function RA(A,I,g,Q,E,i,e){I|=0,g|=0,Q|=0,E|=0,i|=0,e|=0;var o,c,a,n=0;a=y,o=y=y+63&-64,y=y+16|0,c=128+(n=A|=0)|0;do{B[n>>0]=0,n=n+1|0}while((0|n)<(0|c));do{if(!((i|Q)>>>0>0|0==(i|Q|0)&(E|g)>>>0>4294967295|e>>>0>2147483648)){if(i>>>0<0|0==(0|i)&E>>>0<3|e>>>0<8192){C[8678]=28,g=-1;break}Cg(o,16),g=(0!=(0|Gg(E,e>>>10,I,g,o,A)))<<31>>31;break}C[8678]=22,g=-1}while(0);return y=a,0|g}function NA(A,I,g,B,E,i,e,c,a,n,r,t){return A|=0,I|=0,g|=0,B|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0,r|=0,t|=0,n=y,y=y+48|0,C[n+32>>2]=0,R(n,r,t),t=Q[r+16+4>>0]|Q[r+16+4+1>>0]<<8|Q[r+16+4+2>>0]<<16|Q[r+16+4+3>>0]<<24,C[n+32+4>>2]=Q[r+16>>0]|Q[r+16+1>>0]<<8|Q[r+16+2>>0]<<16|Q[r+16+3>>0]<<24,C[n+32+4+4>>2]=t,function(A,I,g,B,Q,E,i,e,c,a,n){var r;A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,c|=0,r=y,y=y+336|0,gg(r,64,0,a|=0,n|=0),gB(r+64|0,r),MI(r,64),bg(r+64|0,i,e,c),i=0|Ug(0,0,0|e,0|c),o(),bg(r+64|0,34640,15&i,0),mI(A,B,Q,E,a,1,n),bg(r+64|0,A,Q,E),a=0|Ug(0,0,0|Q,0|E),o(),bg(r+64|0,34640,15&a,0),LI(r+320|0,e,c),bg(r+64|0,r+320|0,8,0),LI(r+320|0,Q,E),bg(r+64|0,r+320|0,8,0),IB(r+64|0,I),MI(r+64|0,256),0|g&&(C[g>>2]=16,C[g+4>>2]=0),y=r}(A,I,g,B,E,i,e,c,a,n+32|0,n),MI(n,32),y=n,0}function mA(A,I,g,Q,E){A|=0,I|=0,g|=0,Q|=0,E|=0;var i=0,e=0;A:do{if(E){for(e=0|C[g>>2];;){if(e>>>0>=I>>>0){i=4;break}if((i=0|B[A+e>>0])<<24>>24!=61){if(!Q){i=9;break}if(!(0|qg(Q,i<<24>>24))){i=9;break}}else E=E+-1|0;if(e=e+1|0,C[g>>2]=e,!E){E=0;break A}}if(4==(0|i)){C[8678]=68,E=-1;break}if(9==(0|i)){C[8678]=28,E=-1;break}}else E=0}while(0);return 0|E}function LA(A,I,g,Q,E,i,e){I|=0,g|=0,Q|=0,E|=0,i|=0,e|=0;var o,c,a,n=0;a=y,o=y=y+63&-64,y=y+16|0,c=128+(n=A|=0)|0;do{B[n>>0]=0,n=n+1|0}while((0|n)<(0|c));do{if(!((i|Q)>>>0>0|0==(i|Q|0)&(E|g)>>>0>4294967295|e>>>0>2147483648)){if(0==(0|E)&0==(0|i)|e>>>0<8192){C[8678]=28,g=-1;break}Cg(o,16),g=(0!=(0|lg(E,e>>>10,I,g,o,A)))<<31>>31;break}C[8678]=22,g=-1}while(0);return y=a,0|g}function xA(A,I){var g,B,Q,E,i,e,o,c,a;A|=0,a=0-(0|C[4+(I|=0)>>2])|0,c=0-(0|C[I+8>>2])|0,o=0-(0|C[I+12>>2])|0,e=0-(0|C[I+16>>2])|0,i=0-(0|C[I+20>>2])|0,E=0-(0|C[I+24>>2])|0,Q=0-(0|C[I+28>>2])|0,B=0-(0|C[I+32>>2])|0,g=0-(0|C[I+36>>2])|0,C[A>>2]=0-(0|C[I>>2]),C[A+4>>2]=a,C[A+8>>2]=c,C[A+12>>2]=o,C[A+16>>2]=e,C[A+20>>2]=i,C[A+24>>2]=E,C[A+28>>2]=Q,C[A+32>>2]=B,C[A+36>>2]=g}function KA(A,I){A|=0;var g,B,Q=0;if(g=y,B=y=y+63&-64,y=y+1024|0,0|C[28+(I|=0)>>2]){Q=0;do{Pg(A+64|0,0),Pg(A+68|0,Q),T(B,1024,A,72),xI((0|C[4+(0|C[I>>2])>>2])+((0|E(0|C[I+24>>2],Q))<<10)|0,B),Pg(A+64|0,1),T(B,1024,A,72),xI((0|C[4+(0|C[I>>2])>>2])+(1+(0|E(0|C[I+24>>2],Q))<<10)|0,B),Q=Q+1|0}while(Q>>>0<(0|C[I+28>>2])>>>0)}MI(B,1024),y=g}function XA(A,I){I|=0;var g=0,C=0,E=0,i=0;!function(A){var I,g=0,C=0;C=32352,I=64+(g=A|=0)|0;do{B[g>>0]=0|B[C>>0],g=g+1|0,C=C+1|0}while((0|g)<(0|I));YA(A+64|0,0,293)}(A|=0),g=0;do{i=0|qI(I+(g<<3)|0),E=0|o(),i=(Q[(C=A+(g<<3)|0)>>0]|Q[C+1>>0]<<8|Q[C+2>>0]<<16|Q[C+3>>0]<<24)^i,E=(Q[C+4>>0]|Q[C+4+1>>0]<<8|Q[C+4+2>>0]<<16|Q[C+4+3>>0]<<24)^E,B[C>>0]=i,B[C+1>>0]=i>>8,B[C+2>>0]=i>>16,B[C+3>>0]=i>>24,B[C+4>>0]=E,B[C+4+1>>0]=E>>8,B[C+4+2>>0]=E>>16,B[C+4+3>>0]=E>>24,g=g+1|0}while(8!=(0|g))}function jA(A){var I,g,B,C,E,i,c=0;return E=0|Q[7+(A|=0)>>0],i=0|rg(0|Q[A+6>>0],0,8),c=0|o(),C=0|rg(0|Q[A+5>>0],0,16),c=0|c|o(),B=0|rg(0|Q[A+4>>0],0,24),c=0|(c=0|c|o())|Q[A+3>>0],g=0|rg(0|Q[A+2>>0],0,40),c=0|c|o(),I=0|rg(0|Q[A+1>>0],0,48),c=0|c|o(),A=0|rg(0|Q[A>>0],0,56),e(0|c|o()|0),i|E|C|B|g|I|A|0}function TA(A,I,g,B,Q,E){I|=0,Q|=0,E|=0;var i,e=0;return i=y,e=y=y+63&-64,y=y+16|0,YI(64+(A|=0)|0,0|(g|=0),0|(B|=0)),kg(A,e,A+64|0,B,Q,E),64==(0|C[e>>2])&0==(0|C[e+4>>2])?0|I?(e=0|vg(0|B,0|Q,64,0),B=0|o(),C[I>>2]=e,C[I+4>>2]=B,B=0):B=0:(0|I&&(C[I>>2]=0,C[I+4>>2]=0),YA(0|A,0,B+64|0),B=-1),y=i,0|B}function qA(A,I){I|=0;var g,Q=0,E=0,i=0,e=0;g=0|B[(A|=0)>>0];A:do{if((g+-48&255)<=9){for(E=g,i=0,e=A;;){if(!(i>>>0<429496730&((E=(E<<24>>24)-48|0)>>>0>~(Q=10*i|0)>>>0^1))){Q=0;break A}if(i=(E>>>0>~Q>>>0?0:E)+Q|0,((E=0|B[(Q=e+1|0)>>0])-48&255)>9)break;e=Q}(0|Q)!=(0|A)&&(0|e)==(0|A)|g<<24>>24!=48?C[I>>2]=i:Q=0}else Q=0}while(0);return 0|Q}function VA(A){return((0-((0-(95^(A|=0))|0)>>>8&63^63|(0-(45^A)|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-(65^A)|0)>>>8|(0-(95^A)|0)>>>8&63^63|(0-(45^A)|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 zA(A){return((0-((0-(47^(A|=0))|0)>>>8&63^63|(0-(43^A)|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-(65^A)|0)>>>8|(0-(47^A)|0)>>>8&63^63|(0-(43^A)|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 WA(A,I){I|=0;var g=0,B=0;if(g=0|yg(0|C[72+(A|=0)>>2],0|C[A+72+4>>2],3),o(),(127&g)>>>0<112)112-(127&g)|0&&BA(A+80+(127&g)|0,33056,112-(127&g)|0);else{128-(127&g)|0&&BA(A+80+(127&g)|0,33056,128-(127&g)|0),D(A,A+80|0,I,I+640|0),B=112+(g=A+80|0)|0;do{C[g>>2]=0,g=g+4|0}while((0|g)<(0|B))}NI(A+192|0,A+64|0,16),D(A,A+80|0,I,I+640|0)}function OA(A,I){var g,B,Q,E,i,e,o,c,a;A|=0,a=0|C[4+(I|=0)>>2],c=0|C[I+8>>2],o=0|C[I+12>>2],e=0|C[I+16>>2],i=0|C[I+20>>2],E=0|C[I+24>>2],Q=0|C[I+28>>2],B=0|C[I+32>>2],g=0|C[I+36>>2],C[A>>2]=C[I>>2],C[A+4>>2]=a,C[A+8>>2]=c,C[A+12>>2]=o,C[A+16>>2]=e,C[A+20>>2]=i,C[A+24>>2]=E,C[A+28>>2]=Q,C[A+32>>2]=B,C[A+36>>2]=g}function ZA(A){A|=0;var I=0,g=0,Q=0;A:do{if(3&A)for(I=A,g=A;;){if(!(0|B[g>>0]))break A;if(!(3&(I=g=g+1|0))){I=g,Q=5;break}}else I=A,Q=5}while(0);if(5==(0|Q)){for(;!((-2139062144&(g=0|C[I>>2])^-2139062144)&g+-16843009);)I=I+4|0;if((255&g)<<24>>24)do{I=I+1|0}while(0!=(0|B[I>>0]))}return I-A|0}function $A(A,I){I|=0;var g=0;C[(A|=0)>>2]=1634760805,C[A+4>>2]=857760878,C[A+8>>2]=2036477234,C[A+12>>2]=1797285236,g=0|Vg(I),C[A+16>>2]=g,g=0|Vg(I+4|0),C[A+20>>2]=g,g=0|Vg(I+8|0),C[A+24>>2]=g,g=0|Vg(I+12|0),C[A+28>>2]=g,g=0|Vg(I+16|0),C[A+32>>2]=g,g=0|Vg(I+20|0),C[A+36>>2]=g,g=0|Vg(I+24|0),C[A+40>>2]=g,I=0|Vg(I+28|0),C[A+44>>2]=I}function AI(A,I,g){I|=0,g|=0;var C=0;B[7+(A|=0)>>0]=I,C=0|yg(0|I,0|g,8),o(),B[A+6>>0]=C,C=0|yg(0|I,0|g,16),o(),B[A+5>>0]=C,C=0|yg(0|I,0|g,24),o(),B[A+4>>0]=C,B[A+3>>0]=g,C=0|yg(0|I,0|g,40),o(),B[A+2>>0]=C,C=0|yg(0|I,0|g,48),o(),B[A+1>>0]=C,g=0|yg(0|I,0|g,56),o(),B[A>>0]=g}function II(A,I,g){var B,C;g|=0,B=y,C=y=y+63&-64,y=y+48|0,_A(A|=0,40+(I|=0)|0,I),lA(A+40|0,I+40|0,I),u(A+80|0,A,g+40|0),u(A+40|0,A+40|0,g),u(A+120|0,g+120|0,I+120|0),u(A,I+80|0,g+80|0),_A(C,A,A),lA(A,A+80|0,A+40|0),_A(A+40|0,A+80|0,A+40|0),lA(A+80|0,C,A+120|0),_A(A+120|0,C,A+120|0),y=B}function gI(A,I,g){var B,C;g|=0,B=y,C=y=y+63&-64,y=y+48|0,_A(A|=0,40+(I|=0)|0,I),lA(A+40|0,I+40|0,I),u(A+80|0,A,g),u(A+40|0,A+40|0,g+40|0),u(A+120|0,g+120|0,I+120|0),u(A,I+80|0,g+80|0),_A(C,A,A),lA(A,A+80|0,A+40|0),_A(A+40|0,A+80|0,A+40|0),_A(A+80|0,C,A+120|0),lA(A+120|0,C,A+120|0),y=B}function BI(A,I,g){var B,C;g|=0,B=y,C=y=y+63&-64,y=y+48|0,_A(A|=0,40+(I|=0)|0,I),lA(A+40|0,I+40|0,I),u(A+80|0,A,g+40|0),u(A+40|0,A+40|0,g),u(A+120|0,g+80|0,I+120|0),_A(C,I+80|0,I+80|0),lA(A,A+80|0,A+40|0),_A(A+40|0,A+80|0,A+40|0),lA(A+80|0,C,A+120|0),_A(A+120|0,C,A+120|0),y=B}function CI(A,I,g){var B,C;g|=0,B=y,C=y=y+63&-64,y=y+48|0,_A(A|=0,40+(I|=0)|0,I),lA(A+40|0,I+40|0,I),u(A+80|0,A,g),u(A+40|0,A+40|0,g+40|0),u(A+120|0,g+80|0,I+120|0),_A(C,I+80|0,I+80|0),lA(A,A+80|0,A+40|0),_A(A+40|0,A+80|0,A+40|0),_A(A+80|0,C,A+120|0),lA(A+120|0,C,A+120|0),y=B}function QI(A,I){A|=0,I|=0;var g,C,Q=0;g=y,C=y=y+63&-64,y=y+208|0,Q=0;do{B[A+Q>>0]=0|B[I+Q>>0],Q=Q+1|0}while(32!=(0|Q));return B[A>>0]=-8&B[A>>0],B[A+31>>0]=63&B[A+31>>0]|64,iA(C+40|0,A),function(A,I,g){var B,C;A|=0,B=y,C=y=y+63&-64,y=y+96|0,_A(C+48|0,g|=0,I|=0),lA(C,g,I),W(C,C),u(A,C+48|0,C),y=B}(C,C+40+40|0,C+40+80|0),CA(A,C),y=g,0}function EI(A,I,g){var E,i;if(A|=0,I|=0,g|=0,E=y,i=y=y+63&-64,y=y+16|0,C[i+4>>2]=A,C[i>>2]=I,B[i+8>>0]=0,0|g){A=0;do{B[i+8>>0]=B[i+8>>0]|B[(0|C[i>>2])+A>>0]^B[(0|C[i+4>>2])+A>>0],A=A+1|0}while((0|A)!=(0|g))}return y=E,((511+(0|Q[i+8>>0])|0)>>>8&1)-1|0}function iI(A,I){A|=0;var g,Q,E=0;if(g=y,Q=y=y+63&-64,y=y+64|0,!(((I|=0)-1&255)>63)){B[Q>>0]=I,B[Q+1>>0]=0,B[Q+2>>0]=1,B[Q+3>>0]=1,Wg(Q+4|0),LI(Q+8|0,0,0),E=48+(I=Q+16|0)|0;do{C[I>>2]=0,I=I+4|0}while((0|I)<(0|E));return XA(A,Q),void(y=g)}SB()}function eI(A,I,g){var Q,E;A|=0,I|=0,g|=0,Q=y,E=y=y+63&-64,y=y+16|0,C[E+8>>2]=A,C[E+4>>2]=I,C[E>>2]=0,A=0;do{C[E>>2]=C[E>>2]|255&(B[(0|C[E+4>>2])+A>>0]^B[(0|C[E+8>>2])+A>>0]),A=A+1|0}while((0|A)!=(0|g));return y=Q,((511+(0|C[E>>2])|0)>>>8&1)-1|0}function oI(A,I,g){I|=0,g|=0;var C=0,E=0;C=0|B[(A|=0)>>0];A:do{if(C<<24>>24)for(;;){if(g=g+-1|0,!(C<<24>>24==(E=0|B[I>>0])<<24>>24&0!=(0|g)&E<<24>>24!=0))break A;if(I=I+1|0,!((C=0|B[(A=A+1|0)>>0])<<24>>24)){C=0;break}}else C=0}while(0);return(255&C)-(0|Q[I>>0])|0}function cI(A,I){A|=0,I|=0;var g,C,Q=0,i=0,e=0,o=0;for(g=y,C=y=y+63&-64,y=y+16|0,i=10;o=255&((e=I)+(0|E(I=(I>>>0)/10|0,-10))|48),B[C+(Q=i+-1|0)>>0]=o,e>>>0>9&0!=(0|Q);)i=Q;BA(0|A,C+Q|0,0|(o=11-i|0)),B[A+o>>0]=0,y=g}function aI(A,I){var g,B;g=y,B=y=y+63&-64,y=y+48|0,_(A|=0,I|=0),_(A+80|0,I+40|0),l(A+120|0,I+80|0),_A(A+40|0,I,I+40|0),_(B,A+40|0),_A(A+40|0,A+80|0,A),lA(A+80|0,A+80|0,A),lA(A,B,A+40|0),lA(A+120|0,A+120|0,A+80|0),y=g}function nI(A,I,g){var C,E;if(A|=0,I|=0,g|=0,E=y,C=y=y+63&-64,y=y+16|0,B[C>>0]=0,0|function(A,I,g){A|=0,I|=0;var C,E,i=0;if(E=y,C=y=y+63&-64,y=y+336|0,0|function(A){A|=0;var I,g,C=0,E=0,i=0,e=0;I=y,g=y=y+63&-64,y=y+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,i=0;do{C=0|B[A+i>>0],E=0;do{B[(e=g+E|0)>>0]=B[e>>0]|B[33184+(E<<5)+i>>0]^C,E=E+1|0}while(7!=(0|E));i=i+1|0}while(31!=(0|i));C=127&B[A+31>>0],E=0;do{B[(e=g+E|0)>>0]=B[e>>0]|C^B[33184+(E<<5)+31>>0],E=E+1|0}while(7!=(0|E));C=0,E=0;do{E=(0|Q[g+C>>0])-1|E,C=C+1|0}while(7!=(0|C));return y=I,E>>>8&1|0}(g|=0))i=-1;else{i=0;do{B[A+i>>0]=0|B[I+i>>0],i=i+1|0}while(32!=(0|i));for(B[A>>0]=-8&B[A>>0],B[A+31>>0]=63&B[A+31>>0]|64,U(C+288|0,g),Sg(C+240|0),Kg(C+192|0),OA(C+144|0,C+288|0),Sg(C+96|0),i=254,I=0;g=I,AA(C+240|0,C+144|0,g^=I=(0|Q[A+(i>>>3)>>0])>>>(7&i)&1),AA(C+192|0,C+96|0,g),lA(C+48|0,C+144|0,C+96|0),lA(C,C+240|0,C+192|0),_A(C+240|0,C+240|0,C+192|0),_A(C+192|0,C+144|0,C+96|0),u(C+96|0,C+48|0,C+240|0),u(C+192|0,C+192|0,C),_(C+48|0,C),_(C,C+240|0),_A(C+144|0,C+96|0,C+192|0),lA(C+192|0,C+96|0,C+192|0),u(C+240|0,C,C+48|0),lA(C,C,C+48|0),_(C+192|0,C+192|0),v(C+96|0,C),_(C+144|0,C+144|0),_A(C+48|0,C+48|0,C+96|0),u(C+96|0,C+288|0,C+192|0),u(C+192|0,C,C+48|0),i;)i=i+-1|0;AA(C+240|0,C+144|0,I),AA(C+192|0,C+96|0,I),W(C+192|0,C+192|0),u(C+240|0,C+240|0,C+192|0),CA(A,C+240|0),i=0}return y=E,0|i}(A,I,g))I=-1;else{I=0;do{B[C>>0]=B[C>>0]|B[A+I>>0],I=I+1|0}while(32!=(0|I));I=0-((511+(0|Q[C>>0])|0)>>>8&1)|0}return y=E,0|I}function rI(A,I,g,B,C,Q,E){A|=0,I|=0,C|=0,Q|=0,E|=0;var i,e=0;e=0|Ug(0,1,0|(e=0|yg(0|(e=0|vg(0|(g|=0),0|(B|=0),63,0)),0|o(),6)),0|o()),(i=0|o())>>>0<0|0==(0|i)&e>>>0>>0?SB():mI(A,I,g,B,C,Q,E)}function tI(A,I,g){A|=0,I|=0;var C,Q,E=0,i=0;Q=y,i=y=y+63&-64,y=y+64|0,RI(i,g|=0,32,0),E=i,C=(g=I)+32|0;do{B[g>>0]=0|B[E>>0],g=g+1|0,E=E+1|0}while((0|g)<(0|C));return MI(i,64),i=0|AB(A,I),y=Q,0|i}function fI(A,I,g,B,C,Q,E){var i,e;A|=0,I|=0,C|=0,E|=0,i=y,e=y=y+63&-64,y=y+80|0,0==(0|(g|=0))&0==(0|(B|=0))||(Pg(e+64|0,Q|=0),$A(e,E),UI(e,C,e+64|0),M(e,I,A,g,B),MI(e,64)),y=i}function wI(A,I,g){var C,Q;A|=0,C=y,Q=y=y+63&-64,y=y+160|0,RI(I|=0,g|=0,32,0),B[I>>0]=-8&B[I>>0],B[I+31>>0]=63&B[I+31>>0]|64,iA(Q,I),sI(A,Q),YI(0|I,0|g,32),YI(I+32|0,0|A,32),y=C}function yI(A,I,g,B){A|=0,I|=0,g|=0,B|=0;A:do{if(B>>>0>0|0==(0|B)&g>>>0>4294967295)C[8678]=22,g=-1;else{switch(0|oB(A,I,g)){case 0:g=0;break A;case-35:C[8678]=28}g=-1}}while(0);return 0|g}function sI(A,I){var g,C;A|=0,g=y,C=y=y+63&-64,y=y+144|0,W(C+96|0,80+(I|=0)|0),u(C+48|0,I,C+96|0),u(C,I+40|0,C+96|0),CA(A,C),I=(0|sg(C+48|0))<<7,B[A+31>>0]=I^(0|Q[A+31>>0]),y=g}function hI(A,I,g,B){A|=0,I|=0,g|=0,B|=0;A:do{if(B>>>0>0|0==(0|B)&g>>>0>4294967295)C[8678]=22,g=-1;else{switch(0|cB(A,I,g)){case 0:g=0;break A;case-35:C[8678]=28}g=-1}}while(0);return 0|g}function DI(A,I,g,B,C,Q,E,i){var e;return A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,e=y,y=y+32|0,0|jg(e,E|=0,i|=0)?B=-1:(B=0|ng(A,I,g,B,C,Q,e),MI(e,32)),y=e,0|B}function FI(A,I,g,B,C,Q,E,i){var e;return A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,e=y,y=y+32|0,0|jg(e,E|=0,i|=0)?B=-1:(tg(A,I,g,B,C,Q,e),MI(e,32),B=0),y=e,0|B}function pI(A){A|=0;var I=0,g=0,C=0,Q=0,E=0;for(Q=0,E=32,I=1;Q=(255&(g=0|B[A+(E=E+-1|0)>>0]))-(255&(C=0|B[32320+E>>0]))>>8&(I&=255)|255&Q,E;)I&=(65535+(255&(C^g))|0)>>>8;return 0!=(0|Q)|0}function uI(A,I,g,B){return B=0|vg(0|vg(0|(g|=0),0|(B|=0),0|(A|=0),0|(I|=0)),0|o(),0|(B=0|Qg(-2&(B=0|rg(0|A,0|I,1))|0,1&(0|o())|0,0|g,0)),0|o()),e(0|o()),0|B}function HI(A,I,g,B){A|=0,I|=0,g|=0,B|=0;do{if(!(g>>>0>64|(B+-1|0)>>>0>63)){if(0==(0|I)|0==(0|g)){iI(A,255&B),I=0;break}vA(A,255&B,I,255&g),I=0;break}I=-1}while(0);return 0|I}function kI(A){var I,g,B,C=0;return g=0|Q[(A|=0)>>0],B=0|rg(0|Q[A+1>>0],0,8),C=0|o(),I=0|rg(0|Q[A+2>>0],0,16),C=0|C|o(),A=0|rg(0|Q[A+3>>0],0,24),e(0|C|o()|0),B|g|I|A|0}function lI(A,I){A|=0,I|=0;var g,C,E=0;g=y,C=y=y+63&-64,y=y+16|0,B[C>>0]=0,E=0;do{B[C>>0]=B[C>>0]|B[A+E>>0],E=E+1|0}while((0|E)!=(0|I));return y=g,(511+(0|Q[C>>0])|0)>>>8&1|0}function _I(A,I,g){A|=0,I|=0;var B=0;(g|=0)?(B=0|Vg(g),C[A+48>>2]=B,g=0|Vg(g+4|0)):(C[A+48>>2]=0,g=0),C[A+52>>2]=g,B=0|Vg(I),C[A+56>>2]=B,B=0|Vg(I+4|0),C[A+60>>2]=B}function GI(A,I,g){var B,C;A|=0,I|=0,g|=0,B=y,C=y=y+63&-64,y=y+384|0,Lg(C,0,0,24),Rg(C,I,32,0),Rg(C,g,32,0),zg(C,A,24),y=B}function dI(A,I,g,B,C,Q,E){return I|=0,C|=0,Q|=0,E|=0,0|((B|=0)>>>0<0|0==(0|B)&(g|=0)>>>0<16?-1:0|DI(A|=0,I+16|0,I,g=0|vg(0|g,0|B,-16,-1),0|o(),C,Q,E))}function YI(A,I,g){var C=0;if((0|(I|=0))<(0|(A|=0))&(0|A)<(I+(g|=0)|0)){for(C=A,I=I+g|0,A=A+g|0;(0|g)>0;)I=I-1|0,g=g-1|0,B[(A=A-1|0)>>0]=0|B[I>>0];A=C}else BA(A,I,g);return 0|A}function MI(A,I){var g,Q;if(A|=0,I|=0,g=y,Q=y=y+63&-64,y=y+16|0,C[Q>>2]=A,0|I){A=0;do{B[(0|C[Q>>2])+A>>0]=0,A=A+1|0}while((0|A)!=(0|I))}y=g}function SI(A,I){A|=0,I|=0;var g=0,B=0,Q=0,E=0;g=0;do{E=I+(g<<3)|0,Q=C[4+(B=A+(g<<3)|0)>>2]^C[E+4>>2],C[B>>2]=C[B>>2]^C[E>>2],C[B+4>>2]=Q,g=g+1|0}while(128!=(0|g))}function UI(A,I,g){A|=0,I|=0,g=(g|=0)?0|Vg(g):0,C[A+48>>2]=g,g=0|Vg(I),C[A+52>>2]=g,g=0|Vg(I+4|0),C[A+56>>2]=g,I=0|Vg(I+8|0),C[A+60>>2]=I}function vI(A,I){var g,C;I|=0,C=y,y=y+64|0,function(A,I){var g;I|=0,g=y,y=y+64|0,VI(A|=0,g),P(A+208|0,g,64,0),VI(A+208|0,I),MI(g,64),y=g}(A|=0,C),A=C,g=I+32|0;do{B[I>>0]=0|B[A>>0],I=I+1|0,A=A+1|0}while((0|I)<(0|g));y=C}function bI(A){var I;return A|=0,((I=0|C[8808])+A|0)>>>0>(0|r())>>>0&&0==(0|f(I+A|0))?(C[8678]=48,0|(A=-1)):(C[8808]=I+A,0|(A=I))}function JI(A,I,g,B,C){var Q;A|=0,I|=0,g|=0,B|=0,Q=y,y=y+416|0,function(A,I){kA(A|=0,I|=0)}(Q,C|=0),function(A,I,g,B){xg(A|=0,I|=0,g|=0,B|=0)}(Q,I,g,B),vI(Q,A),y=Q}function PI(A){var I,g=0;C[64+(A|=0)>>2]=0,C[A+64+4>>2]=0,C[A+64+8>>2]=0,C[A+64+12>>2]=0,g=32352,I=A+64|0;do{C[A>>2]=C[g>>2],A=A+4|0,g=g+4|0}while((0|A)<(0|I))}function RI(A,I,g,B){var C,Q;A|=0,I|=0,g|=0,B|=0,C=y,Q=y=y+63&-64,y=y+208|0,PI(Q),P(Q,I,g,B),VI(Q,A),y=C}function NI(A,I,g){A|=0,I|=0;var B=0,Q=0;if((g|=0)>>>3|0){B=0;do{AI(A+(B<<3)|0,0|C[(Q=I+(B<<3)|0)>>2],0|C[Q+4>>2]),B=B+1|0}while((0|B)!=(g>>>3|0))}}function mI(A,I,g,B,C,Q,E){A|=0,I|=0,C|=0,Q|=0,E|=0,(B|=0)>>>0>0|0==(0|B)&(g|=0)>>>0>4294967295?SB():fI(A,I,g,B,C,Q,E)}function LI(A,I,g){I|=0,g|=0,B[(A|=0)>>0]=I,B[A+1>>0]=I>>8,B[A+2>>0]=I>>16,B[A+3>>0]=I>>24,B[A+4>>0]=g,B[A+4+1>>0]=g>>8,B[A+4+2>>0]=g>>16,B[A+4+3>>0]=g>>24}function xI(A,I){A|=0,I|=0;var g=0,B=0,Q=0,E=0;g=0;do{E=0|qI(I+(g<<3)|0),Q=0|o(),C[(B=A+(g<<3)|0)>>2]=E,C[B+4>>2]=Q,g=g+1|0}while(128!=(0|g))}function KI(A,I,g,B,C,Q,E){return A|=0,I|=0,C|=0,Q|=0,E|=0,(B|=0)>>>0>0|0==(0|B)&(g|=0)>>>0>4294967279?(SB(),0):0|FI(A+16|0,A,I,g,B,C,Q,E)}function XI(A){return(0-(62^(A|=0))|0)>>>8&45^45|(A+65510|0)>>>8&255&A+65|(0-(63^A)|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 jI(A){return(0-(62^(A|=0))|0)>>>8&43^43|(A+65510|0)>>>8&255&A+65|(0-(63^A)|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 TI(A,I,g,B,C,Q,E){return B|=0,((I|=0)-1|0)>>>0>63|(E|=0)>>>0>64?B=-1:(function(A,I,g,B,C,Q,E){var i,e;A|=0,g|=0,B|=0,E|=0,i=y,e=y=y+63&-64,y=y+368|0,0==(0|(I|=0))&(0!=(0|(C|=0))|0!=(0|(Q|=0)))&&SB(),A||SB(),(B+-1&255)>63&&SB(),0!=(0|g)|E<<24>>24==0||SB(),(255&E)>64&&SB(),E<<24>>24?vA(e,B,g,E):iI(e,B),$(e,I,C,Q),b(e,A,B),y=i}(A|=0,g|=0,Q|=0,255&I,B,C|=0,255&E),B=0),0|B}function qI(A){var I;return I=Q[(A|=0)>>0]|Q[A+1>>0]<<8|Q[A+2>>0]<<16|Q[A+3>>0]<<24,e(Q[A+4>>0]|Q[A+4+1>>0]<<8|Q[A+4+2>>0]<<16|Q[A+4+3>>0]<<24|0),0|I}function VI(A,I){var g,B;I|=0,g=y,B=y=y+63&-64,y=y+704|0,WA(A|=0,B),NI(I,A,64),MI(B,704),MI(A,208),y=g}function zI(A,I,g,B,C,Q){A|=0,I|=0,C|=0,Q|=0,(B|=0)>>>0>0|0==(0|B)&(g|=0)>>>0>4294967295?SB():function(A,I,g,B,C,Q,E,i){var e,o;A|=0,I|=0,C|=0,i|=0,e=y,o=y=y+63&-64,y=y+80|0,0==(0|(g|=0))&0==(0|(B|=0))||(Pg(o+64|0,1),Pg(o+64+4|0,0),$A(o,i),_I(o,C,o+64|0),M(o,I,A,g,B),MI(o,64)),y=e}(A,I,g,B,C,0,0,Q)}function WI(A){var I=0,g=0;I=127&B[31+(A|=0)>>0]^127,g=30;do{I|=~B[A+g>>0],g=g+-1|0}while(0!=(0|g));return(236-(0|Q[A>>0])&511+(255&I))>>>8&1^1|0}function OI(A,I,g,B,C){A|=0,B|=0,C|=0,(g|=0)>>>0>0|0==(0|g)&(I|=0)>>>0>4294967295?SB():gg(A,I,g,B,C)}function ZI(A,I,g){var B,C;return B=0|yg(0|(A|=0),0|(I|=0),0|(g|=0)),C=0|o(),g=0|rg(0|A,0|I,64-g|0),e(0|o()|C|0),g|B|0}function $I(A,I,g){var B,C;return B=0|rg(0|(A|=0),0|(I|=0),0|(g|=0)),C=0|o(),g=0|yg(0|A,0|I,64-g|0),e(0|o()|C|0),g|B|0}function Ag(A,I,g,B){var Q;return Q=y,y=y+16|0,function(A,I,g,B,Q){A|=0,g|=0,B|=0,Q|=0;var E=0,c=0,a=0,n=0,r=0,t=0,f=0,w=0,y=0,s=0;if(!(I|=0))return B?Q?(C[Q>>2]=0|A,C[Q+4>>2]=0&I,Q=0,0|(e(0|(B=0)),Q)):(Q=0,0|(e(0|(B=0)),Q)):(0|Q&&(C[Q>>2]=(A>>>0)%(g>>>0),C[Q+4>>2]=0),Q=(A>>>0)/(g>>>0)>>>0,0|(e(0|(B=0)),Q));do{if(g){if(0|B){if((c=(0|i(0|B))-(0|i(0|I))|0)>>>0<=31){w=c+1|0,a=A>>>((c+1|0)>>>0)&c-31>>31|I<<31-c,f=I>>>((c+1|0)>>>0)&c-31>>31,E=0,c=A<<31-c;break}return Q?(C[Q>>2]=0|A,C[Q+4>>2]=I|0&I,Q=0,0|(e(0|(B=0)),Q)):(Q=0,0|(e(0|(B=0)),Q))}if(g-1&g|0){w=c=33+(0|i(0|g))-(0|i(0|I))|0,a=32-c-1>>31&I>>>((c-32|0)>>>0)|(I<<32-c|A>>>(c>>>0))&c-32>>31,f=c-32>>31&I>>>(c>>>0),E=A<<64-c&32-c>>31,c=(I<<64-c|A>>>((c-32|0)>>>0))&32-c>>31|A<<32-c&c-33>>31;break}return 0|Q&&(C[Q>>2]=g-1&A,C[Q+4>>2]=0),1==(0|g)?(Q=0|A,0|(e(0|(B=I|0&I)),Q)):(B=I>>>((Q=0|nB(0|g))>>>0)|0,Q=I<<32-Q|A>>>(Q>>>0)|0,0|(e(0|B),Q))}if(!B)return 0|Q&&(C[Q>>2]=(I>>>0)%(g>>>0),C[Q+4>>2]=0),Q=(I>>>0)/(g>>>0)>>>0,0|(e(0|(B=0)),Q);if(!A)return 0|Q&&(C[Q>>2]=0,C[Q+4>>2]=(I>>>0)%(B>>>0)),Q=(I>>>0)/(B>>>0)>>>0,0|(e(0|(g=0)),Q);if(!(B-1&B))return 0|Q&&(C[Q>>2]=0|A,C[Q+4>>2]=B-1&I|0&I),g=0,Q=I>>>((0|nB(0|B))>>>0),0|(e(0|g),Q);if((c=(0|i(0|B))-(0|i(0|I))|0)>>>0<=30){w=c+1|0,a=I<<31-c|A>>>((c+1|0)>>>0),f=I>>>((c+1|0)>>>0),E=0,c=A<<31-c;break}return Q?(C[Q>>2]=0|A,C[Q+4>>2]=I|0&I,Q=0,0|(e(0|(B=0)),Q)):(Q=0,0|(e(0|(B=0)),Q))}while(0);if(w){r=0|vg(0|g,B|0&B|0,-1,-1),t=0|o(),n=c,I=f,A=w,c=0;do{s=n,n=E>>>31|n<<1,E=c|E<<1,Ug(0|r,0|t,0|(s=a<<1|s>>>31|0),0|(y=a>>>31|I<<1|0)),c=1&(f=(w=0|o())>>31|((0|w)<0?-1:0)<<1),a=0|Ug(0|s,0|y,f&(0|g)|0,(((0|w)<0?-1:0)>>31|((0|w)<0?-1:0)<<1)&(B|0&B)|0),I=0|o(),A=A-1|0}while(0!=(0|A));A=0}else n=c,I=f,A=0,c=0;0|Q&&(C[Q>>2]=a,C[Q+4>>2]=I),s=-2&(E<<1|0)|c,e(0|(y=(0|E)>>>31|n<<1|0&(0|E>>>31)|A))}(A|=0,I|=0,g|=0,B|=0,0|Q),y=Q,0|(e(0|C[Q+4>>2]),0|C[Q>>2])}function Ig(A){A|=0;var I=0,g=0,C=0;for(I=1,g=0;I=I+(0|Q[(C=A+g|0)>>0])|0,B[C>>0]=I,4!=(0|(g=g+1|0));)I>>>=8}function gg(A,I,g,B,C){A|=0,B|=0,C|=0,(g|=0)>>>0>0|0==(0|g)&(I|=0)>>>0>4294967295?SB():function(A,I,g,B,C){var Q,E;A|=0,B|=0,Q=y,E=y=y+63&-64,y=y+64|0,0==(0|(I|=0))&0==(0|(g|=0))||($A(E,C|=0),UI(E,B,0),YA(0|A,0,0|I),M(E,A,A,I,g),MI(E,64)),y=Q}(A,I,g,B,C)}function Bg(A,I,g){var B;return A|=0,g|=0,I=0|rg(255&(I|=0)|0,0,8),B=0|o(),g=0|rg(255&g|0,0,16),e(0|B|o()|0),I|255&A|g|0}function Cg(A,I){A|=0;var g=0,C=0;if(0|(I|=0)){g=0;do{C=255&(0|DB()),B[A+g>>0]=C,g=g+1|0}while((0|g)!=(0|I))}}function Qg(A,I,g,B){var C,Q;return I|=0,B|=0,C=0|function(A,I){var g,B,C;return C=((g=0|E(65535&(I|=0),65535&(A|=0)))>>>16)+(0|E(65535&I,A>>>16))|0,B=0|E(I>>>16,65535&A),0|(e((C>>>16)+(0|E(I>>>16,A>>>16))+(((65535&C)+B|0)>>>16)|0),C+B<<16|65535&g|0)}(A|=0,g|=0),Q=0|o(),0|(e((0|E(I,g))+(0|E(B,A))+Q|0&Q|0),0|C)}function Eg(A,I){u(A|=0,I|=0,I+120|0),u(A+40|0,I+40|0,I+80|0),u(A+80|0,I+80|0,I+120|0),u(A+120|0,I,I+40|0)}function ig(A,I,g){return A|=0,I|=0,(0|(g|=0))<32?(e(I>>g|0),A>>>g|(I&(1<>g-32|0)}function eg(A,I){_A(A|=0,40+(I|=0)|0,I),lA(A+40|0,I+40|0,I),OA(A+80|0,I+80|0),u(A+120|0,I+120|0,112)}function og(A,I){var g,B;A|=0,g=y,B=y=y+63&-64,y=y+128|0,function(A,I){OA(A|=0,I|=0),OA(A+40|0,I+40|0),OA(A+80|0,I+80|0)}(B,I|=0),aI(A,B),y=g}function cg(A){var I,g;return I=y,g=y=y+63&-64,y=y+32|0,CA(g,A|=0),A=0|lI(g,32),y=I,0|A}function ag(A,I){A|=0,I|=0;var g=0,C=0;g=0;do{B[(C=A+g|0)>>0]=B[C>>0]^B[I+g>>0],g=g+1|0}while(8!=(0|g))}function ng(A,I,g,B,C,Q,E){return 0|gA(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0)}function rg(A,I,g){return A|=0,(0|(g|=0))<32?(e((I|=0)<>>32-g|0),A<>>0<256?0|b(A|=0,I|=0,255&g):(c(33547,33567,107,33620),0)}function wg(A,I){A|=0;var g=0;return(I|=0)>>>0<=4294967168&&0!=(0|(g=0|function(A){var I,g=0,B=0,Q=0,E=0;if((A|=0)>>>0>=4294967168)return C[8678]=48,0;if(!(B=0|F(76+(I=A>>>0<11?16:A+11&-8)|0)))return 0;do{if(63&B){if(g=(Q=((B+63&-64)-8-(B+-8)|0)>>>0>15?(B+63&-64)-8|0:56+(B+63&-64)|0)-(B+-8)|0,3&(A=0|C[B+-4>>2])){C[Q+4>>2]=(-8&A)-g|1&C[Q+4>>2]|2,C[Q+((-8&A)-g)+4>>2]=1|C[Q+((-8&A)-g)+4>>2],C[B+-4>>2]=g|1&C[B+-4>>2]|2,C[Q+4>>2]=1|C[Q+4>>2],Y(B+-8|0,g),E=Q,A=Q;break}C[Q>>2]=(0|C[B+-8>>2])+g,C[Q+4>>2]=(-8&A)-g,E=Q,A=Q;break}E=B+-8|0,A=B+-8|0}while(0);return 3&(A=0|C[(g=A+4|0)>>2])|0&&(-8&A)>>>0>(I+16|0)>>>0&&(Q=E+I|0,C[g>>2]=I|1&A|2,C[Q+4>>2]=(-8&A)-I|3,C[(B=E+(-8&A)+4|0)>>2]=1|C[B>>2],Y(Q,(-8&A)-I|0)),0|E+8}(I)))?(C[A>>2]=g,I=0):I=48,0|I}function yg(A,I,g){return A|=0,I|=0,(0|(g|=0))<32?(e(I>>>g|0),A>>>g|(I&(1<>>g-32|0)}function sg(A){var I,g;return g=y,I=y=y+63&-64,y=y+32|0,CA(I,A|=0),y=g,1&B[I>>0]|0}function hg(A,I,g){tA(A|=0,I|=0,255&(g|=0)),tA(A+40|0,I+40|0,255&g),tA(A+80|0,I+80|0,255&g)}function Dg(A,I,g,B,C,Q,E){return 0|TI(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0)}function Fg(A,I,g,B,C,Q,E){return 0|nA(A|=0,I|=0,1,g|=0,B|=0,C|=0,16,Q|=0,E|=0,0,0,2)}function pg(A,I,g,B,C,Q,E){return 0|nA(A|=0,I|=0,1,g|=0,B|=0,C|=0,16,Q|=0,E|=0,0,0,1)}function ug(A,I){(function(A,I){A|=0,0|(I|=0)&&(0|(I=0|C[A>>2])&&MI(0|C[I+4>>2],C[A+16>>2]<<10),0|(I=0|C[A+4>>2])&&MI(I,C[A+20>>2]<<3))})(A|=0,4&(I|=0)),d(0|C[A+4>>2]),C[A+4>>2]=0,function(A){var I=0;0|(A|=0)&&0|(I=0|C[A>>2])&&d(I),d(A)}(0|C[A>>2]),C[A>>2]=0}function Hg(A,I){u(A|=0,I|=0,I+120|0),u(A+40|0,I+40|0,I+80|0),u(A+80|0,I+80|0,I+120|0)}function kg(A,I,g,B,C,Q){hA(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,0)}function lg(A,I,g,B,C,Q){return 0|nA(A|=0,I|=0,1,g|=0,B|=0,C|=0,16,0,32,Q|=0,128,2)}function _g(A,I,g,B,C,Q){V(A|=0,I|=0,g|=0,B|=0,C|=0,1,0,Q|=0)}function Gg(A,I,g,B,C,Q){return 0|nA(A|=0,I|=0,1,g|=0,B|=0,C|=0,16,0,32,Q|=0,128,1)}function dg(A,I,g,B,C){return 0|uA(A|=0,I|=0,g|=0,B|=0,C|=0,0)}function Yg(A,I,g,B,C,Q){V(A|=0,I|=0,g|=0,B|=0,C|=0,0,0,Q|=0)}function Mg(A){B[32+(A|=0)>>0]=1,B[A+32+1>>0]=0,B[A+32+2>>0]=0,B[A+32+3>>0]=0}function Sg(A){var I;C[(A|=0)>>2]=1,I=36+(A=A+4|0)|0;do{C[A>>2]=0,A=A+4|0}while((0|A)<(0|I))}function Ug(A,I,g,B){return 0|(e(0|(B=(I|=0)-(B|=0)-((g|=0)>>>0>(A|=0)>>>0|0)>>>0)),A-g>>>0|0)}function vg(A,I,g,B){return 0|(e((I|=0)+(B|=0)+((A|=0)+(g|=0)>>>0>>>0>>0|0)>>>0|0),A+g>>>0|0)}function bg(A,I,g,B){!function(A,I,g,B){K(A|=0,I|=0,g|=0,B|=0)}(A|=0,I|=0,g|=0,B|=0)}function Jg(A,I){I|=0,PI(A|=0),0|I&&P(A,33408,34,0)}function Pg(A,I){I|=0,B[(A|=0)>>0]=I,B[A+1>>0]=I>>8,B[A+2>>0]=I>>16,B[A+3>>0]=I>>24}function Rg(A,I,g,B){return Xg(A|=0,I|=0,g|=0,B|=0),0}function Ng(A,I,g,B){return 0|FA(A|=0,I|=0,g|=0,B|=0,2)}function mg(A,I,g,B){return 0|FA(A|=0,I|=0,g|=0,B|=0,1)}function Lg(A,I,g,B){return 0|HI(A|=0,I|=0,g|=0,B|=0)}function xg(A,I,g,B){P(A|=0,I|=0,g|=0,B|=0)}function Kg(A){var I;I=40+(A|=0)|0;do{C[A>>2]=0,A=A+4|0}while((0|A)<(0|I))}function Xg(A,I,g,B){$(A|=0,I|=0,g|=0,B|=0)}function jg(A,I,g){return 0|function(A,I,g){var B,C;return A|=0,C=y,B=y=y+63&-64,y=y+32|0,0|nI(B,g|=0,I|=0)?A=-1:(x(A,34656,B),A=0),y=C,0|A}(A|=0,I|=0,g|=0)}function Tg(A){B[(A|=0)>>0]=-8&B[A>>0],B[A+31>>0]=63&B[A+31>>0]|64}function qg(A,I){return A=0|HA(A|=0,I|=0),0|((0|B[A>>0])==(255&I)<<24>>24?A:0)}function Vg(A){return Q[(A|=0)>>0]|Q[A+1>>0]<<8|Q[A+2>>0]<<16|Q[A+3>>0]<<24|0}function zg(A,I,g){return 0|fg(A|=0,I|=0,g|=0)}function Wg(A){B[(A|=0)>>0]=0,B[A+1>>0]=0,B[A+2>>0]=0,B[A+3>>0]=0}function Og(A){Kg(A|=0),Sg(A+40|0),Sg(A+80|0),Kg(A+120|0)}function Zg(A){C[(A|=0)>>2]=0,C[A+4>>2]=0,C[A+8>>2]=0,C[A+12>>2]=0}function $g(A,I,g){!function(A,I,g){var B,C,Q;A|=0,I|=0,B=y,Q=y=y+63&-64,y=y+128|0,g=((g|=0)<<24>>24)-((0-(255&(C=0|function(A){return(255&(A|=0))>>>7|0}(g)))&g<<24>>24)<<1)&255,function(A){Sg(A|=0),Sg(A+40|0),Kg(A+80|0)}(A),hg(A,I,0|aB(g,1)),hg(A,I+120|0,0|aB(g,2)),hg(A,I+240|0,0|aB(g,3)),hg(A,I+360|0,0|aB(g,4)),hg(A,I+480|0,0|aB(g,5)),hg(A,I+600|0,0|aB(g,6)),hg(A,I+720|0,0|aB(g,7)),hg(A,I+840|0,0|aB(g,8)),OA(Q,A+40|0),OA(Q+40|0,A),xA(Q+80|0,A+80|0),hg(A,Q,C),y=B}(A|=0,1120+(960*(I|=0)|0)|0,g|=0)}function AB(A,I){return 0|QI(A|=0,I|=0)}function IB(A,I){!function(A,I){z(A|=0,I|=0)}(A|=0,I|=0)}function gB(A,I){!function(A,I){MA(A|=0,I|=0)}(A|=0,I|=0)}function BB(A,I,g){return 0|nI(A|=0,I|=0,g|=0)}function CB(A,I){return 0|function(A,I){return A|=0,Cg(I|=0,32),0|AB(A,I)}(A|=0,I|=0)}function QB(A,I,g){!function(A,I,g,B,C){var Q,E;A|=0,B|=0,Q=y,E=y=y+63&-64,y=y+64|0,0==(0|(I|=0))&0==(0|(g|=0))||($A(E,C|=0),_I(E,B,0),YA(0|A,0,64),M(E,A,A,64,0),MI(E,64)),y=Q}(A|=0,64,0,I|=0,g|=0)}function EB(A){1!=(-7&(A|=0)|0)&&SB()}function iB(A,I,g){!function(A,I,g){A|=0,I|=0;var B,C,Q,E,i,e,o,c,a,n,r,t=0,f=0,w=0,y=0,s=0,h=0,D=0,F=0,p=0,u=0,H=0,k=0,l=0,_=0,G=0,d=0,Y=0,M=0,S=0,U=0,v=0,b=0,J=0,P=0,R=0,N=0,m=0,L=0,x=0,K=0,X=0,j=0;r=0|Vg(g|=0),i=0|Vg(g+4|0),e=0|Vg(g+8|0),o=0|Vg(g+12|0),c=0|Vg(g+16|0),a=0|Vg(g+20|0),n=0|Vg(g+24|0),B=0|Vg(g+28|0),C=0|Vg(I),Q=0|Vg(I+4|0),E=0|Vg(I+8|0),g=0|Vg(I+12|0),I=0,t=1634760805,f=r,w=2036477234,y=c,s=a,h=n,D=B,F=1797285236,p=i,u=e,H=o,k=857760878,l=C,_=Q,G=E,d=g;do{x=(0|wB((U=(0|wB((J=(0|wB((N=(0|wB(t+s|0,7))^H)+t|0,9))^G)+N|0,13))^s)+J|0,18))^t,R=(0|wB((j=(0|wB((S=(0|wB((b=(0|wB(f+k|0,7))^d)+k|0,9))^h)+b|0,13))^f)+S|0,18))^k,v=(0|wB((L=(0|wB((X=(0|wB((M=(0|wB(l+w|0,7))^D)+w|0,9))^p)+M|0,13))^l)+X|0,18))^w,Y=(0|wB((P=(0|wB((m=(0|wB((K=(0|wB(y+F|0,7))^u)+F|0,9))^_)+K|0,13))^y)+m|0,18))^F,t=(0|wB((u=(0|wB((p=(0|wB((f=(0|wB(K+x|0,7))^j)+x|0,9))^X)+f|0,13))^K)+p|0,18))^x,k=(0|wB((H=(0|wB((_=(0|wB((l=(0|wB(R+N|0,7))^L)+R|0,9))^m)+l|0,13))^N)+_|0,18))^R,w=(0|wB((d=(0|wB((G=(0|wB((y=(0|wB(v+b|0,7))^P)+v|0,9))^J)+y|0,13))^b)+G|0,18))^v,F=(0|wB((D=(0|wB((h=(0|wB((s=(0|wB(Y+M|0,7))^U)+Y|0,9))^S)+s|0,13))^M)+h|0,18))^Y,I=I+2|0}while(I>>>0<20);Pg(A,t+1634760805|0),Pg(A+4|0,f+r|0),Pg(A+8|0,p+i|0),Pg(A+12|0,u+e|0),Pg(A+16|0,H+o|0),Pg(A+20|0,k+857760878|0),Pg(A+24|0,l+C|0),Pg(A+28|0,_+Q|0),Pg(A+32|0,G+E|0),Pg(A+36|0,d+g|0),Pg(A+40|0,w+2036477234|0),Pg(A+44|0,y+c|0),Pg(A+48|0,s+a|0),Pg(A+52|0,h+n|0),Pg(A+56|0,D+B|0),Pg(A+60|0,F+1797285236|0)}(A|=0,I|=0,g|=0)}function eB(A,I){return 0|AB(A|=0,I|=0)}function oB(A,I,g){return 0|EA(A|=0,I|=0,g|=0,2)}function cB(A,I,g){return 0|EA(A|=0,I|=0,g|=0,1)}function aB(A,I){return((255&((I|=0)^(A|=0)))-1|0)>>>31&255|0}function nB(A){return 0|((A|=0)?31-(0|i(A^A-1))|0:32)}function rB(A,I){return 0|eI(A|=0,I|=0,32)}function tB(A,I){return 0|eI(A|=0,I|=0,16)}function fB(A,I){BA(0|(A|=0),0|(I|=0),1024)}function wB(A,I){return(A|=0)>>>(32-(I|=0)|0)|A<>>0>0|0==(0|E)&(Q|=0)>>>0>15?(E=0|sA(A|=0,0,B,g=0|vg(0|Q,0|E,-16,-1),r=0|o(),B+Q+-16|0,i,e,c,a,n),I&&(Q=0==(0|E)?g:0,g=0==(0|E)?r:0,t=4)):I?(Q=0,g=0,E=-1,t=4):E=-1,4==(0|t)&&(C[I>>2]=Q,C[I+4>>2]=g),0|E},_crypto_aead_chacha20poly1305_decrypt_detached:sA,_crypto_aead_chacha20poly1305_encrypt:function(A,I,g,B,Q,E,i,e,c,a,n){return A|=0,I|=0,g|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0,(Q|=0)>>>0>0|0==(0|Q)&(B|=0)>>>0>4294967279&&SB(),dA(A,A+B|0,0,g,B,Q,E,i,e,0,a,n),0|I&&(a=0|vg(0|B,0|Q,16,0),c=0|o(),C[I>>2]=a,C[I+4>>2]=c),0},_crypto_aead_chacha20poly1305_encrypt_detached:dA,_crypto_aead_chacha20poly1305_ietf_abytes:GB,_crypto_aead_chacha20poly1305_ietf_decrypt:function(A,I,g,B,Q,E,i,e,c,a,n){I|=0,g|=0,B|=0,i|=0,e|=0,c|=0,a|=0,n|=0;var r=0,t=0;return(E|=0)>>>0>0|0==(0|E)&(Q|=0)>>>0>15?(E=0|eA(A|=0,0,B,g=0|vg(0|Q,0|E,-16,-1),r=0|o(),B+Q+-16|0,i,e,c,a,n),I&&(Q=0==(0|E)?g:0,g=0==(0|E)?r:0,t=4)):I?(Q=0,g=0,E=-1,t=4):E=-1,4==(0|t)&&(C[I>>2]=Q,C[I+4>>2]=g),0|E},_crypto_aead_chacha20poly1305_ietf_decrypt_detached:eA,_crypto_aead_chacha20poly1305_ietf_encrypt:function(A,I,g,B,Q,E,i,e,c,a,n){return A|=0,I|=0,g|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0,(Q|=0)>>>0>0|0==(0|Q)&(B|=0)>>>0>4294967279&&SB(),fA(A,A+B|0,0,g,B,Q,E,i,e,0,a,n),0|I&&(a=0|vg(0|B,0|Q,16,0),c=0|o(),C[I>>2]=a,C[I+4>>2]=c),0},_crypto_aead_chacha20poly1305_ietf_encrypt_detached:fA,_crypto_aead_chacha20poly1305_ietf_keybytes:YB,_crypto_aead_chacha20poly1305_ietf_keygen:sB,_crypto_aead_chacha20poly1305_ietf_messagebytes_max:FB,_crypto_aead_chacha20poly1305_ietf_npubbytes:function(){return 12},_crypto_aead_chacha20poly1305_ietf_nsecbytes:MB,_crypto_aead_chacha20poly1305_keybytes:YB,_crypto_aead_chacha20poly1305_keygen:sB,_crypto_aead_chacha20poly1305_messagebytes_max:FB,_crypto_aead_chacha20poly1305_npubbytes:lB,_crypto_aead_chacha20poly1305_nsecbytes:MB,_crypto_aead_xchacha20poly1305_ietf_abytes:GB,_crypto_aead_xchacha20poly1305_ietf_decrypt:function(A,I,g,B,Q,E,i,e,c,a,n){I|=0,g|=0,B|=0,i|=0,e|=0,c|=0,a|=0,n|=0;var r=0,t=0;return(E|=0)>>>0>0|0==(0|E)&(Q|=0)>>>0>15?(E=0|PA(A|=0,0,B,g=0|vg(0|Q,0|E,-16,-1),r=0|o(),B+Q+-16|0,i,e,c,a,n),I&&(Q=0==(0|E)?g:0,g=0==(0|E)?r:0,t=4)):I?(Q=0,g=0,E=-1,t=4):E=-1,4==(0|t)&&(C[I>>2]=Q,C[I+4>>2]=g),0|E},_crypto_aead_xchacha20poly1305_ietf_decrypt_detached:PA,_crypto_aead_xchacha20poly1305_ietf_encrypt:function(A,I,g,B,Q,E,i,e,c,a,n){return A|=0,I|=0,g|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0,(Q|=0)>>>0>0|0==(0|Q)&(B|=0)>>>0>4294967279&&SB(),NA(A,A+B|0,0,g,B,Q,E,i,e,0,a,n),0|I&&(a=0|vg(0|B,0|Q,16,0),c=0|o(),C[I>>2]=a,C[I+4>>2]=c),0},_crypto_aead_xchacha20poly1305_ietf_encrypt_detached:NA,_crypto_aead_xchacha20poly1305_ietf_keybytes:YB,_crypto_aead_xchacha20poly1305_ietf_keygen:sB,_crypto_aead_xchacha20poly1305_ietf_messagebytes_max:FB,_crypto_aead_xchacha20poly1305_ietf_npubbytes:_B,_crypto_aead_xchacha20poly1305_ietf_nsecbytes:MB,_crypto_auth:function(A,I,g,B,C){return JI(A|=0,I|=0,g|=0,B|=0,C|=0),0},_crypto_auth_bytes:YB,_crypto_auth_keybytes:YB,_crypto_auth_keygen:sB,_crypto_auth_verify:function(A,I,g,B,C){return 0|function(A,I,g,B,C){var Q;return A|=0,Q=y,y=y+32|0,JI(Q,I|=0,g|=0,B|=0,C|=0),C=0|rB(A,Q),C=0|((0|Q)==(0|A)?-1:C)|EI(Q,A,32),y=Q,0|C}(A|=0,I|=0,g|=0,B|=0,C|=0)},_crypto_box_beforenm:jg,_crypto_box_beforenmbytes:YB,_crypto_box_detached:FI,_crypto_box_detached_afternm:tg,_crypto_box_easy:KI,_crypto_box_easy_afternm:function(A,I,g,B,C,Q){return A|=0,I|=0,C|=0,Q|=0,(B|=0)>>>0>0|0==(0|B)&(g|=0)>>>0>4294967279?(SB(),0):(tg(A+16|0,A,I,g,B,C,Q),0)},_crypto_box_keypair:CB,_crypto_box_macbytes:GB,_crypto_box_messagebytes_max:FB,_crypto_box_noncebytes:_B,_crypto_box_open_detached:DI,_crypto_box_open_detached_afternm:ng,_crypto_box_open_easy:dI,_crypto_box_open_easy_afternm:function(A,I,g,B,C,Q){return I|=0,C|=0,Q|=0,0|((B|=0)>>>0<0|0==(0|B)&(g|=0)>>>0<16?-1:0|ng(A|=0,I+16|0,I,g=0|vg(0|g,0|B,-16,-1),0|o(),C,Q))},_crypto_box_publickeybytes:YB,_crypto_box_seal:function(A,I,g,C,Q){A|=0,I|=0,g|=0,C|=0,Q|=0;var E,i=0,e=0,o=0;if(E=y,y=y+96|0,0|CB(E+32|0,E))g=-1;else{e=E+32|0,o=(i=A)+32|0;do{B[i>>0]=0|B[e>>0],i=i+1|0,e=e+1|0}while((0|i)<(0|o));GI(E+64|0,E+32|0,Q),g=0|KI(A+32|0,I,g,C,E+64|0,Q,E),MI(E,32),MI(E+32|0,32),MI(E+64|0,24)}return y=E,0|g},_crypto_box_seal_open:function(A,I,g,B,C,Q){var E,i;return A|=0,I|=0,C|=0,Q|=0,i=y,E=y=y+63&-64,y=y+32|0,(B|=0)>>>0<0|0==(0|B)&(g|=0)>>>0<48?g=-1:(B=0|vg(0|g,0|B,-32,-1),g=0|o(),GI(E,I,C),g=0|dI(A,I+32|0,B,g,E,I,Q)),y=i,0|g},_crypto_box_sealbytes:function(){return 48},_crypto_box_secretkeybytes:YB,_crypto_box_seed_keypair:function(A,I,g){return 0|tI(A|=0,I|=0,g|=0)},_crypto_box_seedbytes:YB,_crypto_generichash:Dg,_crypto_generichash_bytes:YB,_crypto_generichash_bytes_max:dB,_crypto_generichash_bytes_min:GB,_crypto_generichash_final:zg,_crypto_generichash_init:Lg,_crypto_generichash_keybytes:YB,_crypto_generichash_keybytes_max:dB,_crypto_generichash_keybytes_min:GB,_crypto_generichash_keygen:sB,_crypto_generichash_statebytes:function(){return 384},_crypto_generichash_update:Rg,_crypto_hash:function(A,I,g,B){return RI(A|=0,I|=0,g|=0,B|=0),0},_crypto_hash_bytes:dB,_crypto_kdf_bytes_max:dB,_crypto_kdf_bytes_min:GB,_crypto_kdf_contextbytes:lB,_crypto_kdf_derive_from_key:function(A,I,g,B,C,Q){return 0|JA(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0)},_crypto_kdf_keybytes:YB,_crypto_kdf_keygen:sB,_crypto_kx_client_session_keys:function(A,I,g,C,Q){var E,i,e;if(I|=0,g|=0,C|=0,Q|=0,e=y,i=y=y+63&-64,y=y+480|0,E=0==(0|(A|=0))?I:A,I=0==(0|I)?E:I,E||SB(),0|BB(i+448|0,C,Q))A=-1;else{Lg(i,0,0,64),Rg(i,i+448|0,32,0),MI(i+448|0,32),Rg(i,g,32,0),Rg(i,Q,32,0),zg(i,i+384|0,64),MI(i,384),A=0;do{B[E+A>>0]=0|B[i+384+A>>0],B[I+A>>0]=0|B[i+384+(A+32)>>0],A=A+1|0}while(32!=(0|A));MI(i+384|0,64),A=0}return y=e,0|A},_crypto_kx_keypair:function(A,I){return A|=0,Cg(I|=0,32),0|eB(A,I)},_crypto_kx_publickeybytes:YB,_crypto_kx_secretkeybytes:YB,_crypto_kx_seed_keypair:function(A,I,g){return A|=0,Dg(I|=0,32,g|=0,32,0,0,0),0|eB(A,I)},_crypto_kx_seedbytes:YB,_crypto_kx_server_session_keys:function(A,I,g,C,Q){var E,i,e;if(I|=0,g|=0,C|=0,Q|=0,e=y,i=y=y+63&-64,y=y+480|0,E=0==(0|(A|=0))?I:A,I=0==(0|I)?E:I,E||SB(),0|BB(i+448|0,C,Q))A=-1;else{Lg(i,0,0,64),Rg(i,i+448|0,32,0),MI(i+448|0,32),Rg(i,Q,32,0),Rg(i,g,32,0),zg(i,i+384|0,64),MI(i,384),A=0;do{B[I+A>>0]=0|B[i+384+A>>0],B[E+A>>0]=0|B[i+384+(A+32)>>0],A=A+1|0}while(32!=(0|A));MI(i+384|0,64),A=0}return y=e,0|A},_crypto_kx_sessionkeybytes:YB,_crypto_pwhash:function(A,I,g,B,Q,E,i,e,o,c,a){switch(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,o|=0,c|=0,0|(a|=0)){case 1:I=0|function(A,I,g,B,Q,E,i,e,o,c){g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,o|=0,c|=0,YA(0|(A|=0),0,0|(I|=0));do{if(!(g>>>0>0|0==(0|g)&I>>>0>4294967295)){if(g>>>0<0|0==(0|g)&I>>>0<16){C[8678]=28,I=-1;break}if((o|E)>>>0>0|0==(o|E|0)&(e|Q)>>>0>4294967295|c>>>0>2147483648){C[8678]=22,I=-1;break}if(o>>>0<0|0==(0|o)&e>>>0<3|c>>>0<8192){C[8678]=28,I=-1;break}I=(0!=(0|pg(e,c>>>10,B,Q,i,A,I)))<<31>>31;break}C[8678]=22,I=-1}while(0);return 0|I}(A,I,g,B,Q,E,i,e,o,c);break;case 2:I=0|function(A,I,g,B,Q,E,i,e,o,c){g|=0,B|=0,Q|=0,E|=0,i|=0,e|=0,o|=0,c|=0,YA(0|(A|=0),0,0|(I|=0));do{if(!(g>>>0>0|0==(0|g)&I>>>0>4294967295)){if(g>>>0<0|0==(0|g)&I>>>0<16){C[8678]=28,I=-1;break}if((o|E)>>>0>0|0==(o|E|0)&(e|Q)>>>0>4294967295|c>>>0>2147483648){C[8678]=22,I=-1;break}if(0==(0|e)&0==(0|o)|c>>>0<8192){C[8678]=28,I=-1;break}I=(0!=(0|Fg(e,c>>>10,B,Q,i,A,I)))<<31>>31;break}C[8678]=22,I=-1}while(0);return 0|I}(A,I,g,B,Q,E,i,e,o,c);break;default:C[8678]=28,I=-1}return 0|I},_crypto_pwhash_alg_argon2i13:kB,_crypto_pwhash_alg_argon2id13:uB,_crypto_pwhash_alg_default:uB,_crypto_pwhash_bytes_max:HB,_crypto_pwhash_bytes_min:GB,_crypto_pwhash_memlimit_interactive:function(){return 67108864},_crypto_pwhash_memlimit_max:function(){return-2147483648},_crypto_pwhash_memlimit_min:function(){return 8192},_crypto_pwhash_memlimit_moderate:function(){return 268435456},_crypto_pwhash_memlimit_sensitive:function(){return 1073741824},_crypto_pwhash_opslimit_interactive:uB,_crypto_pwhash_opslimit_max:HB,_crypto_pwhash_opslimit_min:kB,_crypto_pwhash_opslimit_moderate:pB,_crypto_pwhash_opslimit_sensitive:function(){return 4},_crypto_pwhash_passwd_max:HB,_crypto_pwhash_passwd_min:MB,_crypto_pwhash_saltbytes:GB,_crypto_pwhash_str:function(A,I,g,B,C,Q,E){return 0|LA(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0)},_crypto_pwhash_str_alg:function(A,I,g,B,C,Q,E,i){A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0,E|=0;var e=0;switch(0|(i|=0)){case 1:e=0|RA(A,I,g,B,C,Q,E);break;case 2:e=0|LA(A,I,g,B,C,Q,E);break;default:SB()}return 0|e},_crypto_pwhash_str_needs_rehash:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;do{if(0|oI(A,33713,10)){if(0|oI(A,33724,9)){C[8678]=28,I=-1;break}I=0|mg(A,I,g,B);break}I=0|Ng(A,I,g,B)}while(0);return 0|I},_crypto_pwhash_str_verify:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;do{if(0|oI(A,33713,10)){if(0|oI(A,33724,9)){C[8678]=28,g=-1;break}g=0|hI(A,I,g,B);break}g=0|yI(A,I,g,B)}while(0);return 0|g},_crypto_pwhash_strbytes:function(){return 128},_crypto_pwhash_strprefix:function(){return 33713},_crypto_scalarmult:BB,_crypto_scalarmult_base:eB,_crypto_scalarmult_bytes:YB,_crypto_scalarmult_scalarbytes:YB,_crypto_secretbox_detached:Z,_crypto_secretbox_easy:function(A,I,g,B,C,Q){return A|=0,I|=0,C|=0,Q|=0,(B|=0)>>>0>0|0==(0|B)&(g|=0)>>>0>4294967279?(SB(),0):(Z(A+16|0,A,I,g,B,C,Q),0)},_crypto_secretbox_keybytes:YB,_crypto_secretbox_keygen:sB,_crypto_secretbox_macbytes:GB,_crypto_secretbox_messagebytes_max:FB,_crypto_secretbox_noncebytes:_B,_crypto_secretbox_open_detached:gA,_crypto_secretbox_open_easy:function(A,I,g,B,C,Q){return I|=0,C|=0,Q|=0,0|((B|=0)>>>0<0|0==(0|B)&(g|=0)>>>0<16?-1:0|gA(A|=0,I+16|0,I,g=0|vg(0|g,0|B,-16,-1),0|o(),C,Q))},_crypto_secretstream_xchacha20poly1305_abytes:function(){return 17},_crypto_secretstream_xchacha20poly1305_headerbytes:_B,_crypto_secretstream_xchacha20poly1305_init_pull:function(A,I,g){var C;return R(A|=0,I|=0,g|=0),Mg(A),C=Q[I+16>>0]|Q[I+16+1>>0]<<8|Q[I+16+2>>0]<<16|Q[I+16+3>>0]<<24,g=Q[I+16+4>>0]|Q[I+16+4+1>>0]<<8|Q[I+16+4+2>>0]<<16|Q[I+16+4+3>>0]<<24,B[A+36>>0]=C,B[A+36+1>>0]=C>>8,B[A+36+2>>0]=C>>16,B[A+36+3>>0]=C>>24,B[A+36+4>>0]=g,B[A+36+4+1>>0]=g>>8,B[A+36+4+2>>0]=g>>16,B[A+36+4+3>>0]=g>>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,0},_crypto_secretstream_xchacha20poly1305_init_push:function(A,I,g){return A|=0,g|=0,Cg(I|=0,24),R(A,I,g),Mg(A),g=Q[I+16>>0]|Q[I+16+1>>0]<<8|Q[I+16+2>>0]<<16|Q[I+16+3>>0]<<24,I=Q[I+16+4>>0]|Q[I+16+4+1>>0]<<8|Q[I+16+4+2>>0]<<16|Q[I+16+4+3>>0]<<24,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,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,0},_crypto_secretstream_xchacha20poly1305_keybytes:YB,_crypto_secretstream_xchacha20poly1305_keygen:sB,_crypto_secretstream_xchacha20poly1305_messagebytes_max:function(){return-18},_crypto_secretstream_xchacha20poly1305_pull:function(A,I,g,Q,E,i,e,c,a,n){A|=0,I|=0,Q|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0;var r,t,f=0,w=0,s=0;t=y,r=y=y+63&-64,y=y+352|0,0|(g|=0)&&(C[g>>2]=0,C[g+4>>2]=0),0|Q&&(B[Q>>0]=-1);do{if(e>>>0<0|0==(0|e)&i>>>0<17)c=-1;else{w=0|vg(0|i,0|e,-17,-1),(s=0|o())>>>0>0|0==(0|s)&w>>>0>4294967278&&SB(),OI(r+16|0,64,0,A+32|0,A),gB(r+80|0,r+16|0),MI(r+16|0,64),bg(r+80|0,c,a,n),c=0|Ug(0,0,0|a,0|n),o(),bg(r+80|0,34672,15&c,0),f=64+(c=r+16|0)|0;do{C[c>>2]=0,c=c+4|0}while((0|c)<(0|f));if(B[r+16>>0]=0|B[E>>0],rI(r+16|0,r+16|0,64,0,A+32|0,1,A),c=0|B[r+16>>0],B[r+16>>0]=0|B[E>>0],bg(r+80|0,r+16|0,64,0),bg(r+80|0,E+1|0,w,s),f=0|vg(0|i,0|e,15,0),o(),bg(r+80|0,34672,15&f,0),LI(r+336|0,a,n),bg(r+80|0,r+336|0,8,0),LI(r+336|0,n=0|vg(0|i,0|e,47,0),0|o()),bg(r+80|0,r+336|0,8,0),IB(r+80|0,r),MI(r+80|0,256),0|EI(r,E+1+w|0,16)){MI(r,16),c=-1;break}rI(I,E+1|0,w,s,A+32|0,2,A),ag(A+36|0,r),Ig(A+32|0),(0!=(2&c)||0|lI(A+32|0,4))&&wA(A),0|g&&(C[g>>2]=w,C[g+4>>2]=s),0|Q?(B[Q>>0]=c,c=0):c=0}}while(0);return y=t,0|c},_crypto_secretstream_xchacha20poly1305_push:function(A,I,g,Q,E,i,e,c,a,n){A|=0,I|=0,Q|=0,E|=0,i|=0,e|=0,c|=0,a|=0,n|=0;var r,t,f=0;t=y,f=y=y+63&-64,y=y+336|0,0|(g|=0)&&(C[g>>2]=0,C[g+4>>2]=0),i>>>0>0|0==(0|i)&E>>>0>4294967278&&SB(),OI(f,64,0,A+32|0,A),gB(f+64|0,f),MI(f,64),bg(f+64|0,e,c,a),e=0|Ug(0,0,0|c,0|a),o(),bg(f+64|0,34672,15&e,0),r=(e=f)+64|0;do{C[e>>2]=0,e=e+4|0}while((0|e)<(0|r));return B[f>>0]=n,rI(f,f,64,0,A+32|0,1,A),bg(f+64|0,f,64,0),B[I>>0]=0|B[f>>0],rI(I+1|0,Q,E,i,A+32|0,2,A),bg(f+64|0,I+1|0,E,i),bg(f+64|0,34672,15&E,0),LI(f+320|0,c,a),bg(f+64|0,f+320|0,8,0),LI(f+320|0,Q=0|vg(0|E,0|i,64,0),0|o()),bg(f+64|0,f+320|0,8,0),IB(f+64|0,I+1+E|0),MI(f+64|0,256),ag(A+36|0,I+1+E|0),Ig(A+32|0),(0!=(2&n)||0|lI(A+32|0,4))&&wA(A),0|g&&(n=0|vg(0|E,0|i,17,0),f=0|o(),C[g>>2]=n,C[g+4>>2]=f),y=t,0},_crypto_secretstream_xchacha20poly1305_rekey:wA,_crypto_secretstream_xchacha20poly1305_statebytes:function(){return 52},_crypto_secretstream_xchacha20poly1305_tag_final:pB,_crypto_secretstream_xchacha20poly1305_tag_message:MB,_crypto_secretstream_xchacha20poly1305_tag_push:kB,_crypto_secretstream_xchacha20poly1305_tag_rekey:uB,_crypto_shorthash:function(A,I,g,B,C){return G(A|=0,I|=0,g|=0,B|=0,C|=0),0},_crypto_shorthash_bytes:lB,_crypto_shorthash_keybytes:GB,_crypto_shorthash_keygen:function(A){Cg(A|=0,16)},_crypto_sign:function(A,I,g,B,C,Q){return 0|TA(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0)},_crypto_sign_bytes:dB,_crypto_sign_detached:function(A,I,g,B,C,Q){return kg(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0),0},_crypto_sign_ed25519_pk_to_curve25519:function(A,I){var g,B;return A|=0,B=y,g=y=y+63&-64,y=y+256|0,0==(0|GA(I|=0))&&0==(0|rA(g+88|0,I))&&0!=(0|function(A){var I,g;return I=y,g=y=y+63&-64,y=y+160|0,O(g,A|=0),A=0|cg(g),y=I,0|A}(g+88|0))?(Sg(g),lA(g,g,g+88+40|0),Sg(g+48|0),_A(g+48|0,g+48|0,g+88+40|0),W(g,g),u(g+48|0,g+48|0,g),CA(A,g+48|0),A=0):A=-1,y=B,0|A},_crypto_sign_ed25519_sk_to_curve25519:function(A,I){var g,C,Q;A|=0,C=y,Q=y=y+63&-64,y=y+64|0,RI(Q,I|=0,32,0),B[Q>>0]=-8&B[Q>>0],B[Q+31>>0]=63&B[Q+31>>0]|64,I=Q,g=A+32|0;do{B[A>>0]=0|B[I>>0],A=A+1|0,I=I+1|0}while((0|A)<(0|g));return MI(Q,64),y=C,0},_crypto_sign_final_create:function(A,I,g,B){return function(A,I,g,B){var C,Q;I|=0,g|=0,B|=0,C=y,Q=y=y+63&-64,y=y+64|0,VI(A|=0,Q),hA(I,g,Q,64,0,B,1),y=C}(A|=0,I|=0,g|=0,B|=0),0},_crypto_sign_final_verify:function(A,I,g){return 0|function(A,I,g){var B,C;return I|=0,g|=0,B=y,C=y=y+63&-64,y=y+64|0,VI(A|=0,C),A=0|uA(I,C,64,0,g,1),y=B,0|A}(A|=0,I|=0,g|=0)},_crypto_sign_init:function(A){return function(A){PI(A|=0)}(A|=0),0},_crypto_sign_keypair:function(A,I){return function(A,I){var g,B;A|=0,I|=0,g=y,B=y=y+63&-64,y=y+32|0,Cg(B,32),wI(A,I,B),MI(B,32),y=g}(A|=0,I|=0),0},_crypto_sign_messagebytes_max:function(){return-65},_crypto_sign_open:function(A,I,g,B,C,Q){return 0|SA(A|=0,I|=0,g|=0,B|=0,C|=0,Q|=0)},_crypto_sign_publickeybytes:YB,_crypto_sign_secretkeybytes:dB,_crypto_sign_seed_keypair:function(A,I,g){return wI(A|=0,I|=0,g|=0),0},_crypto_sign_seedbytes:YB,_crypto_sign_statebytes:function(){return 208},_crypto_sign_update:function(A,I,g,B){return xg(A|=0,I|=0,g|=0,B|=0),0},_crypto_sign_verify_detached:function(A,I,g,B,C){return 0|dg(A|=0,I|=0,g|=0,B|=0,C|=0)},_emscripten_get_sbrk_ptr:function(){return 35232},_emscripten_replace_memory:function(A){return B=new Int8Array(A),Q=new Uint8Array(A),C=new Int32Array(A),g=A,!0},_free:d,_i64Add:vg,_i64Subtract:Ug,_malloc:F,_memcpy:BA,_memmove:YI,_memset:YA,_randombytes:function(A,I,g){(g|=0)>>>0<1|1==(0|g)&(I|=0)>>>0<0?Cg(A|=0,I):c(34506,34526,197,34552)},_randombytes_buf:Cg,_randombytes_buf_deterministic:function(A,I,g){OI(A|=0,I|=0,0,34494,g|=0)},_randombytes_close:MB,_randombytes_random:DB,_randombytes_seedbytes:YB,_randombytes_stir:hB,_randombytes_uniform:function(A){var I=0;if((A|=0)>>>0<2)I=0;else{do{I=0|DB()}while(I>>>0<(((0-A|0)>>>0)%(A>>>0)|0)>>>0);I=(I>>>0)%(A>>>0)|0}return 0|I},_sodium_base642bin:m,_sodium_base64_encoded_len:function(A,I){var g;return A|=0,EB(I|=0),(((A>>>0)/3|0)<<2|1)+(4-(3-(g=(0|E((A>>>0)/3|0,-3))+A|0)&0-(I>>>1&1))&0-(1&(g>>>1|g)))|0},_sodium_bin2base64:q,_sodium_bin2hex:function(A,I,g,C){A|=0,g|=0;var E=0,i=0;if((C|=0)>>>0<2147483647&C<<1>>>0<(I|=0)>>>0||SB(),C){I=0;do{i=0|Q[g+I>>0],B[A+(E=I<<1)>>0]=87+(i>>>4)+((65526+(i>>>4)|0)>>>8&217),B[A+(1|E)>>0]=(22272+((15&i)<<8)+(65526+(15&i)&55552)|0)>>>8,I=I+1|0}while((0|I)!=(0|C));I=C<<1}else I=0;return B[A+I>>0]=0,0|A},_sodium_hex2bin:function(A,I,g,E,i,e,o){A|=0,I|=0,g|=0,E|=0,i|=0,e|=0,o|=0;var c=0,a=0,n=0,r=0,t=0,f=0,w=0;A:do{if(E){r=0,f=0,c=0,a=0;I:for(;;){for(;!(255&((t=(65526+(201+(223&(n=0|Q[g+c>>0]))&255)^65520+(201+(223&n)&255))>>>8)|(65526+(48^n)|0)>>>8)|0);){if(!(0!=(0|i)&a<<24>>24==0)){n=0;break I}if(!(0|qg(i,n))){a=r,w=17;break A}if(!((c=c+1|0)>>>0>>0)){a=r,w=17;break A}a=0}if(n=t&201+(223&n)|(65526+(48^n)|0)>>>8&(48^n),r>>>0>=I>>>0){w=9;break}if(a<<24>>24?(B[A+r>>0]=n|255&f,r=r+1|0,n=f):n=n<<4&255,a=~a,!((c=c+1|0)>>>0>>0)){n=0;break}f=n}if(9==(0|w)&&(C[8678]=68,n=-1),a<<24>>24){C[8678]=28,n=0,a=c+-1|0,c=-1;break}if(n){n=0,a=c,c=-1;break}a=r,w=17;break}a=0,c=0,w=17}while(0);return 17==(0|w)&&(n=a,a=c,c=0),o?C[o>>2]=g+a:(0|a)!=(0|E)&&(C[8678]=28,c=-1),0|e&&(C[e>>2]=n),0|c},_sodium_init:function(){var A=0;return 0|C[8676]?A=1:(function(){return A=y,I=y=y+63&-64,y=y+16|0,Zg(I),0|C[I>>2]&&Zg(I),void(y=A);var A,I}(),hB(),function(){var A=0;(0|(A=0|w(30)))>0?C[8677]=A:A=0|C[8677],A>>>0<16?SB():Cg(34688,16)}(),C[8676]=1,A=0),0|A},_sodium_library_minimal:kB,_sodium_library_version_major:function(){return 10},_sodium_library_version_minor:pB,_sodium_pad:function(A,I,g,E,i){A|=0,I|=0,g|=0,i|=0;var e,o,c=0,a=0;if(o=y,e=y=y+63&-64,y=y+16|0,E|=0)if((a=E+-1-(c=E+-1&E?(g>>>0)%(E>>>0)|0:E+-1&g)|0)>>>0>=~g>>>0&&SB(),(a+g|0)>>>0>>0){0|A&&(C[A>>2]=a+g+1),B[e>>0]=0,c=0;do{A=((c^a)-1|0)>>>24,B[(i=I+(a+g)+(0-c)|0)>>0]=128&A|B[e>>0]&B[i>>0]&255,B[e>>0]=0|A|Q[e>>0],c=c+1|0}while((0|c)!=(0|E));c=0}else c=-1;else c=-1;return y=o,0|c},_sodium_unpad:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;var E,i,e=0,o=0,c=0,a=0,n=0;if(i=y,E=y=y+63&-64,y=y+16|0,C[E>>2]=0,(B+-1|0)>>>0>>0){for(e=0,c=0,a=0;e&=255,o=0|Q[I+(g+-1)+(0-c)>>0],n=(511+(0|C[E>>2])&e+511&511+(128^o))>>>8&1,C[E>>2]=c&0-n|C[E>>2],a=n|255&a,(0|(c=c+1|0))!=(0|B);)e|=o;C[A>>2]=g+-1-(0|C[E>>2]),e=a+-1|0}else e=-1;return y=i,0|e},_sodium_version_string:function(){return 34617},establishStackSpace:function(A,I){y=A|=0},stackAlloc:function(A){var I;return I=y,y=15+(y=y+(A|=0)|0)&-16,0|I},stackRestore:function(A){y=A|=0},stackSave:function(){return 0|y}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array},{a:j,b:function(A){s=A},c:function(){return s},d:function(A,I,g,B){j("Assertion failed: "+d(A)+", at: "+[I?d(I):"unknown filename",g,B?d(B):"unknown function"])},e:BA,f:function(){j()},g:function(A){return O[A]()},h:IA,i:function(A,I,g){u.set(u.subarray(I,I+g),A)},j:function(A){var I=IA();if(A>2130706432)return!1;for(var g=Math.max(I,16777216);g>0]=I;break;case"i16":H[A>>1]=I;break;case"i32":k[A>>2]=I;break;case"i64":q=[I>>>0,(T=I,+R(T)>=1?T>0?(0|L(+m(T/4294967296),4294967295))>>>0:~~+N((T-+(~~T>>>0))/4294967296)>>>0:0)],k[A>>2]=q[0],k[A+4>>2]=q[1];break;case"float":l[A>>2]=I;break;case"double":_[A>>3]=I;break;default:j("invalid type for setValue: "+g)}},I.getValue=function(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return p[A>>0];case"i16":return H[A>>1];case"i32":case"i64":return k[A>>2];case"float":return l[A>>2];case"double":return _[A>>3];default:j("invalid type for getValue: "+I)}return null},I.UTF8ToString=d,V)if(W(V)||(eA=V,V=I.locateFile?I.locateFile(eA,f):f+eA),o||i){var nA=n(V);u.set(nA,8)}else{x++,I.monitorRunDependencies&&I.monitorRunDependencies(x);var rA=function(A){A.byteLength&&(A=new Uint8Array(A)),u.set(A,8),I.memoryInitializerRequest&&delete I.memoryInitializerRequest.response,function(A){if(x--,I.monitorRunDependencies&&I.monitorRunDependencies(x),0==x&&(null!==K&&(clearInterval(K),K=null),X)){var g=X;X=null,g()}}()},tA=function(){a(V,rA,function(){throw"could not load memory initializer "+V})},fA=iA(V);if(fA)rA(fA.buffer);else if(I.memoryInitializerRequest){var wA=function(){var A=I.memoryInitializerRequest,g=A.response;if(200!==A.status&&0!==A.status){var B=iA(I.memoryInitializerRequestURL);if(!B)return void tA();g=B.buffer}rA(g)};I.memoryInitializerRequest.response?setTimeout(wA,0):I.memoryInitializerRequest.addEventListener("load",wA)}else tA()}function yA(A){function g(){oA||(oA=!0,h||(U(b),U(J),I.onRuntimeInitialized&&I.onRuntimeInitialized(),function(){if(I.postRun)for("function"==typeof I.postRun&&(I.postRun=[I.postRun]);I.postRun.length;)A=I.postRun.shift(),P.unshift(A);var A;U(P)}()))}A=A||e,x>0||(function(){if(I.preRun)for("function"==typeof I.preRun&&(I.preRun=[I.preRun]);I.preRun.length;)A=I.preRun.shift(),v.unshift(A);var A;U(v)}(),x>0||(I.setStatus?(I.setStatus("Running..."),setTimeout(function(){setTimeout(function(){I.setStatus("")},1),g()},1)):g()))}if(X=function A(){oA||yA(),oA||(X=A)},I.run=yA,I.preInit)for("function"==typeof I.preInit&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();yA(),Object.keys(B).forEach(function(A){"getRandomValue"!==A&&delete B[A]}),Object.keys(I).forEach(function(A){B[A]=I[A]})};var g,C=void 0!==C?C:{},Q={};for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);var E,i,e=[],o=!1,c=!1,a=!1;o="object"==typeof window,c="function"==typeof importScripts,E="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,a=E&&!o&&!c,i=!o&&!a&&!c;var n,r,t,f,w="";a?(w=__dirname+"/",n=function(A,I){var g;return(g=eA(A))||(t||(t=require("fs")),f||(f=require("path")),A=f.normalize(A),g=t.readFileSync(A)),I?g:g.toString()},r=function(A){var I=n(A,!0);return I.buffer||(I=new Uint8Array(I)),H(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),e=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=C),process.on("unhandledRejection",z),C.inspect=function(){return"[Emscripten Module object]"}):i?("undefined"!=typeof read&&(n=function(A){var I=eA(A);return I?EA(I):read(A)}),r=function(A){var I;return(I=eA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(H("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?e=scriptArgs:void 0!==arguments&&(e=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(o||c)&&(c?w=self.location.href:document.currentScript&&(w=document.currentScript.src),w=0!==w.indexOf("blob:")?w.substr(0,w.lastIndexOf("/")+1):"",n=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=eA(A);if(g)return EA(g);throw I}},c&&(r=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=eA(A);if(g)return g;throw I}}));var y=C.print||void 0,s=C.printErr||void 0;for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);Q=null,C.arguments&&(e=C.arguments),C.thisProgram&&C.thisProgram,C.quit&&C.quit;var h,D,F={"f64-rem":function(A,I){return A%I},debugger:function(){}};new Array(8),C.wasmBinary&&(h=C.wasmBinary),C.noExitRuntime&&C.noExitRuntime,"object"!=typeof WebAssembly&&s("no native wasm support detected");var p=new WebAssembly.Table({initial:0,maximum:0,element:"anyfunc"}),u=!1;function H(A,I){A||z("Assertion failed: "+I)}var k,l,_,G,d,Y,M,S="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function U(A,I){return A?function(A,I,g){for(var B=I+g,C=I;A[C]&&!(C>=B);)++C;if(C-I>16&&A.subarray&&S)return S.decode(A.subarray(I,C));for(var Q="";I>10,56320|1023&o)}}else Q+=String.fromCharCode((31&E)<<6|i)}else Q+=String.fromCharCode(E)}return Q}(_,A,I):""}function v(A,I){return A%I>0&&(A+=I-A%I),A}function b(A){k=A,C.HEAP8=l=new Int8Array(A),C.HEAP16=G=new Int16Array(A),C.HEAP32=d=new Int32Array(A),C.HEAPU8=_=new Uint8Array(A),C.HEAPU16=new Uint16Array(A),C.HEAPU32=new Uint32Array(A),C.HEAPF32=Y=new Float32Array(A),C.HEAPF64=M=new Float64Array(A)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var J=C.TOTAL_MEMORY||16777216;function P(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?C.dynCall_v(g):C.dynCall_vi(g,I.arg):g(void 0===I.arg?null:I.arg)}else I()}}(D=C.wasmMemory?C.wasmMemory:new WebAssembly.Memory({initial:J/65536}))&&(k=D.buffer),J=k.byteLength,b(k),d[9312]=5280320;var R=[],N=[],m=[],L=[],x=Math.abs,K=Math.ceil,X=Math.floor,j=Math.min,T=0,q=null,V=null;function z(A){throw C.onAbort&&C.onAbort(A),y(A+=""),s(A),u=!0,"abort("+A+"). Build with -s ASSERTIONS=1 for more info."}C.preloadedImages={},C.preloadedAudios={};var W="data:application/octet-stream;base64,";function O(A){return String.prototype.startsWith?A.startsWith(W):0===A.indexOf(W)}var Z,$,AA,IA="data:application/octet-stream;base64,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XQJxYwCIAgJyYwBeAnNjAIoCAnRjAIkCAnVjAIMCAnZjAEgCd2MA/AECeGMAbAJ5YwD/AQJ6YwD+AQJBYwD9AQq20ATgAhMAIABBwAAgAWuthiAAIAGtiIQLEAAgACABdCAAQSAgAWt2cgseACAAIAF8IAFC/////w+DIABCAYZC/v///x+DfnwLUAEDfwJ/IwAhBCMAQT9qQUBxJAAjACECIwBBEGokACACIAA2AgAgAQRAQQAhAANAIAAgAigCAGpBADoAACAAQQFqIgAgAUcNAAsLIAQLJAALCQAgACABNgAAC8UJAg1/KX4gAigCBCIDrCEQIAIoAggiBKwhGCACKAIMIgWsIRsgAigCECIGrCEdIAIoAhQiB6whHyACKAIYIgisISYgAigCHCIJrCEtIAIoAiAiCqwhMCABKAIEIgusISAgASgCDCIMrCEhIAEoAhQiDawhIiABKAIcIg6sISMgASgCJCIPrCEkIA9BAXSsIicgA0ETbKx+IAEoAgCsIhEgAigCAKwiEn58IAEoAiCsIhMgBEETbKwiLn58IA5BAXSsIiggBUETbKwiKX58IAEoAhisIhQgBkETbKwiJX58IA1BAXSsIiogB0ETbKwiHn58IAEoAhCsIhUgCEETbKwiHH58IAxBAXSsIisgCUETbKwiGX58IApBE2ysIhcgASgCCKwiFn58IAtBAXSsIiwgAigCJCIBQRNsrCIafnwhMSAQIBR+IBIgI358IBggIn58IBUgG358IB0gIX58IBYgH358ICAgJn58IBEgLX58IBcgJH58IBMgGn58IBAgKn4gEiAUfnwgFSAYfnwgGyArfnwgFiAdfnwgHyAsfnwgESAmfnwgGSAnfnwgEyAXfnwgGiAofnwgECAVfiASICJ+fCAYICF+fCAWIBt+fCAdICB+fCARIB9+fCAcICR+fCATIBl+fCAXICN+fCAUIBp+fCAQICt+IBIgFX58IBYgGH58IBsgLH58IBEgHX58IB4gJ358IBMgHH58IBkgKH58IBQgF358IBogKn58Ii9CgICAEHwiM0Iah3wiNEKAgIAIfCI1QhmHfCI2QoCAgBB8IjdCGod8ITIgLyAzQoCAgGCDfSASICF+IBAgFn58IBggIH58IBEgG358ICQgJX58IBMgHn58IBwgI358IBQgGX58IBcgIn58IBUgGn58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KAIAIgEEQCAEQQF0IQQgASgCBEF4cSADRg0CIAEhAAwBCwsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAILCyABKAIIIgAgAjYCDCABIAI2AgggAiAANgIIIAIgATYCDCACQQA2AhgLBUGQlwIgBCAGcjYCACAAIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggLQayXAkGslwIoAgBBf2oiADYCACAABEAPC0HUmgIhAANAIAAoAgAiAUEIaiEAIAENAAtBrJcCQX82AgALBABBIAvGAwEDfyACQYDAAE4EQCAAIAEgAhAFGiAADwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAsKACAAIAEgAhA7C5gCAQR/IAAgAmohBCABQf8BcSEDIAJBwwBOBEADQCAAQQNxBEAgACADOgAAIABBAWohAAwBCwsgA0EIdCADciADQRB0ciADQRh0ciEBIARBfHEiBUFAaiEGA0AgACAGTARAIAAgATYCACAAIAE2AgQgACABNgIIIAAgATYCDCAAIAE2AhAgACABNgIUIAAgATYCGCAAIAE2AhwgACABNgIgIAAgATYCJCAAIAE2AiggACABNgIsIAAgATYCMCAAIAE2AjQgACABNgI4IAAgATYCPCAAQUBrIQAM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ACIgQQEQByElIAZBEGpBA3QgAmogHCAhfCAifCAgQQgQByAlICBCB4iFhXwiIjcDACAdQRMQByEhIB1BPRAHICEgHUIGiIWFIRwgGSkDACEhIBQpAwAiHUEBEAchJSATQRBqQQN0IAJqICAgHCAhfHwgHUEIEAcgJSAdQgeIhYV8IiA3AwAgIkETEAchHCAiQT0QByAcICJCBoiFhSEcIAdBCWpBA3QgAmopAwAhJSAHQQFqQQN0IAJqKQMAIiJBARAHISYgB0EQakEDdCACaiAdICV8IBx8ICJBCBAHICYgIkIHiIWFfCIdNwMAICBBExAHIRwgIyAgQT0QByAcICBCBoiFhXwhHCAWKQMAIiBBARAHISUgFUEQakEDdCACaiAcICJ8ICBBCBAHICUgIEIHiIWFfCIiNwMAIB1BExAHIRwgHUE9EAcgHCAdQgaIhYUhHCAIQQlqQQN0IAJqKQMAISUgCEEBakEDdCACaikDACIdQQEQByEmIAhBEGpBA3QgAmogICAlfCAcfCAdQQgQByAmIB1CB4iFhXwiIDcDACAiQRMQByEcICJBPRAHIBwgIkIGiIWFISIgDUEJakEDdCACaikDACAifCEiIB5BARAHIRwgDUEQakEDdCACaiAdICJ8IB5BCBAHIBwgHkIHiIWFfCIdNwMAICBBExAHISIgIEE9EAcgIiAgQgaIhYUhIiAJQQlqQQN0IAJqKQMAIRwgCUEBakEDdCACaikDACIgQQEQByElIAlBEGpBA3QgAmogHCAefCAifCAgQQgQByAlICBCB4iFhXwiHjcDACAdQRMQByEiIB1BPRAHICIgHUIGiIWFIR0gDkEJakEDdCACaikDACAdfCEdIB9BARAHISIgDkEQakEDdCACaiAdICB8IB9BCBAHICIgH0IHiIWFfCIdNwMAIB5BExAHISAgHkE9EAcgICAeQgaIhYUhICAKQQlqQQN0IAJqKQMAISIgCkEBakEDdCACaikDACIeQQEQByEcIApBEGpBA3QgAmogHyAifCAgfCAeQQgQByAcIB5CB4iFhXwiHzcDACAdQRMQByEgIB1BPRAHICAgHUIGiIWFIR0gD0EJakEDdCACaikDACAdfCEdICFBARAHISAgD0EQakEDdCACaiAdIB58ICFBCBAHICAgIUIHiIWFfCIeNwMAIB9BExAHIR0gH0E9EAcgHSAfQgaIhYUhHSALQQlqQQN0IAJqKQMAISAgC0EBakEDdCACaikDACIfQQEQByEiIAtBEGpBA3QgAmogICAhfCAdfCAfQQgQByAiIB9CB4iFhXwiHzcDACAeQRMQByEhIB5BPRAHICEgHkIGiIWFIR4gEEEJakEDdCACaikDACEhICNBARAHIR0gEEEQakEDdCACaiAhICR8IB58ICNBCBAHIB0gI0IHiIWFfDcDACAfQRMQByEeIB9BPRAHIB4gH0IGiIWFIR8gDEEJakEDdCACaikDACEhIAxBAWpBA3QgAmopAwAiHkEBEAchJCAMQRBqQQN0IAJqICEgI3wgH3wgHkEIEAcgJCAeQgeIhYV8NwMAIARB0ABJBEAgBCEBDAILCwtBACEBA0AgAUEDdCAAaiICIAFBA3QgA2opAwAgAikDAHw3AwAgAUEBaiIBQQhHDQALCywAIAJBgAJJBEAgACABIAJB/wFxEHMPBUH7jQJBj44CQesAQcSOAhACC0EAC0IAIANBf2pBP0sgAkHAAEtyBH9BfwUgA0H/AXEhAyACRSABRXIEQCAAIAMQrgEFIAAgAyABIAJB/wFxEK0BC0EACwsKACAAIAEgAhBNCwwAIAAgASACIAMQTgvoBAEUfyACKAAAIQ8CfyACKAAIIRYgAigADCEDQRQhFEHl8MGLBiEEQbLaiMsHIQwgAigAECEQIAIoABQhCSACKAAYIQ0gAigAHCEKQfTKgdkGIQUgAigABCECIBYLIQsgAyEIQe7IgZkDIQYgASgAACEOIAEoAAQhAyABKAAIIQcgASgADCEBA0AgBCAEIAlqQQcQCCAIcyIRakEJEAggB3MiByAHIBFqQQ0QCCAJcyIJakESEAggBHMhBCAGIAYgD2pBBxAIIAFzIhJqQQkQCCANcyIVIBIgFWpBDRAIIA9zIg1qQRIQCCAGcyEGIAwgDCAOakEHEAggCnMiE2pBCRAIIAJzIgIgAiATakENEAggDnMiCGpBEhAIIAxzIQogBSAFIBBqQQcQCCALcyILakEJEAggA3MiAyADIAtqQQ0QCCAQcyIBakESEAggBXMhBSAEIAQgC2pBBxAIIA1zIg9qQQkQCCACcyICIAIgD2pBDRAIIAtzIgtqQRIQCCAEcyEEIAYgBiARakEHEAggCHMiDmpBCRAIIANzIgMgAyAOakENEAggEXMiCGpBEhAIIAZzIQYgCiASakEHEAggAXMiECAKakEJEAggB3MiByAHIBBqQQ0QCCAScyIBakESEAggCnMhDCAFIBNqQQcQCCAJcyIJIAVqQQkQCCAVcyINIAkgDWpBDRAIIBNzIgpqQRIQCCAFcyEFIBRBfmoiFA0ACyAAIAQQCyAAQQRqIAYQCyAAQQhqIAwQCyAAQQxqIAUQCyAAQRBqIA4QCyAAQRRqIAMQCyAAQRhqIAcQCyAAQRxqIAEQCwveEwIIfx9+IAAsAAAgACwAASAAQQJqIgIsAAAQEEL///8AgyETAn4gAhARQgWIQv///wCDIScgACwABSAALAAGIABBB2oiAywAABAQQgKIQv///wCDIR8gAxARQgeIQv///wCDISAgAEEKaiIHEBFCBIhC////AIMhGSAALAANIAAsAA4gAEEPaiIELAAAEBBCAYhC////AIMhISAEEBFCBohC////AIMhFCAALAASIAAsABMgACwAFBAQQgOIQv///wCDIRogACwAFSAALAAWIABBF2oiBSwAABAQQv///wCDIRUgBRARQgWIQv///wCDIRsgACwAGiAALAAbIABBHGoiBiwAABAQQgKIQv///wCDIRYgBhARQgeIQv///wCDIRwgAEEfaiIIEBFCBIhC////AIMhECAALAAiIAAsACMgAEEkaiIBLAAAEBBCAYhC////AIMhESABEBFCBohC////AIMhEgJ+IAAsACcgACwAKCAALAApEBBCA4hC////AIMhJiAALAAqIAAsACsgAEEsaiIBLAAAEBBC////AIMhDCABEBFCBYhC////AIMhHSAALAAvIAAsADAgAEExaiIBLAAAEBBCAohC////AIMhCSABEBFCB4hC////AIMhCiAAQTRqEBFCBIhC////AIMhCyAALAA3IAAsADggAEE5aiIBLAAAEBBCAYhC////AIMhDSABEBFCBohC////AIMhDiAAQTxqEBFCA4giD0KDoVZ+IAx8IQwgC0KDoVZ+IBF8IA1C0asIfnwgD0Ln9id+fCAOQtOMQ358IApCg6FWfiAQfCALQtGrCH58IA1C04xDfnwgD0KY2hx+fCAOQuf2J358Ih5CgIBAfSIiQhWHfCERICYLIA9C0asIfnwgDkKDoVZ+fCANQoOhVn4gEnwgD0LTjEN+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fCANIBB+IA4gEX58IA8gEn58IBMgFX58IBQgGH58IBpCGohC/////w+DfCIdQhqIQv////8Pg3wiF6dB////H3EhBSANIBl+IBEgFn58IBAgEn58IA4gE358IA8gFH58IBdCGohC/////w+DfCIXp0H///8fcSEGIA0gHH4gESAZfnwgEiAWfnwgECATfnwgDiAUfnwgF0IaiEL/////D4N8Ig2nQf///x9xIQcgDUIaiKdBBWwgGqdB////H3FqIgNB////H3EhBCAdp0H///8fcSADQRp2aiEDIAFBEGohASACQnB8IgJCD1YNAAsLIAAgBDYCFCAAIAM2AhggACAFNgIcIAAgBjYCICAAIAc2AiQLMAAgAUF/akE/SyAFQcAAS3IEf0F/BSAAIAIgBCABQf8BcSADIAVB/wFxEOECQQALC4QDAQd/IwAhByMAQT9qQUBxJAAjACEDIwBBQGskACACQf8BcQRAIAJB/wFxIQggAkH/AXFBwABMBEACfyAAKQBQQgBSBH9BfwUgACgA4AIiAkGAAUsEQCAAQoABEHQgACAAQeAAaiICEHcgACAAKADgAkGAf2oiBTYA4AIgBUGBAUkEQCACIABB4AFqIAUQGBogACgA4AIhBiACIQQFQaCNAkHAjQJBsgJB7Y0CEAILBSACIQYgAEHgAGohBAsgACAGrRB0IAAiAiwA5AIEQCACQn83AFgLIAJCfzcAUCAAKADgAiICIABB4ABqakEAQYACIAJrEBoaIAAgBBB3IAMgACkAABASIANBCGogACkACBASIANBEGogACkAEBASIANBGGogACkAGBASIANBIGogACkAIBASIANBKGogACkAKBASIANBMGogACkAMBASIANBOGogACkAOBASIAEgAyAIEBgaIABBwAAQCiAEQYACEApBAAshCSAHJAAgCQsPCwsQAEEACy0CAX8BfiABIABBQGsiAikAAHwhAyACIAM3AAAgACAAKQBIIAMgAVStfDcASAsJACAAQQA2AAALNgECfyAAEOMCA0AgAkEDdCAAaiIDIAEgAkEDdGopAAAgAykAAIU3AAAgAkEBaiICQQhHDQALC4s2AgV/In4CfyMAIQYjAEE/akFAcSQAIwAhAiMAQYACaiQAIAJBgAFqIQMDQCAEQQN0IANqIAEgBEEDdGopAAA3AwAgBEEBaiIE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EyABLAAUEBBCA4hC////AIMhDSABLAAVIAEsABYgAUEXaiIELAAAEBBC////AIMhCCAEEBFCBYhC////AIMhECABLAAaIAEsABsgAUEcaiIBLAAAEBBCAohC////AIMhDCABEBFCB4ghCSACLAAAIAIsAAEgAkECaiIBLAAAEBBC////AIMhGCABEBFCBYhC////AIMhGSACLAAFIAIsAAYgAkEHaiIBLAAAEBBCAohC////AIMhGyABEBFCB4hC////AIMhHCACQQpqEBFCBIhC////AIMhGiACLAANIAIsAA4gAkEPaiIBLAAAEBBCAYhC////AIMhFSABEBFCBohC////AIMhFiACLAASIAIsABMgAiwAFBAQQgOIQv///wCDIREgAiwAFSACLAAWIAJBF2oiASwAABAQQv///wCDIRMgARARQgWIQv///wCDIRQgAiwAGiACLAAbIAJBHGoiASwAABAQQgKIQv///wCDIRIgARARQgeIIRcgAywAACADLAABIANBAmoiASwAABAQQv///wCDIR0gARARQgWIQv///wCDIR4gAywABSADLAAGIANBB2oiASwAABAQQgKIQv///wCDITEgARARQgeIQv///wCDITIgA0EKahARQgSIQv///wCDITMgAywADSADLAAOIANBD2oiASwAABAQQgGIQv///wCDITQgARARQgaIQv///wCDISogAywAEiADLAATIAMsABQQEEIDiEL///8AgyE1IAMsABUgAywAFiADQRdqIgEsAAAQEEL///8AgyErIAEQEUIFiEL///8AgyEsIBAgGX4gDCAYfnwgCCAbfnwgDSAcfnwgCyAafnwgByAVfnwgCiAWfnwgDiATfnwgDyARfnwgBiAUfnwgBSASfnwgAywAGiADLAAbIANBHGoiASwAABAQQgKIQv///wCDfCItQoCAQH0hJSAMIBR+IAkgE358IBAgEn58IAggF358IAwgE34gCSARfnwgECAUfnwgCCASfnwgDSAXfnwiH0KAgEB9IiZCFYd8ISEgDCAXfiAJIBJ+fCAMIBJ+IAkgFH58IBAgF358IiJCgIBAfSIkQhWHfCEgIAkgF34iJ0KAgEB9IihCFYchIyAFIBl+IAYgGH58IB58IB0gBSAYfnwiNkKAgEB9IjdCFYh8IjhCgIBAfSEwIB8gJkKAgIB/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IAVB////H3E2AgggACAGQf///w9xNgIMIAAgB0H///8fcTYCECAAIAhB////D3E2AhQgACAJQf///x9xNgIYIAAgAUH///8PcTYCHCAAIANB////H3E2AiAgACAKIANBGnVqQf///w9xNgIkC0MBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQSBqJAAgAyACIAEQoQEEf0F/BSAAQdCWAiADEFFBAAshACAFCyQAIAALZQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBBQGskACADIAJCIBA5IAEgAykAADcAACABIAMpAAg3AAggASADKQAQNwAQIAEgAykAGDcAGCADQcAAEAogACABEGghACAFCyQAIAALBABBMAtRAQN/An8jACEHIwBBP2pBQHEkACMAIQUjAEEgaiQAIAJCMFQEf0F/BSAFIAEgAxCDASAAIAFBIGogAkJgfCAFIAEgBBCEAQshACAHCyQAIAALigEBBH8jACEFIwBB4ABqJAAgBUFAayEGIAVBIGoiBCAFIgcQiAEEQEF/IQAFIAAgBCkAADcAACAAIAQpAAg3AAggACAEKQAQNwAQIAAgBCkAGDcAGCAGIAQgAxCDASAAQSBqIAEgAiAGIAMgBxCGASEAIAdBIBAKIARBIBAKIAZBGBAKCyAFJAAgAAshACACQhBUBH9BfwUgACABQRBqIAEgAkJwfCADIAQQWQsLKAAgAkLv////D1YEQBAABSAAQRBqIAAgASACIAMgBBBaGkEADwtBAAszAQF+IAGtIAKtQiCGhCIDQoCAgIAQVARAIAAgA6cQHwVBupUCQc6VAkHFAUHolQIQAgsLFQAgACABIAKtIAOtQiCGhCAEEJsBCxQAIAAgASACrSADrUIghoQQHUEACxcAIAAgASACIAOtIAStQiCGhCAFEJQCCxkAIAAgASACIAOtIAStQiCGhCAFEJkBQQALFwAgACABIAIgA60gBK1CIIaEIAUQkwILFwAgACABIAKtIAOtQiCGhCAEEKICQQALJQAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCRCpAgslACAAIAEgAiADIAQgBa0gBq1CIIaEIAcgCK0gCa1CIIaEEKcCCxcAIAAgASACrSADrUIghoQgBCAFEKwCCxgAIAAgASACIAOtIAStQiCGhCAFIAYQZgsXACAAIAEgAq0gA61CIIaEIAQgBRCtAgsYACAAIAEgAiADrSAErUIghoQgBSAGEGcLEwAgACABIAKtIAOtQiCGhBC0AgsTACAAIAGtIAKtQiCGhCADELMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxC1AgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEKIBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChC2AgsXACAAIAEgAq0gA61CIIaEIAQgBRDZAgsUACAAIAEgAq0gA61CIIaEEDlBAAsSACAAIAEgAq0gA61CIIaEECcLGQAgACABIAIgA60gBK1CIIaEIAUgBhCvAQsXACAAIAEgAq0gA61CIIaEIAQgBRDCAQsVACAAIAEgAq0gA61CIIaEIAQQwwELFwAgACABIAKtIAOtQiCGhCAEIAUQxAELGQAgACABIAKtIAOtQiCGhCAEIAUgBhCEAQsYACAAIAEgAiADrSAErUIghoQgBSAGEFkLGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEIUBCwsAIAAgASACEMABCxcAIAAgASACrSADrUIghoQgBCAFEMUBCxkAIAAgASACrSADrUIghoQgBCAFIAYQhgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBaCxsAIAAgASACIAOtIAStQiCGhCAFIAYgBxCHAQsVACAAIAEgAq0gA61CIIaEIAQQ7QELFwAgACABIAKtIAOtQiCGhCAEEIkBQQALJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQnwILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEI4CCz4BAn8jACEEIwBBIGokACAEIAEgAiADEIkBQX8gACAEEJEBIAAgBEYbIQEgBCAAQSAQQSABciEFIAQkACAFCyYAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxB7CyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQtQELJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCsAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEN0CCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCCAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKELwBCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQsAELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDkAgvQAgEGfyAAQYB/TwRAQYiXAkEwNgIAQQAPC0EQIABBC2pBeHEgAEELSRsiBEHMAGoQISIARQRAQQAPCyAAQXhqIQEgAEE/cQR/IABBfGoiBSgCACIGQXhxIABBP2pBQHEiAEF4aiICIABBOGogAiABa0EPSxsiACABayICayEDIAZBA3EEQCAAIAAoAgRBAXEgA3JBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSAFKAIAQQFxIAJyQQJyNgIAIAAgACgCBEEBcjYCBCABIAIQigEFIAAgASgCACACajYCACAAIAM2AgQLIAAFIAEiAAshAiAAKAIEIgFBA3EEQCABQXhxIgMgBEEQaksEQCAAIAFBAXEgBHJBAnI2AgQgAiAEaiIAIAMgBGsiAUEDcjYCBCACIANqIgQgBCgCBEEBcjYCBCAAIAEQigELCyACQQhqCy4BAX8gABAhIgFFBEAgAQ8LIAFBfGooAgBBA3FFBEAgAQ8LIAFBACAAEBoaIAEL+gEBA38gAUH/AXEiAgRAAkAgAEEDcQRAIAFB/wFxIQMDQCAALAAAIgQgA0EYdEEYdUYgBEVyDQIgAEEBaiIAQQNxDQALCyACQYGChAhsIQMgACgCACICQYCBgoR4cUGAgYKEeHMgAkH//ft3anFFBEADQCACIANzIgJBgIGChHhxQYCBgoR4cyACQf/9+3dqcUUEQCAAQQRqIgAoAgAiAkGAgYKEeHFBgIGChHhzIAJB//37d2pxRQ0BCwsLIAFB/wFxIQIDQCAAQQFqIQEgACwAACIDIAJBGHRBGHVGIANFckUEQCABIQAMAQsLCwUgABAjIABqIQALIAALQgEBfyMAIQIjAEFAayQAIAAgAhCBAiABIAIpAAA3AAAgASACKQAINwAIIAEgAikAEDcAECABIAIpABg3ABggAiQACwYAQYiXAguhAQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBB8ABqJAAgAyACKQAANwAAIAMgAikACDcACCADIAIpABA3ABAgAyACKQAYNwAYIANB4ABqIgIgASkAADcDACACQgA3AwggA0EgaiIBIAIgAxB4QQAhAgNAIAAgAmogASACaiwAADoAACACQQFqIgJBIEcNAAsgAUHAABAKIANBIBAKIAULJAALBABBCgsGAEGplgILyAEBCH8CfyMAIQsjAEE/akFAcSQAIwAhBCMAQRBqJAAgBEEANgIAIANBf2ogAkkEfyABIAJBf2oiCGohCUEAIQJBACEBA0AgCSABay0AACIKQYABc0H/A2ogAkH/AXEiAkH/A2ogBCgCAEH/A2pxcUEIdkEBcSEGIAIgCnIhAiAEIAQoAgBBACAGayABcXI2AgAgBiAFQf8BcXIhBSABQQFqIgEgA0cNAAsgACAIIAQoAgBrNgIAIAVBf2oFQX8LIQAgCwskACAAC9YBAQV/An8jACEJIwBBP2pBQHEkACMAIQYjAEEQaiQAIAMEfyADIANBf2oiBXEEfyACIANwBSACIAVxCyEIIAUgCGsiBSACQX9zTwRAEAALIAIgBWoiAiAESQR/IAAEQCAAIAJBAWo2AgALIAEgAmohASAGQQA6AABBACEAA38gASAAayICIAIsAAAgBiwAAHFB/wFxIAAgBXNBf2pBGHYiAkGAAXFyOgAAIAYgBi0AACACcjoAACAAQQFqIgAgA0cNAEEACwVBfwsFQX8LIQAgCQskACAACzYBAX9BHhADIgBBAEoEQEGElwIgADYCAAVBhJcCKAIAIQALIABBEEkEQBAABUHwlgJBEBAfCws1AQF/IwAhAiMAQUBrJAAgACACECogAEHQAWoiACACQsAAEB0gACABECogAkHAABAKIAIkAAs2AQN/An8jACECIwBBP2pBQHEkACMAIQAjAEEQaiQAIAAQjQEgACgCAARAIAAQjQELIAILJAALIwBBgJcCKAIABH9BAQUQggIQkAEQgAJBgJcCQQE2AgBBAAsLgQEBBH8gBAR/An8gA0UhBiACKAIAIQUCQANAIAUgAUkEQCAAIAVqLAAAIgchCCAHQT1GBEAgBEF/aiEEBSAGDQMgAyAIEEBF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BMUAKNUyAdRghP9YirT+5JJ8/7j29wBBdVb//WbS/v55JACJcwP/PBjYAIYSHQA74mEAsI5HAAfRoQC9VDP+m/pIANVU6/8t3uAA7pSP/6oqNf9Op3UAugAo/32xZ/9F4UIA4wdYAUusBgCpLeMBECRG/zICCf+LwRYAj7fn/tpFMgDsOKEB1YMqAIqRLP6I5Sj/MT8j/z2R9f9lwAL+6KdxAJhoJgF5udoAeYvT/nfwIwBBvdn+u7Oi/6C75gA++A7/PE5hAP/3o//hO1v/a0c6//EvIQEydewA27E//vRaswAjwtf/vUMy/xeHgQBovSX/uTnCACM+5//c+GwADOeyAI9QWwGDXWX/kCcCAf/6sgAFEez+iyAuAMy8Jv71czT/v3FJ/r9sRf8WRfUBF8uyAKpjqgBB+G8AJWyZ/0AlRQAAWD7+WZSQ/79E4AHxJzUAKcvt/5F+wv/dKv3/GWOXAGH93wFKczH/Bq9I/zuwywB8t/kB5ORjAIEMz/6owMP/zLAQ/pjqqwBNJVX/IXiH/47C4wEf1joA1bt9/+guPP++dCr+l7IT/zM+7f7M7MEAwug8AKwinf+9ELj+ZwNf/43pJP4pGQv/FcOmAHb1LQBD1ZX/nwwS/7uk4wGgGQUADE7DASvF4QAwjin+xJs8/9/HEgGRiJwA/HWp/pHi7gDvF2sAbbW8/+ZwMf5Jqu3/57fj/1DcFADCa38Bf81lAC40xQHSqyT/WANa/ziXjQBgu///Kk7IAP5GRgH0fagAzESKAXzXRgBmQsj+ETTkAHXcj/7L+HsAOBKu/7qXpP8z6NABoOQr//kdGQFEvj8ADQAAAAD/AAAAAPUAAAAAAAD7AAAAAAAA/QAAAADzAAAAAAcAAAAAAAMAAAAA8wAAAAAFAEGLgQILQAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAQcyCAgsBAQBB8IICCwEBAEGQgwILsAEm6JWPwrInsEXD9Iny75jw1d+sBdPGMzmxOAKIbVP8BccXanA9TdhPujwLdg0QZw8qIFP6LDnMxk7H/XeSrAN67P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBz4QCC8IFEAjJvPNn5glqO6fKhIWuZ7sr+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/LXxdYR0qMGURsgABBsIsCCwEBAEHQiwILwQHg63p8O0G4rhZW4/rxn8Rq2gmN65wysf2GYgUWX0m4AF+clbyjUIwksdCxVZyD71sERFzEWByOhtgiTt3QnxFX7P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBAEGgjQILjwlTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAb3V0bGVuIDw9IFVJTlQ4X01BWABjcnlwdG9fZ2VuZXJpY2hhc2gvYmxha2UyYi9yZWYvZ2VuZXJpY2hhc2hfYmxha2UyYi5jAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX2ZpbmFsACRhcmdvbjJpZAAkYXJnb24yaQAkdj0AJG09ACx0PQAscD0AJGFyZ29uMmlkJHY9ACRhcmdvbjJpJHY9ACRhcmdvbjJpZCQAJGFyZ29uMmkkACJ7IHJldHVybiBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUoKTsgfSIAeyBpZiAoTW9kdWxlLmdldFJhbmRvbVZhbHVlID09PSB1bmRlZmluZWQpIHsgdHJ5IHsgdmFyIHdpbmRvd18gPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdyA6IHNlbGY7IHZhciBjcnlwdG9fID0gdHlwZW9mIHdpbmRvd18uY3J5cHRvICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvd18uY3J5cHRvIDogd2luZG93Xy5tc0NyeXB0bzsgdmFyIHJhbmRvbVZhbHVlc1N0YW5kYXJkID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBuZXcgVWludDMyQXJyYXkoMSk7IGNyeXB0b18uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7IHJldHVybiBidWZbMF0gPj4+IDA7IH07IHJhbmRvbVZhbHVlc1N0YW5kYXJkKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlc1N0YW5kYXJkOyB9IGNhdGNoIChlKSB7IHRyeSB7IHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTsgdmFyIHJhbmRvbVZhbHVlTm9kZUpTID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBjcnlwdG9bJ3JhbmRvbUJ5dGVzJ10oNCk7IHJldHVybiAoYnVmWzBdIDw8IDI0IHwgYnVmWzFdIDw8IDE2IHwgYnVmWzJdIDw8IDggfCBidWZbM10pID4+PiAwOyB9OyByYW5kb21WYWx1ZU5vZGVKUygpOyBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPSByYW5kb21WYWx1ZU5vZGVKUzsgfSBjYXRjaCAoZSkgeyB0aHJvdyAnTm8gc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvdW5kJzsgfSB9IH0gfQBMaWJzb2RpdW1EUkdidWZfbGVuIDw9IFNJWkVfTUFYAHJhbmRvbWJ5dGVzL3JhbmRvbWJ5dGVzLmMAcmFuZG9tYnl0ZXMAYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAxLjAuMTg=";function gA(){try{if(h)return new Uint8Array(h);var A=eA(IA);if(A)return A;if(r)return r(IA);throw"both async and sync fetching of the wasm failed"}catch(A){z(A)}}O(IA)||(Z=IA,IA=C.locateFile?C.locateFile(Z,w):w+Z),C.asm=function(){var A={env:cA,wasi_unstable:cA,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:F};function I(A,I){var g=A.exports;C.asm=g,function(A){if(T--,C.monitorRunDependencies&&C.monitorRunDependencies(T),0==T&&(null!==q&&(clearInterval(q),q=null),V)){var I=V;V=null,I()}}()}function g(A){I(A.instance)}function B(I){return(h||!o&&!c||"function"!=typeof fetch?new Promise(function(A,I){A(gA())}):fetch(IA,{credentials:"same-origin"}).then(function(A){if(!A.ok)throw"failed to load wasm binary file at '"+IA+"'";return A.arrayBuffer()}).catch(function(){return gA()})).then(function(I){return WebAssembly.instantiate(I,A)}).then(I,function(A){s("failed to asynchronously prepare wasm: "+A),z(A)})}if(T++,C.monitorRunDependencies&&C.monitorRunDependencies(T),C.instantiateWasm)try{return C.instantiateWasm(A,I)}catch(A){return s("Module.instantiateWasm callback failed with error: "+A),!1}return function(){if(h||"function"!=typeof WebAssembly.instantiateStreaming||O(IA)||"function"!=typeof fetch)return B(g);fetch(IA,{credentials:"same-origin"}).then(function(I){return WebAssembly.instantiateStreaming(I,A).then(g,function(A){s("wasm streaming compile failed: "+A),s("falling back to ArrayBuffer instantiation"),B(g)})})}(),{}};var BA=[function(){return C.getRandomValue()},function(){if(void 0===C.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),C.getRandomValue=g}catch(A){try{var B=require("crypto"),Q=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};Q(),C.getRandomValue=Q}catch(A){throw"No secure random number generator found"}}}];function CA(){return l.length}var QA=!1;function EA(A){for(var I=[],g=0;g255&&(QA&&H(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var iA="function"==typeof atob?atob:function(A){var I,g,B,C,Q,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",e="",o=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(o++))<<2|(C=i.indexOf(A.charAt(o++)))>>4,g=(15&C)<<4|(Q=i.indexOf(A.charAt(o++)))>>2,B=(3&Q)<<6|(E=i.indexOf(A.charAt(o++))),e+=String.fromCharCode(I),64!==Q&&(e+=String.fromCharCode(g)),64!==E&&(e+=String.fromCharCode(B))}while(o2147418112)return!1;for(var g=Math.max(I,16777216);g>16),b(D.buffer),1}catch(A){}}(g)},d:function(A){switch(A){case 30:return 16384;case 85:return 131068;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:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return C.___errno_location&&(d[C.___errno_location()>>2]=28),-1},memory:D,table:p},aA=C.asm({},cA,k);function nA(A){function I(){oA||(oA=!0,u||(P(N),P(m),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for("function"==typeof C.postRun&&(C.postRun=[C.postRun]);C.postRun.length;)A=C.postRun.shift(),L.unshift(A);var A;P(L)}()))}A=A||e,T>0||(function(){if(C.preRun)for("function"==typeof C.preRun&&(C.preRun=[C.preRun]);C.preRun.length;)A=C.preRun.shift(),R.unshift(A);var A;P(R)}(),T>0||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),I()},1)):I()))}if(C.asm=aA,C.___errno_location=function(){return C.asm.h.apply(null,arguments)},C._crypto_aead_chacha20poly1305_abytes=function(){return C.asm.i.apply(null,arguments)},C._crypto_aead_chacha20poly1305_decrypt=function(){return C.asm.j.apply(null,arguments)},C._crypto_aead_chacha20poly1305_decrypt_detached=function(){return C.asm.k.apply(null,arguments)},C._crypto_aead_chacha20poly1305_encrypt=function(){return C.asm.l.apply(null,arguments)},C._crypto_aead_chacha20poly1305_encrypt_detached=function(){return C.asm.m.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_abytes=function(){return C.asm.n.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_decrypt=function(){return C.asm.o.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_decrypt_detached=function(){return C.asm.p.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_encrypt=function(){return C.asm.q.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_encrypt_detached=function(){return C.asm.r.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_keybytes=function(){return C.asm.s.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_keygen=function(){return C.asm.t.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_messagebytes_max=function(){return C.asm.u.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_npubbytes=function(){return C.asm.v.apply(null,arguments)},C._crypto_aead_chacha20poly1305_ietf_nsecbytes=function(){return C.asm.w.apply(null,arguments)},C._crypto_aead_chacha20poly1305_keybytes=function(){return C.asm.x.apply(null,arguments)},C._crypto_aead_chacha20poly1305_keygen=function(){return C.asm.y.apply(null,arguments)},C._crypto_aead_chacha20poly1305_messagebytes_max=function(){return C.asm.z.apply(null,arguments)},C._crypto_aead_chacha20poly1305_npubbytes=function(){return C.asm.A.apply(null,arguments)},C._crypto_aead_chacha20poly1305_nsecbytes=function(){return C.asm.B.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_abytes=function(){return C.asm.C.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_decrypt=function(){return C.asm.D.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_decrypt_detached=function(){return C.asm.E.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_encrypt=function(){return C.asm.F.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_encrypt_detached=function(){return C.asm.G.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_keybytes=function(){return C.asm.H.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_keygen=function(){return C.asm.I.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_messagebytes_max=function(){return C.asm.J.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_npubbytes=function(){return C.asm.K.apply(null,arguments)},C._crypto_aead_xchacha20poly1305_ietf_nsecbytes=function(){return C.asm.L.apply(null,arguments)},C._crypto_auth=function(){return C.asm.M.apply(null,arguments)},C._crypto_auth_bytes=function(){return C.asm.N.apply(null,arguments)},C._crypto_auth_keybytes=function(){return C.asm.O.apply(null,arguments)},C._crypto_auth_keygen=function(){return C.asm.P.apply(null,arguments)},C._crypto_auth_verify=function(){return C.asm.Q.apply(null,arguments)},C._crypto_box_beforenm=function(){return C.asm.R.apply(null,arguments)},C._crypto_box_beforenmbytes=function(){return C.asm.S.apply(null,arguments)},C._crypto_box_detached=function(){return C.asm.T.apply(null,arguments)},C._crypto_box_detached_afternm=function(){return C.asm.U.apply(null,arguments)},C._crypto_box_easy=function(){return C.asm.V.apply(null,arguments)},C._crypto_box_easy_afternm=function(){return C.asm.W.apply(null,arguments)},C._crypto_box_keypair=function(){return C.asm.X.apply(null,arguments)},C._crypto_box_macbytes=function(){return C.asm.Y.apply(null,arguments)},C._crypto_box_messagebytes_max=function(){return C.asm.Z.apply(null,arguments)},C._crypto_box_noncebytes=function(){return C.asm._.apply(null,arguments)},C._crypto_box_open_detached=function(){return C.asm.$.apply(null,arguments)},C._crypto_box_open_detached_afternm=function(){return C.asm.aa.apply(null,arguments)},C._crypto_box_open_easy=function(){return C.asm.ba.apply(null,arguments)},C._crypto_box_open_easy_afternm=function(){return C.asm.ca.apply(null,arguments)},C._crypto_box_publickeybytes=function(){return C.asm.da.apply(null,arguments)},C._crypto_box_seal=function(){return C.asm.ea.apply(null,arguments)},C._crypto_box_seal_open=function(){return C.asm.fa.apply(null,arguments)},C._crypto_box_sealbytes=function(){return C.asm.ga.apply(null,arguments)},C._crypto_box_secretkeybytes=function(){return C.asm.ha.apply(null,arguments)},C._crypto_box_seed_keypair=function(){return C.asm.ia.apply(null,arguments)},C._crypto_box_seedbytes=function(){return C.asm.ja.apply(null,arguments)},C._crypto_generichash=function(){return C.asm.ka.apply(null,arguments)},C._crypto_generichash_bytes=function(){return C.asm.la.apply(null,arguments)},C._crypto_generichash_bytes_max=function(){return C.asm.ma.apply(null,arguments)},C._crypto_generichash_bytes_min=function(){return C.asm.na.apply(null,arguments)},C._crypto_generichash_final=function(){return C.asm.oa.apply(null,arguments)},C._crypto_generichash_init=function(){return C.asm.pa.apply(null,arguments)},C._crypto_generichash_keybytes=function(){return C.asm.qa.apply(null,arguments)},C._crypto_generichash_keybytes_max=function(){return C.asm.ra.apply(null,arguments)},C._crypto_generichash_keybytes_min=function(){return C.asm.sa.apply(null,arguments)},C._crypto_generichash_keygen=function(){return C.asm.ta.apply(null,arguments)},C._crypto_generichash_statebytes=function(){return C.asm.ua.apply(null,arguments)},C._crypto_generichash_update=function(){return C.asm.va.apply(null,arguments)},C._crypto_hash=function(){return C.asm.wa.apply(null,arguments)},C._crypto_hash_bytes=function(){return C.asm.xa.apply(null,arguments)},C._crypto_kdf_bytes_max=function(){return C.asm.ya.apply(null,arguments)},C._crypto_kdf_bytes_min=function(){return C.asm.za.apply(null,arguments)},C._crypto_kdf_contextbytes=function(){return C.asm.Aa.apply(null,arguments)},C._crypto_kdf_derive_from_key=function(){return C.asm.Ba.apply(null,arguments)},C._crypto_kdf_keybytes=function(){return C.asm.Ca.apply(null,arguments)},C._crypto_kdf_keygen=function(){return C.asm.Da.apply(null,arguments)},C._crypto_kx_client_session_keys=function(){return C.asm.Ea.apply(null,arguments)},C._crypto_kx_keypair=function(){return C.asm.Fa.apply(null,arguments)},C._crypto_kx_publickeybytes=function(){return C.asm.Ga.apply(null,arguments)},C._crypto_kx_secretkeybytes=function(){return C.asm.Ha.apply(null,arguments)},C._crypto_kx_seed_keypair=function(){return C.asm.Ia.apply(null,arguments)},C._crypto_kx_seedbytes=function(){return C.asm.Ja.apply(null,arguments)},C._crypto_kx_server_session_keys=function(){return C.asm.Ka.apply(null,arguments)},C._crypto_kx_sessionkeybytes=function(){return C.asm.La.apply(null,arguments)},C._crypto_pwhash=function(){return C.asm.Ma.apply(null,arguments)},C._crypto_pwhash_alg_argon2i13=function(){return C.asm.Na.apply(null,arguments)},C._crypto_pwhash_alg_argon2id13=function(){return C.asm.Oa.apply(null,arguments)},C._crypto_pwhash_alg_default=function(){return C.asm.Pa.apply(null,arguments)},C._crypto_pwhash_bytes_max=function(){return C.asm.Qa.apply(null,arguments)},C._crypto_pwhash_bytes_min=function(){return C.asm.Ra.apply(null,arguments)},C._crypto_pwhash_memlimit_interactive=function(){return C.asm.Sa.apply(null,arguments)},C._crypto_pwhash_memlimit_max=function(){return C.asm.Ta.apply(null,arguments)},C._crypto_pwhash_memlimit_min=function(){return C.asm.Ua.apply(null,arguments)},C._crypto_pwhash_memlimit_moderate=function(){return C.asm.Va.apply(null,arguments)},C._crypto_pwhash_memlimit_sensitive=function(){return C.asm.Wa.apply(null,arguments)},C._crypto_pwhash_opslimit_interactive=function(){return C.asm.Xa.apply(null,arguments)},C._crypto_pwhash_opslimit_max=function(){return C.asm.Ya.apply(null,arguments)},C._crypto_pwhash_opslimit_min=function(){return C.asm.Za.apply(null,arguments)},C._crypto_pwhash_opslimit_moderate=function(){return C.asm._a.apply(null,arguments)},C._crypto_pwhash_opslimit_sensitive=function(){return C.asm.$a.apply(null,arguments)},C._crypto_pwhash_passwd_max=function(){return C.asm.ab.apply(null,arguments)},C._crypto_pwhash_passwd_min=function(){return C.asm.bb.apply(null,arguments)},C._crypto_pwhash_saltbytes=function(){return C.asm.cb.apply(null,arguments)},C._crypto_pwhash_str=function(){return C.asm.db.apply(null,arguments)},C._crypto_pwhash_str_alg=function(){return C.asm.eb.apply(null,arguments)},C._crypto_pwhash_str_needs_rehash=function(){return C.asm.fb.apply(null,arguments)},C._crypto_pwhash_str_verify=function(){return C.asm.gb.apply(null,arguments)},C._crypto_pwhash_strbytes=function(){return C.asm.hb.apply(null,arguments)},C._crypto_pwhash_strprefix=function(){return C.asm.ib.apply(null,arguments)},C._crypto_scalarmult=function(){return C.asm.jb.apply(null,arguments)},C._crypto_scalarmult_base=function(){return C.asm.kb.apply(null,arguments)},C._crypto_scalarmult_bytes=function(){return C.asm.lb.apply(null,arguments)},C._crypto_scalarmult_scalarbytes=function(){return C.asm.mb.apply(null,arguments)},C._crypto_secretbox_detached=function(){return C.asm.nb.apply(null,arguments)},C._crypto_secretbox_easy=function(){return C.asm.ob.apply(null,arguments)},C._crypto_secretbox_keybytes=function(){return C.asm.pb.apply(null,arguments)},C._crypto_secretbox_keygen=function(){return C.asm.qb.apply(null,arguments)},C._crypto_secretbox_macbytes=function(){return C.asm.rb.apply(null,arguments)},C._crypto_secretbox_messagebytes_max=function(){return C.asm.sb.apply(null,arguments)},C._crypto_secretbox_noncebytes=function(){return C.asm.tb.apply(null,arguments)},C._crypto_secretbox_open_detached=function(){return C.asm.ub.apply(null,arguments)},C._crypto_secretbox_open_easy=function(){return C.asm.vb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_abytes=function(){return C.asm.wb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_headerbytes=function(){return C.asm.xb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_init_pull=function(){return C.asm.yb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_init_push=function(){return C.asm.zb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_keybytes=function(){return C.asm.Ab.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_keygen=function(){return C.asm.Bb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_messagebytes_max=function(){return C.asm.Cb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_pull=function(){return C.asm.Db.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_push=function(){return C.asm.Eb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_rekey=function(){return C.asm.Fb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_statebytes=function(){return C.asm.Gb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_tag_final=function(){return C.asm.Hb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_tag_message=function(){return C.asm.Ib.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_tag_push=function(){return C.asm.Jb.apply(null,arguments)},C._crypto_secretstream_xchacha20poly1305_tag_rekey=function(){return C.asm.Kb.apply(null,arguments)},C._crypto_shorthash=function(){return C.asm.Lb.apply(null,arguments)},C._crypto_shorthash_bytes=function(){return C.asm.Mb.apply(null,arguments)},C._crypto_shorthash_keybytes=function(){return C.asm.Nb.apply(null,arguments)},C._crypto_shorthash_keygen=function(){return C.asm.Ob.apply(null,arguments)},C._crypto_sign=function(){return C.asm.Pb.apply(null,arguments)},C._crypto_sign_bytes=function(){return C.asm.Qb.apply(null,arguments)},C._crypto_sign_detached=function(){return C.asm.Rb.apply(null,arguments)},C._crypto_sign_ed25519_pk_to_curve25519=function(){return C.asm.Sb.apply(null,arguments)},C._crypto_sign_ed25519_sk_to_curve25519=function(){return C.asm.Tb.apply(null,arguments)},C._crypto_sign_final_create=function(){return C.asm.Ub.apply(null,arguments)},C._crypto_sign_final_verify=function(){return C.asm.Vb.apply(null,arguments)},C._crypto_sign_init=function(){return C.asm.Wb.apply(null,arguments)},C._crypto_sign_keypair=function(){return C.asm.Xb.apply(null,arguments)},C._crypto_sign_messagebytes_max=function(){return C.asm.Yb.apply(null,arguments)},C._crypto_sign_open=function(){return C.asm.Zb.apply(null,arguments)},C._crypto_sign_publickeybytes=function(){return C.asm._b.apply(null,arguments)},C._crypto_sign_secretkeybytes=function(){return C.asm.$b.apply(null,arguments)},C._crypto_sign_seed_keypair=function(){return C.asm.ac.apply(null,arguments)},C._crypto_sign_seedbytes=function(){return C.asm.bc.apply(null,arguments)},C._crypto_sign_statebytes=function(){return C.asm.cc.apply(null,arguments)},C._crypto_sign_update=function(){return C.asm.dc.apply(null,arguments)},C._crypto_sign_verify_detached=function(){return C.asm.ec.apply(null,arguments)},C._free=function(){return C.asm.fc.apply(null,arguments)},C._malloc=function(){return C.asm.gc.apply(null,arguments)},C._randombytes=function(){return C.asm.hc.apply(null,arguments)},C._randombytes_buf=function(){return C.asm.ic.apply(null,arguments)},C._randombytes_buf_deterministic=function(){return C.asm.jc.apply(null,arguments)},C._randombytes_close=function(){return C.asm.kc.apply(null,arguments)},C._randombytes_random=function(){return C.asm.lc.apply(null,arguments)},C._randombytes_seedbytes=function(){return C.asm.mc.apply(null,arguments)},C._randombytes_stir=function(){return C.asm.nc.apply(null,arguments)},C._randombytes_uniform=function(){return C.asm.oc.apply(null,arguments)},C._sodium_base642bin=function(){return C.asm.pc.apply(null,arguments)},C._sodium_base64_encoded_len=function(){return C.asm.qc.apply(null,arguments)},C._sodium_bin2base64=function(){return C.asm.rc.apply(null,arguments)},C._sodium_bin2hex=function(){return C.asm.sc.apply(null,arguments)},C._sodium_hex2bin=function(){return C.asm.tc.apply(null,arguments)},C._sodium_init=function(){return C.asm.uc.apply(null,arguments)},C._sodium_library_minimal=function(){return C.asm.vc.apply(null,arguments)},C._sodium_library_version_major=function(){return C.asm.wc.apply(null,arguments)},C._sodium_library_version_minor=function(){return C.asm.xc.apply(null,arguments)},C._sodium_pad=function(){return C.asm.yc.apply(null,arguments)},C._sodium_unpad=function(){return C.asm.zc.apply(null,arguments)},C._sodium_version_string=function(){return C.asm.Ac.apply(null,arguments)},C.asm=aA,C.setValue=function(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":l[A>>0]=I;break;case"i16":G[A>>1]=I;break;case"i32":d[A>>2]=I;break;case"i64":AA=[I>>>0,($=I,+x($)>=1?$>0?(0|j(+X($/4294967296),4294967295))>>>0:~~+K(($-+(~~$>>>0))/4294967296)>>>0:0)],d[A>>2]=AA[0],d[A+4>>2]=AA[1];break;case"float":Y[A>>2]=I;break;case"double":M[A>>3]=I;break;default:z("invalid type for setValue: "+g)}},C.getValue=function(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return l[A>>0];case"i16":return G[A>>1];case"i32":case"i64":return d[A>>2];case"float":return Y[A>>2];case"double":return M[A>>3];default:z("invalid type for getValue: "+I)}return null},C.UTF8ToString=U,V=function A(){oA||nA(),oA||(V=A)},C.run=nA,C.preInit)for("function"==typeof C.preInit&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();nA()}).catch(function(){B.useBackupModule()}),"object"==typeof process&&"function"==typeof process.removeAllListeners&&(process.removeAllListeners("uncaughtException"),process.removeAllListeners("unhandledRejection")),I}"function"==typeof define&&define.amd?define(["exports"],I):"object"==typeof exports&&"string"!=typeof exports.nodeName?I(exports):A.libsodium=I(A.libsodium_mod||(A.commonJsStrict={}))}(this); + +}).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/libsodium/dist/modules") +},{"_process":145,"buffer":74,"crypto":82,"fs":45,"path":138}],22:[function(require,module,exports){ +"use strict"; + +const Poly1305 = require('./lib/poly1305'); + +module.exports = Poly1305; + +},{"./lib/poly1305":23}],23:[function(require,module,exports){ +(function (Buffer){ +"use strict"; + +const BigInteger = require('big-integer'); +const crypto = require('crypto'); +const Util = require('./util'); + +const BLOCK_SIZE = 16; + +module.exports = class Poly1305 +{ + /** + * @param {Buffer} message + * @param {Buffer} key + * @return {Promise} + */ + static async onetimeauth(message, key) + { + if (!Buffer.isBuffer(message)) { + message = Buffer.from(message); + } + let self = new Poly1305(key); + await self.update(message); + return await self.finish(); + } + + /** + * @param {Buffer} message + * @param {Buffer} key + * @param {Buffer} tag + * @return {Promise} + */ + static async onetimeauth_verify(message, key, tag) + { + if (!Buffer.isBuffer(message)) { + message = Buffer.from(message); + } + let self = new Poly1305(key); + await self.update(message); + let calc = await self.finish(); + return crypto.timingSafeEqual(calc, tag); + } + + /** + * @param {Buffer} key + */ + constructor(key) + { + if (typeof (key) === 'undefined') { + this.buffer = Buffer.alloc(16, 0); + this.h = new Uint32Array(5); + this.r = [0,0,0,0,0]; + this.pad = [0,0,0,0]; + this.leftover = 0; + this.final = false; + return; + } + if (!Buffer.isBuffer(key)) { + throw new TypeError("Poly1305 key must be a Buffer (argument 1)"); + } + if (key.length !== 32) { + throw new Error("Poly1305 requires a 32-byte key"); + } + this.buffer = Buffer.alloc(16, 0); + + this.r = [ + Util.load32_le(key.slice(0, 4)) & 0x03ffffff, + (Util.load32_le(key.slice(3, 7)) >>> 2) & 0x03ffff03, + (Util.load32_le(key.slice(6, 10)) >>> 4) & 0x03ffc0ff, + (Util.load32_le(key.slice(9, 13)) >>> 6) & 0x03f03fff, + (Util.load32_le(key.slice(12, 16)) >>> 8) & 0x000fffff + ]; + this.h = new Uint32Array(5); + this.pad = [ + Util.load32_le(key.slice(16, 20)), + Util.load32_le(key.slice(20, 24)), + Util.load32_le(key.slice(24, 28)), + Util.load32_le(key.slice(28, 32)) + ]; + + this.leftover = 0; + this.final = false; + } + + /** + * Inspired by PHP's hash_copy() + * + * @return {Poly1305} + */ + clone() + { + let clone = new Poly1305(); + this.buffer.copy(clone.buffer, 0, 0, 16); + clone.r = this.r; + for (let i = 0; i < 5; i++) { + clone.h[i] = this.h[i]; + } + for (let i = 0; i < 4; i++) { + clone.pad[i] = this.pad[i]; + } + clone.leftover = this.leftover; + clone.final = this.final; + return clone; + } + + /** + * + * @param {Buffer} message + * @param {number} bytes + * @return {Promise} + */ + async blocks(message, bytes) + { + if (message.length < 16) { + throw new Error('Out of range exception'); + } + + let hibit = this.final ? 0 : 1 << 24; + let [r0, r1, r2, r3, r4] = this.r; + + let s1 = r1 * 5; + let s2 = r2 * 5; + let s3 = r3 * 5; + let s4 = r4 * 5; + + let h0 = BigInteger(this.h[0]); + let h1 = BigInteger(this.h[1]); + let h2 = BigInteger(this.h[2]); + let h3 = BigInteger(this.h[3]); + let h4 = BigInteger(this.h[4]); + + let offset = 0; + let c, d0, d1, d2, d3, d4; + while (bytes >= BLOCK_SIZE) { + /* h += m[i] */ + h0 = h0.add((Util.load32_le(message.slice(offset, offset + 4))) & 0x03ffffff); + h1 = h1.add((Util.load32_le(message.slice(offset + 3, offset + 7)) >>> 2) & 0x03ffffff); + h2 = h2.add((Util.load32_le(message.slice(offset + 6, offset + 10)) >>> 4) & 0x03ffffff); + h3 = h3.add((Util.load32_le(message.slice(offset + 9, offset + 13)) >>> 6) & 0x03ffffff); + h4 = h4.add((Util.load32_le(message.slice(offset + 12, offset + 16)) >>> 8) | hibit); + + /* h *= r */ + // d0 = ((h0 * r0) + (s4 * h1) + (s3 * h2) + (s2 * h3) + (s1 * h4)); + d0 = BigInteger(h0.times(BigInteger(r0))) + .plus(BigInteger(s4).times(h1)) + .plus(BigInteger(s3).times(h2)) + .plus(BigInteger(s2).times(h3)) + .plus(BigInteger(s1).times(h4)); + + // d1 = ((h0 * r1) + (h1 * r0) + (s4 * h2) + (s3 * h3) + (s2 * h4)); + d1 = BigInteger(h0.times(BigInteger(r1))) + .plus(h1.times(BigInteger(r0))) + .plus(BigInteger(s4).times(h2)) + .plus(BigInteger(s3).times(h3)) + .plus(BigInteger(s2).times(h4)); + + // d2 = ((h0 * r2) + (h1 * r1) + (h2 * r0) + (s4 * h3) + (s3 * h4)); + d2 = BigInteger(h0.times(BigInteger(r2))) + .plus(h1.times(BigInteger(r1))) + .plus(h2.times(BigInteger(r0))) + .plus(BigInteger(s4).times(h3)) + .plus(BigInteger(s3).times(h4)); + + // d3 = ((h0 * r3) + (h1 * r2) + (h2 * r1) + (h3 * r0) + (s4 * h4)); + d3 = BigInteger(h0.times(BigInteger(r3))) + .plus(h1.times(BigInteger(r2))) + .plus(h2.times(BigInteger(r1))) + .plus(h3.times(BigInteger(r0))) + .plus(BigInteger(s4).times(h4)); + // d4 = ((h0 * r4) + (h1 * r3) + (h2 * r2) + (h3 * r1) + (h4 * r0)); + d4 = BigInteger(h0.times(BigInteger(r4))) + .plus(h1.times(BigInteger(r3))) + .plus(h2.times(BigInteger(r2))) + .plus(h3.times(BigInteger(r1))) + .plus(h4.times(BigInteger(r0))); + + /* (partial) h %= p */ + c = d0.shiftRight(26); + h0 = d0.and(0x3ffffff); + d1 = d1.add(c); + c = d1.shiftRight(26); + h1 = d1.and(0x3ffffff); + d2 = d2.add(c); + c = d2.shiftRight(26); + h2 = d2.and(0x3ffffff); + d3 = d3.add(c); + c = d3.shiftRight(26); + h3 = d3.and(0x3ffffff); + d4 = d4.add(c); + c = d4.shiftRight(26); + h4 = d4.and(0x3ffffff); + h0 = h0.add(c.multiply(5).toJSNumber()); + + c = h0.shiftRight(26); + h0 = h0.and(0x3ffffff); + h1 = h1.add(c); + + offset += BLOCK_SIZE; + bytes -= BLOCK_SIZE; + } + this.h[0] = h0.toJSNumber() >>> 0; + this.h[1] = h1.toJSNumber() >>> 0; + this.h[2] = h2.toJSNumber() >>> 0; + this.h[3] = h3.toJSNumber() >>> 0; + this.h[4] = h4.toJSNumber() >>> 0; + } + + /** + * + * @param {Buffer} message + * @return {Promise} + */ + async update(message) + { + let want; + let bytes = message.length; + + if (this.leftover > 0) { + want = BLOCK_SIZE - this.leftover; + if (want > bytes) { + want = bytes; + } + message.slice(0, want).copy(this.buffer, this.leftover, 0); + this.leftover += want; + if (this.leftover < BLOCK_SIZE) { + // We still don't have enough to run this.blocks() + return this; + } + await this.blocks(this.buffer, BLOCK_SIZE); + this.leftover -= BLOCK_SIZE; + bytes -= want; + message = message.slice(want); + } + + /* process full blocks */ + if (bytes >= BLOCK_SIZE) { + want = bytes & ~(BLOCK_SIZE - 1); + if (want >= BLOCK_SIZE) { + await this.blocks(message.slice(0, want), want); + message = message.slice(want); + bytes = message.length; + } + } + + /* store leftover */ + if (bytes > 0) { + message.slice(0, bytes).copy(this.buffer, this.leftover, 0); + this.leftover += bytes; + } + return this; + } + + /** + * @return {Promise} + */ + async finish() + { + let c, g0, g1, g2, g3, g4, h0, h1, h2, h3, h4, mask; + if (this.leftover) { + let i = this.leftover; + this.buffer[i++] = 1; + for (; i < BLOCK_SIZE; i++) { + this.buffer[i] = 0; + } + this.final = true; + await this.blocks(this.buffer, BLOCK_SIZE); + } + + h0 = this.h[0]; + h1 = this.h[1]; + h2 = this.h[2]; + h3 = this.h[3]; + h4 = this.h[4]; + + c = h1 >>> 26; + h1 &= 0x3ffffff; + h2 += c; + c = h2 >>> 26; + h2 &= 0x3ffffff; + h3 += c; + c = h3 >>> 26; + h3 &= 0x3ffffff; + h4 += c; + c = h4 >>> 26; + h4 &= 0x3ffffff; + h0 += c * 5; + c = h0 >>> 26; + h0 &= 0x3ffffff; + h1 += c; + + /* compute h + -p */ + g0 = h0 + 5; + c = g0 >>> 26; + g0 &= 0x3ffffff; + + g1 = h1 + c; + c = g1 >>> 26; + g1 &= 0x3ffffff; + + g2 = h2 + c; + c = g2 >>> 26; + g2 &= 0x3ffffff; + + g3 = h2 + c; + c = g3 >>> 26; + g3 &= 0x3ffffff; + + g4 = (h4 +c - (1 << 26)) >>> 0; + + /* select h if h < p, or h + -p if h >= p */ + mask = (g4 >>> 31) - 1; + + g0 &= mask; + g1 &= mask; + g2 &= mask; + g3 &= mask; + g4 &= mask; + + mask = ~mask >>> 0; + h0 = (h0 & mask) | g0; + h1 = (h1 & mask) | g1; + h2 = (h2 & mask) | g2; + h3 = (h3 & mask) | g3; + h4 = (h4 & mask) | g4; + + /* h = h % (2^128) */ + h0 = ((h0) | (h1 << 26)) >>> 0; + h1 = ((h1 >>> 6) | (h2 << 20)) >>> 0; + h2 = ((h2 >>> 12) | (h3 << 14)) >>> 0; + h3 = ((h3 >>> 18) | (h4 << 8)) >>> 0; + + [h0, c] = Util.add_overflow(h0, this.pad[0]); + [h1, c] = Util.add_overflow(h1, this.pad[1], c); + [h2, c] = Util.add_overflow(h2, this.pad[2], c); + [h3, c] = Util.add_overflow(h3, this.pad[3], c); + + return Buffer.concat([ + Util.store32_le(h0 >>> 0), + Util.store32_le(h1 >>> 0), + Util.store32_le(h2 >>> 0), + Util.store32_le(h3 >>> 0) + ]); + } +}; + +}).call(this,require("buffer").Buffer) +},{"./util":24,"big-integer":16,"buffer":74,"crypto":82}],24:[function(require,module,exports){ +(function (Buffer){ +"use strict"; + +module.exports = class Util +{ + /** + * Performs addition with overflow. Returns the sum and any carry bits. + * + * @param {number} a + * @param {number} b + * @param {number} extra (optional) + * @return {number[]} + */ + static add_overflow(a, b, extra = 0) + { + let c, x, y; + x = (a & 0xffff) + (b & 0xffff) + (extra & 0xffff); + c = x >>> 16; + y = (a >>> 16) + (b >>> 16) + (extra >>> 16) + c; + c = y >>> 16; + return [y << 16 | (x & 0xffff), c]; + } + + /** + * Node.js only supports 32-bit numbers so we discard the top 4 bytes. + * + * @param {Buffer} buf + * @return {Number} + */ + static load32_le(buf) + { + return buf.readInt32LE(0) >>> 0; + } + + /** + * Store a 32-bit integer as a buffer of length 4 + * + * @param {Number} num + * @return {Buffer} + */ + static store32_le(num) + { + let result = Buffer.alloc(4, 0); + result[0] = num & 0xff; + result[1] = (num >>> 8) & 0xff; + result[2] = (num >>> 16) & 0xff; + result[3] = (num >>> 24) & 0xff; + return result; + } +}; + +}).call(this,require("buffer").Buffer) +},{"buffer":74}],25:[function(require,module,exports){ +(function (Buffer){ +/** + * Convert a typed array to a Buffer without a copy + * + * Author: Feross Aboukhadijeh + * License: MIT + * + * `npm install typedarray-to-buffer` + */ + +var isTypedArray = require('is-typedarray').strict + +module.exports = function typedarrayToBuffer (arr) { + if (isTypedArray(arr)) { + // To avoid a copy, use the typed array's underlying ArrayBuffer to back new Buffer + var buf = Buffer.from(arr.buffer) + if (arr.byteLength !== arr.buffer.byteLength) { + // Respect the "view", i.e. byteOffset and byteLength, without doing a copy + buf = buf.slice(arr.byteOffset, arr.byteOffset + arr.byteLength) + } + return buf + } else { + // Pass through all other types to `Buffer.from` + return Buffer.from(arr) + } +} + +}).call(this,require("buffer").Buffer) +},{"buffer":74,"is-typedarray":19}],26:[function(require,module,exports){ +var xsalsa20 = require('./xsalsa20')() + +var SIGMA = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]) +var head = 144 +var top = head +var free = [] + +module.exports = XSalsa20 + +XSalsa20.NONCEBYTES = 24 +XSalsa20.KEYBYTES = 32 + +XSalsa20.core_hsalsa20 = core_hsalsa20 +XSalsa20.SIGMA = SIGMA + +function XSalsa20 (nonce, key) { + if (!(this instanceof XSalsa20)) return new XSalsa20(nonce, key) + if (!nonce || nonce.length < 24) throw new Error('nonce must be at least 24 bytes') + if (!key || key.length < 32) throw new Error('key must be at least 32 bytes') + this._xor = xsalsa20 && xsalsa20.exports ? new WASM(nonce, key) : new Fallback(nonce, key) +} + +XSalsa20.prototype.update = function (input, output) { + if (!input) throw new Error('input must be Uint8Array or Buffer') + if (!output) output = new Uint8Array(input.length) + if (input.length) this._xor.update(input, output) + return output +} + +XSalsa20.prototype.final = +XSalsa20.prototype.finalize = function () { + this._xor.finalize() + this._xor = null +} + +function WASM (nonce, key) { + if (!free.length) { + free.push(head) + head += 64 + } + + this._pointer = free.pop() + this._nonce = this._pointer + 8 + this._key = this._nonce + 24 + this._overflow = 0 + + xsalsa20.memory.fill(0, this._pointer, this._pointer + 8) + xsalsa20.memory.set(nonce, this._nonce) + xsalsa20.memory.set(key, this._key) +} + +WASM.prototype.update = function (input, output) { + var len = this._overflow + input.length + var start = head + this._overflow + + top = head + len + if (top >= xsalsa20.memory.length) xsalsa20.realloc(top) + + xsalsa20.memory.set(input, start) + xsalsa20.exports.xsalsa20_xor(this._pointer, head, head, len, this._nonce, this._key) + output.set(xsalsa20.memory.subarray(start, head + len)) + + this._overflow = len & 63 +} + +WASM.prototype.finalize = function () { + xsalsa20.memory.fill(0, this._pointer, this._key + 32) + if (top > head) { + xsalsa20.memory.fill(0, head, top) + top = 0 + } + free.push(this._pointer) +} + +function Fallback (nonce, key) { + this._s = new Uint8Array(32) + this._z = new Uint8Array(16) + this._overflow = 0 + core_hsalsa20(this._s, nonce, key, SIGMA) + for (var i = 0; i < 8; i++) this._z[i] = nonce[i + 16] +} + +Fallback.prototype.update = function (input, output) { + var x = new Uint8Array(64) + var u = 0 + var i = this._overflow + var b = input.length + this._overflow + var z = this._z + var mpos = -this._overflow + var cpos = -this._overflow + + while (b >= 64) { + core_salsa20(x, z, this._s, SIGMA) + for (; i < 64; i++) output[cpos + i] = input[mpos + i] ^ x[i] + u = 1 + for (i = 8; i < 16; i++) { + u += (z[i] & 0xff) | 0 + z[i] = u & 0xff + u >>>= 8 + } + b -= 64 + cpos += 64 + mpos += 64 + i = 0 + } + if (b > 0) { + core_salsa20(x, z, this._s, SIGMA) + for (; i < b; i++) output[cpos + i] = input[mpos + i] ^ x[i] + } + + this._overflow = b & 63 +} + +Fallback.prototype.finalize = function () { + this._s.fill(0) + this._z.fill(0) +} + +// below methods are ported from tweet nacl + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff) << 8 | (c[ 2] & 0xff) << 16 | (c[ 3] & 0xff) << 24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff) << 8 | (k[ 2] & 0xff) << 16 | (k[ 3] & 0xff) << 24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff) << 8 | (k[ 6] & 0xff) << 16 | (k[ 7] & 0xff) << 24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff) << 8 | (k[10] & 0xff) << 16 | (k[11] & 0xff) << 24, + j4 = k[12] & 0xff | (k[13] & 0xff) << 8 | (k[14] & 0xff) << 16 | (k[15] & 0xff) << 24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff) << 8 | (c[ 6] & 0xff) << 16 | (c[ 7] & 0xff) << 24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff) << 8 | (p[ 2] & 0xff) << 16 | (p[ 3] & 0xff) << 24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff) << 8 | (p[ 6] & 0xff) << 16 | (p[ 7] & 0xff) << 24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff) << 8 | (p[10] & 0xff) << 16 | (p[11] & 0xff) << 24, + j9 = p[12] & 0xff | (p[13] & 0xff) << 8 | (p[14] & 0xff) << 16 | (p[15] & 0xff) << 24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff) << 8 | (c[10] & 0xff) << 16 | (c[11] & 0xff) << 24, + j11 = k[16] & 0xff | (k[17] & 0xff) << 8 | (k[18] & 0xff) << 16 | (k[19] & 0xff) << 24, + j12 = k[20] & 0xff | (k[21] & 0xff) << 8 | (k[22] & 0xff) << 16 | (k[23] & 0xff) << 24, + j13 = k[24] & 0xff | (k[25] & 0xff) << 8 | (k[26] & 0xff) << 16 | (k[27] & 0xff) << 24, + j14 = k[28] & 0xff | (k[29] & 0xff) << 8 | (k[30] & 0xff) << 16 | (k[31] & 0xff) << 24, + j15 = c[12] & 0xff | (c[13] & 0xff) << 8 | (c[14] & 0xff) << 16 | (c[15] & 0xff) << 24 + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0 + x4 ^= u << 7 | u >>> 25 + u = x4 + x0 | 0 + x8 ^= u << 9 | u >>> 23 + u = x8 + x4 | 0 + x12 ^= u << 13 | u >>> 19 + u = x12 + x8 | 0 + x0 ^= u << 18 | u >>> 14 + + u = x5 + x1 | 0 + x9 ^= u << 7 | u >>> 25 + u = x9 + x5 | 0 + x13 ^= u << 9 | u >>> 23 + u = x13 + x9 | 0 + x1 ^= u << 13 | u >>> 19 + u = x1 + x13 | 0 + x5 ^= u << 18 | u >>> 14 + + u = x10 + x6 | 0 + x14 ^= u << 7 | u >>> 25 + u = x14 + x10 | 0 + x2 ^= u << 9 | u >>> 23 + u = x2 + x14 | 0 + x6 ^= u << 13 | u >>> 19 + u = x6 + x2 | 0 + x10 ^= u << 18 | u >>> 14 + + u = x15 + x11 | 0 + x3 ^= u << 7 | u >>> 25 + u = x3 + x15 | 0 + x7 ^= u << 9 | u >>> 23 + u = x7 + x3 | 0 + x11 ^= u << 13 | u >>> 19 + u = x11 + x7 | 0 + x15 ^= u << 18 | u >>> 14 + + u = x0 + x3 | 0 + x1 ^= u << 7 | u >>> 25 + u = x1 + x0 | 0 + x2 ^= u << 9 | u >>> 23 + u = x2 + x1 | 0 + x3 ^= u << 13 | u >>> 19 + u = x3 + x2 | 0 + x0 ^= u << 18 | u >>> 14 + + u = x5 + x4 | 0 + x6 ^= u << 7 | u >>> 25 + u = x6 + x5 | 0 + x7 ^= u << 9 | u >>> 23 + u = x7 + x6 | 0 + x4 ^= u << 13 | u >>> 19 + u = x4 + x7 | 0 + x5 ^= u << 18 | u >>> 14 + + u = x10 + x9 | 0 + x11 ^= u << 7 | u >>> 25 + u = x11 + x10 | 0 + x8 ^= u << 9 | u >>> 23 + u = x8 + x11 | 0 + x9 ^= u << 13 | u >>> 19 + u = x9 + x8 | 0 + x10 ^= u << 18 | u >>> 14 + + u = x15 + x14 | 0 + x12 ^= u << 7 | u >>> 25 + u = x12 + x15 | 0 + x13 ^= u << 9 | u >>> 23 + u = x13 + x12 | 0 + x14 ^= u << 13 | u >>> 19 + u = x14 + x13 | 0 + x15 ^= u << 18 | u >>> 14 + } + x0 = x0 + j0 | 0 + x1 = x1 + j1 | 0 + x2 = x2 + j2 | 0 + x3 = x3 + j3 | 0 + x4 = x4 + j4 | 0 + x5 = x5 + j5 | 0 + x6 = x6 + j6 | 0 + x7 = x7 + j7 | 0 + x8 = x8 + j8 | 0 + x9 = x9 + j9 | 0 + x10 = x10 + j10 | 0 + x11 = x11 + j11 | 0 + x12 = x12 + j12 | 0 + x13 = x13 + j13 | 0 + x14 = x14 + j14 | 0 + x15 = x15 + j15 | 0 + + o[ 0] = x0 >>> 0 & 0xff + o[ 1] = x0 >>> 8 & 0xff + o[ 2] = x0 >>> 16 & 0xff + o[ 3] = x0 >>> 24 & 0xff + + o[ 4] = x1 >>> 0 & 0xff + o[ 5] = x1 >>> 8 & 0xff + o[ 6] = x1 >>> 16 & 0xff + o[ 7] = x1 >>> 24 & 0xff + + o[ 8] = x2 >>> 0 & 0xff + o[ 9] = x2 >>> 8 & 0xff + o[10] = x2 >>> 16 & 0xff + o[11] = x2 >>> 24 & 0xff + + o[12] = x3 >>> 0 & 0xff + o[13] = x3 >>> 8 & 0xff + o[14] = x3 >>> 16 & 0xff + o[15] = x3 >>> 24 & 0xff + + o[16] = x4 >>> 0 & 0xff + o[17] = x4 >>> 8 & 0xff + o[18] = x4 >>> 16 & 0xff + o[19] = x4 >>> 24 & 0xff + + o[20] = x5 >>> 0 & 0xff + o[21] = x5 >>> 8 & 0xff + o[22] = x5 >>> 16 & 0xff + o[23] = x5 >>> 24 & 0xff + + o[24] = x6 >>> 0 & 0xff + o[25] = x6 >>> 8 & 0xff + o[26] = x6 >>> 16 & 0xff + o[27] = x6 >>> 24 & 0xff + + o[28] = x7 >>> 0 & 0xff + o[29] = x7 >>> 8 & 0xff + o[30] = x7 >>> 16 & 0xff + o[31] = x7 >>> 24 & 0xff + + o[32] = x8 >>> 0 & 0xff + o[33] = x8 >>> 8 & 0xff + o[34] = x8 >>> 16 & 0xff + o[35] = x8 >>> 24 & 0xff + + o[36] = x9 >>> 0 & 0xff + o[37] = x9 >>> 8 & 0xff + o[38] = x9 >>> 16 & 0xff + o[39] = x9 >>> 24 & 0xff + + o[40] = x10 >>> 0 & 0xff + o[41] = x10 >>> 8 & 0xff + o[42] = x10 >>> 16 & 0xff + o[43] = x10 >>> 24 & 0xff + + o[44] = x11 >>> 0 & 0xff + o[45] = x11 >>> 8 & 0xff + o[46] = x11 >>> 16 & 0xff + o[47] = x11 >>> 24 & 0xff + + o[48] = x12 >>> 0 & 0xff + o[49] = x12 >>> 8 & 0xff + o[50] = x12 >>> 16 & 0xff + o[51] = x12 >>> 24 & 0xff + + o[52] = x13 >>> 0 & 0xff + o[53] = x13 >>> 8 & 0xff + o[54] = x13 >>> 16 & 0xff + o[55] = x13 >>> 24 & 0xff + + o[56] = x14 >>> 0 & 0xff + o[57] = x14 >>> 8 & 0xff + o[58] = x14 >>> 16 & 0xff + o[59] = x14 >>> 24 & 0xff + + o[60] = x15 >>> 0 & 0xff + o[61] = x15 >>> 8 & 0xff + o[62] = x15 >>> 16 & 0xff + o[63] = x15 >>> 24 & 0xff +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff) << 8 | (c[ 2] & 0xff) << 16 | (c[ 3] & 0xff) << 24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff) << 8 | (k[ 2] & 0xff) << 16 | (k[ 3] & 0xff) << 24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff) << 8 | (k[ 6] & 0xff) << 16 | (k[ 7] & 0xff) << 24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff) << 8 | (k[10] & 0xff) << 16 | (k[11] & 0xff) << 24, + j4 = k[12] & 0xff | (k[13] & 0xff) << 8 | (k[14] & 0xff) << 16 | (k[15] & 0xff) << 24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff) << 8 | (c[ 6] & 0xff) << 16 | (c[ 7] & 0xff) << 24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff) << 8 | (p[ 2] & 0xff) << 16 | (p[ 3] & 0xff) << 24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff) << 8 | (p[ 6] & 0xff) << 16 | (p[ 7] & 0xff) << 24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff) << 8 | (p[10] & 0xff) << 16 | (p[11] & 0xff) << 24, + j9 = p[12] & 0xff | (p[13] & 0xff) << 8 | (p[14] & 0xff) << 16 | (p[15] & 0xff) << 24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff) << 8 | (c[10] & 0xff) << 16 | (c[11] & 0xff) << 24, + j11 = k[16] & 0xff | (k[17] & 0xff) << 8 | (k[18] & 0xff) << 16 | (k[19] & 0xff) << 24, + j12 = k[20] & 0xff | (k[21] & 0xff) << 8 | (k[22] & 0xff) << 16 | (k[23] & 0xff) << 24, + j13 = k[24] & 0xff | (k[25] & 0xff) << 8 | (k[26] & 0xff) << 16 | (k[27] & 0xff) << 24, + j14 = k[28] & 0xff | (k[29] & 0xff) << 8 | (k[30] & 0xff) << 16 | (k[31] & 0xff) << 24, + j15 = c[12] & 0xff | (c[13] & 0xff) << 8 | (c[14] & 0xff) << 16 | (c[15] & 0xff) << 24 + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0 + x4 ^= u << 7 | u >>> 25 + u = x4 + x0 | 0 + x8 ^= u << 9 | u >>> 23 + u = x8 + x4 | 0 + x12 ^= u << 13 | u >>> 19 + u = x12 + x8 | 0 + x0 ^= u << 18 | u >>> 14 + + u = x5 + x1 | 0 + x9 ^= u << 7 | u >>> 25 + u = x9 + x5 | 0 + x13 ^= u << 9 | u >>> 23 + u = x13 + x9 | 0 + x1 ^= u << 13 | u >>> 19 + u = x1 + x13 | 0 + x5 ^= u << 18 | u >>> 14 + + u = x10 + x6 | 0 + x14 ^= u << 7 | u >>> 25 + u = x14 + x10 | 0 + x2 ^= u << 9 | u >>> 23 + u = x2 + x14 | 0 + x6 ^= u << 13 | u >>> 19 + u = x6 + x2 | 0 + x10 ^= u << 18 | u >>> 14 + + u = x15 + x11 | 0 + x3 ^= u << 7 | u >>> 25 + u = x3 + x15 | 0 + x7 ^= u << 9 | u >>> 23 + u = x7 + x3 | 0 + x11 ^= u << 13 | u >>> 19 + u = x11 + x7 | 0 + x15 ^= u << 18 | u >>> 14 + + u = x0 + x3 | 0 + x1 ^= u << 7 | u >>> 25 + u = x1 + x0 | 0 + x2 ^= u << 9 | u >>> 23 + u = x2 + x1 | 0 + x3 ^= u << 13 | u >>> 19 + u = x3 + x2 | 0 + x0 ^= u << 18 | u >>> 14 + + u = x5 + x4 | 0 + x6 ^= u << 7 | u >>> 25 + u = x6 + x5 | 0 + x7 ^= u << 9 | u >>> 23 + u = x7 + x6 | 0 + x4 ^= u << 13 | u >>> 19 + u = x4 + x7 | 0 + x5 ^= u << 18 | u >>> 14 + + u = x10 + x9 | 0 + x11 ^= u << 7 | u >>> 25 + u = x11 + x10 | 0 + x8 ^= u << 9 | u >>> 23 + u = x8 + x11 | 0 + x9 ^= u << 13 | u >>> 19 + u = x9 + x8 | 0 + x10 ^= u << 18 | u >>> 14 + + u = x15 + x14 | 0 + x12 ^= u << 7 | u >>> 25 + u = x12 + x15 | 0 + x13 ^= u << 9 | u >>> 23 + u = x13 + x12 | 0 + x14 ^= u << 13 | u >>> 19 + u = x14 + x13 | 0 + x15 ^= u << 18 | u >>> 14 + } + + o[ 0] = x0 >>> 0 & 0xff + o[ 1] = x0 >>> 8 & 0xff + o[ 2] = x0 >>> 16 & 0xff + o[ 3] = x0 >>> 24 & 0xff + + o[ 4] = x5 >>> 0 & 0xff + o[ 5] = x5 >>> 8 & 0xff + o[ 6] = x5 >>> 16 & 0xff + o[ 7] = x5 >>> 24 & 0xff + + o[ 8] = x10 >>> 0 & 0xff + o[ 9] = x10 >>> 8 & 0xff + o[10] = x10 >>> 16 & 0xff + o[11] = x10 >>> 24 & 0xff + + o[12] = x15 >>> 0 & 0xff + o[13] = x15 >>> 8 & 0xff + o[14] = x15 >>> 16 & 0xff + o[15] = x15 >>> 24 & 0xff + + o[16] = x6 >>> 0 & 0xff + o[17] = x6 >>> 8 & 0xff + o[18] = x6 >>> 16 & 0xff + o[19] = x6 >>> 24 & 0xff + + o[20] = x7 >>> 0 & 0xff + o[21] = x7 >>> 8 & 0xff + o[22] = x7 >>> 16 & 0xff + o[23] = x7 >>> 24 & 0xff + + o[24] = x8 >>> 0 & 0xff + o[25] = x8 >>> 8 & 0xff + o[26] = x8 >>> 16 & 0xff + o[27] = x8 >>> 24 & 0xff + + o[28] = x9 >>> 0 & 0xff + o[29] = x9 >>> 8 & 0xff + o[30] = x9 >>> 16 & 0xff + o[31] = x9 >>> 24 & 0xff +} + +},{"./xsalsa20":27}],27:[function(require,module,exports){ + +module.exports = loadWebAssembly + +loadWebAssembly.supported = typeof WebAssembly !== 'undefined' + +function loadWebAssembly (opts) { + if (!loadWebAssembly.supported) return null + + var imp = opts && opts.imports + var wasm = toUint8Array('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') + var ready = null + + var mod = { + buffer: wasm, + memory: null, + exports: null, + realloc: realloc, + onload: onload + } + + onload(function () {}) + + return mod + + function realloc (size) { + mod.exports.memory.grow(Math.ceil(Math.abs(size - mod.memory.length) / 65536)) + mod.memory = new Uint8Array(mod.exports.memory.buffer) + } + + function onload (cb) { + if (mod.exports) return cb() + + if (ready) { + ready.then(cb.bind(null, null)).catch(cb) + return + } + + try { + if (opts && opts.async) throw new Error('async') + setup({instance: new WebAssembly.Instance(new WebAssembly.Module(wasm), imp)}) + } catch (err) { + ready = WebAssembly.instantiate(wasm, imp).then(setup) + } + + onload(cb) + } + + function setup (w) { + mod.exports = w.instance.exports + mod.memory = mod.exports.memory && mod.exports.memory.buffer && new Uint8Array(mod.exports.memory.buffer) + } +} + +function toUint8Array (s) { + if (typeof atob === 'function') return new Uint8Array(atob(s).split('').map(charCodeAt)) + return new (require('buf' + 'fer').Buffer)(s, 'base64') +} + +function charCodeAt (c) { + return c.charCodeAt(0) +} + +},{}],28:[function(require,module,exports){ +var asn1 = exports; + +asn1.bignum = require('bn.js'); + +asn1.define = require('./asn1/api').define; +asn1.base = require('./asn1/base'); +asn1.constants = require('./asn1/constants'); +asn1.decoders = require('./asn1/decoders'); +asn1.encoders = require('./asn1/encoders'); + +},{"./asn1/api":29,"./asn1/base":31,"./asn1/constants":35,"./asn1/decoders":37,"./asn1/encoders":40,"bn.js":43}],29:[function(require,module,exports){ +var asn1 = require('../asn1'); +var inherits = require('inherits'); + +var api = exports; + +api.define = function define(name, body) { + return new Entity(name, body); +}; + +function Entity(name, body) { + this.name = name; + this.body = body; + + this.decoders = {}; + this.encoders = {}; +}; + +Entity.prototype._createNamed = function createNamed(base) { + var named; + try { + named = require('vm').runInThisContext( + '(function ' + this.name + '(entity) {\n' + + ' this._initNamed(entity);\n' + + '})' + ); + } catch (e) { + named = function (entity) { + this._initNamed(entity); + }; + } + inherits(named, base); + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); +}; + +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) + this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; + +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; + +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) + this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; + +Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + +},{"../asn1":28,"inherits":126,"vm":183}],30:[function(require,module,exports){ +var inherits = require('inherits'); +var Reporter = require('../base').Reporter; +var Buffer = require('buffer').Buffer; + +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; + +DecoderBuffer.prototype.save = function save() { + return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; +}; + +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) + return this.base.readUInt8(this.offset++, true); + else + return this.error(fail || 'DecoderBuffer overrun'); +} + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) + return this.error(fail || 'DecoderBuffer overrun'); + + var res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +} + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +} + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function(item) { + if (!(item instanceof EncoderBuffer)) + item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) + return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; + +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) + out = new Buffer(this.length); + if (!offset) + offset = 0; + + if (this.length === 0) + return out; + + if (Array.isArray(this.value)) { + this.value.forEach(function(item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') + out[offset] = this.value; + else if (typeof this.value === 'string') + out.write(this.value, offset); + else if (Buffer.isBuffer(this.value)) + this.value.copy(out, offset); + offset += this.length; + } + + return out; +}; + +},{"../base":31,"buffer":74,"inherits":126}],31:[function(require,module,exports){ +var base = exports; + +base.Reporter = require('./reporter').Reporter; +base.DecoderBuffer = require('./buffer').DecoderBuffer; +base.EncoderBuffer = require('./buffer').EncoderBuffer; +base.Node = require('./node'); + +},{"./buffer":30,"./node":32,"./reporter":33}],32:[function(require,module,exports){ +var Reporter = require('../base').Reporter; +var EncoderBuffer = require('../base').EncoderBuffer; +var DecoderBuffer = require('../base').DecoderBuffer; +var assert = require('minimalistic-assert'); + +// Supported tags +var tags = [ + 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', + 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', + 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', + 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' +]; + +// Public methods list +var methods = [ + 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', + 'any', 'contains' +].concat(tags); + +// Overrided methods list +var overrided = [ + '_peekTag', '_decodeTag', '_use', + '_decodeStr', '_decodeObjid', '_decodeTime', + '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + + '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', + '_encodeNull', '_encodeInt', '_encodeBool' +]; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + + state.enc = enc; + + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; + +var stateProps = [ + 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', + 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', + 'implicit', 'contains' +]; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function(prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function(method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; + +Node.prototype._init = function init(body) { + var state = this._baseState; + + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function(child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; + + // Filter children and args + var children = args.filter(function(arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function(arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function(child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function(arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) + return arg; + + var res = {}; + Object.keys(arg).forEach(function(key) { + if (key == (key | 0)) + key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function(method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function(tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + + return this; + }; +}); + +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + + assert(state.use === null); + state.use = item; + + return this; +}; + +Node.prototype.optional = function optional() { + var state = this._baseState; + + state.optional = true; + + return this; +}; + +Node.prototype.def = function def(val) { + var state = this._baseState; + + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + + return this; +}; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + + return this; +}; + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + + return this; +}; + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + state.obj = true; + + if (args.length !== 0) + this._useArgs(args); + + return this; +}; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + + assert(state.key === null); + state.key = newKey; + + return this; +}; + +Node.prototype.any = function any() { + var state = this._baseState; + + state.any = true; + + return this; +}; + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function(key) { + return obj[key]; + })); + + return this; +}; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + + assert(state.use === null); + state.contains = item; + + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return input.wrapResult(state.children[0]._decode(input, options)); + + var result = state['default']; + var present = true; + + var prevKey = null; + if (state.key !== null) + prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + var tag = null; + if (state.explicit !== null) + tag = state.explicit; + else if (state.implicit !== null) + tag = state.implicit; + else if (state.tag !== null) + tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + try { + if (state.choice === null) + this._decodeGeneric(state.tag, input, options); + else + this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + + if (input.isError(present)) + return present; + } + } + + // Push object on stack + var prevObj; + if (state.obj && present) + prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) + return explicit; + input = explicit; + } + + var start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + if (state.any) + var save = input.save(); + var body = this._decodeTag( + input, + state.implicit !== null ? state.implicit : state.tag, + state.any + ); + if (input.isError(body)) + return body; + + if (state.any) + result = input.raw(save); + else + input = body; + } + + if (options && options.track && state.tag !== null) + options.track(input.path(), start, input.length, 'tagged'); + + if (options && options.track && state.tag !== null) + options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) + result = result; + else if (state.choice === null) + result = this._decodeGeneric(state.tag, input, options); + else + result = this._decodeChoice(input, options); + + if (input.isError(result)) + return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj) + ._decode(data, options); + } + } + + // Pop object + if (state.obj && present) + result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) + input.leaveKey(prevKey, state.key, result); + else if (prevKey !== null) + input.exitKey(prevKey); + + return result; +}; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + + if (tag === 'seq' || tag === 'set') + return null; + if (tag === 'seqof' || tag === 'setof') + return this._decodeList(input, tag, state.args[0], options); + else if (/str$/.test(tag)) + return this._decodeStr(input, tag, options); + else if (tag === 'objid' && state.args) + return this._decodeObjid(input, state.args[0], state.args[1], options); + else if (tag === 'objid') + return this._decodeObjid(input, null, null, options); + else if (tag === 'gentime' || tag === 'utctime') + return this._decodeTime(input, tag, options); + else if (tag === 'null_') + return this._decodeNull(input, options); + else if (tag === 'bool') + return this._decodeBool(input, options); + else if (tag === 'objDesc') + return this._decodeStr(input, tag, options); + else if (tag === 'int' || tag === 'enum') + return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj) + ._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; + +Node.prototype._getUse = function _getUse(entity, obj) { + + var state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + + Object.keys(state.choice).some(function(key) { + var save = input.save(); + var node = state.choice[key]; + try { + var value = node._decode(input, options); + if (input.isError(value)) + return false; + + result = { type: key, value: value }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + + if (!match) + return input.error('Choice not matched'); + + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) + return; + + var result = this._encodeValue(data, reporter, parent); + if (result === undefined) + return; + + if (this._skipDefault(result, reporter, parent)) + return; + + return result; +}; + +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return state.children[0]._encode(data, reporter || new Reporter()); + + var result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) + data = state['default'] + else + return; + } + + // Encode children first + var content = null; + var primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function(child) { + if (child._baseState.tag === 'null_') + return child._encode(null, reporter, data); + + if (child._baseState.key === null) + return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + + if (typeof data !== 'object') + return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + + return res; + }, this).filter(function(child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) + return reporter.error('Too many args for : ' + state.tag); + + if (!Array.isArray(data)) + return reporter.error('seqof/setof, but data is not Array'); + + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function(item) { + var state = this._baseState; + + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + var result; + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) + reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) + result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) + result = this._encodeComposite(state.explicit, false, 'context', result); + + return result; +}; + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + + var node = state.choice[data.type]; + if (!node) { + assert( + false, + data.type + ' not found in ' + + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; + +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; + + if (/str$/.test(tag)) + return this._encodeStr(data, tag); + else if (tag === 'objid' && state.args) + return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); + else if (tag === 'objid') + return this._encodeObjid(data, null, null); + else if (tag === 'gentime' || tag === 'utctime') + return this._encodeTime(data, tag); + else if (tag === 'null_') + return this._encodeNull(); + else if (tag === 'int' || tag === 'enum') + return this._encodeInt(data, state.args && state.reverseArgs[0]); + else if (tag === 'bool') + return this._encodeBool(data); + else if (tag === 'objDesc') + return this._encodeStr(data, tag); + else + throw new Error('Unsupported tag: ' + tag); +}; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); +}; + +},{"../base":31,"minimalistic-assert":131}],33:[function(require,module,exports){ +var inherits = require('inherits'); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; + +Reporter.prototype.save = function save() { + var state = this._reporterState; + + return { obj: state.obj, pathLen: state.path.length }; +}; + +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; + + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; + +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; + +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + + state.path = state.path.slice(0, index - 1); +}; + +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; + + this.exitKey(index); + if (state.obj !== null) + state.obj[key] = value; +}; + +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; + +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; + + var prev = state.obj; + state.obj = {}; + return prev; +}; + +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + + var now = state.obj; + state.obj = prev; + return now; +}; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + + var inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function(elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) + throw err; + + if (!inherited) + state.errors.push(err); + + return err; +}; + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) + return result; + + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +}; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + +},{"inherits":126}],34:[function(require,module,exports){ +var constants = require('../constants'); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = constants._reverse(exports.tagClass); + +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = constants._reverse(exports.tag); + +},{"../constants":35}],35:[function(require,module,exports){ +var constants = exports; + +// Helper +constants._reverse = function reverse(map) { + var res = {}; + + Object.keys(map).forEach(function(key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) + key = key | 0; + + var value = map[key]; + res[value] = key; + }); + + return res; +}; + +constants.der = require('./der'); + +},{"./der":34}],36:[function(require,module,exports){ +var inherits = require('inherits'); + +var asn1 = require('../../asn1'); +var base = asn1.base; +var bignum = asn1.bignum; + +// Import DER constants +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) + data = new base.DecoderBuffer(data, options); + + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) + return false; + + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + buffer.restore(state); + + return decodedTag.tag === tag || decodedTag.tagStr === tag || + (decodedTag.tagStr + 'of') === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, + 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + var len = derDecodeLen(buffer, + decodedTag.primitive, + 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) + return len; + + if (!any && + decodedTag.tag !== tag && + decodedTag.tagStr !== tag && + decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + var state = buffer.save(); + var res = this._skipUntilEnd( + buffer, + 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) + return res; + + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) + return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) + return len; + + var res; + if (tag.primitive || len !== null) + res = buffer.skip(len) + else + res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) + return res; + + if (tag.tagStr === 'end') + break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, + options) { + var result = []; + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) + return possibleEnd; + + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) + break; + result.push(res); + } + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) + return unused; + return { unused: unused, data: buffer.raw() }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) + return buffer.error('Decoding of string type: bmpstr length mismatch'); + + var str = ''; + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) + identifiers.push(ident); + + var first = (identifiers[0] / 40) | 0; + var second = identifiers[0] % 40; + + if (relative) + result = identifiers; + else + result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) + tmp = values[result.join('.')]; + if (tmp !== undefined) + result = tmp; + } + + return result; +}; + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) + year = 2000 + year; + else + year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; + +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; + +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) + return res; + else + return res !== 0; +}; + +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); + + if (values) + res = values[res.toString(10)] || res; + + return res; +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + var tag = buf.readUInt8(fail); + if (buf.isError(tag)) + return tag; + + var cls = der.tagClass[tag >> 6]; + var primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) + return oct; + + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + var tagStr = der.tag[tag]; + + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} + +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) + return len; + + // Indefinite form + if (!primitive && len === 0x80) + return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + var num = len & 0x7f; + if (num > 4) + return buf.error('length octect is too long'); + + len = 0; + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) + return j; + len |= j; + } + + return len; +} + +},{"../../asn1":28,"inherits":126}],37:[function(require,module,exports){ +var decoders = exports; + +decoders.der = require('./der'); +decoders.pem = require('./pem'); + +},{"./der":36,"./pem":38}],38:[function(require,module,exports){ +var inherits = require('inherits'); +var Buffer = require('buffer').Buffer; + +var DERDecoder = require('./der'); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; + +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); + + var label = options.label.toUpperCase(); + + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) + continue; + + if (match[2] !== label) + continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') + break; + start = i; + } else { + if (match[1] !== 'END') + break; + end = i; + break; + } + } + if (start === -1 || end === -1) + throw new Error('PEM section not found for: ' + label); + + var base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + +},{"./der":36,"buffer":74,"inherits":126}],39:[function(require,module,exports){ +var inherits = require('inherits'); +var Buffer = require('buffer').Buffer; + +var asn1 = require('../../asn1'); +var base = asn1.base; + +// Import DER constants +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, + primitive, + cls, + content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([ header, content ]); + } + + // Long form + // Count octets required to store length + var lenOctets = 1; + for (var i = content.length; i >= 0x100; i >>= 8) + lenOctets++; + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) + header[i] = j & 0xff; + + return this._createEncoderBuffer([ header, content ]); +}; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([ str.unused | 0, str.data ]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + + 'only latin upper and lower case letters, ' + + 'digits, space, apostrophe, left and rigth ' + + 'parenthesis, plus sign, comma, hyphen, ' + + 'dot, slash, colon, equal sign, ' + + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + + ' unsupported'); + } +}; + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) + return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) + return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) + return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + var size = 0; + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) + size++; + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) + objid[offset--] = 0x80 | (ident & 0x7f); + } + + return this._createEncoderBuffer(objid); +}; + +function two(num) { + if (num < 10) + return '0' + num; + else + return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [ + two(date.getFullYear()), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else if (tag === 'utctime') { + str = [ + two(date.getFullYear() % 100), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); +}; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) + return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) + size++; + + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) + out[0] = 0 + return this._createEncoderBuffer(out); + } + + if (num < 0x80) + return this._createEncoderBuffer(num); + + if (num < 0x100) + return this._createEncoderBuffer([0, num]); + + var size = 1; + for (var i = num; i >= 0x100; i >>= 8) + size++; + + var out = new Array(size); + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if(out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); +}; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getEncoder('der').tree; +}; + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) + return false; + + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) + state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + + if (data.length !== state.defaultBuffer.length) + return false; + + for (i=0; i < data.length; i++) + if (data[i] !== state.defaultBuffer[i]) + return false; + + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + var res; + + if (tag === 'seqof') + tag = 'seq'; + else if (tag === 'setof') + tag = 'set'; + + if (der.tagByName.hasOwnProperty(tag)) + res = der.tagByName[tag]; + else if (typeof tag === 'number' && (tag | 0) === tag) + res = tag; + else + return reporter.error('Unknown tag: ' + tag); + + if (res >= 0x1f) + return reporter.error('Multi-octet tag encoding unsupported'); + + if (!primitive) + res |= 0x20; + + res |= (der.tagClassByName[cls || 'universal'] << 6); + + return res; +} + +},{"../../asn1":28,"buffer":74,"inherits":126}],40:[function(require,module,exports){ +var encoders = exports; + +encoders.der = require('./der'); +encoders.pem = require('./pem'); + +},{"./der":39,"./pem":41}],41:[function(require,module,exports){ +var inherits = require('inherits'); + +var DEREncoder = require('./der'); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; + +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); + + var p = buf.toString('base64'); + var out = [ '-----BEGIN ' + options.label + '-----' ]; + for (var i = 0; i < p.length; i += 64) + out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + +},{"./der":39,"inherits":126}],42:[function(require,module,exports){ +arguments[4][15][0].apply(exports,arguments) +},{"dup":15}],43:[function(require,module,exports){ +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + Buffer = require('buffer').Buffer; + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + } + + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } + + if (number[0] === '-') { + this.negative = 1; + } + + this.strip(); + + if (endian !== 'le') return; + + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; + + function parseHex (str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r <<= 4; + + // 'a' - 'f' + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; + + // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; + + // '0' - '9' + } else { + r |= c & 0xf; + } + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + r.strip(); + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, this); + +},{"buffer":45}],44:[function(require,module,exports){ +var r; + +module.exports = function rand(len) { + if (!r) + r = new Rand(null); + + return r.generate(len); +}; + +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; + +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) + return this.rand.getBytes(n); + + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) + res[i] = this.rand.getByte(); + return res; +}; + +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function() { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = require('crypto'); + if (typeof crypto.randomBytes !== 'function') + throw new Error('Not supported'); + + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) { + } +} + +},{"crypto":45}],45:[function(require,module,exports){ + +},{}],46:[function(require,module,exports){ +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = require('safe-buffer').Buffer + +function asUInt32Array (buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + + var len = (buf.length / 4) | 0 + var out = new Array(len) + + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4) + } + + return out +} + +function scrubVec (v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0 + } +} + +function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0] + var SUB_MIX1 = SUB_MIX[1] + var SUB_MIX2 = SUB_MIX[2] + var SUB_MIX3 = SUB_MIX[3] + + var s0 = M[0] ^ keySchedule[0] + var s1 = M[1] ^ keySchedule[1] + var s2 = M[2] ^ keySchedule[2] + var s3 = M[3] ^ keySchedule[3] + var t0, t1, t2, t3 + var ksRow = 4 + + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] + s0 = t0 + s1 = t1 + s2 = t2 + s3 = t3 + } + + t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] + t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] + t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] + t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] + t0 = t0 >>> 0 + t1 = t1 >>> 0 + t2 = t2 >>> 0 + t3 = t3 >>> 0 + + return [t0, t1, t2, t3] +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] +var G = (function () { + // Compute double table + var d = new Array(256) + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1 + } else { + d[j] = (j << 1) ^ 0x11b + } + } + + var SBOX = [] + var INV_SBOX = [] + var SUB_MIX = [[], [], [], []] + var INV_SUB_MIX = [[], [], [], []] + + // Walk GF(2^8) + var x = 0 + var xi = 0 + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 + SBOX[x] = sx + INV_SBOX[sx] = x + + // Compute multiplication + var x2 = d[x] + var x4 = d[x2] + var x8 = d[x4] + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100) + SUB_MIX[0][x] = (t << 24) | (t >>> 8) + SUB_MIX[1][x] = (t << 16) | (t >>> 16) + SUB_MIX[2][x] = (t << 8) | (t >>> 24) + SUB_MIX[3][x] = t + + // Compute inv sub bytes, inv mix columns tables + t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) + INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) + INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) + INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) + INV_SUB_MIX[3][sx] = t + + if (x === 0) { + x = xi = 1 + } else { + x = x2 ^ d[d[d[x8 ^ x2]]] + xi ^= d[d[xi]] + } + } + + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + } +})() + +function AES (key) { + this._key = asUInt32Array(key) + this._reset() +} + +AES.blockSize = 4 * 4 +AES.keySize = 256 / 8 +AES.prototype.blockSize = AES.blockSize +AES.prototype.keySize = AES.keySize +AES.prototype._reset = function () { + var keyWords = this._key + var keySize = keyWords.length + var nRounds = keySize + 6 + var ksRows = (nRounds + 1) * 4 + + var keySchedule = [] + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k] + } + + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1] + + if (k % keySize === 0) { + t = (t << 8) | (t >>> 24) + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + + t ^= RCON[(k / keySize) | 0] << 24 + } else if (keySize > 6 && k % keySize === 4) { + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + } + + keySchedule[k] = keySchedule[k - keySize] ^ t + } + + var invKeySchedule = [] + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] + + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt + } else { + invKeySchedule[ik] = + G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ + G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ + G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ + G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] + } + } + + this._nRounds = nRounds + this._keySchedule = keySchedule + this._invKeySchedule = invKeySchedule +} + +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M) + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) +} + +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf +} + +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M) + + // swap + var m1 = M[1] + M[1] = M[3] + M[3] = m1 + + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[3], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[1], 12) + return buf +} + +AES.prototype.scrub = function () { + scrubVec(this._keySchedule) + scrubVec(this._invKeySchedule) + scrubVec(this._key) +} + +module.exports.AES = AES + +},{"safe-buffer":170}],47:[function(require,module,exports){ +var aes = require('./aes') +var Buffer = require('safe-buffer').Buffer +var Transform = require('cipher-base') +var inherits = require('inherits') +var GHASH = require('./ghash') +var xor = require('buffer-xor') +var incr32 = require('./incr32') + +function xorTest (a, b) { + var out = 0 + if (a.length !== b.length) out++ + + var len = Math.min(a.length, b.length) + for (var i = 0; i < len; ++i) { + out += (a[i] ^ b[i]) + } + + return out +} + +function calcIv (self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) + } + var ghash = new GHASH(ck) + var len = iv.length + var toPad = len % 16 + ghash.update(iv) + if (toPad) { + toPad = 16 - toPad + ghash.update(Buffer.alloc(toPad, 0)) + } + ghash.update(Buffer.alloc(8, 0)) + var ivBits = len * 8 + var tail = Buffer.alloc(8) + tail.writeUIntBE(ivBits, 0, 8) + ghash.update(tail) + self._finID = ghash.state + var out = Buffer.from(self._finID) + incr32(out) + return out +} +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + var h = Buffer.alloc(4, 0) + + this._cipher = new aes.AES(key) + var ck = this._cipher.encryptBlock(h) + this._ghash = new GHASH(ck) + iv = calcIv(this, iv, ck) + + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._alen = 0 + this._len = 0 + this._mode = mode + + this._authTag = null + this._called = false +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - (this._alen % 16) + if (rump < 16) { + rump = Buffer.alloc(rump, 0) + this._ghash.update(rump) + } + } + + this._called = true + var out = this._mode.encrypt(this, chunk) + if (this._decrypt) { + this._ghash.update(chunk) + } else { + this._ghash.update(out) + } + this._len += chunk.length + return out +} + +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') + + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') + + this._authTag = tag + this._cipher.scrub() +} + +StreamCipher.prototype.getAuthTag = function getAuthTag () { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') + + return this._authTag +} + +StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') + + this._authTag = tag +} + +StreamCipher.prototype.setAAD = function setAAD (buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state') + + this._ghash.update(buf) + this._alen += buf.length +} + +module.exports = StreamCipher + +},{"./aes":46,"./ghash":51,"./incr32":52,"buffer-xor":73,"cipher-base":75,"inherits":126,"safe-buffer":170}],48:[function(require,module,exports){ +var ciphers = require('./encrypter') +var deciphers = require('./decrypter') +var modes = require('./modes/list.json') + +function getCiphers () { + return Object.keys(modes) +} + +exports.createCipher = exports.Cipher = ciphers.createCipher +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv +exports.createDecipher = exports.Decipher = deciphers.createDecipher +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + +},{"./decrypter":49,"./encrypter":50,"./modes/list.json":60}],49:[function(require,module,exports){ +var AuthCipher = require('./authCipher') +var Buffer = require('safe-buffer').Buffer +var MODES = require('./modes') +var StreamCipher = require('./streamCipher') +var Transform = require('cipher-base') +var aes = require('./aes') +var ebtk = require('evp_bytestokey') +var inherits = require('inherits') + +function Decipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._last = void 0 + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Decipher, Transform) + +Decipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + while ((chunk = this._cache.get(this._autopadding))) { + thing = this._mode.decrypt(this, chunk) + out.push(thing) + } + return Buffer.concat(out) +} + +Decipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)) + } else if (chunk) { + throw new Error('data not multiple of block length') + } +} + +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function (autoPadding) { + var out + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } + + return null +} + +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache +} + +function unpad (last) { + var padded = last[15] + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data') + } + var i = -1 + while (++i < padded) { + if (last[(i + (16 - padded))] !== padded) { + throw new Error('unable to decrypt data') + } + } + if (padded === 16) return + + return last.slice(0, 16 - padded) +} + +function createDecipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true) + } + + return new Decipher(config.module, password, iv) +} + +function createDecipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createDecipheriv(suite, keys.key, keys.iv) +} + +exports.createDecipher = createDecipher +exports.createDecipheriv = createDecipheriv + +},{"./aes":46,"./authCipher":47,"./modes":59,"./streamCipher":62,"cipher-base":75,"evp_bytestokey":110,"inherits":126,"safe-buffer":170}],50:[function(require,module,exports){ +var MODES = require('./modes') +var AuthCipher = require('./authCipher') +var Buffer = require('safe-buffer').Buffer +var StreamCipher = require('./streamCipher') +var Transform = require('cipher-base') +var aes = require('./aes') +var ebtk = require('evp_bytestokey') +var inherits = require('inherits') + +function Cipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Cipher, Transform) + +Cipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + + while ((chunk = this._cache.get())) { + thing = this._mode.encrypt(this, chunk) + out.push(thing) + } + + return Buffer.concat(out) +} + +var PADDING = Buffer.alloc(16, 0x10) + +Cipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk) + this._cipher.scrub() + return chunk + } + + if (!chunk.equals(PADDING)) { + this._cipher.scrub() + throw new Error('data not multiple of block length') + } +} + +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + return null +} + +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length + var padBuff = Buffer.allocUnsafe(len) + + var i = -1 + while (++i < len) { + padBuff.writeUInt8(len, i) + } + + return Buffer.concat([this.cache, padBuff]) +} + +function createCipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv) + } + + return new Cipher(config.module, password, iv) +} + +function createCipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createCipheriv(suite, keys.key, keys.iv) +} + +exports.createCipheriv = createCipheriv +exports.createCipher = createCipher + +},{"./aes":46,"./authCipher":47,"./modes":59,"./streamCipher":62,"cipher-base":75,"evp_bytestokey":110,"inherits":126,"safe-buffer":170}],51:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var ZEROES = Buffer.alloc(16, 0) + +function toArray (buf) { + return [ + buf.readUInt32BE(0), + buf.readUInt32BE(4), + buf.readUInt32BE(8), + buf.readUInt32BE(12) + ] +} + +function fromArray (out) { + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0] >>> 0, 0) + buf.writeUInt32BE(out[1] >>> 0, 4) + buf.writeUInt32BE(out[2] >>> 0, 8) + buf.writeUInt32BE(out[3] >>> 0, 12) + return buf +} + +function GHASH (key) { + this.h = key + this.state = Buffer.alloc(16, 0) + this.cache = Buffer.allocUnsafe(0) +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1 + while (++i < block.length) { + this.state[i] ^= block[i] + } + this._multiply() +} + +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h) + var Zi = [0, 0, 0, 0] + var j, xi, lsbVi + var i = -1 + while (++i < 128) { + xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0] + Zi[1] ^= Vi[1] + Zi[2] ^= Vi[2] + Zi[3] ^= Vi[3] + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0 + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) + } + Vi[0] = Vi[0] >>> 1 + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ (0xe1 << 24) + } + } + this.state = fromArray(Zi) +} + +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]) + var chunk + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + this.ghash(chunk) + } +} + +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)) + } + + this.ghash(fromArray([0, abl, 0, bl])) + return this.state +} + +module.exports = GHASH + +},{"safe-buffer":170}],52:[function(require,module,exports){ +function incr32 (iv) { + var len = iv.length + var item + while (len--) { + item = iv.readUInt8(len) + if (item === 255) { + iv.writeUInt8(0, len) + } else { + item++ + iv.writeUInt8(item, len) + break + } + } +} +module.exports = incr32 + +},{}],53:[function(require,module,exports){ +var xor = require('buffer-xor') + +exports.encrypt = function (self, block) { + var data = xor(block, self._prev) + + self._prev = self._cipher.encryptBlock(data) + return self._prev +} + +exports.decrypt = function (self, block) { + var pad = self._prev + + self._prev = block + var out = self._cipher.decryptBlock(block) + + return xor(out, pad) +} + +},{"buffer-xor":73}],54:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var xor = require('buffer-xor') + +function encryptStart (self, data, decrypt) { + var len = data.length + var out = xor(data, self._cache) + self._cache = self._cache.slice(len) + self._prev = Buffer.concat([self._prev, decrypt ? data : out]) + return out +} + +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0) + var len + + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev) + self._prev = Buffer.allocUnsafe(0) + } + + if (self._cache.length <= data.length) { + len = self._cache.length + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) + data = data.slice(len) + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]) + break + } + } + + return out +} + +},{"buffer-xor":73,"safe-buffer":170}],55:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +function encryptByte (self, byteParam, decrypt) { + var pad + var i = -1 + var len = 8 + var out = 0 + var bit, value + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev) + bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 + value = pad[0] ^ bit + out += ((value & 0x80) >> (i % 8)) + self._prev = shiftIn(self._prev, decrypt ? bit : value) + } + return out +} + +function shiftIn (buffer, value) { + var len = buffer.length + var i = -1 + var out = Buffer.allocUnsafe(buffer.length) + buffer = Buffer.concat([buffer, Buffer.from([value])]) + + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) + } + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + +},{"safe-buffer":170}],56:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +function encryptByte (self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev) + var out = pad[0] ^ byteParam + + self._prev = Buffer.concat([ + self._prev.slice(1), + Buffer.from([decrypt ? byteParam : out]) + ]) + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + +},{"safe-buffer":170}],57:[function(require,module,exports){ +var xor = require('buffer-xor') +var Buffer = require('safe-buffer').Buffer +var incr32 = require('../incr32') + +function getBlock (self) { + var out = self._cipher.encryptBlockRaw(self._prev) + incr32(self._prev) + return out +} + +var blockSize = 16 +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize) + var start = self._cache.length + self._cache = Buffer.concat([ + self._cache, + Buffer.allocUnsafe(chunkNum * blockSize) + ]) + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self) + var offset = start + i * blockSize + self._cache.writeUInt32BE(out[0], offset + 0) + self._cache.writeUInt32BE(out[1], offset + 4) + self._cache.writeUInt32BE(out[2], offset + 8) + self._cache.writeUInt32BE(out[3], offset + 12) + } + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + +},{"../incr32":52,"buffer-xor":73,"safe-buffer":170}],58:[function(require,module,exports){ +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block) +} + +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block) +} + +},{}],59:[function(require,module,exports){ +var modeModules = { + ECB: require('./ecb'), + CBC: require('./cbc'), + CFB: require('./cfb'), + CFB8: require('./cfb8'), + CFB1: require('./cfb1'), + OFB: require('./ofb'), + CTR: require('./ctr'), + GCM: require('./ctr') +} + +var modes = require('./list.json') + +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode] +} + +module.exports = modes + +},{"./cbc":53,"./cfb":54,"./cfb1":55,"./cfb8":56,"./ctr":57,"./ecb":58,"./list.json":60,"./ofb":61}],60:[function(require,module,exports){ +module.exports={ + "aes-128-ecb": { + "cipher": "AES", + "key": 128, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-192-ecb": { + "cipher": "AES", + "key": 192, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-256-ecb": { + "cipher": "AES", + "key": 256, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-128-cbc": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-192-cbc": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-256-cbc": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes128": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes192": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes256": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-128-cfb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-192-cfb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-256-cfb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-128-cfb8": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-192-cfb8": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-256-cfb8": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-128-cfb1": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-192-cfb1": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-256-cfb1": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-128-ofb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-192-ofb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-256-ofb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-128-ctr": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-192-ctr": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-256-ctr": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-128-gcm": { + "cipher": "AES", + "key": 128, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-192-gcm": { + "cipher": "AES", + "key": 192, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-256-gcm": { + "cipher": "AES", + "key": 256, + "iv": 12, + "mode": "GCM", + "type": "auth" + } +} + +},{}],61:[function(require,module,exports){ +(function (Buffer){ +var xor = require('buffer-xor') + +function getBlock (self) { + self._prev = self._cipher.encryptBlock(self._prev) + return self._prev +} + +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]) + } + + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + +}).call(this,require("buffer").Buffer) +},{"buffer":74,"buffer-xor":73}],62:[function(require,module,exports){ +var aes = require('./aes') +var Buffer = require('safe-buffer').Buffer +var Transform = require('cipher-base') +var inherits = require('inherits') + +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._mode = mode +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt) +} + +StreamCipher.prototype._final = function () { + this._cipher.scrub() +} + +module.exports = StreamCipher + +},{"./aes":46,"cipher-base":75,"inherits":126,"safe-buffer":170}],63:[function(require,module,exports){ +var DES = require('browserify-des') +var aes = require('browserify-aes/browser') +var aesModes = require('browserify-aes/modes') +var desModes = require('browserify-des/modes') +var ebtk = require('evp_bytestokey') + +function createCipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createCipheriv(suite, keys.key, keys.iv) +} + +function createDecipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createDecipheriv(suite, keys.key, keys.iv) +} + +function createCipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) + + throw new TypeError('invalid suite type') +} + +function createDecipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) + + throw new TypeError('invalid suite type') +} + +function getCiphers () { + return Object.keys(desModes).concat(aes.getCiphers()) +} + +exports.createCipher = exports.Cipher = createCipher +exports.createCipheriv = exports.Cipheriv = createCipheriv +exports.createDecipher = exports.Decipher = createDecipher +exports.createDecipheriv = exports.Decipheriv = createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + +},{"browserify-aes/browser":48,"browserify-aes/modes":59,"browserify-des":64,"browserify-des/modes":65,"evp_bytestokey":110}],64:[function(require,module,exports){ +var CipherBase = require('cipher-base') +var des = require('des.js') +var inherits = require('inherits') +var Buffer = require('safe-buffer').Buffer + +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +} +modes.des = modes['des-cbc'] +modes.des3 = modes['des-ede3-cbc'] +module.exports = DES +inherits(DES, CipherBase) +function DES (opts) { + CipherBase.call(this) + var modeName = opts.mode.toLowerCase() + var mode = modes[modeName] + var type + if (opts.decrypt) { + type = 'decrypt' + } else { + type = 'encrypt' + } + var key = opts.key + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key) + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]) + } + var iv = opts.iv + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv) + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }) +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)) +} +DES.prototype._final = function () { + return Buffer.from(this._des.final()) +} + +},{"cipher-base":75,"des.js":83,"inherits":126,"safe-buffer":170}],65:[function(require,module,exports){ +exports['des-ecb'] = { + key: 8, + iv: 0 +} +exports['des-cbc'] = exports.des = { + key: 8, + iv: 8 +} +exports['des-ede3-cbc'] = exports.des3 = { + key: 24, + iv: 8 +} +exports['des-ede3'] = { + key: 24, + iv: 0 +} +exports['des-ede-cbc'] = { + key: 16, + iv: 8 +} +exports['des-ede'] = { + key: 16, + iv: 0 +} + +},{}],66:[function(require,module,exports){ +(function (Buffer){ +var bn = require('bn.js'); +var randomBytes = require('randombytes'); +module.exports = crt; +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(bn.mont(priv.modulus)) + .redPow(new bn(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder:r.invm(priv.modulus) + }; +} +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var mod = bn.mont(priv.modulus); + var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(bn.mont(priv.prime1)); + var c2 = blinded.toRed(bn.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1); + var m2 = c2.redPow(priv.exponent2); + m1 = m1.fromRed(); + m2 = m2.fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p); + h.imul(q); + m2.iadd(h); + return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); +} +crt.getr = getr; +function getr(priv) { + var len = priv.modulus.byteLength(); + var r = new bn(randomBytes(len)); + while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { + r = new bn(randomBytes(len)); + } + return r; +} + +}).call(this,require("buffer").Buffer) +},{"bn.js":43,"buffer":74,"randombytes":152}],67:[function(require,module,exports){ +module.exports = require('./browser/algorithms.json') + +},{"./browser/algorithms.json":68}],68:[function(require,module,exports){ +module.exports={ + "sha224WithRSAEncryption": { + "sign": "rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "RSA-SHA224": { + "sign": "ecdsa/rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "sha256WithRSAEncryption": { + "sign": "rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "RSA-SHA256": { + "sign": "ecdsa/rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "sha384WithRSAEncryption": { + "sign": "rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "RSA-SHA384": { + "sign": "ecdsa/rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "sha512WithRSAEncryption": { + "sign": "rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA512": { + "sign": "ecdsa/rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA1": { + "sign": "rsa", + "hash": "sha1", + "id": "3021300906052b0e03021a05000414" + }, + "ecdsa-with-SHA1": { + "sign": "ecdsa", + "hash": "sha1", + "id": "" + }, + "sha256": { + "sign": "ecdsa", + "hash": "sha256", + "id": "" + }, + "sha224": { + "sign": "ecdsa", + "hash": "sha224", + "id": "" + }, + "sha384": { + "sign": "ecdsa", + "hash": "sha384", + "id": "" + }, + "sha512": { + "sign": "ecdsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-SHA1": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-WITH-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-WITH-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-WITH-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-WITH-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-RIPEMD160": { + "sign": "dsa", + "hash": "rmd160", + "id": "" + }, + "ripemd160WithRSA": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "RSA-RIPEMD160": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "md5WithRSAEncryption": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + }, + "RSA-MD5": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + } +} + +},{}],69:[function(require,module,exports){ +module.exports={ + "1.3.132.0.10": "secp256k1", + "1.3.132.0.33": "p224", + "1.2.840.10045.3.1.1": "p192", + "1.2.840.10045.3.1.7": "p256", + "1.3.132.0.34": "p384", + "1.3.132.0.35": "p521" +} + +},{}],70:[function(require,module,exports){ +(function (Buffer){ +var createHash = require('create-hash') +var stream = require('stream') +var inherits = require('inherits') +var sign = require('./sign') +var verify = require('./verify') + +var algorithms = require('./algorithms.json') +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = new Buffer(algorithms[key].id, 'hex') + algorithms[key.toLowerCase()] = algorithms[key] +}) + +function Sign (algorithm) { + stream.Writable.call(this) + + var data = algorithms[algorithm] + if (!data) throw new Error('Unknown message digest') + + this._hashType = data.hash + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Sign, stream.Writable) + +Sign.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} + +Sign.prototype.update = function update (data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc) + + this._hash.update(data) + return this +} + +Sign.prototype.sign = function signMethod (key, enc) { + this.end() + var hash = this._hash.digest() + var sig = sign(hash, key, this._hashType, this._signType, this._tag) + + return enc ? sig.toString(enc) : sig +} + +function Verify (algorithm) { + stream.Writable.call(this) + + var data = algorithms[algorithm] + if (!data) throw new Error('Unknown message digest') + + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Verify, stream.Writable) + +Verify.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} + +Verify.prototype.update = function update (data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc) + + this._hash.update(data) + return this +} + +Verify.prototype.verify = function verifyMethod (key, sig, enc) { + if (typeof sig === 'string') sig = new Buffer(sig, enc) + + this.end() + var hash = this._hash.digest() + return verify(sig, hash, key, this._signType, this._tag) +} + +function createSign (algorithm) { + return new Sign(algorithm) +} + +function createVerify (algorithm) { + return new Verify(algorithm) +} + +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +} + +}).call(this,require("buffer").Buffer) +},{"./algorithms.json":68,"./sign":71,"./verify":72,"buffer":74,"create-hash":78,"inherits":126,"stream":179}],71:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var createHmac = require('create-hmac') +var crt = require('browserify-rsa') +var EC = require('elliptic').ec +var BN = require('bn.js') +var parseKeys = require('parse-asn1') +var curves = require('./curves.json') + +function sign (hash, key, hashType, signType, tag) { + var priv = parseKeys(key) + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') + return ecSign(hash, priv) + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong private key type') + return dsaSign(hash, priv, hashType) + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') + } + hash = Buffer.concat([tag, hash]) + var len = priv.modulus.byteLength() + var pad = [ 0, 1 ] + while (hash.length + pad.length + 1 < len) pad.push(0xff) + pad.push(0x00) + var i = -1 + while (++i < hash.length) pad.push(hash[i]) + + var out = crt(pad, priv) + return out +} + +function ecSign (hash, priv) { + var curveId = curves[priv.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) + + var curve = new EC(curveId) + var key = curve.keyFromPrivate(priv.privateKey) + var out = key.sign(hash) + + return new Buffer(out.toDER()) +} + +function dsaSign (hash, priv, algo) { + var x = priv.params.priv_key + var p = priv.params.p + var q = priv.params.q + var g = priv.params.g + var r = new BN(0) + var k + var H = bits2int(hash, q).mod(q) + var s = false + var kv = getKey(x, q, hash, algo) + while (s === false) { + k = makeKey(q, kv, algo) + r = makeR(g, k, p, q) + s = k.invm(q).imul(H.add(x.mul(r))).mod(q) + if (s.cmpn(0) === 0) { + s = false + r = new BN(0) + } + } + return toDER(r, s) +} + +function toDER (r, s) { + r = r.toArray() + s = s.toArray() + + // Pad values + if (r[0] & 0x80) r = [ 0 ].concat(r) + if (s[0] & 0x80) s = [ 0 ].concat(s) + + var total = r.length + s.length + 4 + var res = [ 0x30, total, 0x02, r.length ] + res = res.concat(r, [ 0x02, s.length ], s) + return new Buffer(res) +} + +function getKey (x, q, hash, algo) { + x = new Buffer(x.toArray()) + if (x.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - x.length) + zeros.fill(0) + x = Buffer.concat([ zeros, x ]) + } + var hlen = hash.length + var hbits = bits2octets(hash, q) + var v = new Buffer(hlen) + v.fill(1) + var k = new Buffer(hlen) + k.fill(0) + k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() + v = createHmac(algo, k).update(v).digest() + k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() + v = createHmac(algo, k).update(v).digest() + return { k: k, v: v } +} + +function bits2int (obits, q) { + var bits = new BN(obits) + var shift = (obits.length << 3) - q.bitLength() + if (shift > 0) bits.ishrn(shift) + return bits +} + +function bits2octets (bits, q) { + bits = bits2int(bits, q) + bits = bits.mod(q) + var out = new Buffer(bits.toArray()) + if (out.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - out.length) + zeros.fill(0) + out = Buffer.concat([ zeros, out ]) + } + return out +} + +function makeKey (q, kv, algo) { + var t + var k + + do { + t = new Buffer(0) + + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest() + t = Buffer.concat([ t, kv.v ]) + } + + k = bits2int(t, q) + kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() + kv.v = createHmac(algo, kv.k).update(kv.v).digest() + } while (k.cmp(q) !== -1) + + return k +} + +function makeR (g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) +} + +module.exports = sign +module.exports.getKey = getKey +module.exports.makeKey = makeKey + +}).call(this,require("buffer").Buffer) +},{"./curves.json":69,"bn.js":43,"browserify-rsa":66,"buffer":74,"create-hmac":80,"elliptic":93,"parse-asn1":137}],72:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var BN = require('bn.js') +var EC = require('elliptic').ec +var parseKeys = require('parse-asn1') +var curves = require('./curves.json') + +function verify (sig, hash, key, signType, tag) { + var pub = parseKeys(key) + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') + return ecVerify(sig, hash, pub) + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong public key type') + return dsaVerify(sig, hash, pub) + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') + } + hash = Buffer.concat([tag, hash]) + var len = pub.modulus.byteLength() + var pad = [ 1 ] + var padNum = 0 + while (hash.length + pad.length + 2 < len) { + pad.push(0xff) + padNum++ + } + pad.push(0x00) + var i = -1 + while (++i < hash.length) { + pad.push(hash[i]) + } + pad = new Buffer(pad) + var red = BN.mont(pub.modulus) + sig = new BN(sig).toRed(red) + + sig = sig.redPow(new BN(pub.publicExponent)) + sig = new Buffer(sig.fromRed().toArray()) + var out = padNum < 8 ? 1 : 0 + len = Math.min(sig.length, pad.length) + if (sig.length !== pad.length) out = 1 + + i = -1 + while (++i < len) out |= sig[i] ^ pad[i] + return out === 0 +} + +function ecVerify (sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) + + var curve = new EC(curveId) + var pubkey = pub.data.subjectPrivateKey.data + + return curve.verify(hash, sig, pubkey) +} + +function dsaVerify (sig, hash, pub) { + var p = pub.data.p + var q = pub.data.q + var g = pub.data.g + var y = pub.data.pub_key + var unpacked = parseKeys.signature.decode(sig, 'der') + var s = unpacked.s + var r = unpacked.r + checkValue(s, q) + checkValue(r, q) + var montp = BN.mont(p) + var w = s.invm(q) + var v = g.toRed(montp) + .redPow(new BN(hash).mul(w).mod(q)) + .fromRed() + .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) + .mod(p) + .mod(q) + return v.cmp(r) === 0 +} + +function checkValue (b, q) { + if (b.cmpn(0) <= 0) throw new Error('invalid sig') + if (b.cmp(q) >= q) throw new Error('invalid sig') +} + +module.exports = verify + +}).call(this,require("buffer").Buffer) +},{"./curves.json":69,"bn.js":43,"buffer":74,"elliptic":93,"parse-asn1":137}],73:[function(require,module,exports){ +(function (Buffer){ +module.exports = function xor (a, b) { + var length = Math.min(a.length, b.length) + var buffer = new Buffer(length) + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i] + } + + return buffer +} + +}).call(this,require("buffer").Buffer) +},{"buffer":74}],74:[function(require,module,exports){ +(function (Buffer){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol.for === 'function') + ? Symbol.for('nodejs.util.inspect.custom') + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + var proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 +if (typeof Symbol !== 'undefined' && Symbol.species != null && + Buffer[Symbol.species] === Buffer) { + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true, + enumerable: false, + writable: false + }) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf) + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +var hexSliceLookupTable = (function () { + var alphabet = '0123456789abcdef' + var table = new Array(256) + for (var i = 0; i < 16; ++i) { + var i16 = i * 16 + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +}).call(this,require("buffer").Buffer) +},{"base64-js":42,"buffer":74,"ieee754":125}],75:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var Transform = require('stream').Transform +var StringDecoder = require('string_decoder').StringDecoder +var inherits = require('inherits') + +function CipherBase (hashMode) { + Transform.call(this) + this.hashMode = typeof hashMode === 'string' + if (this.hashMode) { + this[hashMode] = this._finalOrDigest + } else { + this.final = this._finalOrDigest + } + if (this._final) { + this.__final = this._final + this._final = null + } + this._decoder = null + this._encoding = null +} +inherits(CipherBase, Transform) + +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc) + } + + var outData = this._update(data) + if (this.hashMode) return this + + if (outputEnc) { + outData = this._toString(outData, outputEnc) + } + + return outData +} + +CipherBase.prototype.setAutoPadding = function () {} +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state') +} + +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state') +} + +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state') +} + +CipherBase.prototype._transform = function (data, _, next) { + var err + try { + if (this.hashMode) { + this._update(data) + } else { + this.push(this._update(data)) + } + } catch (e) { + err = e + } finally { + next(err) + } +} +CipherBase.prototype._flush = function (done) { + var err + try { + this.push(this.__final()) + } catch (e) { + err = e + } + + done(err) +} +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0) + if (outputEnc) { + outData = this._toString(outData, outputEnc, true) + } + return outData +} + +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc) + this._encoding = enc + } + + if (this._encoding !== enc) throw new Error('can\'t switch encodings') + + var out = this._decoder.write(value) + if (fin) { + out += this._decoder.end() + } + + return out +} + +module.exports = CipherBase + +},{"inherits":126,"safe-buffer":170,"stream":179,"string_decoder":180}],76:[function(require,module,exports){ +(function (Buffer){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":127}],77:[function(require,module,exports){ +(function (Buffer){ +var elliptic = require('elliptic') +var BN = require('bn.js') + +module.exports = function createECDH (curve) { + return new ECDH(curve) +} + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +} + +aliases.p224 = aliases.secp224r1 +aliases.p256 = aliases.secp256r1 = aliases.prime256v1 +aliases.p192 = aliases.secp192r1 = aliases.prime192v1 +aliases.p384 = aliases.secp384r1 +aliases.p521 = aliases.secp521r1 + +function ECDH (curve) { + this.curveType = aliases[curve] + if (!this.curveType) { + this.curveType = { + name: curve + } + } + this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap + this.keys = void 0 +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair() + return this.getPublicKey(enc, format) +} + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8' + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc) + } + var otherPub = this.curve.keyFromPublic(other).getPublic() + var out = otherPub.mul(this.keys.getPrivate()).getX() + return formatReturnValue(out, enc, this.curveType.byteLength) +} + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true) + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7 + } else { + key[0] = 6 + } + } + return formatReturnValue(key, enc) +} + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc) +} + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc) + } + this.keys._importPublic(pub) + return this +} + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc) + } + + var _priv = new BN(priv) + _priv = _priv.toString(16) + this.keys = this.curve.genKeyPair() + this.keys._importPrivate(_priv) + return this +} + +function formatReturnValue (bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray() + } + var buf = new Buffer(bn) + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length) + zeros.fill(0) + buf = Buffer.concat([zeros, buf]) + } + if (!enc) { + return buf + } else { + return buf.toString(enc) + } +} + +}).call(this,require("buffer").Buffer) +},{"bn.js":43,"buffer":74,"elliptic":93}],78:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var MD5 = require('md5.js') +var RIPEMD160 = require('ripemd160') +var sha = require('sha.js') +var Base = require('cipher-base') + +function Hash (hash) { + Base.call(this, 'digest') + + this._hash = hash +} + +inherits(Hash, Base) + +Hash.prototype._update = function (data) { + this._hash.update(data) +} + +Hash.prototype._final = function () { + return this._hash.digest() +} + +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if (alg === 'md5') return new MD5() + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() + + return new Hash(sha(alg)) +} + +},{"cipher-base":75,"inherits":126,"md5.js":129,"ripemd160":169,"sha.js":172}],79:[function(require,module,exports){ +var MD5 = require('md5.js') + +module.exports = function (buffer) { + return new MD5().update(buffer).digest() +} + +},{"md5.js":129}],80:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var Legacy = require('./legacy') +var Base = require('cipher-base') +var Buffer = require('safe-buffer').Buffer +var md5 = require('create-hash/md5') +var RIPEMD160 = require('ripemd160') + +var sha = require('sha.js') + +var ZEROS = Buffer.alloc(128) + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + this._alg = alg + this._key = key + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + key = hash.update(key).digest() + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + this._hash.update(ipad) +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.update(data) +} + +Hmac.prototype._final = function () { + var h = this._hash.digest() + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) + return hash.update(this._opad).update(h).digest() +} + +module.exports = function createHmac (alg, key) { + alg = alg.toLowerCase() + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key) + } + if (alg === 'md5') { + return new Legacy(md5, key) + } + return new Hmac(alg, key) +} + +},{"./legacy":81,"cipher-base":75,"create-hash/md5":79,"inherits":126,"ripemd160":169,"safe-buffer":170,"sha.js":172}],81:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var Buffer = require('safe-buffer').Buffer + +var Base = require('cipher-base') + +var ZEROS = Buffer.alloc(128) +var blocksize = 64 + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + this._alg = alg + this._key = key + + if (key.length > blocksize) { + key = alg(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + this._hash = [ipad] +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.push(data) +} + +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)) + return this._alg(Buffer.concat([this._opad, h])) +} +module.exports = Hmac + +},{"cipher-base":75,"inherits":126,"safe-buffer":170}],82:[function(require,module,exports){ +'use strict' + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') +exports.createHash = exports.Hash = require('create-hash') +exports.createHmac = exports.Hmac = require('create-hmac') + +var algos = require('browserify-sign/algos') +var algoKeys = Object.keys(algos) +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) +exports.getHashes = function () { + return hashes +} + +var p = require('pbkdf2') +exports.pbkdf2 = p.pbkdf2 +exports.pbkdf2Sync = p.pbkdf2Sync + +var aes = require('browserify-cipher') + +exports.Cipher = aes.Cipher +exports.createCipher = aes.createCipher +exports.Cipheriv = aes.Cipheriv +exports.createCipheriv = aes.createCipheriv +exports.Decipher = aes.Decipher +exports.createDecipher = aes.createDecipher +exports.Decipheriv = aes.Decipheriv +exports.createDecipheriv = aes.createDecipheriv +exports.getCiphers = aes.getCiphers +exports.listCiphers = aes.listCiphers + +var dh = require('diffie-hellman') + +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup +exports.getDiffieHellman = dh.getDiffieHellman +exports.createDiffieHellman = dh.createDiffieHellman +exports.DiffieHellman = dh.DiffieHellman + +var sign = require('browserify-sign') + +exports.createSign = sign.createSign +exports.Sign = sign.Sign +exports.createVerify = sign.createVerify +exports.Verify = sign.Verify + +exports.createECDH = require('create-ecdh') + +var publicEncrypt = require('public-encrypt') + +exports.publicEncrypt = publicEncrypt.publicEncrypt +exports.privateEncrypt = publicEncrypt.privateEncrypt +exports.publicDecrypt = publicEncrypt.publicDecrypt +exports.privateDecrypt = publicEncrypt.privateDecrypt + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = require('randomfill') + +exports.randomFill = rf.randomFill +exports.randomFillSync = rf.randomFillSync + +exports.createCredentials = function () { + throw new Error([ + 'sorry, createCredentials is not implemented yet', + 'we accept pull requests', + 'https://github.com/crypto-browserify/crypto-browserify' + ].join('\n')) +} + +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +} + +},{"browserify-cipher":63,"browserify-sign":70,"browserify-sign/algos":67,"create-ecdh":77,"create-hash":78,"create-hmac":80,"diffie-hellman":89,"pbkdf2":139,"public-encrypt":146,"randombytes":152,"randomfill":153}],83:[function(require,module,exports){ +'use strict'; + +exports.utils = require('./des/utils'); +exports.Cipher = require('./des/cipher'); +exports.DES = require('./des/des'); +exports.CBC = require('./des/cbc'); +exports.EDE = require('./des/ede'); + +},{"./des/cbc":84,"./des/cipher":85,"./des/des":86,"./des/ede":87,"./des/utils":88}],84:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var proto = {}; + +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) + this.iv[i] = iv[i]; +} + +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; +} + +exports.instantiate = instantiate; + +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; + +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) + iv[i] ^= inp[inOff + i]; + + superProto._update.call(this, iv, 0, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + out[outOff + i] ^= iv[i]; + + for (var i = 0; i < this.blockSize; i++) + iv[i] = inp[inOff + i]; + } +}; + +},{"inherits":126,"minimalistic-assert":131}],85:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); + +function Cipher(options) { + this.options = options; + + this.type = this.options.type; + this.blockSize = 8; + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; +} +module.exports = Cipher; + +Cipher.prototype._init = function _init() { + // Might be overrided +}; + +Cipher.prototype.update = function update(data) { + if (data.length === 0) + return []; + + if (this.type === 'decrypt') + return this._updateDecrypt(data); + else + return this._updateEncrypt(data); +}; + +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) + this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; + +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; + +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = ((this.bufferOff + data.length) / this.blockSize) | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + + if (this.bufferOff === this.buffer.length) + outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - ((data.length - inputOff) % this.blockSize); + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) + this.buffer[this.bufferOff] = data[inputOff]; + + return out; +}; + +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + + return out; +}; + +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) + first = this.update(buffer); + + var last; + if (this.type === 'encrypt') + last = this._finalEncrypt(); + else + last = this._finalDecrypt(); + + if (first) + return first.concat(last); + else + return last; +}; + +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) + return false; + + while (off < buffer.length) + buffer[off++] = 0; + + return true; +}; + +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) + return []; + + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; + +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; + +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + + return this._unpad(out); +}; + +},{"minimalistic-assert":131}],86:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var des = require('../des'); +var utils = des.utils; +var Cipher = des.Cipher; + +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} + +function DES(options) { + Cipher.call(this, options); + + var state = new DESState(); + this._desState = state; + + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; + +DES.create = function create(options) { + return new DES(options); +}; + +var shiftTable = [ + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 +]; + +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + + assert.equal(key.length, this.blockSize, 'Invalid key length'); + + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; + +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + + if (this.type === 'encrypt') + this._encrypt(state, l, r, state.tmp, 0); + else + this._decrypt(state, l, r, state.tmp, 0); + + l = state.tmp[0]; + r = state.tmp[1]; + + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; + +DES.prototype._pad = function _pad(buffer, off) { + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) + buffer[i] = value; + + return true; +}; + +DES.prototype._unpad = function _unpad(buffer) { + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) + assert.equal(buffer[i], pad); + + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; + +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + +},{"../des":83,"inherits":126,"minimalistic-assert":131}],87:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var des = require('../des'); +var Cipher = des.Cipher; +var DES = des.DES; + +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + + if (type === 'encrypt') { + this.ciphers = [ + DES.create({ type: 'encrypt', key: k1 }), + DES.create({ type: 'decrypt', key: k2 }), + DES.create({ type: 'encrypt', key: k3 }) + ]; + } else { + this.ciphers = [ + DES.create({ type: 'decrypt', key: k3 }), + DES.create({ type: 'encrypt', key: k2 }), + DES.create({ type: 'decrypt', key: k1 }) + ]; + } +} + +function EDE(options) { + Cipher.call(this, options); + + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); + +module.exports = EDE; + +EDE.create = function create(options) { + return new EDE(options); +}; + +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; + +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + +},{"../des":83,"inherits":126,"minimalistic-assert":131}],88:[function(require,module,exports){ +'use strict'; + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = (bytes[0 + off] << 24) | + (bytes[1 + off] << 16) | + (bytes[2 + off] << 8) | + bytes[3 + off]; + return res >>> 0; +}; + +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = (value >>> 16) & 0xff; + bytes[2 + off] = (value >>> 8) & 0xff; + bytes[3 + off] = value & 0xff; +}; + +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.r28shl = function r28shl(num, shift) { + return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); +}; + +var pc2table = [ + // inL => outL + 14, 11, 17, 4, 27, 23, 25, 0, + 13, 22, 7, 18, 5, 9, 16, 24, + 2, 20, 12, 21, 1, 8, 15, 26, + + // inR => outR + 15, 4, 25, 19, 9, 1, 26, 16, + 5, 11, 23, 8, 12, 7, 17, 0, + 22, 3, 10, 14, 6, 20, 27, 24 +]; + +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= (inL >>> pc2table[i]) & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= (inR >>> pc2table[i]) & 0x1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + + outL = ((r & 1) << 5) | (r >>> 27); + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= (r >>> i) & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= (r >>> i) & 0x3f; + outR <<= 6; + } + outR |= ((r & 0x1f) << 1) | (r >>> 31); + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +var sTable = [ + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, + + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, + + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, + + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, + + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, + + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, + + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 +]; + +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = (inL >>> (18 - i * 6)) & 0x3f; + var sb = sTable[i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = (inR >>> (18 - i * 6)) & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + return out >>> 0; +}; + +var permuteTable = [ + 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, + 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 +]; + +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= (num >>> permuteTable[i]) & 0x1; + } + return out >>> 0; +}; + +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) + str = '0' + str; + + var out = []; + for (var i = 0; i < size; i += group) + out.push(str.slice(i, i + group)); + return out.join(' '); +}; + +},{}],89:[function(require,module,exports){ +(function (Buffer){ +var generatePrime = require('./lib/generatePrime') +var primes = require('./lib/primes.json') + +var DH = require('./lib/dh') + +function getDiffieHellman (mod) { + var prime = new Buffer(primes[mod].prime, 'hex') + var gen = new Buffer(primes[mod].gen, 'hex') + + return new DH(prime, gen) +} + +var ENCODINGS = { + 'binary': true, 'hex': true, 'base64': true +} + +function createDiffieHellman (prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator) + } + + enc = enc || 'binary' + genc = genc || 'binary' + generator = generator || new Buffer([2]) + + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc) + } + + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true) + } + + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc) + } + + return new DH(prime, generator, true) +} + +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + +}).call(this,require("buffer").Buffer) +},{"./lib/dh":90,"./lib/generatePrime":91,"./lib/primes.json":92,"buffer":74}],90:[function(require,module,exports){ +(function (Buffer){ +var BN = require('bn.js'); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = require('./generatePrime'); +var randomBytes = require('randombytes'); +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} + +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} + +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + + if (prime.isEven() || + !primes.simpleSieve || + !primes.fermatTest(prime) || + !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} + +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; + +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; + +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; + +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; + +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; + +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; + +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; + +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this,require("buffer").Buffer) +},{"./generatePrime":91,"bn.js":43,"buffer":74,"miller-rabin":130,"randombytes":152}],91:[function(require,module,exports){ +var randomBytes = require('randombytes'); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = require('bn.js'); +var TWENTYFOUR = new BN(24); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; + +function _getPrimes() { + if (primes !== null) + return primes; + + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) + if (k % res[j] === 0) + break; + + if (i !== j && res[j] <= sqrt) + continue; + + res[i++] = k; + } + primes = res; + return res; +} + +function simpleSieve(p) { + var primes = _getPrimes(); + + for (var i = 0; i < primes.length; i++) + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + + return true; +} + +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} + +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + + var num, n2; + + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && + fermatTest(n2) && fermatTest(num) && + millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } + +} + +},{"bn.js":43,"miller-rabin":130,"randombytes":152}],92:[function(require,module,exports){ +module.exports={ + "modp1": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" + }, + "modp2": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" + }, + "modp5": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" + }, + "modp14": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" + }, + "modp15": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" + }, + "modp16": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" + }, + "modp17": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" + }, + "modp18": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" + } +} +},{}],93:[function(require,module,exports){ +'use strict'; + +var elliptic = exports; + +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); + +},{"../package.json":108,"./elliptic/curve":96,"./elliptic/curves":99,"./elliptic/ec":100,"./elliptic/eddsa":103,"./elliptic/utils":107,"brorand":44}],94:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + for (var k = j + doubles.step - 1; k >= j; k--) + nafW = (nafW << 1) + naf[k]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) + k++; + if (i >= 0) + k++; + acc = acc.dblp(k); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len, + jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + for (var i = 0; i < len; i++) { + var p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a]); + naf[b] = getNAF(coeffs[b], wndWidth[b]); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */ + ]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */ + ]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (var i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; + + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); + + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (var i = 0; i < len; i++) + wnd[i] = null; + + if (jacobianResult) + return acc; + else + return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && + bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) + assert(bytes[bytes.length - 1] % 2 === 0); + else if (bytes[0] === 0x07) + assert(bytes[bytes.length - 1] % 2 === 1); + + var res = this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + + return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; + + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; + + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; + + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; + + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; + +},{"../utils":107,"bn.js":43}],95:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); + +var assert = utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.fromRed().isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + (this.y.cmp(this.z) === 0 || + (this.zOne && this.y.cmp(this.curve.c) === 0)); +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +},{"../utils":107,"./base":94,"bn.js":43,"inherits":126}],96:[function(require,module,exports){ +'use strict'; + +var curve = exports; + +curve.base = require('./base'); +curve.short = require('./short'); +curve.mont = require('./mont'); +curve.edwards = require('./edwards'); + +},{"./base":94,"./edwards":95,"./mont":97,"./short":98}],97:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); + +var utils = require('../utils'); + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() { + // No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + + return this.x.fromRed(); +}; + +},{"../utils":107,"./base":94,"bn.js":43,"inherits":126}],98:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); + +var assert = utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) + return this; + else if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +},{"../utils":107,"./base":94,"bn.js":43,"inherits":126}],99:[function(require,module,exports){ +'use strict'; + +var curves = exports; + +var hash = require('hash.js'); +var curve = require('./curve'); +var utils = require('./utils'); + +var assert = utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new curve.short(options); + else if (options.type === 'edwards') + this.curve = new curve.edwards(options); + else + this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' + ] +}); + +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' + ] +}); + +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' + ] +}); + +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' + ] +}); + +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650' + ] +}); + +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9' + ] +}); + +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658' + ] +}); + +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + } + ], + + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre + ] +}); + +},{"./curve":96,"./precomputed/secp256k1":106,"./utils":107,"hash.js":112}],100:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var HmacDRBG = require('hmac-drbg'); +var utils = require('../utils'); +var curves = require('../curves'); +var rand = require('brorand'); +var assert = utils.assert; + +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(curves.hasOwnProperty(options), 'Unknown curve ' + options); + + options = curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; + +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; true; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + + if (!this.curve._maxwellTrick) { + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + var p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + +},{"../curves":99,"../utils":107,"./key":101,"./signature":102,"bn.js":43,"brorand":44,"hmac-drbg":124}],101:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; + + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; + + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; + + return { result: true, reason: null }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); + + if (!enc) + return this.pub; + + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || + this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + +},{"../utils":107,"bn.js":43}],102:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); + +var utils = require('../utils'); +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; + + if (this._importDER(options, enc)) + return; + + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + } + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0 && (r[1] & 0x80)) { + r = r.slice(1); + } + if (s[0] === 0 && (s[1] & 0x80)) { + s = s.slice(1); + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); + } + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); + + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + +},{"../utils":107,"bn.js":43}],103:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var curves = require('../curves'); +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + + if (!(this instanceof EDDSA)) + return new EDDSA(curve); + + var curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + +},{"../curves":99,"../utils":107,"./key":104,"./signature":105,"hash.js":112}],104:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); + +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); + +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + + return a; +}); + +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); + +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); + +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; + +},{"../utils":107}],105:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + + if (typeof sig !== 'object') + sig = parseBytes(sig); + + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + + assert(sig.R && sig.S, 'Signature without R or S'); + + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; + + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); + +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); + +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); + +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; + +},{"../utils":107,"bn.js":43}],106:[function(require,module,exports){ +module.exports = { + doubles: { + step: 4, + points: [ + [ + 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', + 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' + ], + [ + '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', + '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' + ], + [ + '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', + 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' + ], + [ + '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', + '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' + ], + [ + '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', + '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' + ], + [ + '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', + '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' + ], + [ + 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', + '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' + ], + [ + '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', + 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' + ], + [ + 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', + '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' + ], + [ + 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', + 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' + ], + [ + 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', + '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' + ], + [ + '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', + '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' + ], + [ + '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', + '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' + ], + [ + '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', + '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' + ], + [ + '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', + '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' + ], + [ + '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', + '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' + ], + [ + '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', + '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' + ], + [ + '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', + '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' + ], + [ + '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', + 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' + ], + [ + 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', + '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' + ], + [ + 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', + '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' + ], + [ + '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', + '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' + ], + [ + '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', + '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' + ], + [ + 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', + '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' + ], + [ + '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', + 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' + ], + [ + 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', + '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' + ], + [ + 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', + 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' + ], + [ + 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', + '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' + ], + [ + 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', + 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' + ], + [ + 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', + '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' + ], + [ + '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', + 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' + ], + [ + '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', + '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' + ], + [ + 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', + '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' + ], + [ + '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', + 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' + ], + [ + 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', + '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' + ], + [ + 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', + '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' + ], + [ + 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', + 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' + ], + [ + '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', + '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' + ], + [ + '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', + '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' + ], + [ + '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', + 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' + ], + [ + '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', + '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' + ], + [ + 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', + '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' + ], + [ + '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', + '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' + ], + [ + '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', + 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' + ], + [ + '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', + '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' + ], + [ + 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', + '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' + ], + [ + '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', + 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' + ], + [ + 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', + 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' + ], + [ + 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', + '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' + ], + [ + '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', + 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' + ], + [ + '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', + 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' + ], + [ + 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', + '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' + ], + [ + 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', + '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' + ], + [ + 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', + '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' + ], + [ + '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', + 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' + ], + [ + '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', + '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' + ], + [ + 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', + 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' + ], + [ + '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', + 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' + ], + [ + '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', + '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' + ], + [ + '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', + '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' + ], + [ + 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', + 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' + ], + [ + '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', + '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' + ], + [ + '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', + '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' + ], + [ + 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', + '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' + ], + [ + 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', + 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' + ] + ] + }, + naf: { + wnd: 7, + points: [ + [ + 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', + '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' + ], + [ + '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', + 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' + ], + [ + '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', + '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' + ], + [ + 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', + 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' + ], + [ + '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', + 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' + ], + [ + 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', + 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' + ], + [ + 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', + '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' + ], + [ + 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', + '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' + ], + [ + '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', + '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' + ], + [ + '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', + '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' + ], + [ + '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', + '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' + ], + [ + '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', + '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' + ], + [ + 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', + 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' + ], + [ + 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', + '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' + ], + [ + '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', + 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' + ], + [ + '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', + 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' + ], + [ + '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', + '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' + ], + [ + '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', + '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' + ], + [ + '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', + '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' + ], + [ + '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', + 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' + ], + [ + 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', + 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' + ], + [ + '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', + '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' + ], + [ + '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', + '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' + ], + [ + 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', + 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' + ], + [ + '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', + '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' + ], + [ + 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', + 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' + ], + [ + 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', + 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' + ], + [ + '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', + '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' + ], + [ + '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', + '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' + ], + [ + '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', + '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' + ], + [ + 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', + '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' + ], + [ + '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', + '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' + ], + [ + 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', + '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' + ], + [ + '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', + 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' + ], + [ + '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', + 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' + ], + [ + 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', + 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' + ], + [ + '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', + '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' + ], + [ + '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', + 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' + ], + [ + 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', + 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' + ], + [ + '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', + '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' + ], + [ + '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', + 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' + ], + [ + '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', + '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' + ], + [ + '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', + 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' + ], + [ + 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', + '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' + ], + [ + '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', + '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' + ], + [ + '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', + 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' + ], + [ + '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', + 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' + ], + [ + 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', + 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' + ], + [ + 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', + 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' + ], + [ + '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', + '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' + ], + [ + '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', + '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' + ], + [ + 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', + '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' + ], + [ + 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', + 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' + ], + [ + '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', + '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' + ], + [ + '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', + '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' + ], + [ + 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', + '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' + ], + [ + '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', + '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' + ], + [ + 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', + 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' + ], + [ + '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', + 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' + ], + [ + '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', + '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' + ], + [ + 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', + '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' + ], + [ + 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', + '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' + ], + [ + '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', + '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' + ], + [ + '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', + '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' + ], + [ + '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', + 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' + ], + [ + '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', + 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' + ], + [ + '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', + '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' + ], + [ + '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', + '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' + ], + [ + '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', + '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' + ], + [ + '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', + 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' + ], + [ + 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', + 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' + ], + [ + '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', + 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' + ], + [ + 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', + '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' + ], + [ + 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', + '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' + ], + [ + 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', + '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' + ], + [ + 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', + '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' + ], + [ + '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', + 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' + ], + [ + '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', + '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' + ], + [ + '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', + 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' + ], + [ + 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', + 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' + ], + [ + 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', + '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' + ], + [ + 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', + 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' + ], + [ + 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', + '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' + ], + [ + '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', + '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' + ], + [ + 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', + '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' + ], + [ + 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', + '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' + ], + [ + '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', + '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' + ], + [ + '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', + 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' + ], + [ + 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', + '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' + ], + [ + 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', + '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' + ], + [ + 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', + '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' + ], + [ + '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', + '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' + ], + [ + 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', + 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' + ], + [ + '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', + 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' + ], + [ + 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', + 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' + ], + [ + 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', + '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' + ], + [ + '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', + 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' + ], + [ + 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', + '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' + ], + [ + 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', + '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' + ], + [ + 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', + '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' + ], + [ + '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', + 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' + ], + [ + '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', + 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' + ], + [ + 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', + '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' + ], + [ + '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', + 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' + ], + [ + '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', + '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' + ], + [ + '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', + 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' + ], + [ + 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', + 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' + ], + [ + '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', + 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' + ], + [ + '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', + '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' + ], + [ + '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', + 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' + ], + [ + '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', + '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' + ], + [ + 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', + 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' + ], + [ + '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', + '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' + ], + [ + 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', + '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' + ], + [ + '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', + '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' + ], + [ + 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', + 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' + ], + [ + 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', + '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' + ], + [ + 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', + 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' + ], + [ + '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', + 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' + ], + [ + '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', + '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' + ], + [ + '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', + 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' + ], + [ + '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', + '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' + ], + [ + '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', + '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' + ], + [ + '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', + 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' + ], + [ + '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', + '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' + ], + [ + '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', + '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' + ], + [ + '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', + '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' + ] + ] + } +}; + +},{}],107:[function(require,module,exports){ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); +var minAssert = require('minimalistic-assert'); +var minUtils = require('minimalistic-crypto-utils'); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w) { + var naf = []; + var ws = 1 << (w + 1); + var k = num.clone(); + while (k.cmpn(1) >= 0) { + var z; + if (k.isOdd()) { + var mod = k.andln(ws - 1); + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + naf.push(z); + + // Optimization, shift by word if possible + var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; + for (var i = 1; i < shift; i++) + naf.push(0); + k.iushrn(shift); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [] + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + + +},{"bn.js":43,"minimalistic-assert":131,"minimalistic-crypto-utils":132}],108:[function(require,module,exports){ +module.exports={ + "_from": "elliptic@^6.0.0", + "_id": "elliptic@6.5.1", + "_inBundle": false, + "_integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "_location": "/browserify/elliptic", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "elliptic@^6.0.0", + "name": "elliptic", + "escapedName": "elliptic", + "rawSpec": "^6.0.0", + "saveSpec": null, + "fetchSpec": "^6.0.0" + }, + "_requiredBy": [ + "/browserify/browserify-sign", + "/browserify/create-ecdh" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "_shasum": "c380f5f909bf1b9b4428d028cd18d3b0efd6b52b", + "_spec": "elliptic@^6.0.0", + "_where": "/usr/local/lib/node_modules/browserify/node_modules/browserify-sign", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "bundleDependencies": false, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "deprecated": false, + "description": "EC cryptography", + "devDependencies": { + "brfs": "^1.4.3", + "coveralls": "^3.0.4", + "grunt": "^1.0.4", + "grunt-browserify": "^5.0.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-connect": "^1.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-mocha-istanbul": "^3.0.1", + "grunt-saucelabs": "^9.0.1", + "istanbul": "^0.4.2", + "jscs": "^3.0.7", + "jshint": "^2.6.0", + "mocha": "^6.1.4" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "version": "grunt dist && git add dist/" + }, + "version": "6.5.1" +} + +},{}],109:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var objectCreate = Object.create || objectCreatePolyfill +var objectKeys = Object.keys || objectKeysPolyfill +var bind = Function.prototype.bind || functionBindPolyfill + +function EventEmitter() { + if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { + this._events = objectCreate(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +var hasDefineProperty; +try { + var o = {}; + if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 }); + hasDefineProperty = o.x === 0; +} catch (err) { hasDefineProperty = false } +if (hasDefineProperty) { + Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + // check whether the input is a positive number (whose value is zero or + // greater and not a NaN). + if (typeof arg !== 'number' || arg < 0 || arg !== arg) + throw new TypeError('"defaultMaxListeners" must be a positive number'); + defaultMaxListeners = arg; + } + }); +} else { + EventEmitter.defaultMaxListeners = defaultMaxListeners; +} + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || isNaN(n)) + throw new TypeError('"n" argument must be a positive number'); + this._maxListeners = n; + return this; +}; + +function $getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return $getMaxListeners(this); +}; + +// These standalone emit* functions are used to optimize calling of event +// handlers for fast cases because emit() itself often has a variable number of +// arguments and can be deoptimized because of that. These functions always have +// the same number of arguments and thus do not get deoptimized, so the code +// inside them can execute faster. +function emitNone(handler, isFn, self) { + if (isFn) + handler.call(self); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self); + } +} +function emitOne(handler, isFn, self, arg1) { + if (isFn) + handler.call(self, arg1); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self, arg1); + } +} +function emitTwo(handler, isFn, self, arg1, arg2) { + if (isFn) + handler.call(self, arg1, arg2); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self, arg1, arg2); + } +} +function emitThree(handler, isFn, self, arg1, arg2, arg3) { + if (isFn) + handler.call(self, arg1, arg2, arg3); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self, arg1, arg2, arg3); + } +} + +function emitMany(handler, isFn, self, args) { + if (isFn) + handler.apply(self, args); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].apply(self, args); + } +} + +EventEmitter.prototype.emit = function emit(type) { + var er, handler, len, args, i, events; + var doError = (type === 'error'); + + events = this._events; + if (events) + doError = (doError && events.error == null); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + if (arguments.length > 1) + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Unhandled "error" event. (' + er + ')'); + err.context = er; + throw err; + } + return false; + } + + handler = events[type]; + + if (!handler) + return false; + + var isFn = typeof handler === 'function'; + len = arguments.length; + switch (len) { + // fast cases + case 1: + emitNone(handler, isFn, this); + break; + case 2: + emitOne(handler, isFn, this, arguments[1]); + break; + case 3: + emitTwo(handler, isFn, this, arguments[1], arguments[2]); + break; + case 4: + emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); + break; + // slower + default: + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + emitMany(handler, isFn, this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + + events = target._events; + if (!events) { + events = target._events = objectCreate(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (!existing) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + } else { + // If we've already got an array, just append. + if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + } + + // Check for listener leak + if (!existing.warned) { + m = $getMaxListeners(target); + if (m && m > 0 && existing.length > m) { + existing.warned = true; + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' "' + String(type) + '" listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit.'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + if (typeof console === 'object' && console.warn) { + console.warn('%s: %s', w.name, w.message); + } + } + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + switch (arguments.length) { + case 0: + return this.listener.call(this.target); + case 1: + return this.listener.call(this.target, arguments[0]); + case 2: + return this.listener.call(this.target, arguments[0], arguments[1]); + case 3: + return this.listener.call(this.target, arguments[0], arguments[1], + arguments[2]); + default: + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) + args[i] = arguments[i]; + this.listener.apply(this.target, args); + } + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = bind.call(onceWrapper, state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + + events = this._events; + if (!events) + return this; + + list = events[type]; + if (!list) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = objectCreate(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else + spliceOne(list, position); + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (!events) + return this; + + // not listening for removeListener, no need to emit + if (!events.removeListener) { + if (arguments.length === 0) { + this._events = objectCreate(null); + this._eventsCount = 0; + } else if (events[type]) { + if (--this._eventsCount === 0) + this._events = objectCreate(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = objectKeys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = objectCreate(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (!events) + return []; + + var evlistener = events[type]; + if (!evlistener) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; +}; + +// About 1.5x faster than the two-arg version of Array#splice(). +function spliceOne(list, index) { + for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) + list[i] = list[k]; + list.pop(); +} + +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function objectCreatePolyfill(proto) { + var F = function() {}; + F.prototype = proto; + return new F; +} +function objectKeysPolyfill(obj) { + var keys = []; + for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { + keys.push(k); + } + return k; +} +function functionBindPolyfill(context) { + var fn = this; + return function () { + return fn.apply(context, arguments); + }; +} + +},{}],110:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var MD5 = require('md5.js') + +/* eslint-disable camelcase */ +function EVP_BytesToKey (password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') + } + + var keyLen = keyBits / 8 + var key = Buffer.alloc(keyLen) + var iv = Buffer.alloc(ivLen || 0) + var tmp = Buffer.alloc(0) + + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5() + hash.update(tmp) + hash.update(password) + if (salt) hash.update(salt) + tmp = hash.digest() + + var used = 0 + + if (keyLen > 0) { + var keyStart = key.length - keyLen + used = Math.min(keyLen, tmp.length) + tmp.copy(key, keyStart, 0, used) + keyLen -= used + } + + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen + var length = Math.min(ivLen, tmp.length - used) + tmp.copy(iv, ivStart, used, used + length) + ivLen -= length + } + } + + tmp.fill(0) + return { key: key, iv: iv } +} + +module.exports = EVP_BytesToKey + +},{"md5.js":129,"safe-buffer":170}],111:[function(require,module,exports){ +'use strict' +var Buffer = require('safe-buffer').Buffer +var Transform = require('stream').Transform +var inherits = require('inherits') + +function throwIfNotStringOrBuffer (val, prefix) { + if (!Buffer.isBuffer(val) && typeof val !== 'string') { + throw new TypeError(prefix + ' must be a string or a buffer') + } +} + +function HashBase (blockSize) { + Transform.call(this) + + this._block = Buffer.allocUnsafe(blockSize) + this._blockSize = blockSize + this._blockOffset = 0 + this._length = [0, 0, 0, 0] + + this._finalized = false +} + +inherits(HashBase, Transform) + +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null + try { + this.update(chunk, encoding) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype._flush = function (callback) { + var error = null + try { + this.push(this.digest()) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype.update = function (data, encoding) { + throwIfNotStringOrBuffer(data, 'Data') + if (this._finalized) throw new Error('Digest already called') + if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) + + // consume data + var block = this._block + var offset = 0 + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] + this._update() + this._blockOffset = 0 + } + while (offset < data.length) block[this._blockOffset++] = data[offset++] + + // update length + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry + carry = (this._length[j] / 0x0100000000) | 0 + if (carry > 0) this._length[j] -= 0x0100000000 * carry + } + + return this +} + +HashBase.prototype._update = function () { + throw new Error('_update is not implemented') +} + +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called') + this._finalized = true + + var digest = this._digest() + if (encoding !== undefined) digest = digest.toString(encoding) + + // reset state + this._block.fill(0) + this._blockOffset = 0 + for (var i = 0; i < 4; ++i) this._length[i] = 0 + + return digest +} + +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented') +} + +module.exports = HashBase + +},{"inherits":126,"safe-buffer":170,"stream":179}],112:[function(require,module,exports){ +var hash = exports; + +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + +},{"./hash/common":113,"./hash/hmac":114,"./hash/ripemd":115,"./hash/sha":116,"./hash/utils":123}],113:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); + +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; + +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; + + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); + } + + return this; +}; + +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + + return this._digest(enc); +}; + +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; + + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (t = 8; t < this.padLength; t++) + res[i++] = 0; + } + + return res; +}; + +},{"./utils":123,"minimalistic-assert":131}],114:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); + +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; + +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); + + for (i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; + +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; + +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + +},{"./utils":123,"minimalistic-assert":131}],115:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var common = require('./common'); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; + +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); + + BlockHash.call(this); + + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; + +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; + +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; + +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; + +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); +} + +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; +} + +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; + else if (j <= 63) + return 0x7a6d76e9; + else + return 0x00000000; +} + +var r = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +]; + +var rh = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +]; + +var s = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +]; + +var sh = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +]; + +},{"./common":113,"./utils":123}],116:[function(require,module,exports){ +'use strict'; + +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); + +},{"./sha/1":117,"./sha/224":118,"./sha/256":119,"./sha/384":120,"./sha/512":121}],117:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; + +var sha1_K = [ + 0x5A827999, 0x6ED9EBA1, + 0x8F1BBCDC, 0xCA62C1D6 +]; + +function SHA1() { + if (!(this instanceof SHA1)) + return new SHA1(); + + BlockHash.call(this); + this.h = [ + 0x67452301, 0xefcdab89, 0x98badcfe, + 0x10325476, 0xc3d2e1f0 ]; + this.W = new Array(80); +} + +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; + +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; + +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + + for(; i < W.length; i++) + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; + +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +},{"../common":113,"../utils":123,"./common":122}],118:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var SHA256 = require('./256'); + +function SHA224() { + if (!(this instanceof SHA224)) + return new SHA224(); + + SHA256.call(this); + this.h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; + +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; + +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 7), 'big'); + else + return utils.split32(this.h.slice(0, 7), 'big'); +}; + + +},{"../utils":123,"./256":119}],119:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); + +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; + +var BlockHash = common.BlockHash; + +var sha256_K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]; + +function SHA256() { + if (!(this instanceof SHA256)) + return new SHA256(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; + +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; + +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + for (; i < W.length; i++) + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; + +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +},{"../common":113,"../utils":123,"./common":122,"minimalistic-assert":131}],120:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); + +var SHA512 = require('./512'); + +function SHA384() { + if (!(this instanceof SHA384)) + return new SHA384(); + + SHA512.call(this); + this.h = [ + 0xcbbb9d5d, 0xc1059ed8, + 0x629a292a, 0x367cd507, + 0x9159015a, 0x3070dd17, + 0x152fecd8, 0xf70e5939, + 0x67332667, 0xffc00b31, + 0x8eb44a87, 0x68581511, + 0xdb0c2e0d, 0x64f98fa7, + 0x47b5481d, 0xbefa4fa4 ]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; + +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; + +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 12), 'big'); + else + return utils.split32(this.h.slice(0, 12), 'big'); +}; + +},{"../utils":123,"./512":121}],121:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); + +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; + +var BlockHash = common.BlockHash; + +var sha512_K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function SHA512() { + if (!(this instanceof SHA512)) + return new SHA512(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xf3bcc908, + 0xbb67ae85, 0x84caa73b, + 0x3c6ef372, 0xfe94f82b, + 0xa54ff53a, 0x5f1d36f1, + 0x510e527f, 0xade682d1, + 0x9b05688c, 0x2b3e6c1f, + 0x1f83d9ab, 0xfb41bd6b, + 0x5be0cd19, 0x137e2179 ]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; + +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; + +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; + + // 32 x 32bit words + for (var i = 0; i < 32; i++) + W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; + + W[i] = sum64_4_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + W[i + 1] = sum64_4_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + } +}; + +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + + var W = this.W; + + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + + var T1_hi = sum64_5_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + var T1_lo = sum64_5_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + + hh = gh; + hl = gl; + + gh = fh; + gl = fl; + + fh = eh; + fl = el; + + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + + dh = ch; + dl = cl; + + ch = bh; + cl = bl; + + bh = ah; + bl = al; + + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; + +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +function ch64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ ((~xh) & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ ((~xl) & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +},{"../common":113,"../utils":123,"minimalistic-assert":131}],122:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var rotr32 = utils.rotr32; + +function ft_1(s, x, y, z) { + if (s === 0) + return ch32(x, y, z); + if (s === 1 || s === 3) + return p32(x, y, z); + if (s === 2) + return maj32(x, y, z); +} +exports.ft_1 = ft_1; + +function ch32(x, y, z) { + return (x & y) ^ ((~x) & z); +} +exports.ch32 = ch32; + +function maj32(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); +} +exports.maj32 = maj32; + +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; + +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; + +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; + +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} +exports.g0_256 = g0_256; + +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} +exports.g1_256 = g1_256; + +},{"../utils":123}],123:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +exports.inherits = inherits; + +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = (c >> 6) | 192; + res[p++] = (c & 63) | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = (c >> 18) | 240; + res[p++] = ((c >> 12) & 63) | 128; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } else { + res[p++] = (c >> 12) | 224; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; + +function htonl(w) { + var res = (w >>> 24) | + ((w >>> 8) & 0xff00) | + ((w << 8) & 0xff0000) | + ((w & 0xff) << 24); + return res >>> 0; +} +exports.htonl = htonl; + +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') + w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +exports.zero2 = zero2; + +function zero8(word) { + if (word.length === 7) + return '0' + word; + else if (word.length === 6) + return '00' + word; + else if (word.length === 5) + return '000' + word; + else if (word.length === 4) + return '0000' + word; + else if (word.length === 3) + return '00000' + word; + else if (word.length === 2) + return '000000' + word; + else if (word.length === 1) + return '0000000' + word; + else + return word; +} +exports.zero8 = zero8; + +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') + w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; + else + w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; + +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = (m >>> 16) & 0xff; + res[k + 2] = (m >>> 8) & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = (m >>> 16) & 0xff; + res[k + 1] = (m >>> 8) & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; + +function rotr32(w, b) { + return (w >>> b) | (w << (32 - b)); +} +exports.rotr32 = rotr32; + +function rotl32(w, b) { + return (w << b) | (w >>> (32 - b)); +} +exports.rotl32 = rotl32; + +function sum32(a, b) { + return (a + b) >>> 0; +} +exports.sum32 = sum32; + +function sum32_3(a, b, c) { + return (a + b + c) >>> 0; +} +exports.sum32_3 = sum32_3; + +function sum32_4(a, b, c, d) { + return (a + b + c + d) >>> 0; +} +exports.sum32_4 = sum32_4; + +function sum32_5(a, b, c, d, e) { + return (a + b + c + d + e) >>> 0; +} +exports.sum32_5 = sum32_5; + +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; + +function sum64_hi(ah, al, bh, bl) { + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; + +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; + +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; + +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; + +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + lo = (lo + el) >>> 0; + carry += lo < el ? 1 : 0; + + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; + +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; + +function rotr64_hi(ah, al, num) { + var r = (al << (32 - num)) | (ah >>> num); + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; + +function rotr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; + +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; + +function shr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.shr64_lo = shr64_lo; + +},{"inherits":126,"minimalistic-assert":131}],124:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; + +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; + + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) + throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; + +},{"hash.js":112,"minimalistic-assert":131,"minimalistic-crypto-utils":132}],125:[function(require,module,exports){ +arguments[4][18][0].apply(exports,arguments) +},{"dup":18}],126:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} + +},{}],127:[function(require,module,exports){ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} + +},{}],128:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],129:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var HashBase = require('hash-base') +var Buffer = require('safe-buffer').Buffer + +var ARRAY16 = new Array(16) + +function MD5 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 +} + +inherits(MD5, HashBase) + +MD5.prototype._update = function () { + var M = ARRAY16 + for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) + + var a = this._a + var b = this._b + var c = this._c + var d = this._d + + a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) + d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) + c = fnF(c, d, a, b, M[2], 0x242070db, 17) + b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) + a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) + d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) + c = fnF(c, d, a, b, M[6], 0xa8304613, 17) + b = fnF(b, c, d, a, M[7], 0xfd469501, 22) + a = fnF(a, b, c, d, M[8], 0x698098d8, 7) + d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) + c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) + b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) + a = fnF(a, b, c, d, M[12], 0x6b901122, 7) + d = fnF(d, a, b, c, M[13], 0xfd987193, 12) + c = fnF(c, d, a, b, M[14], 0xa679438e, 17) + b = fnF(b, c, d, a, M[15], 0x49b40821, 22) + + a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) + d = fnG(d, a, b, c, M[6], 0xc040b340, 9) + c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) + b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) + a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) + d = fnG(d, a, b, c, M[10], 0x02441453, 9) + c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) + b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) + a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) + d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) + c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) + b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) + a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) + d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) + c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) + b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) + + a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) + d = fnH(d, a, b, c, M[8], 0x8771f681, 11) + c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) + b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) + a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) + d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) + c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) + b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) + a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) + d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) + c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) + b = fnH(b, c, d, a, M[6], 0x04881d05, 23) + a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) + d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) + c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) + b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) + + a = fnI(a, b, c, d, M[0], 0xf4292244, 6) + d = fnI(d, a, b, c, M[7], 0x432aff97, 10) + c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) + b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) + a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) + d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) + c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) + b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) + a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) + d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) + c = fnI(c, d, a, b, M[6], 0xa3014314, 15) + b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) + a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) + d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) + c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) + b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) + + this._a = (this._a + a) | 0 + this._b = (this._b + b) | 0 + this._c = (this._c + c) | 0 + this._d = (this._d + d) | 0 +} + +MD5.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } + + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = Buffer.allocUnsafe(16) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + return buffer +} + +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} + +function fnF (a, b, c, d, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 +} + +function fnG (a, b, c, d, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 +} + +function fnH (a, b, c, d, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 +} + +function fnI (a, b, c, d, m, k, s) { + return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 +} + +module.exports = MD5 + +},{"hash-base":111,"inherits":126,"safe-buffer":170}],130:[function(require,module,exports){ +var bn = require('bn.js'); +var brorand = require('brorand'); + +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} +module.exports = MillerRabin; + +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; + +MillerRabin.prototype._randbelow = function _randbelow(n) { + var len = n.bitLength(); + var min_bytes = Math.ceil(len / 8); + + // Generage random bytes until a number less than n is found. + // This ensures that 0..n-1 have an equal probability of being selected. + do + var a = new bn(this.rand.generate(min_bytes)); + while (a.cmp(n) >= 0); + + return a; +}; + +MillerRabin.prototype._randrange = function _randrange(start, stop) { + // Generate a random number greater than or equal to start and less than stop. + var size = stop.sub(start); + return start.add(this._randbelow(size)); +}; + +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + + if (!k) + k = Math.max(1, (len / 48) | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + + var rn1 = n1.toRed(red); + + var prime = true; + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + if (cb) + cb(a); + + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + + if (x.cmp(rone) === 0) + return false; + if (x.cmp(rn1) === 0) + break; + } + + if (i === s) + return false; + } + + return prime; +}; + +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + + if (!k) + k = Math.max(1, (len / 48) | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + + var rn1 = n1.toRed(red); + + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + + var g = n.gcd(a); + if (g.cmpn(1) !== 0) + return g; + + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + + if (x.cmp(rone) === 0) + return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) + break; + } + + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } + + return false; +}; + +},{"bn.js":43,"brorand":44}],131:[function(require,module,exports){ +module.exports = assert; + +function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +} + +assert.equal = function assertEqual(l, r, msg) { + if (l != r) + throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); +}; + +},{}],132:[function(require,module,exports){ +'use strict'; + +var utils = exports; + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + return res; + } + if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } else { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) + res.push(hi, lo); + else + res.push(lo); + } + } + return res; +} +utils.toArray = toArray; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +utils.zero2 = zero2; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; + +utils.encode = function encode(arr, enc) { + if (enc === 'hex') + return toHex(arr); + else + return arr; +}; + +},{}],133:[function(require,module,exports){ +module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", +"2.16.840.1.101.3.4.1.2": "aes-128-cbc", +"2.16.840.1.101.3.4.1.3": "aes-128-ofb", +"2.16.840.1.101.3.4.1.4": "aes-128-cfb", +"2.16.840.1.101.3.4.1.21": "aes-192-ecb", +"2.16.840.1.101.3.4.1.22": "aes-192-cbc", +"2.16.840.1.101.3.4.1.23": "aes-192-ofb", +"2.16.840.1.101.3.4.1.24": "aes-192-cfb", +"2.16.840.1.101.3.4.1.41": "aes-256-ecb", +"2.16.840.1.101.3.4.1.42": "aes-256-cbc", +"2.16.840.1.101.3.4.1.43": "aes-256-ofb", +"2.16.840.1.101.3.4.1.44": "aes-256-cfb" +} +},{}],134:[function(require,module,exports){ +// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js +// Fedor, you are amazing. +'use strict' + +var asn1 = require('asn1.js') + +exports.certificate = require('./certificate') + +var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { + this.seq().obj( + this.key('version').int(), + this.key('modulus').int(), + this.key('publicExponent').int(), + this.key('privateExponent').int(), + this.key('prime1').int(), + this.key('prime2').int(), + this.key('exponent1').int(), + this.key('exponent2').int(), + this.key('coefficient').int() + ) +}) +exports.RSAPrivateKey = RSAPrivateKey + +var RSAPublicKey = asn1.define('RSAPublicKey', function () { + this.seq().obj( + this.key('modulus').int(), + this.key('publicExponent').int() + ) +}) +exports.RSAPublicKey = RSAPublicKey + +var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { + this.seq().obj( + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPublicKey').bitstr() + ) +}) +exports.PublicKey = PublicKey + +var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { + this.seq().obj( + this.key('algorithm').objid(), + this.key('none').null_().optional(), + this.key('curve').objid().optional(), + this.key('params').seq().obj( + this.key('p').int(), + this.key('q').int(), + this.key('g').int() + ).optional() + ) +}) + +var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { + this.seq().obj( + this.key('version').int(), + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPrivateKey').octstr() + ) +}) +exports.PrivateKey = PrivateKeyInfo +var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { + this.seq().obj( + this.key('algorithm').seq().obj( + this.key('id').objid(), + this.key('decrypt').seq().obj( + this.key('kde').seq().obj( + this.key('id').objid(), + this.key('kdeparams').seq().obj( + this.key('salt').octstr(), + this.key('iters').int() + ) + ), + this.key('cipher').seq().obj( + this.key('algo').objid(), + this.key('iv').octstr() + ) + ) + ), + this.key('subjectPrivateKey').octstr() + ) +}) + +exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo + +var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { + this.seq().obj( + this.key('version').int(), + this.key('p').int(), + this.key('q').int(), + this.key('g').int(), + this.key('pub_key').int(), + this.key('priv_key').int() + ) +}) +exports.DSAPrivateKey = DSAPrivateKey + +exports.DSAparam = asn1.define('DSAparam', function () { + this.int() +}) + +var ECPrivateKey = asn1.define('ECPrivateKey', function () { + this.seq().obj( + this.key('version').int(), + this.key('privateKey').octstr(), + this.key('parameters').optional().explicit(0).use(ECParameters), + this.key('publicKey').optional().explicit(1).bitstr() + ) +}) +exports.ECPrivateKey = ECPrivateKey + +var ECParameters = asn1.define('ECParameters', function () { + this.choice({ + namedCurve: this.objid() + }) +}) + +exports.signature = asn1.define('signature', function () { + this.seq().obj( + this.key('r').int(), + this.key('s').int() + ) +}) + +},{"./certificate":135,"asn1.js":28}],135:[function(require,module,exports){ +// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js +// thanks to @Rantanen + +'use strict' + +var asn = require('asn1.js') + +var Time = asn.define('Time', function () { + this.choice({ + utcTime: this.utctime(), + generalTime: this.gentime() + }) +}) + +var AttributeTypeValue = asn.define('AttributeTypeValue', function () { + this.seq().obj( + this.key('type').objid(), + this.key('value').any() + ) +}) + +var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { + this.seq().obj( + this.key('algorithm').objid(), + this.key('parameters').optional(), + this.key('curve').objid().optional() + ) +}) + +var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { + this.seq().obj( + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPublicKey').bitstr() + ) +}) + +var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { + this.setof(AttributeTypeValue) +}) + +var RDNSequence = asn.define('RDNSequence', function () { + this.seqof(RelativeDistinguishedName) +}) + +var Name = asn.define('Name', function () { + this.choice({ + rdnSequence: this.use(RDNSequence) + }) +}) + +var Validity = asn.define('Validity', function () { + this.seq().obj( + this.key('notBefore').use(Time), + this.key('notAfter').use(Time) + ) +}) + +var Extension = asn.define('Extension', function () { + this.seq().obj( + this.key('extnID').objid(), + this.key('critical').bool().def(false), + this.key('extnValue').octstr() + ) +}) + +var TBSCertificate = asn.define('TBSCertificate', function () { + this.seq().obj( + this.key('version').explicit(0).int().optional(), + this.key('serialNumber').int(), + this.key('signature').use(AlgorithmIdentifier), + this.key('issuer').use(Name), + this.key('validity').use(Validity), + this.key('subject').use(Name), + this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), + this.key('issuerUniqueID').implicit(1).bitstr().optional(), + this.key('subjectUniqueID').implicit(2).bitstr().optional(), + this.key('extensions').explicit(3).seqof(Extension).optional() + ) +}) + +var X509Certificate = asn.define('X509Certificate', function () { + this.seq().obj( + this.key('tbsCertificate').use(TBSCertificate), + this.key('signatureAlgorithm').use(AlgorithmIdentifier), + this.key('signatureValue').bitstr() + ) +}) + +module.exports = X509Certificate + +},{"asn1.js":28}],136:[function(require,module,exports){ +// adapted from https://github.com/apatil/pemstrip +var 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 +var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m +var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m +var evp = require('evp_bytestokey') +var ciphers = require('browserify-aes') +var Buffer = require('safe-buffer').Buffer +module.exports = function (okey, password) { + var key = okey.toString() + var match = key.match(findProc) + var decrypted + if (!match) { + var match2 = key.match(fullRegex) + decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64') + } else { + var suite = 'aes' + match[1] + var iv = Buffer.from(match[2], 'hex') + var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64') + var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key + var out = [] + var cipher = ciphers.createDecipheriv(suite, cipherKey, iv) + out.push(cipher.update(cipherText)) + out.push(cipher.final()) + decrypted = Buffer.concat(out) + } + var tag = key.match(startRegex)[1] + return { + tag: tag, + data: decrypted + } +} + +},{"browserify-aes":48,"evp_bytestokey":110,"safe-buffer":170}],137:[function(require,module,exports){ +var asn1 = require('./asn1') +var aesid = require('./aesid.json') +var fixProc = require('./fixProc') +var ciphers = require('browserify-aes') +var compat = require('pbkdf2') +var Buffer = require('safe-buffer').Buffer +module.exports = parseKeys + +function parseKeys (buffer) { + var password + if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { + password = buffer.passphrase + buffer = buffer.key + } + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer) + } + + var stripped = fixProc(buffer, password) + + var type = stripped.tag + var data = stripped.data + var subtype, ndata + switch (type) { + case 'CERTIFICATE': + ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo + // falls through + case 'PUBLIC KEY': + if (!ndata) { + ndata = asn1.PublicKey.decode(data, 'der') + } + subtype = ndata.algorithm.algorithm.join('.') + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der') + case '1.2.840.10045.2.1': + ndata.subjectPrivateKey = ndata.subjectPublicKey + return { + type: 'ec', + data: ndata + } + case '1.2.840.10040.4.1': + ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der') + return { + type: 'dsa', + data: ndata.algorithm.params + } + default: throw new Error('unknown key id ' + subtype) + } + throw new Error('unknown key type ' + type) + case 'ENCRYPTED PRIVATE KEY': + data = asn1.EncryptedPrivateKey.decode(data, 'der') + data = decrypt(data, password) + // falls through + case 'PRIVATE KEY': + ndata = asn1.PrivateKey.decode(data, 'der') + subtype = ndata.algorithm.algorithm.join('.') + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der') + case '1.2.840.10045.2.1': + return { + curve: ndata.algorithm.curve, + privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey + } + case '1.2.840.10040.4.1': + ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der') + return { + type: 'dsa', + params: ndata.algorithm.params + } + default: throw new Error('unknown key id ' + subtype) + } + throw new Error('unknown key type ' + type) + case 'RSA PUBLIC KEY': + return asn1.RSAPublicKey.decode(data, 'der') + case 'RSA PRIVATE KEY': + return asn1.RSAPrivateKey.decode(data, 'der') + case 'DSA PRIVATE KEY': + return { + type: 'dsa', + params: asn1.DSAPrivateKey.decode(data, 'der') + } + case 'EC PRIVATE KEY': + data = asn1.ECPrivateKey.decode(data, 'der') + return { + curve: data.parameters.value, + privateKey: data.privateKey + } + default: throw new Error('unknown key type ' + type) + } +} +parseKeys.signature = asn1.signature +function decrypt (data, password) { + var salt = data.algorithm.decrypt.kde.kdeparams.salt + var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10) + var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')] + var iv = data.algorithm.decrypt.cipher.iv + var cipherText = data.subjectPrivateKey + var keylen = parseInt(algo.split('-')[1], 10) / 8 + var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1') + var cipher = ciphers.createDecipheriv(algo, key, iv) + var out = [] + out.push(cipher.update(cipherText)) + out.push(cipher.final()) + return Buffer.concat(out) +} + +},{"./aesid.json":133,"./asn1":134,"./fixProc":136,"browserify-aes":48,"pbkdf2":139,"safe-buffer":170}],138:[function(require,module,exports){ +(function (process){ +// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, +// backported and transplited with Babel, with backwards-compat fixes + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function (path) { + if (typeof path !== 'string') path = path + ''; + if (path.length === 0) return '.'; + var code = path.charCodeAt(0); + var hasRoot = code === 47 /*/*/; + var end = -1; + var matchedSlash = true; + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + if (code === 47 /*/*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) return hasRoot ? '/' : '.'; + if (hasRoot && end === 1) { + // return '//'; + // Backwards-compat fix: + return '/'; + } + return path.slice(0, end); +}; + +function basename(path) { + if (typeof path !== 'string') path = path + ''; + + var start = 0; + var end = -1; + var matchedSlash = true; + var i; + + for (i = path.length - 1; i >= 0; --i) { + if (path.charCodeAt(i) === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // path component + matchedSlash = false; + end = i + 1; + } + } + + if (end === -1) return ''; + return path.slice(start, end); +} + +// Uses a mixed approach for backwards-compatibility, as ext behavior changed +// in new Node.js versions, so only basename() above is backported here +exports.basename = function (path, ext) { + var f = basename(path); + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + +exports.extname = function (path) { + if (typeof path !== 'string') path = path + ''; + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + var preDotState = 0; + for (var i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === 46 /*.*/) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) + startDot = i; + else if (preDotState !== 1) + preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if (startDot === -1 || end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ''; + } + return path.slice(startDot, end); +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":145}],139:[function(require,module,exports){ +exports.pbkdf2 = require('./lib/async') +exports.pbkdf2Sync = require('./lib/sync') + +},{"./lib/async":140,"./lib/sync":143}],140:[function(require,module,exports){ +(function (process,global){ +var checkParameters = require('./precondition') +var defaultEncoding = require('./default-encoding') +var sync = require('./sync') +var Buffer = require('safe-buffer').Buffer + +var ZERO_BUF +var subtle = global.crypto && global.crypto.subtle +var toBrowser = { + 'sha': 'SHA-1', + 'sha-1': 'SHA-1', + 'sha1': 'SHA-1', + 'sha256': 'SHA-256', + 'sha-256': 'SHA-256', + 'sha384': 'SHA-384', + 'sha-384': 'SHA-384', + 'sha-512': 'SHA-512', + 'sha512': 'SHA-512' +} +var checks = [] +function checkNative (algo) { + if (global.process && !global.process.browser) { + return Promise.resolve(false) + } + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false) + } + if (checks[algo] !== undefined) { + return checks[algo] + } + ZERO_BUF = ZERO_BUF || Buffer.alloc(8) + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo) + .then(function () { + return true + }).catch(function () { + return false + }) + checks[algo] = prom + return prom +} + +function browserPbkdf2 (password, salt, iterations, length, algo) { + return subtle.importKey( + 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits'] + ).then(function (key) { + return subtle.deriveBits({ + name: 'PBKDF2', + salt: salt, + iterations: iterations, + hash: { + name: algo + } + }, key, length << 3) + }).then(function (res) { + return Buffer.from(res) + }) +} + +function resolvePromise (promise, callback) { + promise.then(function (out) { + process.nextTick(function () { + callback(null, out) + }) + }, function (e) { + process.nextTick(function () { + callback(e) + }) + }) +} +module.exports = function (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest + digest = undefined + } + + digest = digest || 'sha1' + var algo = toBrowser[digest.toLowerCase()] + + if (!algo || typeof global.Promise !== 'function') { + return process.nextTick(function () { + var out + try { + out = sync(password, salt, iterations, keylen, digest) + } catch (e) { + return callback(e) + } + callback(null, out) + }) + } + + checkParameters(password, salt, iterations, keylen) + if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2') + if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding) + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding) + + resolvePromise(checkNative(algo).then(function (resp) { + if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo) + + return sync(password, salt, iterations, keylen, digest) + }), callback) +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./default-encoding":141,"./precondition":142,"./sync":143,"_process":145,"safe-buffer":170}],141:[function(require,module,exports){ +(function (process){ +var defaultEncoding +/* istanbul ignore next */ +if (process.browser) { + defaultEncoding = 'utf-8' +} else { + var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10) + + defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary' +} +module.exports = defaultEncoding + +}).call(this,require('_process')) +},{"_process":145}],142:[function(require,module,exports){ +(function (Buffer){ +var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs + +function checkBuffer (buf, name) { + if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) { + throw new TypeError(name + ' must be a buffer or string') + } +} + +module.exports = function (password, salt, iterations, keylen) { + checkBuffer(password, 'Password') + checkBuffer(salt, 'Salt') + + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number') + } + + if (iterations < 0) { + throw new TypeError('Bad iterations') + } + + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number') + } + + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */ + throw new TypeError('Bad key length') + } +} + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":127}],143:[function(require,module,exports){ +var md5 = require('create-hash/md5') +var RIPEMD160 = require('ripemd160') +var sha = require('sha.js') + +var checkParameters = require('./precondition') +var defaultEncoding = require('./default-encoding') +var Buffer = require('safe-buffer').Buffer +var ZEROS = Buffer.alloc(128) +var sizes = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + rmd160: 20, + ripemd160: 20 +} + +function Hmac (alg, key, saltLen) { + var hash = getDigest(alg) + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + if (key.length > blocksize) { + key = hash(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]) + var opad = Buffer.allocUnsafe(blocksize + sizes[alg]) + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4) + ipad.copy(ipad1, 0, 0, blocksize) + this.ipad1 = ipad1 + this.ipad2 = ipad + this.opad = opad + this.alg = alg + this.blocksize = blocksize + this.hash = hash + this.size = sizes[alg] +} + +Hmac.prototype.run = function (data, ipad) { + data.copy(ipad, this.blocksize) + var h = this.hash(ipad) + h.copy(this.opad, this.blocksize) + return this.hash(this.opad) +} + +function getDigest (alg) { + function shaFunc (data) { + return sha(alg).update(data).digest() + } + function rmd160Func (data) { + return new RIPEMD160().update(data).digest() + } + + if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func + if (alg === 'md5') return md5 + return shaFunc +} + +function pbkdf2 (password, salt, iterations, keylen, digest) { + checkParameters(password, salt, iterations, keylen) + + if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding) + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding) + + digest = digest || 'sha1' + + var hmac = new Hmac(digest, password, salt.length) + + var DK = Buffer.allocUnsafe(keylen) + var block1 = Buffer.allocUnsafe(salt.length + 4) + salt.copy(block1, 0, 0, salt.length) + + var destPos = 0 + var hLen = sizes[digest] + var l = Math.ceil(keylen / hLen) + + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length) + + var T = hmac.run(block1, hmac.ipad1) + var U = T + + for (var j = 1; j < iterations; j++) { + U = hmac.run(U, hmac.ipad2) + for (var k = 0; k < hLen; k++) T[k] ^= U[k] + } + + T.copy(DK, destPos) + destPos += hLen + } + + return DK +} + +module.exports = pbkdf2 + +},{"./default-encoding":141,"./precondition":142,"create-hash/md5":79,"ripemd160":169,"safe-buffer":170,"sha.js":172}],144:[function(require,module,exports){ +(function (process){ +'use strict'; + +if (typeof process === 'undefined' || + !process.version || + process.version.indexOf('v0.') === 0 || + process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { nextTick: nextTick }; +} else { + module.exports = process +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + + +}).call(this,require('_process')) +},{"_process":145}],145:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // 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 + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // 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. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],146:[function(require,module,exports){ +exports.publicEncrypt = require('./publicEncrypt') +exports.privateDecrypt = require('./privateDecrypt') + +exports.privateEncrypt = function privateEncrypt (key, buf) { + return exports.publicEncrypt(key, buf, true) +} + +exports.publicDecrypt = function publicDecrypt (key, buf) { + return exports.privateDecrypt(key, buf, true) +} + +},{"./privateDecrypt":148,"./publicEncrypt":149}],147:[function(require,module,exports){ +var createHash = require('create-hash') +var Buffer = require('safe-buffer').Buffer + +module.exports = function (seed, len) { + var t = Buffer.alloc(0) + var i = 0 + var c + while (t.length < len) { + c = i2ops(i++) + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) + } + return t.slice(0, len) +} + +function i2ops (c) { + var out = Buffer.allocUnsafe(4) + out.writeUInt32BE(c, 0) + return out +} + +},{"create-hash":78,"safe-buffer":170}],148:[function(require,module,exports){ +var parseKeys = require('parse-asn1') +var mgf = require('./mgf') +var xor = require('./xor') +var BN = require('bn.js') +var crt = require('browserify-rsa') +var createHash = require('create-hash') +var withPublic = require('./withPublic') +var Buffer = require('safe-buffer').Buffer + +module.exports = function privateDecrypt (privateKey, enc, reverse) { + var padding + if (privateKey.padding) { + padding = privateKey.padding + } else if (reverse) { + padding = 1 + } else { + padding = 4 + } + + var key = parseKeys(privateKey) + var k = key.modulus.byteLength() + if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error') + } + var msg + if (reverse) { + msg = withPublic(new BN(enc), key) + } else { + msg = crt(enc, key) + } + var zBuffer = Buffer.alloc(k - msg.length) + msg = Buffer.concat([zBuffer, msg], k) + if (padding === 4) { + return oaep(key, msg) + } else if (padding === 1) { + return pkcs1(key, msg, reverse) + } else if (padding === 3) { + return msg + } else { + throw new Error('unknown padding') + } +} + +function oaep (key, msg) { + var k = key.modulus.byteLength() + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() + var hLen = iHash.length + if (msg[0] !== 0) { + throw new Error('decryption error') + } + var maskedSeed = msg.slice(1, hLen + 1) + var maskedDb = msg.slice(hLen + 1) + var seed = xor(maskedSeed, mgf(maskedDb, hLen)) + var db = xor(maskedDb, mgf(seed, k - hLen - 1)) + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error') + } + var i = hLen + while (db[i] === 0) { + i++ + } + if (db[i++] !== 1) { + throw new Error('decryption error') + } + return db.slice(i) +} + +function pkcs1 (key, msg, reverse) { + var p1 = msg.slice(0, 2) + var i = 2 + var status = 0 + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++ + break + } + } + var ps = msg.slice(2, i - 1) + + if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { + status++ + } + if (ps.length < 8) { + status++ + } + if (status) { + throw new Error('decryption error') + } + return msg.slice(i) +} +function compare (a, b) { + a = Buffer.from(a) + b = Buffer.from(b) + var dif = 0 + var len = a.length + if (a.length !== b.length) { + dif++ + len = Math.min(a.length, b.length) + } + var i = -1 + while (++i < len) { + dif += (a[i] ^ b[i]) + } + return dif +} + +},{"./mgf":147,"./withPublic":150,"./xor":151,"bn.js":43,"browserify-rsa":66,"create-hash":78,"parse-asn1":137,"safe-buffer":170}],149:[function(require,module,exports){ +var parseKeys = require('parse-asn1') +var randomBytes = require('randombytes') +var createHash = require('create-hash') +var mgf = require('./mgf') +var xor = require('./xor') +var BN = require('bn.js') +var withPublic = require('./withPublic') +var crt = require('browserify-rsa') +var Buffer = require('safe-buffer').Buffer + +module.exports = function publicEncrypt (publicKey, msg, reverse) { + var padding + if (publicKey.padding) { + padding = publicKey.padding + } else if (reverse) { + padding = 1 + } else { + padding = 4 + } + var key = parseKeys(publicKey) + var paddedMsg + if (padding === 4) { + paddedMsg = oaep(key, msg) + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse) + } else if (padding === 3) { + paddedMsg = new BN(msg) + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus') + } + } else { + throw new Error('unknown padding') + } + if (reverse) { + return crt(paddedMsg, key) + } else { + return withPublic(paddedMsg, key) + } +} + +function oaep (key, msg) { + var k = key.modulus.byteLength() + var mLen = msg.length + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() + var hLen = iHash.length + var hLen2 = 2 * hLen + if (mLen > k - hLen2 - 2) { + throw new Error('message too long') + } + var ps = Buffer.alloc(k - mLen - hLen2 - 2) + var dblen = k - hLen - 1 + var seed = randomBytes(hLen) + var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) + var maskedSeed = xor(seed, mgf(maskedDb, hLen)) + return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) +} +function pkcs1 (key, msg, reverse) { + var mLen = msg.length + var k = key.modulus.byteLength() + if (mLen > k - 11) { + throw new Error('message too long') + } + var ps + if (reverse) { + ps = Buffer.alloc(k - mLen - 3, 0xff) + } else { + ps = nonZero(k - mLen - 3) + } + return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) +} +function nonZero (len) { + var out = Buffer.allocUnsafe(len) + var i = 0 + var cache = randomBytes(len * 2) + var cur = 0 + var num + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len * 2) + cur = 0 + } + num = cache[cur++] + if (num) { + out[i++] = num + } + } + return out +} + +},{"./mgf":147,"./withPublic":150,"./xor":151,"bn.js":43,"browserify-rsa":66,"create-hash":78,"parse-asn1":137,"randombytes":152,"safe-buffer":170}],150:[function(require,module,exports){ +var BN = require('bn.js') +var Buffer = require('safe-buffer').Buffer + +function withPublic (paddedMsg, key) { + return Buffer.from(paddedMsg + .toRed(BN.mont(key.modulus)) + .redPow(new BN(key.publicExponent)) + .fromRed() + .toArray()) +} + +module.exports = withPublic + +},{"bn.js":43,"safe-buffer":170}],151:[function(require,module,exports){ +module.exports = function xor (a, b) { + var len = a.length + var i = -1 + while (++i < len) { + a[i] ^= b[i] + } + return a +} + +},{}],152:[function(require,module,exports){ +(function (process,global){ +'use strict' + +// limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues +var MAX_BYTES = 65536 + +// Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 +var MAX_UINT32 = 4294967295 + +function oldBrowser () { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') +} + +var Buffer = require('safe-buffer').Buffer +var crypto = global.crypto || global.msCrypto + +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes +} else { + module.exports = oldBrowser +} + +function randomBytes (size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') + + var bytes = Buffer.allocUnsafe(size) + + if (size > 0) { // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) + } + } else { + crypto.getRandomValues(bytes) + } + } + + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes) + }) + } + + return bytes +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"_process":145,"safe-buffer":170}],153:[function(require,module,exports){ +(function (process,global){ +'use strict' + +function oldBrowser () { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') +} +var safeBuffer = require('safe-buffer') +var randombytes = require('randombytes') +var Buffer = safeBuffer.Buffer +var kBufferMaxLength = safeBuffer.kMaxLength +var crypto = global.crypto || global.msCrypto +var kMaxUint32 = Math.pow(2, 32) - 1 +function assertOffset (offset, length) { + if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare + throw new TypeError('offset must be a number') + } + + if (offset > kMaxUint32 || offset < 0) { + throw new TypeError('offset must be a uint32') + } + + if (offset > kBufferMaxLength || offset > length) { + throw new RangeError('offset out of range') + } +} + +function assertSize (size, offset, length) { + if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare + throw new TypeError('size must be a number') + } + + if (size > kMaxUint32 || size < 0) { + throw new TypeError('size must be a uint32') + } + + if (size + offset > length || size > kBufferMaxLength) { + throw new RangeError('buffer too small') + } +} +if ((crypto && crypto.getRandomValues) || !process.browser) { + exports.randomFill = randomFill + exports.randomFillSync = randomFillSync +} else { + exports.randomFill = oldBrowser + exports.randomFillSync = oldBrowser +} +function randomFill (buf, offset, size, cb) { + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array') + } + + if (typeof offset === 'function') { + cb = offset + offset = 0 + size = buf.length + } else if (typeof size === 'function') { + cb = size + size = buf.length - offset + } else if (typeof cb !== 'function') { + throw new TypeError('"cb" argument must be a function') + } + assertOffset(offset, buf.length) + assertSize(size, offset, buf.length) + return actualFill(buf, offset, size, cb) +} + +function actualFill (buf, offset, size, cb) { + if (process.browser) { + var ourBuf = buf.buffer + var uint = new Uint8Array(ourBuf, offset, size) + crypto.getRandomValues(uint) + if (cb) { + process.nextTick(function () { + cb(null, buf) + }) + return + } + return buf + } + if (cb) { + randombytes(size, function (err, bytes) { + if (err) { + return cb(err) + } + bytes.copy(buf, offset) + cb(null, buf) + }) + return + } + var bytes = randombytes(size) + bytes.copy(buf, offset) + return buf +} +function randomFillSync (buf, offset, size) { + if (typeof offset === 'undefined') { + offset = 0 + } + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array') + } + + assertOffset(offset, buf.length) + + if (size === undefined) size = buf.length - offset + + assertSize(size, offset, buf.length) + + return actualFill(buf, offset, size) +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"_process":145,"randombytes":152,"safe-buffer":170}],154:[function(require,module,exports){ +module.exports = require('./lib/_stream_duplex.js'); + +},{"./lib/_stream_duplex.js":155}],155:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + pna.nextTick(cb, err); +}; +},{"./_stream_readable":157,"./_stream_writable":159,"core-util-is":76,"inherits":126,"process-nextick-args":144}],156:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; +},{"./_stream_transform":158,"core-util-is":76,"inherits":126}],157:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + 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]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, unpipeInfo); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + 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); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./_stream_duplex":155,"./internal/streams/BufferList":160,"./internal/streams/destroy":161,"./internal/streams/stream":162,"_process":145,"core-util-is":76,"events":109,"inherits":126,"isarray":128,"process-nextick-args":144,"safe-buffer":163,"string_decoder/":164,"util":45}],158:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} +},{"./_stream_duplex":155,"core-util-is":76,"inherits":126}],159:[function(require,module,exports){ +(function (process,global,setImmediate){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + 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); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) +},{"./_stream_duplex":155,"./internal/streams/destroy":161,"./internal/streams/stream":162,"_process":145,"core-util-is":76,"inherits":126,"process-nextick-args":144,"safe-buffer":163,"timers":181,"util-deprecate":182}],160:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ length: this.length }); + return this.constructor.name + ' ' + obj; + }; +} +},{"safe-buffer":163,"util":45}],161:[function(require,module,exports){ +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + pna.nextTick(emitErrorNT, this, err); + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + pna.nextTick(emitErrorNT, _this, err); + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; +},{"process-nextick-args":144}],162:[function(require,module,exports){ +module.exports = require('events').EventEmitter; + +},{"events":109}],163:[function(require,module,exports){ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + +},{"buffer":74}],164:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var Buffer = require('safe-buffer').Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + 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': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + 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; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} +},{"safe-buffer":163}],165:[function(require,module,exports){ +module.exports = require('./readable').PassThrough + +},{"./readable":166}],166:[function(require,module,exports){ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); + +},{"./lib/_stream_duplex.js":155,"./lib/_stream_passthrough.js":156,"./lib/_stream_readable.js":157,"./lib/_stream_transform.js":158,"./lib/_stream_writable.js":159}],167:[function(require,module,exports){ +module.exports = require('./readable').Transform + +},{"./readable":166}],168:[function(require,module,exports){ +module.exports = require('./lib/_stream_writable.js'); + +},{"./lib/_stream_writable.js":159}],169:[function(require,module,exports){ +'use strict' +var Buffer = require('buffer').Buffer +var inherits = require('inherits') +var HashBase = require('hash-base') + +var ARRAY16 = new Array(16) + +var zl = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +] + +var zr = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +] + +var sl = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +] + +var sr = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +] + +var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] +var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] + +function RIPEMD160 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 +} + +inherits(RIPEMD160, HashBase) + +RIPEMD160.prototype._update = function () { + var words = ARRAY16 + for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) + + var al = this._a | 0 + var bl = this._b | 0 + var cl = this._c | 0 + var dl = this._d | 0 + var el = this._e | 0 + + var ar = this._a | 0 + var br = this._b | 0 + var cr = this._c | 0 + var dr = this._d | 0 + var er = this._e | 0 + + // computation + for (var i = 0; i < 80; i += 1) { + var tl + var tr + if (i < 16) { + tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) + tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) + } else if (i < 32) { + tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) + tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) + } else if (i < 48) { + tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) + tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) + } else if (i < 64) { + tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) + tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) + } else { // if (i<80) { + tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) + tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) + } + + al = el + el = dl + dl = rotl(cl, 10) + cl = bl + bl = tl + + ar = er + er = dr + dr = rotl(cr, 10) + cr = br + br = tr + } + + // update state + var t = (this._b + cl + dr) | 0 + this._b = (this._c + dl + er) | 0 + this._c = (this._d + el + ar) | 0 + this._d = (this._e + al + br) | 0 + this._e = (this._a + bl + cr) | 0 + this._a = t +} + +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } + + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + buffer.writeInt32LE(this._e, 16) + return buffer +} + +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} + +function fn1 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn2 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 +} + +function fn3 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn4 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 +} + +function fn5 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 +} + +module.exports = RIPEMD160 + +},{"buffer":74,"hash-base":111,"inherits":126}],170:[function(require,module,exports){ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + +},{"buffer":74}],171:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +// prototype class for hash functions +function Hash (blockSize, finalSize) { + this._block = Buffer.alloc(blockSize) + this._finalSize = finalSize + this._blockSize = blockSize + this._len = 0 +} + +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8' + data = Buffer.from(data, enc) + } + + var block = this._block + var blockSize = this._blockSize + var length = data.length + var accum = this._len + + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize + var remainder = Math.min(length - offset, blockSize - assigned) + + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i] + } + + accum += remainder + offset += remainder + + if ((accum % blockSize) === 0) { + this._update(block) + } + } + + this._len += length + return this +} + +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize + + this._block[rem] = 0x80 + + // zero (rem + 1) trailing bits, where (rem + 1) is the smallest + // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + this._block.fill(0, rem + 1) + + if (rem >= this._finalSize) { + this._update(this._block) + this._block.fill(0) + } + + var bits = this._len * 8 + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4) + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0 + var highBits = (bits - lowBits) / 0x100000000 + + this._block.writeUInt32BE(highBits, this._blockSize - 8) + this._block.writeUInt32BE(lowBits, this._blockSize - 4) + } + + this._update(this._block) + var hash = this._hash() + + return enc ? hash.toString(enc) : hash +} + +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass') +} + +module.exports = Hash + +},{"safe-buffer":170}],172:[function(require,module,exports){ +var exports = module.exports = function SHA (algorithm) { + algorithm = algorithm.toLowerCase() + + var Algorithm = exports[algorithm] + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') + + return new Algorithm() +} + +exports.sha = require('./sha') +exports.sha1 = require('./sha1') +exports.sha224 = require('./sha224') +exports.sha256 = require('./sha256') +exports.sha384 = require('./sha384') +exports.sha512 = require('./sha512') + +},{"./sha":173,"./sha1":174,"./sha224":175,"./sha256":176,"./sha384":177,"./sha512":178}],173:[function(require,module,exports){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha, Hash) + +Sha.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha + +},{"./hash":171,"inherits":126,"safe-buffer":170}],174:[function(require,module,exports){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha1 () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha1, Hash) + +Sha1.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl1 (num) { + return (num << 1) | (num >>> 31) +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha1.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha1 + +},{"./hash":171,"inherits":126,"safe-buffer":170}],175:[function(require,module,exports){ +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits') +var Sha256 = require('./sha256') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var W = new Array(64) + +function Sha224 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha224, Sha256) + +Sha224.prototype.init = function () { + this._a = 0xc1059ed8 + this._b = 0x367cd507 + this._c = 0x3070dd17 + this._d = 0xf70e5939 + this._e = 0xffc00b31 + this._f = 0x68581511 + this._g = 0x64f98fa7 + this._h = 0xbefa4fa4 + + return this +} + +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + + return H +} + +module.exports = Sha224 + +},{"./hash":171,"./sha256":176,"inherits":126,"safe-buffer":170}],176:[function(require,module,exports){ +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +] + +var W = new Array(64) + +function Sha256 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha256, Hash) + +Sha256.prototype.init = function () { + this._a = 0x6a09e667 + this._b = 0xbb67ae85 + this._c = 0x3c6ef372 + this._d = 0xa54ff53a + this._e = 0x510e527f + this._f = 0x9b05688c + this._g = 0x1f83d9ab + this._h = 0x5be0cd19 + + return this +} + +function ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) +} + +function sigma1 (x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) +} + +function gamma0 (x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) +} + +function gamma1 (x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) +} + +Sha256.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + var f = this._f | 0 + var g = this._g | 0 + var h = this._h | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 + + for (var j = 0; j < 64; ++j) { + var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 + var T2 = (sigma0(a) + maj(a, b, c)) | 0 + + h = g + g = f + f = e + e = (d + T1) | 0 + d = c + c = b + b = a + a = (T1 + T2) | 0 + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 + this._f = (f + this._f) | 0 + this._g = (g + this._g) | 0 + this._h = (h + this._h) | 0 +} + +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + H.writeInt32BE(this._h, 28) + + return H +} + +module.exports = Sha256 + +},{"./hash":171,"inherits":126,"safe-buffer":170}],177:[function(require,module,exports){ +var inherits = require('inherits') +var SHA512 = require('./sha512') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var W = new Array(160) + +function Sha384 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha384, SHA512) + +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d + this._bh = 0x629a292a + this._ch = 0x9159015a + this._dh = 0x152fecd8 + this._eh = 0x67332667 + this._fh = 0x8eb44a87 + this._gh = 0xdb0c2e0d + this._hh = 0x47b5481d + + this._al = 0xc1059ed8 + this._bl = 0x367cd507 + this._cl = 0x3070dd17 + this._dl = 0xf70e5939 + this._el = 0xffc00b31 + this._fl = 0x68581511 + this._gl = 0x64f98fa7 + this._hl = 0xbefa4fa4 + + return this +} + +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + + return H +} + +module.exports = Sha384 + +},{"./hash":171,"./sha512":178,"inherits":126,"safe-buffer":170}],178:[function(require,module,exports){ +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +] + +var W = new Array(160) + +function Sha512 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha512, Hash) + +Sha512.prototype.init = function () { + this._ah = 0x6a09e667 + this._bh = 0xbb67ae85 + this._ch = 0x3c6ef372 + this._dh = 0xa54ff53a + this._eh = 0x510e527f + this._fh = 0x9b05688c + this._gh = 0x1f83d9ab + this._hh = 0x5be0cd19 + + this._al = 0xf3bcc908 + this._bl = 0x84caa73b + this._cl = 0xfe94f82b + this._dl = 0x5f1d36f1 + this._el = 0xade682d1 + this._fl = 0x2b3e6c1f + this._gl = 0xfb41bd6b + this._hl = 0x137e2179 + + return this +} + +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +} + +function sigma1 (x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +} + +function Gamma0 (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +} + +function Gamma0l (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +} + +function Gamma1 (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) +} + +function Gamma1l (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +} + +function getCarry (a, b) { + return (a >>> 0) < (b >>> 0) ? 1 : 0 +} + +Sha512.prototype._update = function (M) { + var W = this._w + + var ah = this._ah | 0 + var bh = this._bh | 0 + var ch = this._ch | 0 + var dh = this._dh | 0 + var eh = this._eh | 0 + var fh = this._fh | 0 + var gh = this._gh | 0 + var hh = this._hh | 0 + + var al = this._al | 0 + var bl = this._bl | 0 + var cl = this._cl | 0 + var dl = this._dl | 0 + var el = this._el | 0 + var fl = this._fl | 0 + var gl = this._gl | 0 + var hl = this._hl | 0 + + for (var i = 0; i < 32; i += 2) { + W[i] = M.readInt32BE(i * 4) + W[i + 1] = M.readInt32BE(i * 4 + 4) + } + for (; i < 160; i += 2) { + var xh = W[i - 15 * 2] + var xl = W[i - 15 * 2 + 1] + var gamma0 = Gamma0(xh, xl) + var gamma0l = Gamma0l(xl, xh) + + xh = W[i - 2 * 2] + xl = W[i - 2 * 2 + 1] + var gamma1 = Gamma1(xh, xl) + var gamma1l = Gamma1l(xl, xh) + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7h = W[i - 7 * 2] + var Wi7l = W[i - 7 * 2 + 1] + + var Wi16h = W[i - 16 * 2] + var Wi16l = W[i - 16 * 2 + 1] + + var Wil = (gamma0l + Wi7l) | 0 + var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 + Wil = (Wil + gamma1l) | 0 + Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 + Wil = (Wil + Wi16l) | 0 + Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 + + W[i] = Wih + W[i + 1] = Wil + } + + for (var j = 0; j < 160; j += 2) { + Wih = W[j] + Wil = W[j + 1] + + var majh = maj(ah, bh, ch) + var majl = maj(al, bl, cl) + + var sigma0h = sigma0(ah, al) + var sigma0l = sigma0(al, ah) + var sigma1h = sigma1(eh, el) + var sigma1l = sigma1(el, eh) + + // t1 = h + sigma1 + ch + K[j] + W[j] + var Kih = K[j] + var Kil = K[j + 1] + + var chh = Ch(eh, fh, gh) + var chl = Ch(el, fl, gl) + + var t1l = (hl + sigma1l) | 0 + var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 + t1l = (t1l + chl) | 0 + t1h = (t1h + chh + getCarry(t1l, chl)) | 0 + t1l = (t1l + Kil) | 0 + t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 + t1l = (t1l + Wil) | 0 + t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 + + // t2 = sigma0 + maj + var t2l = (sigma0l + majl) | 0 + var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 + + hh = gh + hl = gl + gh = fh + gl = fl + fh = eh + fl = el + el = (dl + t1l) | 0 + eh = (dh + t1h + getCarry(el, dl)) | 0 + dh = ch + dl = cl + ch = bh + cl = bl + bh = ah + bl = al + al = (t1l + t2l) | 0 + ah = (t1h + t2h + getCarry(al, t1l)) | 0 + } + + this._al = (this._al + al) | 0 + this._bl = (this._bl + bl) | 0 + this._cl = (this._cl + cl) | 0 + this._dl = (this._dl + dl) | 0 + this._el = (this._el + el) | 0 + this._fl = (this._fl + fl) | 0 + this._gl = (this._gl + gl) | 0 + this._hl = (this._hl + hl) | 0 + + this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 + this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 + this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 + this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 + this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 + this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 + this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 + this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 +} + +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + writeInt64BE(this._gh, this._gl, 48) + writeInt64BE(this._hh, this._hl, 56) + + return H +} + +module.exports = Sha512 + +},{"./hash":171,"inherits":126,"safe-buffer":170}],179:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Stream; + +var EE = require('events').EventEmitter; +var inherits = require('inherits'); + +inherits(Stream, EE); +Stream.Readable = require('readable-stream/readable.js'); +Stream.Writable = require('readable-stream/writable.js'); +Stream.Duplex = require('readable-stream/duplex.js'); +Stream.Transform = require('readable-stream/transform.js'); +Stream.PassThrough = require('readable-stream/passthrough.js'); + +// Backwards-compat with node 0.4.x +Stream.Stream = Stream; + + + +// old-style streams. Note that the pipe method (the only relevant +// part of this class) is overridden in the Readable class. + +function Stream() { + EE.call(this); +} + +Stream.prototype.pipe = function(dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + + source.on('data', ondata); + + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + + dest.end(); + } + + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + + source.removeListener('end', onend); + source.removeListener('close', onclose); + + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + + dest.removeListener('close', cleanup); + } + + source.on('end', cleanup); + source.on('close', cleanup); + + dest.on('close', cleanup); + + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; +}; + +},{"events":109,"inherits":126,"readable-stream/duplex.js":154,"readable-stream/passthrough.js":165,"readable-stream/readable.js":166,"readable-stream/transform.js":167,"readable-stream/writable.js":168}],180:[function(require,module,exports){ +arguments[4][164][0].apply(exports,arguments) +},{"dup":164,"safe-buffer":170}],181:[function(require,module,exports){ +(function (setImmediate,clearImmediate){ +var nextTick = require('process/browser.js').nextTick; +var apply = Function.prototype.apply; +var slice = Array.prototype.slice; +var immediateIds = {}; +var nextImmediateId = 0; + +// DOM APIs, for completeness + +exports.setTimeout = function() { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); +}; +exports.setInterval = function() { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); +}; +exports.clearTimeout = +exports.clearInterval = function(timeout) { timeout.close(); }; + +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function() {}; +Timeout.prototype.close = function() { + this._clearFn.call(window, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function(item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; + +exports.unenroll = function(item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; + +exports._unrefActive = exports.active = function(item) { + clearTimeout(item._idleTimeoutId); + + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) + item._onTimeout(); + }, msecs); + } +}; + +// That's not how node.js implements it but the exposed api is the same. +exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { + var id = nextImmediateId++; + var args = arguments.length < 2 ? false : slice.call(arguments, 1); + + immediateIds[id] = true; + + nextTick(function onNextTick() { + if (immediateIds[id]) { + // fn.call() is faster so we optimize for the common use-case + // @see http://jsperf.com/call-apply-segu + if (args) { + fn.apply(null, args); + } else { + fn.call(null); + } + // Prevent ids from leaking + exports.clearImmediate(id); + } + }); + + return id; +}; + +exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { + delete immediateIds[id]; +}; +}).call(this,require("timers").setImmediate,require("timers").clearImmediate) +},{"process/browser.js":145,"timers":181}],182:[function(require,module,exports){ +(function (global){ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],183:[function(require,module,exports){ +var indexOf = function (xs, item) { + if (xs.indexOf) return xs.indexOf(item); + else for (var i = 0; i < xs.length; i++) { + if (xs[i] === item) return i; + } + return -1; +}; +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) + else { + var res = []; + for (var key in obj) res.push(key) + return res; + } +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); + } +}; + +var defineProp = (function() { + try { + Object.defineProperty({}, '_', {}); + return function(obj, name, value) { + Object.defineProperty(obj, name, { + writable: true, + enumerable: false, + configurable: true, + value: value + }) + }; + } catch(e) { + return function(obj, name, value) { + obj[name] = value; + }; + } +}()); + +var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', +'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', +'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', +'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', +'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + +function Context() {} +Context.prototype = {}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +Script.prototype.runInContext = function (context) { + if (!(context instanceof Context)) { + throw new TypeError("needs a 'context' argument."); + } + + var iframe = document.createElement('iframe'); + if (!iframe.style) iframe.style = {}; + iframe.style.display = 'none'; + + document.body.appendChild(iframe); + + var win = iframe.contentWindow; + var wEval = win.eval, wExecScript = win.execScript; + + if (!wEval && wExecScript) { + // win.eval() magically appears when this is called in IE: + wExecScript.call(win, 'null'); + wEval = win.eval; + } + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + }); + forEach(globals, function (key) { + if (context[key]) { + win[key] = context[key]; + } + }); + + var winKeys = Object_keys(win); + + var res = wEval.call(win, this.code); + + forEach(Object_keys(win), function (key) { + // Avoid copying circular objects like `top` and `window` by only + // updating existing context properties or new properties in the `win` + // that was only introduced after the eval. + if (key in context || indexOf(winKeys, key) === -1) { + context[key] = win[key]; + } + }); + + forEach(globals, function (key) { + if (!(key in context)) { + defineProp(context, key, win[key]); + } + }); + + document.body.removeChild(iframe); + + return res; +}; + +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; + +Script.prototype.runInNewContext = function (context) { + var ctx = Script.createContext(context); + var res = this.runInContext(ctx); + + if (context) { + forEach(Object_keys(ctx), function (key) { + context[key] = ctx[key]; + }); + } + + return res; +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); + }; +}); + +exports.isContext = function (context) { + return context instanceof Context; +}; + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + var copy = new Context(); + if(typeof context === 'object') { + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + } + return copy; +}; + +},{}]},{},[1]); diff --git a/library/sodium-plus/dist/sodium-plus.min.js b/library/sodium-plus/dist/sodium-plus.min.js new file mode 100644 index 000000000..288effd37 --- /dev/null +++ b/library/sodium-plus/dist/sodium-plus.min.js @@ -0,0 +1 @@ +!function(){for(var createModuleFactory=function(e){var A;return function(t){return A||e(A={exports:{},parent:t},A.exports),A.exports}},_$cryptoBrowserify_82=createModuleFactory(function(e,A){"use strict";A.randomBytes=_$browser_152;var t=Object.keys(_$algos_67);["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(t);_$browser_139.pbkdf2,_$browser_139.pbkdf2Sync,_$browser_63.Cipher,_$browser_63.createCipher,_$browser_63.Cipheriv,_$browser_63.createCipheriv,_$browser_63.Decipher,_$browser_63.createDecipher,_$browser_63.Decipheriv,_$browser_63.createDecipheriv,_$browser_63.getCiphers,_$browser_63.listCiphers,_$browser_89.DiffieHellmanGroup,_$browser_89.createDiffieHellmanGroup,_$browser_89.getDiffieHellman,_$browser_89.createDiffieHellman,_$browser_89.DiffieHellman,_$browser_70.createSign,_$browser_70.Sign,_$browser_70.createVerify,_$browser_70.Verify,_$browser_146.publicEncrypt,_$browser_146.privateEncrypt,_$browser_146.publicDecrypt,_$browser_146.privateDecrypt,_$browser_153.randomFill,_$browser_153.randomFillSync}),_$asn1_28=createModuleFactory(function(e,A){var t=A;t.bignum=_$bn_43,t.define=_$api_29({}).define,t.base=_$base_31({}),t.constants=_$constants_35({}),t.decoders=_$decoders_37({}),t.encoders=_$encoders_40({})}),_$encoders_40=createModuleFactory(function(e,A){var t=A;t.der=_$der_39({}),t.pem=_$pem_41({})}),_$pem_41=createModuleFactory(function(e,A){var t=_$der_39({});function r(e){t.call(this,e),this.enc="pem"}_$inherits_browser_126(r,t),e.exports=r,r.prototype.encode=function(e,A){for(var r=t.prototype.encode.call(this,e).toString("base64"),i=["-----BEGIN "+A.label+"-----"],n=0;n=31?r.error("Multi-octet tag encoding unsupported"):(A||(i|=32),i|n.tagClassByName[t||"universal"]<<6)}(e,A,r,this.reporter);if(i.length<128)return(a=new t(2))[0]=o,a[1]=i.length,this._createEncoderBuffer([a,i]);for(var s=1,f=i.length;f>=256;f>>=8)s++;(a=new t(2+s))[0]=o,a[1]=128|s,f=1+s;for(var c=i.length;c>0;f--,c>>=8)a[f]=255&c;return this._createEncoderBuffer([a,i])},o.prototype._encodeStr=function(e,A){if("bitstr"===A)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===A){for(var r=new t(2*e.length),i=0;i=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}var n=0;for(i=0;i=128;a>>=7)n++}var o=new t(n),s=o.length-1;for(i=e.length-1;i>=0;i--)for(a=e[i],o[s--]=127&a;(a>>=7)>0;)o[s--]=128|127&a;return this._createEncoderBuffer(o)},o.prototype._encodeTime=function(e,A){var t,r=new Date(e);return"gentime"===A?t=[s(r.getFullYear()),s(r.getUTCMonth()+1),s(r.getUTCDate()),s(r.getUTCHours()),s(r.getUTCMinutes()),s(r.getUTCSeconds()),"Z"].join(""):"utctime"===A?t=[s(r.getFullYear()%100),s(r.getUTCMonth()+1),s(r.getUTCDate()),s(r.getUTCHours()),s(r.getUTCMinutes()),s(r.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+A+" time is not supported yet"),this._encodeStr(t,"octstr")},o.prototype._encodeNull=function(){return this._createEncoderBuffer("")},o.prototype._encodeInt=function(e,A){if("string"==typeof e){if(!A)return this.reporter.error("String int or enum given, but no values map");if(!A.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=A[e]}if("number"!=typeof e&&!t.isBuffer(e)){var r=e.toArray();!e.sign&&128&r[0]&&r.unshift(0),e=new t(r)}if(t.isBuffer(e)){var i=e.length;0===e.length&&i++;var n=new t(i);return e.copy(n),0===e.length&&(n[0]=0),this._createEncoderBuffer(n)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);i=1;for(var a=e;a>=256;a>>=8)i++;for(a=(n=new Array(i)).length-1;a>=0;a--)n[a]=255&e,e>>=8;return 128&n[0]&&n.unshift(0),this._createEncoderBuffer(new t(n))},o.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},o.prototype._use=function(e,A){return"function"==typeof e&&(e=e(A)),e._getEncoder("der").tree},o.prototype._skipDefault=function(e,A,t){var r,i=this._baseState;if(null===i.default)return!1;var n=e.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,A,t).join()),n.length!==i.defaultBuffer.length)return!1;for(r=0;r>6],i=0==(32&t);if(31==(31&t)){var a=t;for(t=0;128==(128&a);){if(a=e.readUInt8(A),e.isError(a))return a;t<<=7,t|=127&a}}else t&=31;return{cls:r,primitive:i,tag:t,tagStr:n.tag[t]}}function f(e,A,t){var r=e.readUInt8(t);if(e.isError(r))return r;if(!A&&128===r)return null;if(0==(128&r))return r;var i=127&r;if(i>4)return e.error("length octect is too long");r=0;for(var n=0;n>>1];t=r.r28shl(t,a),i=r.r28shl(i,a),r.pc2(t,i,e.keys,n)}},a.prototype._update=function(e,A,t,i){var n=this._desState,a=r.readUInt32BE(e,A),o=r.readUInt32BE(e,A+4);r.ip(a,o,n.tmp,0),a=n.tmp[0],o=n.tmp[1],"encrypt"===this.type?this._encrypt(n,a,o,n.tmp,0):this._decrypt(n,a,o,n.tmp,0),a=n.tmp[0],o=n.tmp[1],r.writeUInt32BE(t,a,i),r.writeUInt32BE(t,o,i+4)},a.prototype._pad=function(e,A){for(var t=e.length-A,r=A;r>>0,a=u}r.rip(o,a,i,n)},a.prototype._decrypt=function(e,A,t,i,n){for(var a=t,o=A,s=e.keys.length-2;s>=0;s-=2){var f=e.keys[s],c=e.keys[s+1];r.expand(a,e.tmp,0),f^=e.tmp[0],c^=e.tmp[1];var h=r.substitute(f,c),u=a;a=(o^r.permute(h))>>>0,o=u}r.rip(a,o,i,n)}}),_$Readable_157=createModuleFactory(function(e,A){(function(A,t){"use strict";var r;e.exports=u,u.ReadableState=h,_$events_109.EventEmitter;var i=function(e,A){return e.listeners(A).length},n=_$safeBuffer_163.Buffer,a=t.Uint8Array||function(){};_$util_76.inherits=_$inherits_browser_126;var o,s=_$empty_45({}),f=void 0;f=s&&s.debuglog?s.debuglog("stream"):function(){},_$util_76.inherits(u,_$streamBrowser_162);var c=["error","close","destroy","pause","resume"];function h(e,A){e=e||{};var t=A instanceof(r=r||_$Duplex_155({}));this.objectMode=!!e.objectMode,t&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,n=e.readableHighWaterMark,a=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:t&&(n||0===n)?n:a,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new _$BufferList_160,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(o||(o=_$string_decoder_164({}).StringDecoder),this.decoder=new o(e.encoding),this.encoding=e.encoding)}function u(e){if(r=r||_$Duplex_155({}),!(this instanceof u))return new u(e);this._readableState=new h(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),_$streamBrowser_162.call(this)}function g(e,A,t,r,i){var o,s=e._readableState;return null===A?(s.reading=!1,function(e,A){if(!A.ended){if(A.decoder){var t=A.decoder.end();t&&t.length&&(A.buffer.push(t),A.length+=A.objectMode?1:t.length)}A.ended=!0,l(e)}}(e,s)):(i||(o=function(e,A){var t,r;return r=A,n.isBuffer(r)||r instanceof a||"string"==typeof A||void 0===A||e.objectMode||(t=new TypeError("Invalid non-string/buffer chunk")),t}(s,A)),o?e.emit("error",o):s.objectMode||A&&A.length>0?("string"==typeof A||s.objectMode||Object.getPrototypeOf(A)===n.prototype||(A=function(e){return n.from(e)}(A)),r?s.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):_(e,s,A,!0):s.ended?e.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!t?(A=s.decoder.write(A),s.objectMode||0!==A.length?_(e,s,A,!1):B(e,s)):_(e,s,A,!1))):r||(s.reading=!1)),function(e){return!e.ended&&(e.needReadable||e.lengthA.highWaterMark&&(A.highWaterMark=function(e){return e>=I?e=I:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=A.length?e:A.ended?A.length:(A.needReadable=!0,0))}function l(e){var A=e._readableState;A.needReadable=!1,A.emittedReadable||(f("emitReadable",A.flowing),A.emittedReadable=!0,A.sync?_$processNextickArgs_144.nextTick(p,e):p(e))}function p(e){f("emit readable"),e.emit("readable"),b(e)}function B(e,A){A.readingMore||(A.readingMore=!0,_$processNextickArgs_144.nextTick(y,e,A))}function y(e,A){for(var t=A.length;!A.reading&&!A.flowing&&!A.ended&&A.length=A.length?(t=A.decoder?A.buffer.join(""):1===A.buffer.length?A.buffer.head.data:A.buffer.concat(A.length),A.buffer.clear()):t=function(e,A,t){var r;return en.length?n.length:e;if(a===n.length?i+=n:i+=n.slice(0,e),0==(e-=a)){a===n.length?(++r,t.next?A.head=t.next:A.head=A.tail=null):(A.head=t,t.data=n.slice(a));break}++r}return A.length-=r,i}(e,A):function(e,A){var t=n.allocUnsafe(e),r=A.head,i=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var a=r.data,o=e>a.length?a.length:e;if(a.copy(t,t.length-e,0,o),0==(e-=o)){o===a.length?(++i,r.next?A.head=r.next:A.head=A.tail=null):(A.head=r,r.data=a.slice(o));break}++i}return A.length-=i,t}(e,A),r}(e,A.buffer,A.decoder),t);var t}function w(e){var A=e._readableState;if(A.length>0)throw new Error('"endReadable()" called on non-empty stream');A.endEmitted||(A.ended=!0,_$processNextickArgs_144.nextTick(v,A,e))}function v(e,A){e.endEmitted||0!==e.length||(e.endEmitted=!0,A.readable=!1,A.emit("end"))}function m(e,A){for(var t=0,r=e.length;t=A.highWaterMark||A.ended))return f("read: emitReadable",A.length,A.ended),0===A.length&&A.ended?w(this):l(this),null;if(0===(e=d(e,A))&&A.ended)return 0===A.length&&w(this),null;var r,i=A.needReadable;return f("need readable",i),(0===A.length||A.length-e0?Q(e,A):null)?(A.needReadable=!0,e=0):A.length-=e,0===A.length&&(A.ended||(A.needReadable=!0),t!==e&&A.ended&&w(this)),null!==r&&this.emit("data",r),r},u.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},u.prototype.pipe=function(e,t){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,f("pipe count=%d opts=%j",n.pipesCount,t);var a=t&&!1===t.end||e===A.stdout||e===A.stderr?d:o;function o(){f("onend"),e.end()}n.endEmitted?_$processNextickArgs_144.nextTick(a):r.once("end",a),e.on("unpipe",function A(t,i){f("onunpipe"),t===r&&i&&!1===i.hasUnpiped&&(i.hasUnpiped=!0,f("cleanup"),e.removeListener("close",_),e.removeListener("finish",I),e.removeListener("drain",s),e.removeListener("error",g),e.removeListener("unpipe",A),r.removeListener("end",o),r.removeListener("end",d),r.removeListener("data",u),c=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||s())});var s=function(e){return function(){var A=e._readableState;f("pipeOnDrain",A.awaitDrain),A.awaitDrain&&A.awaitDrain--,0===A.awaitDrain&&i(e,"data")&&(A.flowing=!0,b(e))}}(r);e.on("drain",s);var c=!1,h=!1;function u(A){f("ondata"),h=!1,!1!==e.write(A)||h||((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==m(n.pipes,e))&&!c&&(f("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,h=!0),r.pause())}function g(A){f("onerror",A),d(),e.removeListener("error",g),0===i(e,"error")&&e.emit("error",A)}function _(){e.removeListener("finish",I),d()}function I(){f("onfinish"),e.removeListener("close",_),d()}function d(){f("unpipe"),r.unpipe(e)}return r.on("data",u),function(e,A,t){if("function"==typeof e.prependListener)return e.prependListener("error",t);e._events&&e._events.error?_$isarray_128(e._events.error)?e._events.error.unshift(t):e._events.error=[t,e._events.error]:e.on("error",t)}(e,0,g),e.once("close",_),e.once("finish",I),e.emit("pipe",r),n.flowing||(f("pipe resume"),r.resume()),e},u.prototype.unpipe=function(e){var A=this._readableState,t={hasUnpiped:!1};if(0===A.pipesCount)return this;if(1===A.pipesCount)return e&&e!==A.pipes?this:(e||(e=A.pipes),A.pipes=null,A.pipesCount=0,A.flowing=!1,e&&e.emit("unpipe",this,t),this);if(!e){var r=A.pipes,i=A.pipesCount;A.pipes=null,A.pipesCount=0,A.flowing=!1;for(var n=0;n>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var A=this.lastTotal-this.lastNeed,t=function(e,A,t){if(128!=(192&A[0]))return e.lastNeed=0,"\ufffd";if(e.lastNeed>1&&A.length>1){if(128!=(192&A[1]))return e.lastNeed=1,"\ufffd";if(e.lastNeed>2&&A.length>2&&128!=(192&A[2]))return e.lastNeed=2,"\ufffd"}}(this,e);return void 0!==t?t:this.lastNeed<=e.length?(e.copy(this.lastChar,A,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,A,0,e.length),void(this.lastNeed-=e.length))}function o(e,A){if((e.length-A)%2==0){var t=e.toString("utf16le",A);if(t){var r=t.charCodeAt(t.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",A,e.length-1)}function s(e){var A=e&&e.length?this.write(e):"";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return A+this.lastChar.toString("utf16le",0,t)}return A}function f(e,A){var t=(e.length-A)%3;return 0===t?e.toString("base64",A):(this.lastNeed=3-t,this.lastTotal=3,1===t?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",A,e.length-t))}function c(e){var A=e&&e.length?this.write(e):"";return this.lastNeed?A+this.lastChar.toString("base64",0,3-this.lastNeed):A}function h(e){return e.toString(this.encoding)}function u(e){return e&&e.length?this.write(e):""}A.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var A,t;if(this.lastNeed){if(void 0===(A=this.fillLast(e)))return"";t=this.lastNeed,this.lastNeed=0}else t=0;return t=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,A);if(!this.lastNeed)return e.toString("utf8",A);this.lastTotal=t;var r=e.length-(t-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",A,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}}),_$Duplex_155=createModuleFactory(function(e,A){"use strict";var t=Object.keys||function(e){var A=[];for(var t in e)A.push(t);return A};e.exports=s,_$util_76.inherits=_$inherits_browser_126;var r=_$Readable_157({}),i=_$Writable_159({});_$util_76.inherits(s,r);for(var n=t(i.prototype),a=0;a-1?r:_$processNextickArgs_144.nextTick;g.WritableState=u,_$util_76.inherits=_$inherits_browser_126;var o,s={deprecate:_$browser_182},f=_$safeBuffer_163.Buffer,c=t.Uint8Array||function(){};function h(){}function u(e,A){n=n||_$Duplex_155({}),e=e||{};var t=A instanceof n;this.objectMode=!!e.objectMode,t&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,o=e.writableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:t&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,A){var t=e._writableState,r=t.sync,i=t.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(t),A)!function(e,A,t,r,i){--A.pendingcb,t?(_$processNextickArgs_144.nextTick(i,r),_$processNextickArgs_144.nextTick(B,e,A),e._writableState.errorEmitted=!0,e.emit("error",r)):(i(r),e._writableState.errorEmitted=!0,e.emit("error",r),B(e,A))}(e,t,r,A,i);else{var n=l(t);n||t.corked||t.bufferProcessing||!t.bufferedRequest||d(e,t),r?a(I,e,t,n,i):I(e,t,n,i)}}(A,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new i(this)}function g(e){if(n=n||_$Duplex_155({}),!(o.call(g,this)||this instanceof n))return new g(e);this._writableState=new u(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),_$streamBrowser_162.call(this)}function _(e,A,t,r,i,n,a){A.writelen=r,A.writecb=a,A.writing=!0,A.sync=!0,t?e._writev(i,A.onwrite):e._write(i,n,A.onwrite),A.sync=!1}function I(e,A,t,r){t||function(e,A){0===A.length&&A.needDrain&&(A.needDrain=!1,e.emit("drain"))}(e,A),A.pendingcb--,r(),B(e,A)}function d(e,A){A.bufferProcessing=!0;var t=A.bufferedRequest;if(e._writev&&t&&t.next){var r=A.bufferedRequestCount,n=new Array(r),a=A.corkedRequestsFree;a.entry=t;for(var o=0,s=!0;t;)n[o]=t,t.isBuf||(s=!1),t=t.next,o+=1;n.allBuffers=s,_(e,A,!0,A.length,n,"",a.finish),A.pendingcb++,A.lastBufferedRequest=null,a.next?(A.corkedRequestsFree=a.next,a.next=null):A.corkedRequestsFree=new i(A),A.bufferedRequestCount=0}else{for(;t;){var f=t.chunk,c=t.encoding,h=t.callback;if(_(e,A,!1,A.objectMode?1:f.length,f,c,h),t=t.next,A.bufferedRequestCount--,A.writing)break}null===t&&(A.lastBufferedRequest=null)}A.bufferedRequest=t,A.bufferProcessing=!1}function l(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function p(e,A){e._final(function(t){A.pendingcb--,t&&e.emit("error",t),A.prefinished=!0,e.emit("prefinish"),B(e,A)})}function B(e,A){var t=l(A);return t&&(function(e,A){A.prefinished||A.finalCalled||("function"==typeof e._final?(A.pendingcb++,A.finalCalled=!0,_$processNextickArgs_144.nextTick(p,e,A)):(A.prefinished=!0,e.emit("prefinish")))}(e,A),0===A.pendingcb&&(A.finished=!0,e.emit("finish"))),t}_$util_76.inherits(g,_$streamBrowser_162),u.prototype.getBuffer=function(){for(var e=this.bufferedRequest,A=[];e;)A.push(e),e=e.next;return A},function(){try{Object.defineProperty(u.prototype,"buffer",{get:s.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(o=Function.prototype[Symbol.hasInstance],Object.defineProperty(g,Symbol.hasInstance,{value:function(e){return!!o.call(this,e)||this===g&&e&&e._writableState instanceof u}})):o=function(e){return e instanceof this},g.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},g.prototype.write=function(e,A,t){var r,i=this._writableState,n=!1,a=!i.objectMode&&(r=e,f.isBuffer(r)||r instanceof c);return a&&!f.isBuffer(e)&&(e=function(e){return f.from(e)}(e)),"function"==typeof A&&(t=A,A=null),a?A="buffer":A||(A=i.defaultEncoding),"function"!=typeof t&&(t=h),i.ended?function(e,A){var t=new Error("write after end");e.emit("error",t),_$processNextickArgs_144.nextTick(A,t)}(this,t):(a||function(e,A,t,r){var i=!0,n=!1;return null===t?n=new TypeError("May not write null values to stream"):"string"==typeof t||void 0===t||A.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n&&(e.emit("error",n),_$processNextickArgs_144.nextTick(r,n),i=!1),i}(this,i,e,t))&&(i.pendingcb++,n=function(e,A,t,r,i,n){if(!t){var a=function(e,A,t){return e.objectMode||!1===e.decodeStrings||"string"!=typeof A||(A=f.from(A,t)),A}(A,r,i);r!==a&&(t=!0,i="buffer",r=a)}var o=A.objectMode?1:r.length;A.length+=o;var s=A.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(g.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),g.prototype._write=function(e,A,t){t(new Error("_write() is not implemented"))},g.prototype._writev=null,g.prototype.end=function(e,A,t){var r=this._writableState;"function"==typeof e?(t=e,e=null,A=null):"function"==typeof A&&(t=A,A=null),null!=e&&this.write(e,A),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,A,t){A.ending=!0,B(e,A),t&&(A.finished?_$processNextickArgs_144.nextTick(t):e.once("finish",t)),A.ended=!0,e.writable=!1}(this,r,t)},Object.defineProperty(g.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),g.prototype.destroy=_$destroy_161.destroy,g.prototype._undestroy=_$destroy_161.undestroy,g.prototype._destroy=function(e,A){this.end(),A(e)}}).call(this,_$browser_145,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},_$main_181({}).setImmediate)}),_$main_181=createModuleFactory(function(e,A){(function(e,t){var r=_$browser_145.nextTick,i=(Function.prototype.apply,Array.prototype.slice),n={},a=0;function o(e,A){this._id=e,this._clearFn=A}o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(window,this._id)},A.setImmediate="function"==typeof e?e:function(e){var t=a++,o=!(arguments.length<2)&&i.call(arguments,1);return n[t]=!0,r(function(){n[t]&&(o?e.apply(null,o):e.call(null),A.clearImmediate(t))}),t},A.clearImmediate="function"==typeof t?t:function(e){delete n[e]}}).call(this,_$main_181({}).setImmediate,_$main_181({}).clearImmediate)}),_$pathBrowserify_138=createModuleFactory(function(e,A){(function(e){function t(e,A){for(var t=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),t++):t&&(e.splice(r,1),t--)}if(A)for(;t--;t)e.unshift("..");return e}function r(e,A){if(e.filter)return e.filter(A);for(var t=[],r=0;r=-1&&!i;n--){var a=n>=0?arguments[n]:e.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(A=a+"/"+A,i="/"===a.charAt(0))}return(i?"/":"")+(A=t(r(A.split("/"),function(e){return!!e}),!i).join("/"))||"."},A.normalize=function(e){var n=A.isAbsolute(e),a="/"===i(e,-1);return(e=t(r(e.split("/"),function(e){return!!e}),!n).join("/"))||n||(e="."),e&&a&&(e+="/"),(n?"/":"")+e},A.isAbsolute=function(e){return"/"===e.charAt(0)},A.join=function(){var e=Array.prototype.slice.call(arguments,0);return A.normalize(r(e,function(e,A){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},A.relative=function(e,t){function r(e){for(var A=0;A=0&&""===e[t];t--);return A>t?[]:e.slice(A,t-A+1)}e=A.resolve(e).substr(1),t=A.resolve(t).substr(1);for(var i=r(e.split("/")),n=r(t.split("/")),a=Math.min(i.length,n.length),o=a,s=0;s=1;--n)if(47===(A=e.charCodeAt(n))){if(!i){r=n;break}}else i=!1;return-1===r?t?"/":".":t&&1===r?"/":e.slice(0,r)},A.basename=function(e,A){var t=function(e){"string"!=typeof e&&(e+="");var A,t=0,r=-1,i=!0;for(A=e.length-1;A>=0;--A)if(47===e.charCodeAt(A)){if(!i){t=A+1;break}}else-1===r&&(i=!1,r=A+1);return-1===r?"":e.slice(t,r)}(e);return A&&t.substr(-1*A.length)===A&&(t=t.substr(0,t.length-A.length)),t},A.extname=function(e){"string"!=typeof e&&(e+="");for(var A=-1,t=0,r=-1,i=!0,n=0,a=e.length-1;a>=0;--a){var o=e.charCodeAt(a);if(47!==o)-1===r&&(i=!1,r=a+1),46===o?-1===A?A=a:1!==n&&(n=1):-1!==A&&(n=-1);else if(!i){t=a+1;break}}return-1===A||-1===r||0===n||1===n&&A===r-1&&A===t+1?"":e.slice(A,r)};var i="b"==="ab".substr(-1)?function(e,A,t){return e.substr(A,t)}:function(e,A,t){return A<0&&(A=e.length+A),e.substr(A,t)}}).call(this,_$browser_145)}),_$empty_45=createModuleFactory(function(e,A){}),_$buffer_17=createModuleFactory(function(e,A){(function(e){"use strict";var t="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;A.Buffer=e,A.INSPECT_MAX_BYTES=50;var r=2147483647;function i(A){if(A>r)throw new RangeError('The value "'+A+'" is invalid for option "size"');var t=new Uint8Array(A);return Object.setPrototypeOf(t,e.prototype),t}function e(e,A,t){if("number"==typeof e){if("string"==typeof A)throw new TypeError('The "string" argument must be of type string. Received type number');return o(e)}return n(e,A,t)}function n(A,t,r){if("string"==typeof A)return function(A,t){if("string"==typeof t&&""!==t||(t="utf8"),!e.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|h(A,t),n=i(r),a=n.write(A,t);return a!==r&&(n=n.slice(0,a)),n}(A,t);if(ArrayBuffer.isView(A))return s(A);if(null==A)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if(Y(A,ArrayBuffer)||A&&Y(A.buffer,ArrayBuffer))return f(A,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Y(A,SharedArrayBuffer)||A&&Y(A.buffer,SharedArrayBuffer)))return f(A,t,r);if("number"==typeof A)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=A.valueOf&&A.valueOf();if(null!=n&&n!==A)return e.from(n,t,r);var a=function(A){if(e.isBuffer(A)){var t=0|c(A.length),r=i(t);return 0===r.length?r:(A.copy(r,0,0,t),r)}return void 0!==A.length?"number"!=typeof A.length||G(A.length)?i(0):s(A):"Buffer"===A.type&&Array.isArray(A.data)?s(A.data):void 0}(A);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof A[Symbol.toPrimitive])return e.from(A[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A)}function a(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function o(e){return a(e),i(e<0?0:0|c(e))}function s(e){for(var A=e.length<0?0:0|c(e.length),t=i(A),r=0;r=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return 0|e}function h(A,t){if(e.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||Y(A,ArrayBuffer))return A.byteLength;if("string"!=typeof A)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);var r=A.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return P(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return R(A).length;default:if(n)return i?-1:P(A).length;t=(""+t).toLowerCase(),n=!0}}function u(e,A,t){var r=e[A];e[A]=e[t],e[t]=r}function g(A,t,r,i,n){if(0===A.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),G(r=+r)&&(r=n?0:A.length-1),r<0&&(r=A.length+r),r>=A.length){if(n)return-1;r=A.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof t&&(t=e.from(t,i)),e.isBuffer(t))return 0===t.length?-1:_(A,t,r,i,n);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(A,t,r):Uint8Array.prototype.lastIndexOf.call(A,t,r):_(A,[t],r,i,n);throw new TypeError("val must be string, number or Buffer")}function _(e,A,t,r,i){var n,a=1,o=e.length,s=A.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||A.length<2)return-1;a=2,o/=2,s/=2,t/=2}function f(e,A){return 1===a?e[A]:e.readUInt16BE(A*a)}if(i){var c=-1;for(n=t;no&&(t=o-s),n=t;n>=0;n--){for(var h=!0,u=0;ui&&(r=i):r=i;var n=A.length;r>n/2&&(r=n/2);for(var a=0;a>8,i=t%256,n.push(i),n.push(r);return n}(A,e.length-t),e,t,r)}function C(e,A,t){return 0===A&&t===e.length?_$base64Js_15.fromByteArray(e):_$base64Js_15.fromByteArray(e.slice(A,t))}function E(e,A,t){t=Math.min(e.length,t);for(var r=[],i=A;i239?4:f>223?3:f>191?2:1;if(i+h<=t)switch(h){case 1:f<128&&(c=f);break;case 2:128==(192&(n=e[i+1]))&&(s=(31&f)<<6|63&n)>127&&(c=s);break;case 3:n=e[i+1],a=e[i+2],128==(192&n)&&128==(192&a)&&(s=(15&f)<<12|(63&n)<<6|63&a)>2047&&(s<55296||s>57343)&&(c=s);break;case 4:n=e[i+1],a=e[i+2],o=e[i+3],128==(192&n)&&128==(192&a)&&128==(192&o)&&(s=(15&f)<<18|(63&n)<<12|(63&a)<<6|63&o)>65535&&s<1114112&&(c=s)}null===c?(c=65533,h=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=h}return function(e){var A=e.length;if(A<=b)return String.fromCharCode.apply(String,e);for(var t="",r=0;rthis.length)return"";if((void 0===t||t>this.length)&&(t=this.length),t<=0)return"";if((t>>>=0)<=(A>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return v(this,A,t);case"utf8":case"utf-8":return E(this,A,t);case"ascii":return Q(this,A,t);case"latin1":case"binary":return w(this,A,t);case"base64":return C(this,A,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return m(this,A,t);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}.apply(this,arguments)},e.prototype.toLocaleString=e.prototype.toString,e.prototype.equals=function(A){if(!e.isBuffer(A))throw new TypeError("Argument must be a Buffer");return this===A||0===e.compare(this,A)},e.prototype.inspect=function(){var e="",t=A.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},t&&(e.prototype[t]=e.prototype.inspect),e.prototype.compare=function(A,t,r,i,n){if(Y(A,Uint8Array)&&(A=e.from(A,A.offset,A.byteLength)),!e.isBuffer(A))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof A);if(void 0===t&&(t=0),void 0===r&&(r=A?A.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),t<0||r>A.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&t>=r)return 0;if(i>=n)return-1;if(t>=r)return 1;if(this===A)return 0;for(var a=(n>>>=0)-(i>>>=0),o=(r>>>=0)-(t>>>=0),s=Math.min(a,o),f=this.slice(i,n),c=A.slice(t,r),h=0;h>>=0,isFinite(t)?(t>>>=0,void 0===r&&(r="utf8")):(r=t,t=void 0)}var i=this.length-A;if((void 0===t||t>i)&&(t=i),e.length>0&&(t<0||A<0)||A>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var n=!1;;)switch(r){case"hex":return I(this,e,A,t);case"utf8":case"utf-8":return d(this,e,A,t);case"ascii":return l(this,e,A,t);case"latin1":case"binary":return p(this,e,A,t);case"base64":return B(this,e,A,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return y(this,e,A,t);default:if(n)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),n=!0}},e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var b=4096;function Q(e,A,t){var r="";t=Math.min(e.length,t);for(var i=A;ir)&&(t=r);for(var i="",n=A;nt)throw new RangeError("Trying to access beyond buffer length")}function k(A,t,r,i,n,a){if(!e.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>n||tA.length)throw new RangeError("Index out of range")}function D(e,A,t,r,i,n){if(t+r>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function M(e,A,t,r,i){return A=+A,t>>>=0,i||D(e,0,t,4),_$ieee754_18.write(e,A,t,r,23,4),t+4}function F(e,A,t,r,i){return A=+A,t>>>=0,i||D(e,0,t,8),_$ieee754_18.write(e,A,t,r,52,8),t+8}e.prototype.slice=function(A,t){var r=this.length;(A=~~A)<0?(A+=r)<0&&(A=0):A>r&&(A=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,A>>>=0,t||S(e,A,this.length);for(var r=this[e],i=1,n=0;++n>>=0,A>>>=0,t||S(e,A,this.length);for(var r=this[e+--A],i=1;A>0&&(i*=256);)r+=this[e+--A]*i;return r},e.prototype.readUInt8=function(e,A){return e>>>=0,A||S(e,1,this.length),this[e]},e.prototype.readUInt16LE=function(e,A){return e>>>=0,A||S(e,2,this.length),this[e]|this[e+1]<<8},e.prototype.readUInt16BE=function(e,A){return e>>>=0,A||S(e,2,this.length),this[e]<<8|this[e+1]},e.prototype.readUInt32LE=function(e,A){return e>>>=0,A||S(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},e.prototype.readUInt32BE=function(e,A){return e>>>=0,A||S(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},e.prototype.readIntLE=function(e,A,t){e>>>=0,A>>>=0,t||S(e,A,this.length);for(var r=this[e],i=1,n=0;++n=(i*=128)&&(r-=Math.pow(2,8*A)),r},e.prototype.readIntBE=function(e,A,t){e>>>=0,A>>>=0,t||S(e,A,this.length);for(var r=A,i=1,n=this[e+--r];r>0&&(i*=256);)n+=this[e+--r]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*A)),n},e.prototype.readInt8=function(e,A){return e>>>=0,A||S(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},e.prototype.readInt16LE=function(e,A){e>>>=0,A||S(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},e.prototype.readInt16BE=function(e,A){e>>>=0,A||S(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},e.prototype.readInt32LE=function(e,A){return e>>>=0,A||S(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},e.prototype.readInt32BE=function(e,A){return e>>>=0,A||S(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},e.prototype.readFloatLE=function(e,A){return e>>>=0,A||S(e,4,this.length),_$ieee754_18.read(this,e,!0,23,4)},e.prototype.readFloatBE=function(e,A){return e>>>=0,A||S(e,4,this.length),_$ieee754_18.read(this,e,!1,23,4)},e.prototype.readDoubleLE=function(e,A){return e>>>=0,A||S(e,8,this.length),_$ieee754_18.read(this,e,!0,52,8)},e.prototype.readDoubleBE=function(e,A){return e>>>=0,A||S(e,8,this.length),_$ieee754_18.read(this,e,!1,52,8)},e.prototype.writeUIntLE=function(e,A,t,r){e=+e,A>>>=0,t>>>=0,r||k(this,e,A,t,Math.pow(2,8*t)-1,0);var i=1,n=0;for(this[A]=255&e;++n>>=0,t>>>=0,r||k(this,e,A,t,Math.pow(2,8*t)-1,0);var i=t-1,n=1;for(this[A+i]=255&e;--i>=0&&(n*=256);)this[A+i]=e/n&255;return A+t},e.prototype.writeUInt8=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,1,255,0),this[A]=255&e,A+1},e.prototype.writeUInt16LE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,2,65535,0),this[A]=255&e,this[A+1]=e>>>8,A+2},e.prototype.writeUInt16BE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,2,65535,0),this[A]=e>>>8,this[A+1]=255&e,A+2},e.prototype.writeUInt32LE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,4,4294967295,0),this[A+3]=e>>>24,this[A+2]=e>>>16,this[A+1]=e>>>8,this[A]=255&e,A+4},e.prototype.writeUInt32BE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,4,4294967295,0),this[A]=e>>>24,this[A+1]=e>>>16,this[A+2]=e>>>8,this[A+3]=255&e,A+4},e.prototype.writeIntLE=function(e,A,t,r){if(e=+e,A>>>=0,!r){var i=Math.pow(2,8*t-1);k(this,e,A,t,i-1,-i)}var n=0,a=1,o=0;for(this[A]=255&e;++n>0)-o&255;return A+t},e.prototype.writeIntBE=function(e,A,t,r){if(e=+e,A>>>=0,!r){var i=Math.pow(2,8*t-1);k(this,e,A,t,i-1,-i)}var n=t-1,a=1,o=0;for(this[A+n]=255&e;--n>=0&&(a*=256);)e<0&&0===o&&0!==this[A+n+1]&&(o=1),this[A+n]=(e/a>>0)-o&255;return A+t},e.prototype.writeInt8=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,1,127,-128),e<0&&(e=255+e+1),this[A]=255&e,A+1},e.prototype.writeInt16LE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,2,32767,-32768),this[A]=255&e,this[A+1]=e>>>8,A+2},e.prototype.writeInt16BE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,2,32767,-32768),this[A]=e>>>8,this[A+1]=255&e,A+2},e.prototype.writeInt32LE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,4,2147483647,-2147483648),this[A]=255&e,this[A+1]=e>>>8,this[A+2]=e>>>16,this[A+3]=e>>>24,A+4},e.prototype.writeInt32BE=function(e,A,t){return e=+e,A>>>=0,t||k(this,e,A,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[A]=e>>>24,this[A+1]=e>>>16,this[A+2]=e>>>8,this[A+3]=255&e,A+4},e.prototype.writeFloatLE=function(e,A,t){return M(this,e,A,!0,t)},e.prototype.writeFloatBE=function(e,A,t){return M(this,e,A,!1,t)},e.prototype.writeDoubleLE=function(e,A,t){return F(this,e,A,!0,t)},e.prototype.writeDoubleBE=function(e,A,t){return F(this,e,A,!1,t)},e.prototype.copy=function(A,t,r,i){if(!e.isBuffer(A))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||0===i||(i=this.length),t>=A.length&&(t=A.length),t||(t=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),A.length-t=0;--a)A[a+t]=this[a+r];else Uint8Array.prototype.set.call(A,this.subarray(r,i),t);return n},e.prototype.fill=function(A,t,r,i){if("string"==typeof A){if("string"==typeof t?(i=t,t=0,r=this.length):"string"==typeof r&&(i=r,r=this.length),void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!e.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(1===A.length){var n=A.charCodeAt(0);("utf8"===i&&n<128||"latin1"===i)&&(A=n)}}else"number"==typeof A?A&=255:"boolean"==typeof A&&(A=Number(A));if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,A||(A=0),"number"==typeof A)for(a=t;a55295&&t<57344){if(!i){if(t>56319){(A-=3)>-1&&n.push(239,191,189);continue}if(a+1===r){(A-=3)>-1&&n.push(239,191,189);continue}i=t;continue}if(t<56320){(A-=3)>-1&&n.push(239,191,189),i=t;continue}t=65536+(i-55296<<10|t-56320)}else i&&(A-=3)>-1&&n.push(239,191,189);if(i=null,t<128){if((A-=1)<0)break;n.push(t)}else if(t<2048){if((A-=2)<0)break;n.push(t>>6|192,63&t|128)}else if(t<65536){if((A-=3)<0)break;n.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((A-=4)<0)break;n.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return n}function R(e){return _$base64Js_15.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(H,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function x(e,A,t,r){for(var i=0;i=A.length||i>=e.length);++i)A[i+t]=e[i];return i}function Y(e,A){return e instanceof A||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===A.name}function G(e){return e!=e}var U=function(){for(var e=new Array(256),A=0;A<16;++A)for(var t=16*A,r=0;r<16;++r)e[t+r]="0123456789abcdef"[A]+"0123456789abcdef"[r];return e}()}).call(this,_$buffer_74({}).Buffer)}),_$buffer_74=createModuleFactory(function(e,A){(function(e){"use strict";var t="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;A.Buffer=e,A.SlowBuffer=function(A){return+A!=A&&(A=0),e.alloc(+A)},A.INSPECT_MAX_BYTES=50;var r=2147483647;function i(A){if(A>r)throw new RangeError('The value "'+A+'" is invalid for option "size"');var t=new Uint8Array(A);return Object.setPrototypeOf(t,e.prototype),t}function e(e,A,t){if("number"==typeof e){if("string"==typeof A)throw new TypeError('The "string" argument must be of type string. Received type number');return o(e)}return n(e,A,t)}function n(A,t,r){if("string"==typeof A)return function(A,t){if("string"==typeof t&&""!==t||(t="utf8"),!e.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|c(A,t),n=i(r),a=n.write(A,t);return a!==r&&(n=n.slice(0,a)),n}(A,t);if(ArrayBuffer.isView(A))return s(A);if(null==A)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if(x(A,ArrayBuffer)||A&&x(A.buffer,ArrayBuffer))return function(A,t,r){if(t<0||A.byteLength=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return 0|e}function c(A,t){if(e.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||x(A,ArrayBuffer))return A.byteLength;if("string"!=typeof A)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);var r=A.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return H(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return P(A).length;default:if(n)return i?-1:H(A).length;t=(""+t).toLowerCase(),n=!0}}function h(e,A,t){var r=e[A];e[A]=e[t],e[t]=r}function u(A,t,r,i,n){if(0===A.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Y(r=+r)&&(r=n?0:A.length-1),r<0&&(r=A.length+r),r>=A.length){if(n)return-1;r=A.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof t&&(t=e.from(t,i)),e.isBuffer(t))return 0===t.length?-1:g(A,t,r,i,n);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(A,t,r):Uint8Array.prototype.lastIndexOf.call(A,t,r):g(A,[t],r,i,n);throw new TypeError("val must be string, number or Buffer")}function g(e,A,t,r,i){var n,a=1,o=e.length,s=A.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||A.length<2)return-1;a=2,o/=2,s/=2,t/=2}function f(e,A){return 1===a?e[A]:e.readUInt16BE(A*a)}if(i){var c=-1;for(n=t;no&&(t=o-s),n=t;n>=0;n--){for(var h=!0,u=0;ui&&(r=i):r=i;var n=A.length;r>n/2&&(r=n/2);for(var a=0;a>8,i=t%256,n.push(i),n.push(r);return n}(A,e.length-t),e,t,r)}function y(e,A,t){return 0===A&&t===e.length?_$base64Js_42.fromByteArray(e):_$base64Js_42.fromByteArray(e.slice(A,t))}function C(e,A,t){t=Math.min(e.length,t);for(var r=[],i=A;i239?4:f>223?3:f>191?2:1;if(i+h<=t)switch(h){case 1:f<128&&(c=f);break;case 2:128==(192&(n=e[i+1]))&&(s=(31&f)<<6|63&n)>127&&(c=s);break;case 3:n=e[i+1],a=e[i+2],128==(192&n)&&128==(192&a)&&(s=(15&f)<<12|(63&n)<<6|63&a)>2047&&(s<55296||s>57343)&&(c=s);break;case 4:n=e[i+1],a=e[i+2],o=e[i+3],128==(192&n)&&128==(192&a)&&128==(192&o)&&(s=(15&f)<<18|(63&n)<<12|(63&a)<<6|63&o)>65535&&s<1114112&&(c=s)}null===c?(c=65533,h=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=h}return function(e){var A=e.length;if(A<=E)return String.fromCharCode.apply(String,e);for(var t="",r=0;rthis.length)return"";if((void 0===t||t>this.length)&&(t=this.length),t<=0)return"";if((t>>>=0)<=(A>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return w(this,A,t);case"utf8":case"utf-8":return C(this,A,t);case"ascii":return b(this,A,t);case"latin1":case"binary":return Q(this,A,t);case"base64":return y(this,A,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,A,t);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}.apply(this,arguments)},e.prototype.toLocaleString=e.prototype.toString,e.prototype.equals=function(A){if(!e.isBuffer(A))throw new TypeError("Argument must be a Buffer");return this===A||0===e.compare(this,A)},e.prototype.inspect=function(){var e="",t=A.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},t&&(e.prototype[t]=e.prototype.inspect),e.prototype.compare=function(A,t,r,i,n){if(x(A,Uint8Array)&&(A=e.from(A,A.offset,A.byteLength)),!e.isBuffer(A))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof A);if(void 0===t&&(t=0),void 0===r&&(r=A?A.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),t<0||r>A.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&t>=r)return 0;if(i>=n)return-1;if(t>=r)return 1;if(this===A)return 0;for(var a=(n>>>=0)-(i>>>=0),o=(r>>>=0)-(t>>>=0),s=Math.min(a,o),f=this.slice(i,n),c=A.slice(t,r),h=0;h>>=0,isFinite(t)?(t>>>=0,void 0===r&&(r="utf8")):(r=t,t=void 0)}var i=this.length-A;if((void 0===t||t>i)&&(t=i),e.length>0&&(t<0||A<0)||A>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var n=!1;;)switch(r){case"hex":return _(this,e,A,t);case"utf8":case"utf-8":return I(this,e,A,t);case"ascii":return d(this,e,A,t);case"latin1":case"binary":return l(this,e,A,t);case"base64":return p(this,e,A,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,e,A,t);default:if(n)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),n=!0}},e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var E=4096;function b(e,A,t){var r="";t=Math.min(e.length,t);for(var i=A;ir)&&(t=r);for(var i="",n=A;nt)throw new RangeError("Trying to access beyond buffer length")}function S(A,t,r,i,n,a){if(!e.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>n||tA.length)throw new RangeError("Index out of range")}function k(e,A,t,r,i,n){if(t+r>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function D(e,A,t,r,i){return A=+A,t>>>=0,i||k(e,0,t,4),_$ieee754_125.write(e,A,t,r,23,4),t+4}function M(e,A,t,r,i){return A=+A,t>>>=0,i||k(e,0,t,8),_$ieee754_125.write(e,A,t,r,52,8),t+8}e.prototype.slice=function(A,t){var r=this.length;(A=~~A)<0?(A+=r)<0&&(A=0):A>r&&(A=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,A>>>=0,t||m(e,A,this.length);for(var r=this[e],i=1,n=0;++n>>=0,A>>>=0,t||m(e,A,this.length);for(var r=this[e+--A],i=1;A>0&&(i*=256);)r+=this[e+--A]*i;return r},e.prototype.readUInt8=function(e,A){return e>>>=0,A||m(e,1,this.length),this[e]},e.prototype.readUInt16LE=function(e,A){return e>>>=0,A||m(e,2,this.length),this[e]|this[e+1]<<8},e.prototype.readUInt16BE=function(e,A){return e>>>=0,A||m(e,2,this.length),this[e]<<8|this[e+1]},e.prototype.readUInt32LE=function(e,A){return e>>>=0,A||m(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},e.prototype.readUInt32BE=function(e,A){return e>>>=0,A||m(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},e.prototype.readIntLE=function(e,A,t){e>>>=0,A>>>=0,t||m(e,A,this.length);for(var r=this[e],i=1,n=0;++n=(i*=128)&&(r-=Math.pow(2,8*A)),r},e.prototype.readIntBE=function(e,A,t){e>>>=0,A>>>=0,t||m(e,A,this.length);for(var r=A,i=1,n=this[e+--r];r>0&&(i*=256);)n+=this[e+--r]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*A)),n},e.prototype.readInt8=function(e,A){return e>>>=0,A||m(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},e.prototype.readInt16LE=function(e,A){e>>>=0,A||m(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},e.prototype.readInt16BE=function(e,A){e>>>=0,A||m(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},e.prototype.readInt32LE=function(e,A){return e>>>=0,A||m(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},e.prototype.readInt32BE=function(e,A){return e>>>=0,A||m(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},e.prototype.readFloatLE=function(e,A){return e>>>=0,A||m(e,4,this.length),_$ieee754_125.read(this,e,!0,23,4)},e.prototype.readFloatBE=function(e,A){return e>>>=0,A||m(e,4,this.length),_$ieee754_125.read(this,e,!1,23,4)},e.prototype.readDoubleLE=function(e,A){return e>>>=0,A||m(e,8,this.length),_$ieee754_125.read(this,e,!0,52,8)},e.prototype.readDoubleBE=function(e,A){return e>>>=0,A||m(e,8,this.length),_$ieee754_125.read(this,e,!1,52,8)},e.prototype.writeUIntLE=function(e,A,t,r){e=+e,A>>>=0,t>>>=0,r||S(this,e,A,t,Math.pow(2,8*t)-1,0);var i=1,n=0;for(this[A]=255&e;++n>>=0,t>>>=0,r||S(this,e,A,t,Math.pow(2,8*t)-1,0);var i=t-1,n=1;for(this[A+i]=255&e;--i>=0&&(n*=256);)this[A+i]=e/n&255;return A+t},e.prototype.writeUInt8=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,1,255,0),this[A]=255&e,A+1},e.prototype.writeUInt16LE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,2,65535,0),this[A]=255&e,this[A+1]=e>>>8,A+2},e.prototype.writeUInt16BE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,2,65535,0),this[A]=e>>>8,this[A+1]=255&e,A+2},e.prototype.writeUInt32LE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,4,4294967295,0),this[A+3]=e>>>24,this[A+2]=e>>>16,this[A+1]=e>>>8,this[A]=255&e,A+4},e.prototype.writeUInt32BE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,4,4294967295,0),this[A]=e>>>24,this[A+1]=e>>>16,this[A+2]=e>>>8,this[A+3]=255&e,A+4},e.prototype.writeIntLE=function(e,A,t,r){if(e=+e,A>>>=0,!r){var i=Math.pow(2,8*t-1);S(this,e,A,t,i-1,-i)}var n=0,a=1,o=0;for(this[A]=255&e;++n>0)-o&255;return A+t},e.prototype.writeIntBE=function(e,A,t,r){if(e=+e,A>>>=0,!r){var i=Math.pow(2,8*t-1);S(this,e,A,t,i-1,-i)}var n=t-1,a=1,o=0;for(this[A+n]=255&e;--n>=0&&(a*=256);)e<0&&0===o&&0!==this[A+n+1]&&(o=1),this[A+n]=(e/a>>0)-o&255;return A+t},e.prototype.writeInt8=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,1,127,-128),e<0&&(e=255+e+1),this[A]=255&e,A+1},e.prototype.writeInt16LE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,2,32767,-32768),this[A]=255&e,this[A+1]=e>>>8,A+2},e.prototype.writeInt16BE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,2,32767,-32768),this[A]=e>>>8,this[A+1]=255&e,A+2},e.prototype.writeInt32LE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,4,2147483647,-2147483648),this[A]=255&e,this[A+1]=e>>>8,this[A+2]=e>>>16,this[A+3]=e>>>24,A+4},e.prototype.writeInt32BE=function(e,A,t){return e=+e,A>>>=0,t||S(this,e,A,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[A]=e>>>24,this[A+1]=e>>>16,this[A+2]=e>>>8,this[A+3]=255&e,A+4},e.prototype.writeFloatLE=function(e,A,t){return D(this,e,A,!0,t)},e.prototype.writeFloatBE=function(e,A,t){return D(this,e,A,!1,t)},e.prototype.writeDoubleLE=function(e,A,t){return M(this,e,A,!0,t)},e.prototype.writeDoubleBE=function(e,A,t){return M(this,e,A,!1,t)},e.prototype.copy=function(A,t,r,i){if(!e.isBuffer(A))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||0===i||(i=this.length),t>=A.length&&(t=A.length),t||(t=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),A.length-t=0;--a)A[a+t]=this[a+r];else Uint8Array.prototype.set.call(A,this.subarray(r,i),t);return n},e.prototype.fill=function(A,t,r,i){if("string"==typeof A){if("string"==typeof t?(i=t,t=0,r=this.length):"string"==typeof r&&(i=r,r=this.length),void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!e.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(1===A.length){var n=A.charCodeAt(0);("utf8"===i&&n<128||"latin1"===i)&&(A=n)}}else"number"==typeof A?A&=255:"boolean"==typeof A&&(A=Number(A));if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,A||(A=0),"number"==typeof A)for(a=t;a55295&&t<57344){if(!i){if(t>56319){(A-=3)>-1&&n.push(239,191,189);continue}if(a+1===r){(A-=3)>-1&&n.push(239,191,189);continue}i=t;continue}if(t<56320){(A-=3)>-1&&n.push(239,191,189),i=t;continue}t=65536+(i-55296<<10|t-56320)}else i&&(A-=3)>-1&&n.push(239,191,189);if(i=null,t<128){if((A-=1)<0)break;n.push(t)}else if(t<2048){if((A-=2)<0)break;n.push(t>>6|192,63&t|128)}else if(t<65536){if((A-=3)<0)break;n.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((A-=4)<0)break;n.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return n}function P(e){return _$base64Js_42.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(F,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function R(e,A,t,r){for(var i=0;i=A.length||i>=e.length);++i)A[i+t]=e[i];return i}function x(e,A){return e instanceof A||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===A.name}function Y(e){return e!=e}var G=function(){for(var e=new Array(256),A=0;A<16;++A)for(var t=16*A,r=0;r<16;++r)e[t+r]="0123456789abcdef"[A]+"0123456789abcdef"[r];return e}()}).call(this,_$buffer_74({}).Buffer)}),_$base64Js_15={toByteArray:function(e){var A,t,r=getLens(e),i=r[0],n=r[1],a=new Arr(function(e,A,t){return 3*(A+t)/4-t}(0,i,n)),o=0,s=n>0?i-4:i;for(t=0;t>16&255,a[o++]=A>>8&255,a[o++]=255&A;return 2===n&&(A=revLookup[e.charCodeAt(t)]<<2|revLookup[e.charCodeAt(t+1)]>>4,a[o++]=255&A),1===n&&(A=revLookup[e.charCodeAt(t)]<<10|revLookup[e.charCodeAt(t+1)]<<4|revLookup[e.charCodeAt(t+2)]>>2,a[o++]=A>>8&255,a[o++]=255&A),a},fromByteArray:function(e){for(var A,t=e.length,r=t%3,i=[],n=0,a=t-r;na?a:n+16383));return 1===r?(A=e[t-1],i.push(lookup[A>>2]+lookup[A<<4&63]+"==")):2===r&&(A=(e[t-2]<<8)+e[t-1],i.push(lookup[A>>10]+lookup[A>>4&63]+lookup[A<<2&63]+"=")),i.join("")}},lookup=[],revLookup=[],Arr="undefined"!=typeof Uint8Array?Uint8Array:Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,len=code.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var t=e.indexOf("=");return-1===t&&(t=A),[t,t===A?0:4-t%4]}function encodeChunk(e,A,t){for(var r,i,n=[],a=A;a>18&63]+lookup[i>>12&63]+lookup[i>>6&63]+lookup[63&i]);return n.join("")}revLookup["-".charCodeAt(0)]=62,revLookup["_".charCodeAt(0)]=63;for(var _$ieee754_18={read:function(e,A,t,r,i){var n,a,o=8*i-r-1,s=(1<>1,c=-7,h=t?i-1:0,u=t?-1:1,g=e[A+h];for(h+=u,n=g&(1<<-c)-1,g>>=-c,c+=o;c>0;n=256*n+e[A+h],h+=u,c-=8);for(a=n&(1<<-c)-1,n>>=-c,c+=r;c>0;a=256*a+e[A+h],h+=u,c-=8);if(0===n)n=1-f;else{if(n===s)return a?NaN:1/0*(g?-1:1);a+=Math.pow(2,r),n-=f}return(g?-1:1)*a*Math.pow(2,n-r)},write:function(e,A,t,r,i,n){var a,o,s,f=8*n-i-1,c=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,g=r?0:n-1,_=r?1:-1,I=A<0||0===A&&1/A<0?1:0;for(A=Math.abs(A),isNaN(A)||A===1/0?(o=isNaN(A)?1:0,a=c):(a=Math.floor(Math.log(A)/Math.LN2),A*(s=Math.pow(2,-a))<1&&(a--,s*=2),(A+=a+h>=1?u/s:u*Math.pow(2,1-h))*s>=2&&(a++,s/=2),a+h>=c?(o=0,a=c):a+h>=1?(o=(A*s-1)*Math.pow(2,i),a+=h):(o=A*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;e[t+g]=255&o,g+=_,o/=256,i-=8);for(a=a<0;e[t+g]=255&a,g+=_,a/=256,f-=8);e[t+g-_]|=128*I}},_$base64Js_42={toByteArray:function(e){var A,t,r=__getLens_42(e),i=r[0],n=r[1],a=new __Arr_42(function(e,A,t){return 3*(A+t)/4-t}(0,i,n)),o=0,s=n>0?i-4:i;for(t=0;t>16&255,a[o++]=A>>8&255,a[o++]=255&A;return 2===n&&(A=__revLookup_42[e.charCodeAt(t)]<<2|__revLookup_42[e.charCodeAt(t+1)]>>4,a[o++]=255&A),1===n&&(A=__revLookup_42[e.charCodeAt(t)]<<10|__revLookup_42[e.charCodeAt(t+1)]<<4|__revLookup_42[e.charCodeAt(t+2)]>>2,a[o++]=A>>8&255,a[o++]=255&A),a},fromByteArray:function(e){for(var A,t=e.length,r=t%3,i=[],n=0,a=t-r;na?a:n+16383));return 1===r?(A=e[t-1],i.push(__lookup_42[A>>2]+__lookup_42[A<<4&63]+"==")):2===r&&(A=(e[t-2]<<8)+e[t-1],i.push(__lookup_42[A>>10]+__lookup_42[A>>4&63]+__lookup_42[A<<2&63]+"=")),i.join("")}},__lookup_42=[],__revLookup_42=[],__Arr_42="undefined"!=typeof Uint8Array?Uint8Array:Array,__code_42="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",__i_42=0,__len_42=__code_42.length;__i_42<__len_42;++__i_42)__lookup_42[__i_42]=__code_42[__i_42],__revLookup_42[__code_42.charCodeAt(__i_42)]=__i_42;function __getLens_42(e){var A=e.length;if(A%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var t=e.indexOf("=");return-1===t&&(t=A),[t,t===A?0:4-t%4]}function __encodeChunk_42(e,A,t){for(var r,i,n=[],a=A;a>18&63]+__lookup_42[i>>12&63]+__lookup_42[i>>6&63]+__lookup_42[63&i]);return n.join("")}__revLookup_42["-".charCodeAt(0)]=62,__revLookup_42["_".charCodeAt(0)]=63;var _$ieee754_125={read:function(e,A,t,r,i){var n,a,o=8*i-r-1,s=(1<>1,c=-7,h=t?i-1:0,u=t?-1:1,g=e[A+h];for(h+=u,n=g&(1<<-c)-1,g>>=-c,c+=o;c>0;n=256*n+e[A+h],h+=u,c-=8);for(a=n&(1<<-c)-1,n>>=-c,c+=r;c>0;a=256*a+e[A+h],h+=u,c-=8);if(0===n)n=1-f;else{if(n===s)return a?NaN:1/0*(g?-1:1);a+=Math.pow(2,r),n-=f}return(g?-1:1)*a*Math.pow(2,n-r)},write:function(e,A,t,r,i,n){var a,o,s,f=8*n-i-1,c=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,g=r?0:n-1,_=r?1:-1,I=A<0||0===A&&1/A<0?1:0;for(A=Math.abs(A),isNaN(A)||A===1/0?(o=isNaN(A)?1:0,a=c):(a=Math.floor(Math.log(A)/Math.LN2),A*(s=Math.pow(2,-a))<1&&(a--,s*=2),(A+=a+h>=1?u/s:u*Math.pow(2,1-h))*s>=2&&(a++,s/=2),a+h>=c?(o=0,a=c):a+h>=1?(o=(A*s-1)*Math.pow(2,i),a+=h):(o=A*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;e[t+g]=255&o,g+=_,o/=256,i-=8);for(a=a<0;e[t+g]=255&a,g+=_,a/=256,f-=8);e[t+g-_]|=128*I}},_$CryptographyKey_6={};(function(e){"use strict";void 0===e&&_$buffer_17({}).Buffer,_$CryptographyKey_6=class A{constructor(A){if(!e.isBuffer(A))throw new TypeError("Argument 1 must be an instance of Buffer.");Object.defineProperty(this,"buffer",{enumerable:!1,value:A.slice()})}static from(){return new A(e.from(...arguments))}isEd25519Key(){return!1}isX25519Key(){return!1}isPublicKey(){return!1}getLength(){return this.buffer.length}getBuffer(){return this.buffer}toString(e="utf-8"){return this.getBuffer().toString(e)}slice(){return this.buffer.slice(...arguments)}}}).call(this,_$buffer_74({}).Buffer);var _$Ed25519PublicKey_7={};(function(e){class A extends _$CryptographyKey_6{constructor(e){if(32!==e.length)throw new Error("Ed25519 public keys must be 32 bytes long");super(e),this.keyType="ed25519",this.publicKey=!0}static from(){return new A(e.from(...arguments))}isEd25519Key(){return!0}isPublicKey(){return!0}}_$Ed25519PublicKey_7=A}).call(this,_$buffer_74({}).Buffer);var _$Ed25519SecretKey_8={};(function(e){class A extends _$CryptographyKey_6{constructor(e){if(64!==e.length)throw new Error("Ed25519 secret keys must be 64 bytes long");super(e),this.keyType="ed25519",this.publicKey=!1}static from(){return new A(e.from(...arguments))}isEd25519Key(){return!0}isPublicKey(){return!1}}_$Ed25519SecretKey_8=A}).call(this,_$buffer_74({}).Buffer);var _$sodiumError_12=class extends Error{},_$backend_3={};(function(e){void 0===e&&_$buffer_17({}).Buffer,_$backend_3=class{constructor(){this.backendName="UndefinedBackend"}async crypto_box_keypair_from_secretkey_and_publickey(A,t){if(32!==A.getLength())throw new Error("Secret key must be 32 bytes");if(32!==t.getLength())throw new Error("Public key must be 32 bytes");const r=e.alloc(64);return A.getBuffer().copy(r,0,0,32),t.getBuffer().copy(r,32,0,32),new _$CryptographyKey_6(e.from(r))}}}).call(this,_$buffer_74({}).Buffer);var _$browser_145={},cachedSetTimeout,cachedClearTimeout,process=_$browser_145={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(cachedSetTimeout===setTimeout)return setTimeout(e,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(e,0);try{return cachedSetTimeout(e,0)}catch(A){try{return cachedSetTimeout.call(null,e,0)}catch(A){return cachedSetTimeout.call(this,e,0)}}}!function(){try{cachedSetTimeout="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){cachedSetTimeout=defaultSetTimout}try{cachedClearTimeout="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){cachedClearTimeout=defaultClearTimeout}}();var currentQueue,queue=[],draining=!1,queueIndex=-1;function cleanUpNextTick(){draining&¤tQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var e=runTimeout(cleanUpNextTick);draining=!0;for(var A=queue.length;A;){for(currentQueue=queue,queue=[];++queueIndex1)for(var t=1;t4294967295)throw new RangeError("requested too many random bytes");var n=t.allocUnsafe(A);if(A>0)if(A>65536)for(var a=0;a0&&a.length>i){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+' "'+String(A)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');o.name="MaxListenersExceededWarning",o.emitter=e,o.type=A,o.count=a.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",o.name,o.message)}}else a=n[A]=t,++e._eventsCount;return e}function onceWrapper(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),A=0;A1&&(A=arguments[1]),A instanceof Error)throw A;var s=new Error('Unhandled "error" event. ('+A+")");throw s.context=A,s}if(!(t=a[e]))return!1;var f="function"==typeof t;switch(r=arguments.length){case 1:!function(e,A,t){if(A)e.call(t);else for(var r=e.length,i=arrayClone(e,r),n=0;n=0;n--)if(t[n]===A||t[n].listener===A){a=t[n].listener,i=n;break}if(i<0)return this;0===i?t.shift():function(e,A){for(var t=i,r=t+1,n=e.length;r=0;r--)this.removeListener(e,A[r]);return this},EventEmitter.prototype.listeners=function(e){return _listeners(this,e,!0)},EventEmitter.prototype.rawListeners=function(e){return _listeners(this,e,!1)},EventEmitter.listenerCount=function(e,A){return"function"==typeof e.listenerCount?e.listenerCount(A):listenerCount.call(e,A)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var _$processNextickArgs_144={};(function(e){"use strict";_$processNextickArgs_144=void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?{nextTick:function(A,t,r,i){if("function"!=typeof A)throw new TypeError('"callback" argument must be a function');var n,a,o=arguments.length;switch(o){case 0:case 1:return e.nextTick(A);case 2:return e.nextTick(function(){A.call(null,t)});case 3:return e.nextTick(function(){A.call(null,t,r)});case 4:return e.nextTick(function(){A.call(null,t,r,i)});default:for(n=new Array(o-1),a=0;a0?this.tail.next=A:this.head=A,this.tail=A,++this.length},e.prototype.unshift=function(e){var A={data:e,next:this.head};0===this.length&&(this.tail=A),this.head=A,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var A=this.head,t=""+A.data;A=A.next;)t+=e+A.data;return t},e.prototype.concat=function(e){if(0===this.length)return __Buffer_160.alloc(0);if(1===this.length)return this.head.data;for(var A,t,r=__Buffer_160.allocUnsafe(e>>>0),i=this.head,n=0;i;)A=r,t=n,i.data.copy(A,t),n+=i.data.length,i=i.next;return r},e}(),util&&util.inspect&&util.inspect.custom&&(_$BufferList_160.prototype[util.inspect.custom]=function(){var e=util.inspect({length:this.length});return this.constructor.name+" "+e});var _$destroy_161={destroy:function(e,A){var t=this,r=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return r||i?(A?A(e):!e||this._writableState&&this._writableState.errorEmitted||_$processNextickArgs_144.nextTick(emitErrorNT,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!A&&e?(_$processNextickArgs_144.nextTick(emitErrorNT,t,e),t._writableState&&(t._writableState.errorEmitted=!0)):A&&A(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}},_$browser_182={};(function(e){function A(A){try{if(!e.localStorage)return!1}catch(r){return!1}var t=e.localStorage[A];return null!=t&&"true"===String(t).toLowerCase()}_$browser_182=function(e,t){if(A("noDeprecation"))return e;var r=!1;return function(){if(!r){if(A("throwDeprecation"))throw new Error(t);A("traceDeprecation")?console.trace(t):console.warn(t),r=!0}return e.apply(this,arguments)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{});var _$Transform_158=Transform,__Duplex_158=_$Duplex_155({});function afterTransform(e,A){var t=this._transformState;t.transforming=!1;var r=t.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));t.writechunk=null,t.writecb=null,null!=A&&this.push(A),r(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length=this._blockSize;){for(var i=this._blockOffset;i0;++n)this._length[n]+=a,(a=this._length[n]/4294967296|0)>0&&(this._length[n]-=4294967296*a);return this},HashBase.prototype._update=function(){throw new Error("_update is not implemented")},HashBase.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var A=this._digest();void 0!==e&&(A=A.toString(e)),this._block.fill(0),this._blockOffset=0;for(var t=0;t<4;++t)this._length[t]=0;return A},HashBase.prototype._digest=function(){throw new Error("_digest is not implemented")},_$hashBase_111=HashBase;var _$md5Js_129={},__Buffer_129=_$safeBuffer_170.Buffer,ARRAY16=new Array(16);function MD5(){_$hashBase_111.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function rotl(e,A){return e<>>32-A}function fnF(e,A,t,r,i,n,a){return rotl(e+(A&t|~A&r)+i+n|0,a)+A|0}function fnG(e,A,t,r,i,n,a){return rotl(e+(A&r|t&~r)+i+n|0,a)+A|0}function fnH(e,A,t,r,i,n,a){return rotl(e+(A^t^r)+i+n|0,a)+A|0}function fnI(e,A,t,r,i,n,a){return rotl(e+(t^(A|~r))+i+n|0,a)+A|0}_$inherits_browser_126(MD5,_$hashBase_111),MD5.prototype._update=function(){for(var e=ARRAY16,A=0;A<16;++A)e[A]=this._block.readInt32LE(4*A);var t=this._a,r=this._b,i=this._c,n=this._d;t=fnF(t,r,i,n,e[0],3614090360,7),n=fnF(n,t,r,i,e[1],3905402710,12),i=fnF(i,n,t,r,e[2],606105819,17),r=fnF(r,i,n,t,e[3],3250441966,22),t=fnF(t,r,i,n,e[4],4118548399,7),n=fnF(n,t,r,i,e[5],1200080426,12),i=fnF(i,n,t,r,e[6],2821735955,17),r=fnF(r,i,n,t,e[7],4249261313,22),t=fnF(t,r,i,n,e[8],1770035416,7),n=fnF(n,t,r,i,e[9],2336552879,12),i=fnF(i,n,t,r,e[10],4294925233,17),r=fnF(r,i,n,t,e[11],2304563134,22),t=fnF(t,r,i,n,e[12],1804603682,7),n=fnF(n,t,r,i,e[13],4254626195,12),i=fnF(i,n,t,r,e[14],2792965006,17),t=fnG(t,r=fnF(r,i,n,t,e[15],1236535329,22),i,n,e[1],4129170786,5),n=fnG(n,t,r,i,e[6],3225465664,9),i=fnG(i,n,t,r,e[11],643717713,14),r=fnG(r,i,n,t,e[0],3921069994,20),t=fnG(t,r,i,n,e[5],3593408605,5),n=fnG(n,t,r,i,e[10],38016083,9),i=fnG(i,n,t,r,e[15],3634488961,14),r=fnG(r,i,n,t,e[4],3889429448,20),t=fnG(t,r,i,n,e[9],568446438,5),n=fnG(n,t,r,i,e[14],3275163606,9),i=fnG(i,n,t,r,e[3],4107603335,14),r=fnG(r,i,n,t,e[8],1163531501,20),t=fnG(t,r,i,n,e[13],2850285829,5),n=fnG(n,t,r,i,e[2],4243563512,9),i=fnG(i,n,t,r,e[7],1735328473,14),t=fnH(t,r=fnG(r,i,n,t,e[12],2368359562,20),i,n,e[5],4294588738,4),n=fnH(n,t,r,i,e[8],2272392833,11),i=fnH(i,n,t,r,e[11],1839030562,16),r=fnH(r,i,n,t,e[14],4259657740,23),t=fnH(t,r,i,n,e[1],2763975236,4),n=fnH(n,t,r,i,e[4],1272893353,11),i=fnH(i,n,t,r,e[7],4139469664,16),r=fnH(r,i,n,t,e[10],3200236656,23),t=fnH(t,r,i,n,e[13],681279174,4),n=fnH(n,t,r,i,e[0],3936430074,11),i=fnH(i,n,t,r,e[3],3572445317,16),r=fnH(r,i,n,t,e[6],76029189,23),t=fnH(t,r,i,n,e[9],3654602809,4),n=fnH(n,t,r,i,e[12],3873151461,11),i=fnH(i,n,t,r,e[15],530742520,16),t=fnI(t,r=fnH(r,i,n,t,e[2],3299628645,23),i,n,e[0],4096336452,6),n=fnI(n,t,r,i,e[7],1126891415,10),i=fnI(i,n,t,r,e[14],2878612391,15),r=fnI(r,i,n,t,e[5],4237533241,21),t=fnI(t,r,i,n,e[12],1700485571,6),n=fnI(n,t,r,i,e[3],2399980690,10),i=fnI(i,n,t,r,e[10],4293915773,15),r=fnI(r,i,n,t,e[1],2240044497,21),t=fnI(t,r,i,n,e[8],1873313359,6),n=fnI(n,t,r,i,e[15],4264355552,10),i=fnI(i,n,t,r,e[6],2734768916,15),r=fnI(r,i,n,t,e[13],1309151649,21),t=fnI(t,r,i,n,e[4],4149444226,6),n=fnI(n,t,r,i,e[11],3174756917,10),i=fnI(i,n,t,r,e[2],718787259,15),r=fnI(r,i,n,t,e[9],3951481745,21),this._a=this._a+t|0,this._b=this._b+r|0,this._c=this._c+i|0,this._d=this._d+n|0},MD5.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=__Buffer_129.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},_$md5Js_129=MD5;var _$ripemd160_169={},__Buffer_169=_$buffer_74({}).Buffer,__ARRAY16_169=new Array(16),zl=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],zr=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],sl=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],sr=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],hl=[0,1518500249,1859775393,2400959708,2840853838],hr=[1352829926,1548603684,1836072691,2053994217,0];function RIPEMD160(){_$hashBase_111.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function __rotl_169(e,A){return e<>>32-A}function fn1(e,A,t,r,i,n,a,o){return __rotl_169(e+(A^t^r)+n+a|0,o)+i|0}function fn2(e,A,t,r,i,n,a,o){return __rotl_169(e+(A&t|~A&r)+n+a|0,o)+i|0}function fn3(e,A,t,r,i,n,a,o){return __rotl_169(e+((A|~t)^r)+n+a|0,o)+i|0}function fn4(e,A,t,r,i,n,a,o){return __rotl_169(e+(A&r|t&~r)+n+a|0,o)+i|0}function fn5(e,A,t,r,i,n,a,o){return __rotl_169(e+(A^(t|~r))+n+a|0,o)+i|0}_$inherits_browser_126(RIPEMD160,_$hashBase_111),RIPEMD160.prototype._update=function(){for(var e=__ARRAY16_169,A=0;A<16;++A)e[A]=this._block.readInt32LE(4*A);for(var t=0|this._a,r=0|this._b,i=0|this._c,n=0|this._d,a=0|this._e,o=0|this._a,s=0|this._b,f=0|this._c,c=0|this._d,h=0|this._e,u=0;u<80;u+=1){var g,_;u<16?(g=fn1(t,r,i,n,a,e[zl[u]],hl[0],sl[u]),_=fn5(o,s,f,c,h,e[zr[u]],hr[0],sr[u])):u<32?(g=fn2(t,r,i,n,a,e[zl[u]],hl[1],sl[u]),_=fn4(o,s,f,c,h,e[zr[u]],hr[1],sr[u])):u<48?(g=fn3(t,r,i,n,a,e[zl[u]],hl[2],sl[u]),_=fn3(o,s,f,c,h,e[zr[u]],hr[2],sr[u])):u<64?(g=fn4(t,r,i,n,a,e[zl[u]],hl[3],sl[u]),_=fn2(o,s,f,c,h,e[zr[u]],hr[3],sr[u])):(g=fn5(t,r,i,n,a,e[zl[u]],hl[4],sl[u]),_=fn1(o,s,f,c,h,e[zr[u]],hr[4],sr[u])),t=a,a=n,n=__rotl_169(i,10),i=r,r=g,o=h,h=c,c=__rotl_169(f,10),f=s,s=_}var I=this._b+i+c|0;this._b=this._c+n+h|0,this._c=this._d+a+o|0,this._d=this._e+t+s|0,this._e=this._a+r+f|0,this._a=I},RIPEMD160.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=__Buffer_169.alloc?__Buffer_169.alloc(20):new __Buffer_169(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},_$ripemd160_169=RIPEMD160;var _$hash_171={},__Buffer_171=_$safeBuffer_170.Buffer;function Hash(e,A){this._block=__Buffer_171.alloc(e),this._finalSize=A,this._blockSize=e,this._len=0}Hash.prototype.update=function(e,A){"string"==typeof e&&(A=A||"utf8",e=__Buffer_171.from(e,A));for(var t=this._block,r=this._blockSize,i=e.length,n=this._len,a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var t=8*this._len;if(t<=4294967295)this._block.writeUInt32BE(t,this._blockSize-4);else{var r=(4294967295&t)>>>0,i=(t-r)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var n=this._hash();return e?n.toString(e):n},Hash.prototype._update=function(){throw new Error("_update must be implemented by subclass")},_$hash_171=Hash;var _$sha_173={},__Buffer_173=_$safeBuffer_170.Buffer,K=[1518500249,1859775393,-1894007588,-899497514],W=new Array(80);function Sha(){this.init(),this._w=W,_$hash_171.call(this,64,56)}function rotl30(e){return e<<30|e>>>2}function ft(e,A,t,r){return 0===e?A&t|~A&r:2===e?A&t|A&r|t&r:A^t^r}_$inherits_browser_126(Sha,_$hash_171),Sha.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha.prototype._update=function(e){for(var A,t=this._w,r=0|this._a,i=0|this._b,n=0|this._c,a=0|this._d,o=0|this._e,s=0;s<16;++s)t[s]=e.readInt32BE(4*s);for(;s<80;++s)t[s]=t[s-3]^t[s-8]^t[s-14]^t[s-16];for(var f=0;f<80;++f){var c=~~(f/20),h=0|((A=r)<<5|A>>>27)+ft(c,i,n,a)+o+t[f]+K[c];o=a,a=n,n=rotl30(i),i=r,r=h}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=a+this._d|0,this._e=o+this._e|0},Sha.prototype._hash=function(){var e=__Buffer_173.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},_$sha_173=Sha;var _$sha1_174={},__Buffer_174=_$safeBuffer_170.Buffer,__K_174=[1518500249,1859775393,-1894007588,-899497514],__W_174=new Array(80);function Sha1(){this.init(),this._w=__W_174,_$hash_171.call(this,64,56)}function rotl5(e){return e<<5|e>>>27}function __rotl30_174(e){return e<<30|e>>>2}function __ft_174(e,A,t,r){return 0===e?A&t|~A&r:2===e?A&t|A&r|t&r:A^t^r}_$inherits_browser_126(Sha1,_$hash_171),Sha1.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha1.prototype._update=function(e){for(var A,t=this._w,r=0|this._a,i=0|this._b,n=0|this._c,a=0|this._d,o=0|this._e,s=0;s<16;++s)t[s]=e.readInt32BE(4*s);for(;s<80;++s)t[s]=(A=t[s-3]^t[s-8]^t[s-14]^t[s-16])<<1|A>>>31;for(var f=0;f<80;++f){var c=~~(f/20),h=rotl5(r)+__ft_174(c,i,n,a)+o+t[f]+__K_174[c]|0;o=a,a=n,n=__rotl30_174(i),i=r,r=h}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=a+this._d|0,this._e=o+this._e|0},Sha1.prototype._hash=function(){var e=__Buffer_174.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},_$sha1_174=Sha1;var _$sha256_176={},__Buffer_176=_$safeBuffer_170.Buffer,__K_176=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],__W_176=new Array(64);function Sha256(){this.init(),this._w=__W_176,_$hash_171.call(this,64,56)}function ch(e,A,t){return t^e&(A^t)}function maj(e,A,t){return e&A|t&(e|A)}function sigma0(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function sigma1(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function gamma0(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}_$inherits_browser_126(Sha256,_$hash_171),Sha256.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},Sha256.prototype._update=function(e){for(var A,t=this._w,r=0|this._a,i=0|this._b,n=0|this._c,a=0|this._d,o=0|this._e,s=0|this._f,f=0|this._g,c=0|this._h,h=0;h<16;++h)t[h]=e.readInt32BE(4*h);for(;h<64;++h)t[h]=0|(((A=t[h-2])>>>17|A<<15)^(A>>>19|A<<13)^A>>>10)+t[h-7]+gamma0(t[h-15])+t[h-16];for(var u=0;u<64;++u){var g=c+sigma1(o)+ch(o,s,f)+__K_176[u]+t[u]|0,_=sigma0(r)+maj(r,i,n)|0;c=f,f=s,s=o,o=a+g|0,a=n,n=i,i=r,r=g+_|0}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=a+this._d|0,this._e=o+this._e|0,this._f=s+this._f|0,this._g=f+this._g|0,this._h=c+this._h|0},Sha256.prototype._hash=function(){var e=__Buffer_176.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},_$sha256_176=Sha256;var _$sha224_175={},__Buffer_175=_$safeBuffer_170.Buffer,__W_175=new Array(64);function Sha224(){this.init(),this._w=__W_175,_$hash_171.call(this,64,56)}_$inherits_browser_126(Sha224,_$sha256_176),Sha224.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},Sha224.prototype._hash=function(){var e=__Buffer_175.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},_$sha224_175=Sha224;var _$sha512_178={},__Buffer_178=_$safeBuffer_170.Buffer,__K_178=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],__W_178=new Array(160);function Sha512(){this.init(),this._w=__W_178,_$hash_171.call(this,128,112)}function Ch(e,A,t){return t^e&(A^t)}function __maj_178(e,A,t){return e&A|t&(e|A)}function __sigma0_178(e,A){return(e>>>28|A<<4)^(A>>>2|e<<30)^(A>>>7|e<<25)}function __sigma1_178(e,A){return(e>>>14|A<<18)^(e>>>18|A<<14)^(A>>>9|e<<23)}function Gamma0(e,A){return(e>>>1|A<<31)^(e>>>8|A<<24)^e>>>7}function Gamma0l(e,A){return(e>>>1|A<<31)^(e>>>8|A<<24)^(e>>>7|A<<25)}function Gamma1(e,A){return(e>>>19|A<<13)^(A>>>29|e<<3)^e>>>6}function Gamma1l(e,A){return(e>>>19|A<<13)^(A>>>29|e<<3)^(e>>>6|A<<26)}function getCarry(e,A){return e>>>0>>0?1:0}_$inherits_browser_126(Sha512,_$hash_171),Sha512.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},Sha512.prototype._update=function(e){for(var A=this._w,t=0|this._ah,r=0|this._bh,i=0|this._ch,n=0|this._dh,a=0|this._eh,o=0|this._fh,s=0|this._gh,f=0|this._hh,c=0|this._al,h=0|this._bl,u=0|this._cl,g=0|this._dl,_=0|this._el,I=0|this._fl,d=0|this._gl,l=0|this._hl,p=0;p<32;p+=2)A[p]=e.readInt32BE(4*p),A[p+1]=e.readInt32BE(4*p+4);for(;p<160;p+=2){var B=A[p-30],y=A[p-30+1],C=Gamma0(B,y),E=Gamma0l(y,B),b=Gamma1(B=A[p-4],y=A[p-4+1]),Q=Gamma1l(y,B),w=A[p-14],v=A[p-14+1],m=A[p-32],S=A[p-32+1],k=E+v|0,D=C+w+getCarry(k,E)|0;D=(D=D+b+getCarry(k=k+Q|0,Q)|0)+m+getCarry(k=k+S|0,S)|0,A[p]=D,A[p+1]=k}for(var M=0;M<160;M+=2){D=A[M],k=A[M+1];var F=__maj_178(t,r,i),H=__maj_178(c,h,u),P=__sigma0_178(t,c),R=__sigma0_178(c,t),x=__sigma1_178(a,_),Y=__sigma1_178(_,a),G=__K_178[M],U=__K_178[M+1],N=Ch(a,o,s),L=Ch(_,I,d),T=l+Y|0,K=f+x+getCarry(T,l)|0;K=(K=(K=K+N+getCarry(T=T+L|0,L)|0)+G+getCarry(T=T+U|0,U)|0)+D+getCarry(T=T+k|0,k)|0;var J=R+H|0,X=P+F+getCarry(J,R)|0;f=s,l=d,s=o,d=I,o=a,I=_,a=n+K+getCarry(_=g+T|0,g)|0,n=i,g=u,i=r,u=h,r=t,h=c,t=K+X+getCarry(c=T+J|0,T)|0}this._al=this._al+c|0,this._bl=this._bl+h|0,this._cl=this._cl+u|0,this._dl=this._dl+g|0,this._el=this._el+_|0,this._fl=this._fl+I|0,this._gl=this._gl+d|0,this._hl=this._hl+l|0,this._ah=this._ah+t+getCarry(this._al,c)|0,this._bh=this._bh+r+getCarry(this._bl,h)|0,this._ch=this._ch+i+getCarry(this._cl,u)|0,this._dh=this._dh+n+getCarry(this._dl,g)|0,this._eh=this._eh+a+getCarry(this._el,_)|0,this._fh=this._fh+o+getCarry(this._fl,I)|0,this._gh=this._gh+s+getCarry(this._gl,d)|0,this._hh=this._hh+f+getCarry(this._hl,l)|0},Sha512.prototype._hash=function(){var e=__Buffer_178.allocUnsafe(64);function A(A,t,r){e.writeInt32BE(A,r),e.writeInt32BE(t,r+4)}return A(this._ah,this._al,0),A(this._bh,this._bl,8),A(this._ch,this._cl,16),A(this._dh,this._dl,24),A(this._eh,this._el,32),A(this._fh,this._fl,40),A(this._gh,this._gl,48),A(this._hh,this._hl,56),e},_$sha512_178=Sha512;var _$sha384_177={},__Buffer_177=_$safeBuffer_170.Buffer,__W_177=new Array(160);function Sha384(){this.init(),this._w=__W_177,_$hash_171.call(this,128,112)}_$inherits_browser_126(Sha384,_$sha512_178),Sha384.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},Sha384.prototype._hash=function(){var e=__Buffer_177.allocUnsafe(48);function A(A,t,r){e.writeInt32BE(A,r),e.writeInt32BE(t,r+4)}return A(this._ah,this._al,0),A(this._bh,this._bl,8),A(this._ch,this._cl,16),A(this._dh,this._dl,24),A(this._eh,this._el,32),A(this._fh,this._fl,40),e},_$sha384_177=Sha384;var _$shaJs_172={},exports=_$shaJs_172=function(e){e=e.toLowerCase();var A=exports[e];if(!A)throw new Error(e+" is not supported (we accept pull requests)");return new A};exports.sha=_$sha_173,exports.sha1=_$sha1_174,exports.sha224=_$sha224_175,exports.sha256=_$sha256_176,exports.sha384=_$sha384_177,exports.sha512=_$sha512_178;var _$string_decoder_180={},__Buffer_180=_$safeBuffer_170.Buffer,__isEncoding_180=__Buffer_180.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){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":return!0;default:return!1}};function __StringDecoder_180(e){var A;switch(this.encoding=function(e){var A=function(e){if(!e)return"utf8";for(var A;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(A)return;e=(""+e).toLowerCase(),A=!0}}(e);if("string"!=typeof A&&(__Buffer_180.isEncoding===__isEncoding_180||!__isEncoding_180(e)))throw new Error("Unknown encoding: "+e);return A||e}(e),this.encoding){case"utf16le":this.text=__utf16Text_180,this.end=__utf16End_180,A=4;break;case"utf8":this.fillLast=__utf8FillLast_180,A=4;break;case"base64":this.text=__base64Text_180,this.end=__base64End_180,A=3;break;default:return this.write=__simpleWrite_180,void(this.end=__simpleEnd_180)}this.lastNeed=0,this.lastTotal=0,this.lastChar=__Buffer_180.allocUnsafe(A)}function __utf8CheckByte_180(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function __utf8FillLast_180(e){var A=this.lastTotal-this.lastNeed,t=function(e,A,t){if(128!=(192&A[0]))return e.lastNeed=0,"\ufffd";if(e.lastNeed>1&&A.length>1){if(128!=(192&A[1]))return e.lastNeed=1,"\ufffd";if(e.lastNeed>2&&A.length>2&&128!=(192&A[2]))return e.lastNeed=2,"\ufffd"}}(this,e);return void 0!==t?t:this.lastNeed<=e.length?(e.copy(this.lastChar,A,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,A,0,e.length),void(this.lastNeed-=e.length))}function __utf16Text_180(e,A){if((e.length-A)%2==0){var t=e.toString("utf16le",A);if(t){var r=t.charCodeAt(t.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",A,e.length-1)}function __utf16End_180(e){var A=e&&e.length?this.write(e):"";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return A+this.lastChar.toString("utf16le",0,t)}return A}function __base64Text_180(e,A){var t=(e.length-A)%3;return 0===t?e.toString("base64",A):(this.lastNeed=3-t,this.lastTotal=3,1===t?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",A,e.length-t))}function __base64End_180(e){var A=e&&e.length?this.write(e):"";return this.lastNeed?A+this.lastChar.toString("base64",0,3-this.lastNeed):A}function __simpleWrite_180(e){return e.toString(this.encoding)}function __simpleEnd_180(e){return e&&e.length?this.write(e):""}_$string_decoder_180.StringDecoder=__StringDecoder_180,__StringDecoder_180.prototype.write=function(e){if(0===e.length)return"";var A,t;if(this.lastNeed){if(void 0===(A=this.fillLast(e)))return"";t=this.lastNeed,this.lastNeed=0}else t=0;return t=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,A);if(!this.lastNeed)return e.toString("utf8",A);this.lastTotal=t;var r=e.length-(t-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",A,r)},__StringDecoder_180.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length};var _$cipherBase_75={},__Buffer_75=_$safeBuffer_170.Buffer,__Transform_75=_$Stream_179.Transform,__StringDecoder_75=_$string_decoder_180.StringDecoder;function CipherBase(e){__Transform_75.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}_$inherits_browser_126(CipherBase,__Transform_75),CipherBase.prototype.update=function(e,A,t){"string"==typeof e&&(e=__Buffer_75.from(e,A));var r=this._update(e);return this.hashMode?this:(t&&(r=this._toString(r,t)),r)},CipherBase.prototype.setAutoPadding=function(){},CipherBase.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},CipherBase.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},CipherBase.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},CipherBase.prototype._transform=function(e,A,t){var r;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(i){r=i}finally{t(r)}},CipherBase.prototype._flush=function(e){var A;try{this.push(this.__final())}catch(t){A=t}e(A)},CipherBase.prototype._finalOrDigest=function(e){var A=this.__final()||__Buffer_75.alloc(0);return e&&(A=this._toString(A,e,!0)),A},CipherBase.prototype._toString=function(e,A,t){if(this._decoder||(this._decoder=new __StringDecoder_75(A),this._encoding=A),this._encoding!==A)throw new Error("can't switch encodings");var r=this._decoder.write(e);return t&&(r+=this._decoder.end()),r},_$cipherBase_75=CipherBase;var _$browser_78={};function __Hash_78(e){_$cipherBase_75.call(this,"digest"),this._hash=e}_$inherits_browser_126(__Hash_78,_$cipherBase_75),__Hash_78.prototype._update=function(e){this._hash.update(e)},__Hash_78.prototype._final=function(){return this._hash.digest()},_$browser_78=function(e){return"md5"===(e=e.toLowerCase())?new _$md5Js_129:"rmd160"===e||"ripemd160"===e?new _$ripemd160_169:new __Hash_78(_$shaJs_172(e))};var _$legacy_81={},__Buffer_81=_$safeBuffer_170.Buffer,ZEROS=__Buffer_81.alloc(128),blocksize=64;function Hmac(e,A){_$cipherBase_75.call(this,"digest"),"string"==typeof A&&(A=__Buffer_81.from(A)),this._alg=e,this._key=A,A.length>blocksize?A=e(A):A.lengtht?A=("rmd160"===e?new _$ripemd160_169:_$shaJs_172(e)).update(A).digest():A.lengthA||n!=n)throw new TypeError("Bad key length")}}).call(this,{isBuffer:_$isBuffer_127});var _$defaultEncoding_141={};(function(e){var A;A=e.browser?"utf-8":parseInt(e.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary",_$defaultEncoding_141=A}).call(this,_$browser_145);var _$syncBrowser_143={},__Buffer_143=_$safeBuffer_170.Buffer,__ZEROS_143=__Buffer_143.alloc(128),sizes={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function __Hmac_143(e,A,t){var r=function(e){return"rmd160"===e||"ripemd160"===e?function(e){return(new _$ripemd160_169).update(e).digest()}:"md5"===e?_$md5_79:function(A){return _$shaJs_172(e).update(A).digest()}}(e),i="sha512"===e||"sha384"===e?128:64;A.length>i?A=r(A):A.length>>0},writeUInt32BE:function(e,A,t){e[0+t]=A>>>24,e[1+t]=A>>>16&255,e[2+t]=A>>>8&255,e[3+t]=255&A},ip:function(e,A,t,r){for(var i=0,n=0,a=6;a>=0;a-=2){for(var o=0;o<=24;o+=8)i<<=1,i|=A>>>o+a&1;for(o=0;o<=24;o+=8)i<<=1,i|=e>>>o+a&1}for(a=6;a>=0;a-=2){for(o=1;o<=25;o+=8)n<<=1,n|=A>>>o+a&1;for(o=1;o<=25;o+=8)n<<=1,n|=e>>>o+a&1}t[r+0]=i>>>0,t[r+1]=n>>>0},rip:function(e,A,t,r){for(var i=0,n=0,a=0;a<4;a++)for(var o=24;o>=0;o-=8)i<<=1,i|=A>>>o+a&1,i<<=1,i|=e>>>o+a&1;for(a=4;a<8;a++)for(o=24;o>=0;o-=8)n<<=1,n|=A>>>o+a&1,n<<=1,n|=e>>>o+a&1;t[r+0]=i>>>0,t[r+1]=n>>>0},pc1:function(e,A,t,r){for(var i=0,n=0,a=7;a>=5;a--){for(var o=0;o<=24;o+=8)i<<=1,i|=A>>o+a&1;for(o=0;o<=24;o+=8)i<<=1,i|=e>>o+a&1}for(o=0;o<=24;o+=8)i<<=1,i|=A>>o+a&1;for(a=1;a<=3;a++){for(o=0;o<=24;o+=8)n<<=1,n|=A>>o+a&1;for(o=0;o<=24;o+=8)n<<=1,n|=e>>o+a&1}for(o=0;o<=24;o+=8)n<<=1,n|=e>>o+a&1;t[r+0]=i>>>0,t[r+1]=n>>>0},r28shl:function(e,A){return e<>>28-A}},pc2table=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];_$utils_88.pc2=function(e,A,t,r){for(var i=0,n=0,a=pc2table.length>>>1,o=0;o>>pc2table[o]&1;for(o=a;o>>pc2table[o]&1;t[r+0]=i>>>0,t[r+1]=n>>>0},_$utils_88.expand=function(e,A,t){var r=0,i=0;r=(1&e)<<5|e>>>27;for(var n=23;n>=15;n-=4)r<<=6,r|=e>>>n&63;for(n=11;n>=3;n-=4)i|=e>>>n&63,i<<=6;i|=(31&e)<<1|e>>>31,A[t+0]=r>>>0,A[t+1]=i>>>0};var sTable=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];_$utils_88.substitute=function(e,A){for(var t=0,r=0;r<4;r++)t<<=4,t|=sTable[64*r+(e>>>18-6*r&63)];for(r=0;r<4;r++)t<<=4,t|=sTable[256+64*r+(A>>>18-6*r&63)];return t>>>0};var permuteTable=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];_$utils_88.permute=function(e){for(var A=0,t=0;t>>permuteTable[t]&1;return A>>>0},_$utils_88.padSplit=function(e,A,t){for(var r=e.toString(2);r.length0;r--)A+=this._buffer(e,A),t+=this._flushBuffer(i,t);return A+=this._buffer(e,A),i},Cipher.prototype.final=function(e){var A,t;return e&&(A=this.update(e)),t="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),A?A.concat(t):t},Cipher.prototype._pad=function(e,A){if(0===A)return!1;for(;A>n%8,e._prev=shiftIn(e._prev,t?r:i);return a}function shiftIn(e,A){var t=e.length,r=-1,i=__Buffer_55.allocUnsafe(e.length);for(e=__Buffer_55.concat([e,__Buffer_55.from([A])]);++r>7;return i}_$cfb1_55.encrypt=function(e,A,t){for(var r=A.length,i=__Buffer_55.allocUnsafe(r),n=-1;++n>>24]^c[_>>>16&255]^h[I>>>8&255]^u[255&d]^A[l++],a=f[_>>>24]^c[I>>>16&255]^h[d>>>8&255]^u[255&g]^A[l++],o=f[I>>>24]^c[d>>>16&255]^h[g>>>8&255]^u[255&_]^A[l++],s=f[d>>>24]^c[g>>>16&255]^h[_>>>8&255]^u[255&I]^A[l++],g=n,_=a,I=o,d=s;return n=(r[g>>>24]<<24|r[_>>>16&255]<<16|r[I>>>8&255]<<8|r[255&d])^A[l++],a=(r[_>>>24]<<24|r[I>>>16&255]<<16|r[d>>>8&255]<<8|r[255&g])^A[l++],o=(r[I>>>24]<<24|r[d>>>16&255]<<16|r[g>>>8&255]<<8|r[255&_])^A[l++],s=(r[d>>>24]<<24|r[g>>>16&255]<<16|r[_>>>8&255]<<8|r[255&I])^A[l++],[n>>>=0,a>>>=0,o>>>=0,s>>>=0]}var RCON=[0,1,2,4,8,16,32,64,128,27,54],G=function(){for(var e=new Array(256),A=0;A<256;A++)e[A]=A<128?A<<1:A<<1^283;for(var t=[],r=[],i=[[],[],[],[]],n=[[],[],[],[]],a=0,o=0,s=0;s<256;++s){var f=o^o<<1^o<<2^o<<3^o<<4;f=f>>>8^255&f^99,t[a]=f,r[f]=a;var c=e[a],h=e[c],u=e[h],g=257*e[f]^16843008*f;i[0][a]=g<<24|g>>>8,i[1][a]=g<<16|g>>>16,i[2][a]=g<<8|g>>>24,i[3][a]=g,g=16843009*u^65537*h^257*c^16843008*a,n[0][f]=g<<24|g>>>8,n[1][f]=g<<16|g>>>16,n[2][f]=g<<8|g>>>24,n[3][f]=g,0===a?a=o=1:(a=c^e[e[e[u^c]]],o^=e[e[o]])}return{SBOX:t,INV_SBOX:r,SUB_MIX:i,INV_SUB_MIX:n}}();function AES(e){this._key=asUInt32Array(e),this._reset()}AES.blockSize=16,AES.keySize=32,AES.prototype.blockSize=AES.blockSize,AES.prototype.keySize=AES.keySize,AES.prototype._reset=function(){for(var e=this._key,A=e.length,t=A+6,r=4*(t+1),i=[],n=0;n>>24,a=G.SBOX[a>>>24]<<24|G.SBOX[a>>>16&255]<<16|G.SBOX[a>>>8&255]<<8|G.SBOX[255&a],a^=RCON[n/A|0]<<24):A>6&&n%A==4&&(a=G.SBOX[a>>>24]<<24|G.SBOX[a>>>16&255]<<16|G.SBOX[a>>>8&255]<<8|G.SBOX[255&a]),i[n]=i[n-A]^a}for(var o=[],s=0;s>>24]]^G.INV_SUB_MIX[1][G.SBOX[c>>>16&255]]^G.INV_SUB_MIX[2][G.SBOX[c>>>8&255]]^G.INV_SUB_MIX[3][G.SBOX[255&c]]}this._nRounds=t,this._keySchedule=i,this._invKeySchedule=o},AES.prototype.encryptBlockRaw=function(e){return cryptBlock(e=asUInt32Array(e),this._keySchedule,G.SUB_MIX,G.SBOX,this._nRounds)},AES.prototype.encryptBlock=function(e){var A=this.encryptBlockRaw(e),t=__Buffer_46.allocUnsafe(16);return t.writeUInt32BE(A[0],0),t.writeUInt32BE(A[1],4),t.writeUInt32BE(A[2],8),t.writeUInt32BE(A[3],12),t},AES.prototype.decryptBlock=function(e){var A=(e=asUInt32Array(e))[1];e[1]=e[3],e[3]=A;var t=cryptBlock(e,this._invKeySchedule,G.INV_SUB_MIX,G.INV_SBOX,this._nRounds),r=__Buffer_46.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[3],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[1],12),r},AES.prototype.scrub=function(){scrubVec(this._keySchedule),scrubVec(this._invKeySchedule),scrubVec(this._key)},_$aes_46.AES=AES;var _$ghash_51={},__Buffer_51=_$safeBuffer_170.Buffer,ZEROES=__Buffer_51.alloc(16,0);function fromArray(e){var A=__Buffer_51.allocUnsafe(16);return A.writeUInt32BE(e[0]>>>0,0),A.writeUInt32BE(e[1]>>>0,4),A.writeUInt32BE(e[2]>>>0,8),A.writeUInt32BE(e[3]>>>0,12),A}function GHASH(e){this.h=e,this.state=__Buffer_51.alloc(16,0),this.cache=__Buffer_51.allocUnsafe(0)}GHASH.prototype.ghash=function(e){for(var A=-1;++A0;A--)r[A]=r[A]>>>1|(1&r[A-1])<<31;r[0]=r[0]>>>1,t&&(r[0]=r[0]^225<<24)}this.state=fromArray(i)},GHASH.prototype.update=function(e){var A;for(this.cache=__Buffer_51.concat([this.cache,e]);this.cache.length>=16;)A=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(A)},GHASH.prototype.final=function(e,A){return this.cache.length&&this.ghash(__Buffer_51.concat([this.cache,ZEROES],16)),this.ghash(fromArray([0,e,0,A])),this.state},_$ghash_51=GHASH;var _$authCipher_47={},__Buffer_47=_$safeBuffer_170.Buffer;function StreamCipher(e,A,t,r){_$cipherBase_75.call(this);var i=__Buffer_47.alloc(4,0);this._cipher=new _$aes_46.AES(A);var n=this._cipher.encryptBlock(i);this._ghash=new _$ghash_51(n),t=function(e,A,t){if(12===A.length)return e._finID=__Buffer_47.concat([A,__Buffer_47.from([0,0,0,1])]),__Buffer_47.concat([A,__Buffer_47.from([0,0,0,2])]);var r=new _$ghash_51(t),i=A.length,n=i%16;r.update(A),n&&(n=16-n,r.update(__Buffer_47.alloc(n,0))),r.update(__Buffer_47.alloc(8,0));var a=8*i,o=__Buffer_47.alloc(8);o.writeUIntBE(a,0,8),r.update(o),e._finID=r.state;var s=__Buffer_47.from(e._finID);return _$incr32_52(s),s}(this,t,n),this._prev=__Buffer_47.from(t),this._cache=__Buffer_47.allocUnsafe(0),this._secCache=__Buffer_47.allocUnsafe(0),this._decrypt=r,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}_$inherits_browser_126(StreamCipher,_$cipherBase_75),StreamCipher.prototype._update=function(e){if(!this._called&&this._alen){var A=16-this._alen%16;A<16&&(A=__Buffer_47.alloc(A,0),this._ghash.update(A))}this._called=!0;var t=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(t),this._len+=e.length,t},StreamCipher.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var e=_$bufferXor_73(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,A){var t=0;e.length!==A.length&&t++;for(var r=Math.min(e.length,A.length),i=0;i0||r>0;){var s=new _$md5Js_129;s.update(o),s.update(e),A&&s.update(A),o=s.digest();var f=0;if(i>0){var c=n.length-i;f=Math.min(i,o.length),o.copy(n,c,0,f),i-=f}if(f0){var h=a.length-r,u=Math.min(r,o.length-f);o.copy(a,h,f,f+u),r-=u}}return o.fill(0),{key:n,iv:a}},_$encrypter_50={},__Buffer_50=_$safeBuffer_170.Buffer;function __Cipher_50(e,A,t){_$cipherBase_75.call(this),this._cache=new Splitter,this._cipher=new _$aes_46.AES(A),this._prev=__Buffer_50.from(t),this._mode=e,this._autopadding=!0}_$inherits_browser_126(__Cipher_50,_$cipherBase_75),__Cipher_50.prototype._update=function(e){var A,t;this._cache.add(e);for(var r=[];A=this._cache.get();)t=this._mode.encrypt(this,A),r.push(t);return __Buffer_50.concat(r)};var PADDING=__Buffer_50.alloc(16,16);function Splitter(){this.cache=__Buffer_50.allocUnsafe(0)}function createCipheriv(e,A,t){var r=_$modes_59[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");if("string"==typeof A&&(A=__Buffer_50.from(A)),A.length!==r.key/8)throw new TypeError("invalid key length "+A.length);if("string"==typeof t&&(t=__Buffer_50.from(t)),"GCM"!==r.mode&&t.length!==r.iv)throw new TypeError("invalid iv length "+t.length);return"stream"===r.type?new _$streamCipher_62(r.module,A,t):"auth"===r.type?new _$authCipher_47(r.module,A,t):new __Cipher_50(r.module,A,t)}__Cipher_50.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(PADDING))throw this._cipher.scrub(),new Error("data not multiple of block length")},__Cipher_50.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},Splitter.prototype.add=function(e){this.cache=__Buffer_50.concat([this.cache,e])},Splitter.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},Splitter.prototype.flush=function(){for(var e=16-this.cache.length,A=__Buffer_50.allocUnsafe(e),t=-1;++t16)throw new Error("unable to decrypt data");for(var t=-1;++t16)return A=this.cache.slice(0,16),this.cache=this.cache.slice(16),A}else if(this.cache.length>=16)return A=this.cache.slice(0,16),this.cache=this.cache.slice(16),A;return null},__Splitter_49.prototype.flush=function(){if(this.cache.length)return this.cache};var _$browser_48={};_$encrypter_50.createCipher,_$browser_48.createCipheriv=_$encrypter_50.createCipheriv,_$decrypter_49.createDecipher,_$browser_48.createDecipheriv=_$decrypter_49.createDecipheriv;var _$modes_65={"des-ecb":{key:8,iv:0}};_$modes_65["des-cbc"]=_$modes_65.des={key:8,iv:8},_$modes_65["des-ede3-cbc"]=_$modes_65.des3={key:24,iv:8},_$modes_65["des-ede3"]={key:24,iv:0},_$modes_65["des-ede-cbc"]={key:16,iv:8},_$modes_65["des-ede"]={key:16,iv:0};var _$browser_63={};function __createCipheriv_63(e,A,t){if(e=e.toLowerCase(),_$modes_59[e])return _$browser_48.createCipheriv(e,A,t);if(_$modes_65[e])return new _$browserifyDes_64({key:A,iv:t,mode:e});throw new TypeError("invalid suite type")}function __createDecipheriv_63(e,A,t){if(e=e.toLowerCase(),_$modes_59[e])return _$browser_48.createDecipheriv(e,A,t);if(_$modes_65[e])return new _$browserifyDes_64({key:A,iv:t,mode:e,decrypt:!0});throw new TypeError("invalid suite type")}var _$bn_43={exports:{}};!function(e,A){"use strict";function t(e,A){e.super_=A;var t=function(){};t.prototype=A.prototype,e.prototype=new t,e.prototype.constructor=e}function r(e,A,t){if(r.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==A&&"be"!==A||(t=A,A=10),this._init(e||0,A||10,t||"be"))}var i;"object"==typeof e?e.exports=r:A.BN=r,r.BN=r,r.wordSize=26;try{i=_$empty_45({}).Buffer}catch(E){}function n(e,A,t){for(var r=0,i=Math.min(e.length,t),n=A;n=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return r}function a(e,A,t,r){for(var i=0,n=Math.min(e.length,t),a=A;a=49?o-49+10:o>=17?o-17+10:o}return i}r.isBN=function(e){return e instanceof r||null!==e&&"object"==typeof e&&e.constructor.wordSize===r.wordSize&&Array.isArray(e.words)},r.max=function(e,A){return e.cmp(A)>0?e:A},r.min=function(e,A){return e.cmp(A)<0?e:A},r.prototype._init=function(e,A,t){if("number"==typeof e)return this._initNumber(e,A,t);if("object"==typeof e)return this._initArray(e,A,t);"hex"===A&&(A=16);var r=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&r++,16===A?this._parseHex(e,r):this._parseBase(e,A,r),"-"===e[0]&&(this.negative=1),this.strip(),"le"===t&&this._initArray(this.toArray(),A,t)},r.prototype._initNumber=function(e,A,t){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===t&&this._initArray(this.toArray(),A,t)},r.prototype._initArray=function(e,A,t){if(e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var r=0;r=0;r-=3)n=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[i]|=n<>>26-a&67108863,(a+=24)>=26&&(a-=26,i++);else if("le"===t)for(r=0,i=0;r>>26-a&67108863,(a+=24)>=26&&(a-=26,i++);return this.strip()},r.prototype._parseHex=function(e,A){this.length=Math.ceil((e.length-A)/6),this.words=new Array(this.length);for(var t=0;t=A;t-=6)i=n(e,t,t+6),this.words[r]|=i<>>26-a&4194303,(a+=24)>=26&&(a-=26,r++);t+6!==A&&(i=n(e,A,t+6),this.words[r]|=i<>>26-a&4194303),this.strip()},r.prototype._parseBase=function(e,A,t){this.words=[0],this.length=1;for(var r=0,i=1;i<=67108863;i*=A)r++;r--,i=i/A|0;for(var n=e.length-t,o=n%r,s=Math.min(n,n-o)+t,f=0,c=t;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},r.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},r.prototype.inspect=function(){return(this.red?""};var o=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],s=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function c(e,A,t){t.negative=A.negative^e.negative;var r=e.length+A.length|0;t.length=r,r=r-1|0;var i=0|e.words[0],n=0|A.words[0],a=i*n,o=67108863&a,s=a/67108864|0;t.words[0]=o;for(var f=1;f>>26,h=67108863&s,u=Math.min(f,A.length-1),g=Math.max(0,f-e.length+1);g<=u;g++){var _=f-g|0;c+=(a=(i=0|e.words[_])*(n=0|A.words[g])+h)/67108864|0,h=67108863&a}t.words[f]=0|h,s=0|c}return 0!==s?t.words[f]=0|s:t.length--,t.strip()}r.prototype.toString=function(e,A){var t;if(A=0|A||1,16===(e=e||10)||"hex"===e){t="";for(var r=0,i=0,n=0;n>>24-r&16777215)||n!==this.length-1?o[6-c.length]+c+t:c+t,(r+=2)>=26&&(r-=26,n--)}for(0!==i&&(t=i.toString(16)+t);t.length%A!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}if(e===(0|e)&&e>=2&&e<=36){var h=s[e],u=f[e];t="";var g=this.clone();for(g.negative=0;!g.isZero();){var _=g.modn(u).toString(e);t=(g=g.idivn(u)).isZero()?_+t:o[h-_.length]+_+t}for(this.isZero()&&(t="0"+t);t.length%A!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}},r.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length,0!==this.negative?-e:e},r.prototype.toJSON=function(){return this.toString(16)},r.prototype.toBuffer=function(e,A){return this.toArrayLike(i,e,A)},r.prototype.toArray=function(e,A){return this.toArrayLike(Array,e,A)},r.prototype.toArrayLike=function(e,A,t){var r=this.byteLength(),i=t||Math.max(1,r);this.strip();var n,a,o="le"===A,s=new e(i),f=this.clone();if(o){for(a=0;!f.isZero();a++)n=f.andln(255),f.iushrn(8),s[a]=n;for(;a=4096&&(t+=13,A>>>=13),A>=64&&(t+=7,A>>>=7),A>=8&&(t+=4,A>>>=4),A>=2&&(t+=2,A>>>=2),t+A},r.prototype._zeroBits=function(e){if(0===e)return 26;var A=e,t=0;return 0==(8191&A)&&(t+=13,A>>>=13),0==(127&A)&&(t+=7,A>>>=7),0==(15&A)&&(t+=4,A>>>=4),0==(3&A)&&(t+=2,A>>>=2),0==(1&A)&&t++,t},r.prototype.bitLength=function(){var e=this.words[this.length-1],A=this._countBits(e);return 26*(this.length-1)+A},r.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,A=0;Ae.length?this.clone().ior(e):e.clone().ior(this)},r.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},r.prototype.iuand=function(e){var A;A=this.length>e.length?e:this;for(var t=0;te.length?this.clone().iand(e):e.clone().iand(this)},r.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},r.prototype.iuxor=function(e){var A,t;this.length>e.length?(A=this,t=e):(A=e,t=this);for(var r=0;re.length?this.clone().ixor(e):e.clone().ixor(this)},r.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},r.prototype.inotn=function(e){var A=0|Math.ceil(e/26),t=e%26;this._expand(A),t>0&&A--;for(var r=0;r0&&(this.words[r]=~this.words[r]&67108863>>26-t),this.strip()},r.prototype.notn=function(e){return this.clone().inotn(e)},r.prototype.setn=function(e,A){var t=e/26|0,r=e%26;return this._expand(t+1),this.words[t]=A?this.words[t]|1<e.length?(t=this,r=e):(t=e,r=this);for(var i=0,n=0;n>>26;for(;0!==i&&n>>26;if(this.length=t.length,0!==i)this.words[this.length]=i,this.length++;else if(t!==this)for(;ne.length?this.clone().iadd(e):e.clone().iadd(this)},r.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var A=this.iadd(e);return e.negative=1,A._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var t,r,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(t=this,r=e):(t=e,r=this);for(var n=0,a=0;a>26,this.words[a]=67108863&A;for(;0!==n&&a>26,this.words[a]=67108863&A;if(0===n&&a>>13,g=0|a[1],_=8191&g,I=g>>>13,d=0|a[2],l=8191&d,p=d>>>13,B=0|a[3],y=8191&B,C=B>>>13,E=0|a[4],b=8191&E,Q=E>>>13,w=0|a[5],v=8191&w,m=w>>>13,S=0|a[6],k=8191&S,D=S>>>13,M=0|a[7],F=8191&M,H=M>>>13,P=0|a[8],R=8191&P,x=P>>>13,Y=0|a[9],G=8191&Y,U=Y>>>13,N=0|o[0],L=8191&N,T=N>>>13,K=0|o[1],J=8191&K,X=K>>>13,j=0|o[2],O=8191&j,q=j>>>13,z=0|o[3],V=8191&z,$=z>>>13,W=0|o[4],Z=8191&W,ee=W>>>13,Ae=0|o[5],te=8191&Ae,re=Ae>>>13,ie=0|o[6],ne=8191&ie,ae=ie>>>13,oe=0|o[7],se=8191&oe,fe=oe>>>13,ce=0|o[8],he=8191&ce,ue=ce>>>13,ge=0|o[9],_e=8191&ge,Ie=ge>>>13;t.negative=e.negative^A.negative,t.length=19;var de=(f+(r=Math.imul(h,L))|0)+((8191&(i=(i=Math.imul(h,T))+Math.imul(u,L)|0))<<13)|0;f=((n=Math.imul(u,T))+(i>>>13)|0)+(de>>>26)|0,de&=67108863,r=Math.imul(_,L),i=(i=Math.imul(_,T))+Math.imul(I,L)|0,n=Math.imul(I,T);var le=(f+(r=r+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,X)|0)+Math.imul(u,J)|0))<<13)|0;f=((n=n+Math.imul(u,X)|0)+(i>>>13)|0)+(le>>>26)|0,le&=67108863,r=Math.imul(l,L),i=(i=Math.imul(l,T))+Math.imul(p,L)|0,n=Math.imul(p,T),r=r+Math.imul(_,J)|0,i=(i=i+Math.imul(_,X)|0)+Math.imul(I,J)|0,n=n+Math.imul(I,X)|0;var pe=(f+(r=r+Math.imul(h,O)|0)|0)+((8191&(i=(i=i+Math.imul(h,q)|0)+Math.imul(u,O)|0))<<13)|0;f=((n=n+Math.imul(u,q)|0)+(i>>>13)|0)+(pe>>>26)|0,pe&=67108863,r=Math.imul(y,L),i=(i=Math.imul(y,T))+Math.imul(C,L)|0,n=Math.imul(C,T),r=r+Math.imul(l,J)|0,i=(i=i+Math.imul(l,X)|0)+Math.imul(p,J)|0,n=n+Math.imul(p,X)|0,r=r+Math.imul(_,O)|0,i=(i=i+Math.imul(_,q)|0)+Math.imul(I,O)|0,n=n+Math.imul(I,q)|0;var Be=(f+(r=r+Math.imul(h,V)|0)|0)+((8191&(i=(i=i+Math.imul(h,$)|0)+Math.imul(u,V)|0))<<13)|0;f=((n=n+Math.imul(u,$)|0)+(i>>>13)|0)+(Be>>>26)|0,Be&=67108863,r=Math.imul(b,L),i=(i=Math.imul(b,T))+Math.imul(Q,L)|0,n=Math.imul(Q,T),r=r+Math.imul(y,J)|0,i=(i=i+Math.imul(y,X)|0)+Math.imul(C,J)|0,n=n+Math.imul(C,X)|0,r=r+Math.imul(l,O)|0,i=(i=i+Math.imul(l,q)|0)+Math.imul(p,O)|0,n=n+Math.imul(p,q)|0,r=r+Math.imul(_,V)|0,i=(i=i+Math.imul(_,$)|0)+Math.imul(I,V)|0,n=n+Math.imul(I,$)|0;var ye=(f+(r=r+Math.imul(h,Z)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(u,Z)|0))<<13)|0;f=((n=n+Math.imul(u,ee)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,r=Math.imul(v,L),i=(i=Math.imul(v,T))+Math.imul(m,L)|0,n=Math.imul(m,T),r=r+Math.imul(b,J)|0,i=(i=i+Math.imul(b,X)|0)+Math.imul(Q,J)|0,n=n+Math.imul(Q,X)|0,r=r+Math.imul(y,O)|0,i=(i=i+Math.imul(y,q)|0)+Math.imul(C,O)|0,n=n+Math.imul(C,q)|0,r=r+Math.imul(l,V)|0,i=(i=i+Math.imul(l,$)|0)+Math.imul(p,V)|0,n=n+Math.imul(p,$)|0,r=r+Math.imul(_,Z)|0,i=(i=i+Math.imul(_,ee)|0)+Math.imul(I,Z)|0,n=n+Math.imul(I,ee)|0;var Ce=(f+(r=r+Math.imul(h,te)|0)|0)+((8191&(i=(i=i+Math.imul(h,re)|0)+Math.imul(u,te)|0))<<13)|0;f=((n=n+Math.imul(u,re)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,r=Math.imul(k,L),i=(i=Math.imul(k,T))+Math.imul(D,L)|0,n=Math.imul(D,T),r=r+Math.imul(v,J)|0,i=(i=i+Math.imul(v,X)|0)+Math.imul(m,J)|0,n=n+Math.imul(m,X)|0,r=r+Math.imul(b,O)|0,i=(i=i+Math.imul(b,q)|0)+Math.imul(Q,O)|0,n=n+Math.imul(Q,q)|0,r=r+Math.imul(y,V)|0,i=(i=i+Math.imul(y,$)|0)+Math.imul(C,V)|0,n=n+Math.imul(C,$)|0,r=r+Math.imul(l,Z)|0,i=(i=i+Math.imul(l,ee)|0)+Math.imul(p,Z)|0,n=n+Math.imul(p,ee)|0,r=r+Math.imul(_,te)|0,i=(i=i+Math.imul(_,re)|0)+Math.imul(I,te)|0,n=n+Math.imul(I,re)|0;var Ee=(f+(r=r+Math.imul(h,ne)|0)|0)+((8191&(i=(i=i+Math.imul(h,ae)|0)+Math.imul(u,ne)|0))<<13)|0;f=((n=n+Math.imul(u,ae)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,r=Math.imul(F,L),i=(i=Math.imul(F,T))+Math.imul(H,L)|0,n=Math.imul(H,T),r=r+Math.imul(k,J)|0,i=(i=i+Math.imul(k,X)|0)+Math.imul(D,J)|0,n=n+Math.imul(D,X)|0,r=r+Math.imul(v,O)|0,i=(i=i+Math.imul(v,q)|0)+Math.imul(m,O)|0,n=n+Math.imul(m,q)|0,r=r+Math.imul(b,V)|0,i=(i=i+Math.imul(b,$)|0)+Math.imul(Q,V)|0,n=n+Math.imul(Q,$)|0,r=r+Math.imul(y,Z)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(C,Z)|0,n=n+Math.imul(C,ee)|0,r=r+Math.imul(l,te)|0,i=(i=i+Math.imul(l,re)|0)+Math.imul(p,te)|0,n=n+Math.imul(p,re)|0,r=r+Math.imul(_,ne)|0,i=(i=i+Math.imul(_,ae)|0)+Math.imul(I,ne)|0,n=n+Math.imul(I,ae)|0;var be=(f+(r=r+Math.imul(h,se)|0)|0)+((8191&(i=(i=i+Math.imul(h,fe)|0)+Math.imul(u,se)|0))<<13)|0;f=((n=n+Math.imul(u,fe)|0)+(i>>>13)|0)+(be>>>26)|0,be&=67108863,r=Math.imul(R,L),i=(i=Math.imul(R,T))+Math.imul(x,L)|0,n=Math.imul(x,T),r=r+Math.imul(F,J)|0,i=(i=i+Math.imul(F,X)|0)+Math.imul(H,J)|0,n=n+Math.imul(H,X)|0,r=r+Math.imul(k,O)|0,i=(i=i+Math.imul(k,q)|0)+Math.imul(D,O)|0,n=n+Math.imul(D,q)|0,r=r+Math.imul(v,V)|0,i=(i=i+Math.imul(v,$)|0)+Math.imul(m,V)|0,n=n+Math.imul(m,$)|0,r=r+Math.imul(b,Z)|0,i=(i=i+Math.imul(b,ee)|0)+Math.imul(Q,Z)|0,n=n+Math.imul(Q,ee)|0,r=r+Math.imul(y,te)|0,i=(i=i+Math.imul(y,re)|0)+Math.imul(C,te)|0,n=n+Math.imul(C,re)|0,r=r+Math.imul(l,ne)|0,i=(i=i+Math.imul(l,ae)|0)+Math.imul(p,ne)|0,n=n+Math.imul(p,ae)|0,r=r+Math.imul(_,se)|0,i=(i=i+Math.imul(_,fe)|0)+Math.imul(I,se)|0,n=n+Math.imul(I,fe)|0;var Qe=(f+(r=r+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,ue)|0)+Math.imul(u,he)|0))<<13)|0;f=((n=n+Math.imul(u,ue)|0)+(i>>>13)|0)+(Qe>>>26)|0,Qe&=67108863,r=Math.imul(G,L),i=(i=Math.imul(G,T))+Math.imul(U,L)|0,n=Math.imul(U,T),r=r+Math.imul(R,J)|0,i=(i=i+Math.imul(R,X)|0)+Math.imul(x,J)|0,n=n+Math.imul(x,X)|0,r=r+Math.imul(F,O)|0,i=(i=i+Math.imul(F,q)|0)+Math.imul(H,O)|0,n=n+Math.imul(H,q)|0,r=r+Math.imul(k,V)|0,i=(i=i+Math.imul(k,$)|0)+Math.imul(D,V)|0,n=n+Math.imul(D,$)|0,r=r+Math.imul(v,Z)|0,i=(i=i+Math.imul(v,ee)|0)+Math.imul(m,Z)|0,n=n+Math.imul(m,ee)|0,r=r+Math.imul(b,te)|0,i=(i=i+Math.imul(b,re)|0)+Math.imul(Q,te)|0,n=n+Math.imul(Q,re)|0,r=r+Math.imul(y,ne)|0,i=(i=i+Math.imul(y,ae)|0)+Math.imul(C,ne)|0,n=n+Math.imul(C,ae)|0,r=r+Math.imul(l,se)|0,i=(i=i+Math.imul(l,fe)|0)+Math.imul(p,se)|0,n=n+Math.imul(p,fe)|0,r=r+Math.imul(_,he)|0,i=(i=i+Math.imul(_,ue)|0)+Math.imul(I,he)|0,n=n+Math.imul(I,ue)|0;var we=(f+(r=r+Math.imul(h,_e)|0)|0)+((8191&(i=(i=i+Math.imul(h,Ie)|0)+Math.imul(u,_e)|0))<<13)|0;f=((n=n+Math.imul(u,Ie)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,r=Math.imul(G,J),i=(i=Math.imul(G,X))+Math.imul(U,J)|0,n=Math.imul(U,X),r=r+Math.imul(R,O)|0,i=(i=i+Math.imul(R,q)|0)+Math.imul(x,O)|0,n=n+Math.imul(x,q)|0,r=r+Math.imul(F,V)|0,i=(i=i+Math.imul(F,$)|0)+Math.imul(H,V)|0,n=n+Math.imul(H,$)|0,r=r+Math.imul(k,Z)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(D,Z)|0,n=n+Math.imul(D,ee)|0,r=r+Math.imul(v,te)|0,i=(i=i+Math.imul(v,re)|0)+Math.imul(m,te)|0,n=n+Math.imul(m,re)|0,r=r+Math.imul(b,ne)|0,i=(i=i+Math.imul(b,ae)|0)+Math.imul(Q,ne)|0,n=n+Math.imul(Q,ae)|0,r=r+Math.imul(y,se)|0,i=(i=i+Math.imul(y,fe)|0)+Math.imul(C,se)|0,n=n+Math.imul(C,fe)|0,r=r+Math.imul(l,he)|0,i=(i=i+Math.imul(l,ue)|0)+Math.imul(p,he)|0,n=n+Math.imul(p,ue)|0;var ve=(f+(r=r+Math.imul(_,_e)|0)|0)+((8191&(i=(i=i+Math.imul(_,Ie)|0)+Math.imul(I,_e)|0))<<13)|0;f=((n=n+Math.imul(I,Ie)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,r=Math.imul(G,O),i=(i=Math.imul(G,q))+Math.imul(U,O)|0,n=Math.imul(U,q),r=r+Math.imul(R,V)|0,i=(i=i+Math.imul(R,$)|0)+Math.imul(x,V)|0,n=n+Math.imul(x,$)|0,r=r+Math.imul(F,Z)|0,i=(i=i+Math.imul(F,ee)|0)+Math.imul(H,Z)|0,n=n+Math.imul(H,ee)|0,r=r+Math.imul(k,te)|0,i=(i=i+Math.imul(k,re)|0)+Math.imul(D,te)|0,n=n+Math.imul(D,re)|0,r=r+Math.imul(v,ne)|0,i=(i=i+Math.imul(v,ae)|0)+Math.imul(m,ne)|0,n=n+Math.imul(m,ae)|0,r=r+Math.imul(b,se)|0,i=(i=i+Math.imul(b,fe)|0)+Math.imul(Q,se)|0,n=n+Math.imul(Q,fe)|0,r=r+Math.imul(y,he)|0,i=(i=i+Math.imul(y,ue)|0)+Math.imul(C,he)|0,n=n+Math.imul(C,ue)|0;var me=(f+(r=r+Math.imul(l,_e)|0)|0)+((8191&(i=(i=i+Math.imul(l,Ie)|0)+Math.imul(p,_e)|0))<<13)|0;f=((n=n+Math.imul(p,Ie)|0)+(i>>>13)|0)+(me>>>26)|0,me&=67108863,r=Math.imul(G,V),i=(i=Math.imul(G,$))+Math.imul(U,V)|0,n=Math.imul(U,$),r=r+Math.imul(R,Z)|0,i=(i=i+Math.imul(R,ee)|0)+Math.imul(x,Z)|0,n=n+Math.imul(x,ee)|0,r=r+Math.imul(F,te)|0,i=(i=i+Math.imul(F,re)|0)+Math.imul(H,te)|0,n=n+Math.imul(H,re)|0,r=r+Math.imul(k,ne)|0,i=(i=i+Math.imul(k,ae)|0)+Math.imul(D,ne)|0,n=n+Math.imul(D,ae)|0,r=r+Math.imul(v,se)|0,i=(i=i+Math.imul(v,fe)|0)+Math.imul(m,se)|0,n=n+Math.imul(m,fe)|0,r=r+Math.imul(b,he)|0,i=(i=i+Math.imul(b,ue)|0)+Math.imul(Q,he)|0,n=n+Math.imul(Q,ue)|0;var Se=(f+(r=r+Math.imul(y,_e)|0)|0)+((8191&(i=(i=i+Math.imul(y,Ie)|0)+Math.imul(C,_e)|0))<<13)|0;f=((n=n+Math.imul(C,Ie)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,r=Math.imul(G,Z),i=(i=Math.imul(G,ee))+Math.imul(U,Z)|0,n=Math.imul(U,ee),r=r+Math.imul(R,te)|0,i=(i=i+Math.imul(R,re)|0)+Math.imul(x,te)|0,n=n+Math.imul(x,re)|0,r=r+Math.imul(F,ne)|0,i=(i=i+Math.imul(F,ae)|0)+Math.imul(H,ne)|0,n=n+Math.imul(H,ae)|0,r=r+Math.imul(k,se)|0,i=(i=i+Math.imul(k,fe)|0)+Math.imul(D,se)|0,n=n+Math.imul(D,fe)|0,r=r+Math.imul(v,he)|0,i=(i=i+Math.imul(v,ue)|0)+Math.imul(m,he)|0,n=n+Math.imul(m,ue)|0;var ke=(f+(r=r+Math.imul(b,_e)|0)|0)+((8191&(i=(i=i+Math.imul(b,Ie)|0)+Math.imul(Q,_e)|0))<<13)|0;f=((n=n+Math.imul(Q,Ie)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,r=Math.imul(G,te),i=(i=Math.imul(G,re))+Math.imul(U,te)|0,n=Math.imul(U,re),r=r+Math.imul(R,ne)|0,i=(i=i+Math.imul(R,ae)|0)+Math.imul(x,ne)|0,n=n+Math.imul(x,ae)|0,r=r+Math.imul(F,se)|0,i=(i=i+Math.imul(F,fe)|0)+Math.imul(H,se)|0,n=n+Math.imul(H,fe)|0,r=r+Math.imul(k,he)|0,i=(i=i+Math.imul(k,ue)|0)+Math.imul(D,he)|0,n=n+Math.imul(D,ue)|0;var De=(f+(r=r+Math.imul(v,_e)|0)|0)+((8191&(i=(i=i+Math.imul(v,Ie)|0)+Math.imul(m,_e)|0))<<13)|0;f=((n=n+Math.imul(m,Ie)|0)+(i>>>13)|0)+(De>>>26)|0,De&=67108863,r=Math.imul(G,ne),i=(i=Math.imul(G,ae))+Math.imul(U,ne)|0,n=Math.imul(U,ae),r=r+Math.imul(R,se)|0,i=(i=i+Math.imul(R,fe)|0)+Math.imul(x,se)|0,n=n+Math.imul(x,fe)|0,r=r+Math.imul(F,he)|0,i=(i=i+Math.imul(F,ue)|0)+Math.imul(H,he)|0,n=n+Math.imul(H,ue)|0;var Me=(f+(r=r+Math.imul(k,_e)|0)|0)+((8191&(i=(i=i+Math.imul(k,Ie)|0)+Math.imul(D,_e)|0))<<13)|0;f=((n=n+Math.imul(D,Ie)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,r=Math.imul(G,se),i=(i=Math.imul(G,fe))+Math.imul(U,se)|0,n=Math.imul(U,fe),r=r+Math.imul(R,he)|0,i=(i=i+Math.imul(R,ue)|0)+Math.imul(x,he)|0,n=n+Math.imul(x,ue)|0;var Fe=(f+(r=r+Math.imul(F,_e)|0)|0)+((8191&(i=(i=i+Math.imul(F,Ie)|0)+Math.imul(H,_e)|0))<<13)|0;f=((n=n+Math.imul(H,Ie)|0)+(i>>>13)|0)+(Fe>>>26)|0,Fe&=67108863,r=Math.imul(G,he),i=(i=Math.imul(G,ue))+Math.imul(U,he)|0,n=Math.imul(U,ue);var He=(f+(r=r+Math.imul(R,_e)|0)|0)+((8191&(i=(i=i+Math.imul(R,Ie)|0)+Math.imul(x,_e)|0))<<13)|0;f=((n=n+Math.imul(x,Ie)|0)+(i>>>13)|0)+(He>>>26)|0,He&=67108863;var Pe=(f+(r=Math.imul(G,_e))|0)+((8191&(i=(i=Math.imul(G,Ie))+Math.imul(U,_e)|0))<<13)|0;return f=((n=Math.imul(U,Ie))+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,s[0]=de,s[1]=le,s[2]=pe,s[3]=Be,s[4]=ye,s[5]=Ce,s[6]=Ee,s[7]=be,s[8]=Qe,s[9]=we,s[10]=ve,s[11]=me,s[12]=Se,s[13]=ke,s[14]=De,s[15]=Me,s[16]=Fe,s[17]=He,s[18]=Pe,0!==f&&(s[19]=f,t.length++),t};function u(e,A,t){return(new g).mulp(e,A,t)}function g(e,A){this.x=e,this.y=A}Math.imul||(h=c),r.prototype.mulTo=function(e,A){var t=this.length+e.length;return 10===this.length&&10===e.length?h(this,e,A):t<63?c(this,e,A):t<1024?function(e,A,t){t.negative=A.negative^e.negative,t.length=e.length+A.length;for(var r=0,i=0,n=0;n>>26)|0)>>>26,a&=67108863}t.words[n]=o,r=a,a=i}return 0!==r?t.words[n]=r:t.length--,t.strip()}(this,e,A):u(this,e,A)},g.prototype.makeRBT=function(e){for(var A=new Array(e),t=r.prototype._countBits(e)-1,i=0;i>=1;return r},g.prototype.permute=function(e,A,t,r,i,n){for(var a=0;a>>=1)i++;return 1<>>=13,t[2*n+1]=8191&i,i>>>=13;for(n=2*A;n>=26,A+=r/67108864|0,A+=i>>>26,this.words[t]=67108863&i}return 0!==A&&(this.words[t]=A,this.length++),this},r.prototype.muln=function(e){return this.clone().imuln(e)},r.prototype.sqr=function(){return this.mul(this)},r.prototype.isqr=function(){return this.imul(this.clone())},r.prototype.pow=function(e){var A=function(e){for(var A=new Array(e.bitLength()),t=0;t>>i}return A}(e);if(0===A.length)return new r(1);for(var t=this,i=0;i>>26-t<<26-t;if(0!==t){var n=0;for(A=0;A>>26-t}n&&(this.words[A]=n,this.length++)}if(0!==r){for(A=this.length-1;A>=0;A--)this.words[A+r]=this.words[A];for(A=0;A>>i<n)for(this.length-=n,s=0;s=0&&(0!==f||s>=r);s--){var c=0|this.words[s];this.words[s]=f<<26-i|c>>>i,f=c&a}return o&&0!==f&&(o.words[o.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},r.prototype.ishrn=function(e,A,t){return this.iushrn(e,A,t)},r.prototype.shln=function(e){return this.clone().ishln(e)},r.prototype.ushln=function(e){return this.clone().iushln(e)},r.prototype.shrn=function(e){return this.clone().ishrn(e)},r.prototype.ushrn=function(e){return this.clone().iushrn(e)},r.prototype.testn=function(e){var A=e%26,t=(e-A)/26,r=1<>>A<=67108864;A++)this.words[A]-=67108864,A===this.length-1?this.words[A+1]=1:this.words[A+1]++;return this.length=Math.max(this.length,A+1),this},r.prototype.isubn=function(e){if(e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var A=0;A>26)-(o/67108864|0),this.words[r+t]=67108863&i}for(;r>26,this.words[r+t]=67108863&i;if(0===a)return this.strip();for(a=0,r=0;r>26,this.words[r]=67108863&i;return this.negative=1,this.strip()},r.prototype._wordDiv=function(e,A){var t=(this.length,e.length),i=this.clone(),n=e,a=0|n.words[n.length-1];0!=(t=26-this._countBits(a))&&(n=n.ushln(t),i.iushln(t),a=0|n.words[n.length-1]);var o,s=i.length-n.length;if("mod"!==A){(o=new r(null)).length=s+1,o.words=new Array(o.length);for(var f=0;f=0;h--){var u=67108864*(0|i.words[n.length+h])+(0|i.words[n.length+h-1]);for(u=Math.min(u/a|0,67108863),i._ishlnsubmul(n,u,h);0!==i.negative;)u--,i.negative=0,i._ishlnsubmul(n,1,h),i.isZero()||(i.negative^=1);o&&(o.words[h]=u)}return o&&o.strip(),i.strip(),"div"!==A&&0!==t&&i.iushrn(t),{div:o||null,mod:i}},r.prototype.divmod=function(e,A,t){return this.isZero()?{div:new r(0),mod:new r(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,A),"mod"!==A&&(i=a.div.neg()),"div"!==A&&(n=a.mod.neg(),t&&0!==n.negative&&n.iadd(e)),{div:i,mod:n}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),A),"mod"!==A&&(i=a.div.neg()),{div:i,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),A),"div"!==A&&(n=a.mod.neg(),t&&0!==n.negative&&n.isub(e)),{div:a.div,mod:n}):e.length>this.length||this.cmp(e)<0?{div:new r(0),mod:this}:1===e.length?"div"===A?{div:this.divn(e.words[0]),mod:null}:"mod"===A?{div:null,mod:new r(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new r(this.modn(e.words[0]))}:this._wordDiv(e,A);var i,n,a},r.prototype.div=function(e){return this.divmod(e,"div",!1).div},r.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},r.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},r.prototype.divRound=function(e){var A=this.divmod(e);if(A.mod.isZero())return A.div;var t=0!==A.div.negative?A.mod.isub(e):A.mod,r=e.ushrn(1),i=e.andln(1),n=t.cmp(r);return n<0||1===i&&0===n?A.div:0!==A.div.negative?A.div.isubn(1):A.div.iaddn(1)},r.prototype.modn=function(e){for(var A=(1<<26)%e,t=0,r=this.length-1;r>=0;r--)t=(A*t+(0|this.words[r]))%e;return t},r.prototype.idivn=function(e){for(var A=0,t=this.length-1;t>=0;t--){var r=(0|this.words[t])+67108864*A;this.words[t]=r/e|0,A=r%e}return this.strip()},r.prototype.divn=function(e){return this.clone().idivn(e)},r.prototype.egcd=function(e){var A=this,t=e.clone();A=0!==A.negative?A.umod(e):A.clone();for(var i=new r(1),n=new r(0),a=new r(0),o=new r(1),s=0;A.isEven()&&t.isEven();)A.iushrn(1),t.iushrn(1),++s;for(var f=t.clone(),c=A.clone();!A.isZero();){for(var h=0,u=1;0==(A.words[0]&u)&&h<26;++h,u<<=1);if(h>0)for(A.iushrn(h);h-- >0;)(i.isOdd()||n.isOdd())&&(i.iadd(f),n.isub(c)),i.iushrn(1),n.iushrn(1);for(var g=0,_=1;0==(t.words[0]&_)&&g<26;++g,_<<=1);if(g>0)for(t.iushrn(g);g-- >0;)(a.isOdd()||o.isOdd())&&(a.iadd(f),o.isub(c)),a.iushrn(1),o.iushrn(1);A.cmp(t)>=0?(A.isub(t),i.isub(a),n.isub(o)):(t.isub(A),a.isub(i),o.isub(n))}return{a:a,b:o,gcd:t.iushln(s)}},r.prototype._invmp=function(e){var A=this,t=e.clone();A=0!==A.negative?A.umod(e):A.clone();for(var i,n=new r(1),a=new r(0),o=t.clone();A.cmpn(1)>0&&t.cmpn(1)>0;){for(var s=0,f=1;0==(A.words[0]&f)&&s<26;++s,f<<=1);if(s>0)for(A.iushrn(s);s-- >0;)n.isOdd()&&n.iadd(o),n.iushrn(1);for(var c=0,h=1;0==(t.words[0]&h)&&c<26;++c,h<<=1);if(c>0)for(t.iushrn(c);c-- >0;)a.isOdd()&&a.iadd(o),a.iushrn(1);A.cmp(t)>=0?(A.isub(t),n.isub(a)):(t.isub(A),a.isub(n))}return(i=0===A.cmpn(1)?n:a).cmpn(0)<0&&i.iadd(e),i},r.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var A=this.clone(),t=e.clone();A.negative=0,t.negative=0;for(var r=0;A.isEven()&&t.isEven();r++)A.iushrn(1),t.iushrn(1);for(;;){for(;A.isEven();)A.iushrn(1);for(;t.isEven();)t.iushrn(1);var i=A.cmp(t);if(i<0){var n=A;A=t,t=n}else if(0===i||0===t.cmpn(1))break;A.isub(t)}return t.iushln(r)},r.prototype.invm=function(e){return this.egcd(e).a.umod(e)},r.prototype.isEven=function(){return 0==(1&this.words[0])},r.prototype.isOdd=function(){return 1==(1&this.words[0])},r.prototype.andln=function(e){return this.words[0]&e},r.prototype.bincn=function(e){var A=e%26,t=(e-A)/26,r=1<>>26,a&=67108863,this.words[n]=a}return 0!==i&&(this.words[n]=i,this.length++),this},r.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},r.prototype.cmpn=function(e){var A,t=e<0;if(0!==this.negative&&!t)return-1;if(0===this.negative&&t)return 1;if(this.strip(),this.length>1)A=1;else{t&&(e=-e);var r=0|this.words[0];A=r===e?0:re.length)return 1;if(this.length=0;t--){var r=0|this.words[t],i=0|e.words[t];if(r!==i){ri&&(A=1);break}}return A},r.prototype.gtn=function(e){return 1===this.cmpn(e)},r.prototype.gt=function(e){return 1===this.cmp(e)},r.prototype.gten=function(e){return this.cmpn(e)>=0},r.prototype.gte=function(e){return this.cmp(e)>=0},r.prototype.ltn=function(e){return-1===this.cmpn(e)},r.prototype.lt=function(e){return-1===this.cmp(e)},r.prototype.lten=function(e){return this.cmpn(e)<=0},r.prototype.lte=function(e){return this.cmp(e)<=0},r.prototype.eqn=function(e){return 0===this.cmpn(e)},r.prototype.eq=function(e){return 0===this.cmp(e)},r.red=function(e){return new y(e)},r.prototype.toRed=function(e){return e.convertTo(this)._forceRed(e)},r.prototype.fromRed=function(){return this.red.convertFrom(this)},r.prototype._forceRed=function(e){return this.red=e,this},r.prototype.forceRed=function(e){return this._forceRed(e)},r.prototype.redAdd=function(e){return this.red.add(this,e)},r.prototype.redIAdd=function(e){return this.red.iadd(this,e)},r.prototype.redSub=function(e){return this.red.sub(this,e)},r.prototype.redISub=function(e){return this.red.isub(this,e)},r.prototype.redShl=function(e){return this.red.shl(this,e)},r.prototype.redMul=function(e){return this.red._verify2(this,e),this.red.mul(this,e)},r.prototype.redIMul=function(e){return this.red._verify2(this,e),this.red.imul(this,e)},r.prototype.redSqr=function(){return this.red._verify1(this),this.red.sqr(this)},r.prototype.redISqr=function(){return this.red._verify1(this),this.red.isqr(this)},r.prototype.redSqrt=function(){return this.red._verify1(this),this.red.sqrt(this)},r.prototype.redInvm=function(){return this.red._verify1(this),this.red.invm(this)},r.prototype.redNeg=function(){return this.red._verify1(this),this.red.neg(this)},r.prototype.redPow=function(e){return this.red._verify1(this),this.red.pow(this,e)};var _={k256:null,p224:null,p192:null,p25519:null};function I(e,A){this.name=e,this.p=new r(A,16),this.n=this.p.bitLength(),this.k=new r(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function d(){I.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function l(){I.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function p(){I.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function B(){I.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(e){if("string"==typeof e){var A=r._prime(e);this.m=A.p,this.prime=A}else this.m=e,this.prime=null}function C(e){y.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new r(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}I.prototype._tmp=function(){var e=new r(null);return e.words=new Array(Math.ceil(this.n/13)),e},I.prototype.ireduce=function(e){var A,t=e;do{this.split(t,this.tmp),A=(t=(t=this.imulK(t)).iadd(this.tmp)).bitLength()}while(A>this.n);var r=A0?t.isub(this.p):t.strip(),t},I.prototype.split=function(e,A){e.iushrn(this.n,0,A)},I.prototype.imulK=function(e){return e.imul(this.k)},t(d,I),d.prototype.split=function(e,A){for(var t=Math.min(e.length,9),r=0;r>>22,i=n}i>>>=22,e.words[r-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},d.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var A=0,t=0;t>>=26,e.words[t]=i,A=r}return 0!==A&&(e.words[e.length++]=A),e},r._prime=function(e){if(_[e])return _[e];var A;if("k256"===e)A=new d;else if("p224"===e)A=new l;else if("p192"===e)A=new p;else{if("p25519"!==e)throw new Error("Unknown prime "+e);A=new B}return _[e]=A,A},y.prototype._verify1=function(e){},y.prototype._verify2=function(e,A){},y.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},y.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},y.prototype.add=function(e,A){this._verify2(e,A);var t=e.add(A);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},y.prototype.iadd=function(e,A){this._verify2(e,A);var t=e.iadd(A);return t.cmp(this.m)>=0&&t.isub(this.m),t},y.prototype.sub=function(e,A){this._verify2(e,A);var t=e.sub(A);return t.cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},y.prototype.isub=function(e,A){this._verify2(e,A);var t=e.isub(A);return t.cmpn(0)<0&&t.iadd(this.m),t},y.prototype.shl=function(e,A){return this._verify1(e),this.imod(e.ushln(A))},y.prototype.imul=function(e,A){return this._verify2(e,A),this.imod(e.imul(A))},y.prototype.mul=function(e,A){return this._verify2(e,A),this.imod(e.mul(A))},y.prototype.isqr=function(e){return this.imul(e,e.clone())},y.prototype.sqr=function(e){return this.mul(e,e)},y.prototype.sqrt=function(e){if(e.isZero())return e.clone();if(3===this.m.andln(3)){var A=this.m.add(new r(1)).iushrn(2);return this.pow(e,A)}for(var t=this.m.subn(1),i=0;!t.isZero()&&0===t.andln(1);)i++,t.iushrn(1);var n=new r(1).toRed(this),a=n.redNeg(),o=this.m.subn(1).iushrn(1),s=this.m.bitLength();for(s=new r(2*s*s).toRed(this);0!==this.pow(s,o).cmp(a);)s.redIAdd(a);for(var f=this.pow(s,t),c=this.pow(e,t.addn(1).iushrn(1)),h=this.pow(e,t),u=i;0!==h.cmp(n);){for(var g=h,_=0;0!==g.cmp(n);_++)g=g.redSqr();var I=this.pow(f,new r(1).iushln(u-_-1));c=c.redMul(I),f=I.redSqr(),h=h.redMul(f),u=_}return c},y.prototype.invm=function(e){var A=e._invmp(this.m);return 0!==A.negative?(A.negative=0,this.imod(A).redNeg()):this.imod(A)},y.prototype.pow=function(e,A){if(A.isZero())return new r(1).toRed(this);if(0===A.cmpn(1))return e.clone();var t=new Array(16);t[0]=new r(1).toRed(this),t[1]=e;for(var i=2;i=0;i--){for(var f=A.words[i],c=s-1;c>=0;c--){var h=f>>c&1;n!==t[0]&&(n=this.sqr(n)),0!==h||0!==a?(a<<=1,a|=h,(4==++o||0===i&&0===c)&&(n=this.mul(n,t[a]),o=0,a=0)):o=0}s=26}return n},y.prototype.convertTo=function(e){var A=e.umod(this.m);return A===e?A.clone():A},y.prototype.convertFrom=function(e){var A=e.clone();return A.red=null,A},r.mont=function(e){return new C(e)},t(C,y),C.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},C.prototype.convertFrom=function(e){var A=this.imod(e.mul(this.rinv));return A.red=null,A},C.prototype.imul=function(e,A){if(e.isZero()||A.isZero())return e.words[0]=0,e.length=1,e;var t=e.imul(A),r=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=t.isub(r).iushrn(this.shift),n=i;return i.cmp(this.m)>=0?n=i.isub(this.m):i.cmpn(0)<0&&(n=i.iadd(this.m)),n._forceRed(this)},C.prototype.mul=function(e,A){if(e.isZero()||A.isZero())return new r(0)._forceRed(this);var t=e.mul(A),i=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=t.isub(i).iushrn(this.shift),a=n;return n.cmp(this.m)>=0?a=n.isub(this.m):n.cmpn(0)<0&&(a=n.iadd(this.m)),a._forceRed(this)},C.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(_$bn_43,this),_$bn_43=_$bn_43.exports;var _$brorand_44={},r;function Rand(e){this.rand=e}if(_$brorand_44=function(e){return r||(r=new Rand(null)),r.generate(e)},_$brorand_44.Rand=Rand,Rand.prototype.generate=function(e){return this._rand(e)},Rand.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var A=new Uint8Array(e),t=0;t=0);return r},MillerRabin.prototype._randrange=function(e,A){var t=A.sub(e);return e.add(this._randbelow(t))},MillerRabin.prototype.test=function(e,A,t){var r=e.bitLength(),i=_$bn_43.mont(e),n=new _$bn_43(1).toRed(i);A||(A=Math.max(1,r/48|0));for(var a=e.subn(1),o=0;!a.testn(o);o++);for(var s=e.shrn(o),f=a.toRed(i);A>0;A--){var c=this._randrange(new _$bn_43(2),a);t&&t(c);var h=c.toRed(i).redPow(s);if(0!==h.cmp(n)&&0!==h.cmp(f)){for(var u=1;u0;A--){var f=this._randrange(new _$bn_43(2),n),c=e.gcd(f);if(0!==c.cmpn(1))return c;var h=f.toRed(r).redPow(o);if(0!==h.cmp(i)&&0!==h.cmp(s)){for(var u=1;ue;)t.ishrn(1);if(t.isEven()&&t.iadd(ONE),t.testn(1)||t.iadd(TWO),A.cmp(TWO)){if(!A.cmp(FIVE))for(;t.mod(TEN).cmp(THREE);)t.iadd(FOUR)}else for(;t.mod(TWENTYFOUR).cmp(ELEVEN);)t.iadd(FOUR);if(simpleSieve(r=t.shrn(1))&&simpleSieve(t)&&fermatTest(r)&&fermatTest(t)&&millerRabin.test(r)&&millerRabin.test(t))return t}}var _$primes_92={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}},_$DH_90={};(function(e){var A=new _$mr_130,t=new _$bn_43(24),r=new _$bn_43(11),i=new _$bn_43(10),n=new _$bn_43(3),a=new _$bn_43(7);function o(A,t){return t=t||"utf8",e.isBuffer(A)||(A=new e(A,t)),this._pub=new _$bn_43(A),this}function s(A,t){return t=t||"utf8",e.isBuffer(A)||(A=new e(A,t)),this._priv=new _$bn_43(A),this}_$DH_90=c;var f={};function c(e,A,t){this.setGenerator(A),this.__prime=new _$bn_43(e),this._prime=_$bn_43.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,t?(this.setPublicKey=o,this.setPrivateKey=s):this._primeCode=8}function h(A,t){var r=new e(A.toArray());return t?r.toString(t):r}Object.defineProperty(c.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(e,o){var s=o.toString("hex"),c=[s,e.toString(16)].join("_");if(c in f)return f[c];var h,u=0;if(e.isEven()||!_$generatePrime_91.simpleSieve||!_$generatePrime_91.fermatTest(e)||!A.test(e))return u+=1,u+="02"===s||"05"===s?8:4,f[c]=u,u;switch(A.test(e.shrn(1))||(u+=2),s){case"02":e.mod(t).cmp(r)&&(u+=8);break;case"05":(h=e.mod(i)).cmp(n)&&h.cmp(a)&&(u+=8);break;default:u+=4}return f[c]=u,u}(this.__prime,this.__gen)),this._primeCode}}),c.prototype.generateKeys=function(){return this._priv||(this._priv=new _$bn_43(_$browser_152(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},c.prototype.computeSecret=function(A){var t=(A=(A=new _$bn_43(A)).toRed(this._prime)).redPow(this._priv).fromRed(),r=new e(t.toArray()),i=this.getPrime();if(r.length=0||!t.umod(e.prime1)||!t.umod(e.prime2);)t=new _$bn_43(_$browser_152(A));return t}_$browserifyRsa_66=A,A.getr=t}).call(this,_$buffer_74({}).Buffer);var _$package_108={version:"6.5.1"},_$utils_132={},__utils_132=_$utils_132;function zero2(e){return 1===e.length?"0"+e:e}function toHex(e){for(var A="",t=0;t>8,a=255&i;n?t.push(n,a):t.push(a)}return t},__utils_132.zero2=zero2,__utils_132.toHex=toHex,__utils_132.encode=function(e,A){return"hex"===A?toHex(e):e};var _$utils_107={},__utils_107=_$utils_107;__utils_107.assert=_$minimalisticAssert_131,__utils_107.toArray=_$utils_132.toArray,__utils_107.zero2=_$utils_132.zero2,__utils_107.toHex=_$utils_132.toHex,__utils_107.encode=_$utils_132.encode,__utils_107.getNAF=function(e,A){for(var t=[],r=1<=0;){var n;if(i.isOdd()){var a=i.andln(r-1);n=a>(r>>1)-1?(r>>1)-a:a,i.isubn(n)}else n=0;t.push(n);for(var o=0!==i.cmpn(0)&&0===i.andln(r-1)?A+1:1,s=1;s0||A.cmpn(-i)>0;){var n,a,o,s=e.andln(3)+r&3,f=A.andln(3)+i&3;3===s&&(s=-1),3===f&&(f=-1),n=0==(1&s)?0:3!=(o=e.andln(7)+r&7)&&5!==o||2!==f?s:-s,t[0].push(n),a=0==(1&f)?0:3!=(o=A.andln(7)+i&7)&&5!==o||2!==s?f:-f,t[1].push(a),2*r===n+1&&(r=1-r),2*i===a+1&&(i=1-i),e.iushrn(1),A.iushrn(1)}return t},__utils_107.cachedProperty=function(e,A,t){var r="_"+A;e.prototype[A]=function(){return void 0!==this[r]?this[r]:this[r]=t.call(this)}},__utils_107.parseBytes=function(e){return"string"==typeof e?__utils_107.toArray(e,"hex"):e},__utils_107.intFromLE=function(e){return new _$bn_43(e,"hex","le")};var _$base_94={},getNAF=_$utils_107.getNAF,getJSF=_$utils_107.getJSF;function BaseCurve(e,A){this.type=e,this.p=new _$bn_43(A.p,16),this.red=A.prime?_$bn_43.red(A.prime):_$bn_43.mont(this.p),this.zero=new _$bn_43(0).toRed(this.red),this.one=new _$bn_43(1).toRed(this.red),this.two=new _$bn_43(2).toRed(this.red),this.n=A.n&&new _$bn_43(A.n,16),this.g=A.g&&this.pointFromJSON(A.g,A.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var t=this.n&&this.p.div(this.n);!t||t.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function BasePoint(e,A){this.curve=e,this.type=A,this.precomputed=null}_$utils_107.assert,_$base_94=BaseCurve,BaseCurve.prototype.point=function(){throw new Error("Not implemented")},BaseCurve.prototype.validate=function(){throw new Error("Not implemented")},BaseCurve.prototype._fixedNafMul=function(e,A){var t=e._getDoubles(),r=getNAF(A,1),i=(1<=a;A--)o=(o<<1)+r[A];n.push(o)}for(var s=this.jpoint(null,null,null),f=this.jpoint(null,null,null),c=i;c>0;c--){for(a=0;a=0;o--){for(A=0;o>=0&&0===n[o];o--)A++;if(o>=0&&A++,a=a.dblp(A),o<0)break;var s=n[o];a="affine"===e.type?s>0?a.mixedAdd(i[s-1>>1]):a.mixedAdd(i[-s-1>>1].neg()):s>0?a.add(i[s-1>>1]):a.add(i[-s-1>>1].neg())}return"affine"===e.type?a.toP():a},BaseCurve.prototype._wnafMulAdd=function(e,A,t,r,i){for(var n=this._wnafT1,a=this._wnafT2,o=this._wnafT3,s=0,f=0;f=1;f-=2){var h=f-1,u=f;if(1===n[h]&&1===n[u]){var g=[A[h],null,null,A[u]];0===A[h].y.cmp(A[u].y)?(g[1]=A[h].add(A[u]),g[2]=A[h].toJ().mixedAdd(A[u].neg())):0===A[h].y.cmp(A[u].y.redNeg())?(g[1]=A[h].toJ().mixedAdd(A[u]),g[2]=A[h].add(A[u].neg())):(g[1]=A[h].toJ().mixedAdd(A[u]),g[2]=A[h].toJ().mixedAdd(A[u].neg()));var _=[-3,-1,-5,-7,0,7,5,1,3],I=getJSF(t[h],t[u]);s=Math.max(I[0].length,s),o[h]=new Array(s),o[u]=new Array(s);for(var d=0;d=0;f--){for(var C=0;f>=0;){var E=!0;for(d=0;d=0&&C++,B=B.dblp(C),f<0)break;for(d=0;d0?b=a[d][Q-1>>1]:Q<0&&(b=a[d][-Q-1>>1].neg()),B="affine"===b.type?B.mixedAdd(b):B.add(b))}}for(f=0;f=Math.ceil((e.bitLength()+1)/A.step)},BasePoint.prototype._getDoubles=function(e,A){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var t=[this],r=this,i=0;i=0&&(n=A,a=t),r.negative&&(r=r.neg(),i=i.neg()),n.negative&&(n=n.neg(),a=a.neg()),[{a:r,b:i},{a:n,b:a}]},ShortCurve.prototype._endoSplit=function(e){var A=this.endo.basis,t=A[0],r=A[1],i=r.b.mul(e).divRound(this.n),n=t.b.neg().mul(e).divRound(this.n),a=i.mul(t.a),o=n.mul(r.a),s=i.mul(t.b),f=n.mul(r.b);return{k1:e.sub(a).sub(o),k2:s.add(f).neg()}},ShortCurve.prototype.pointFromX=function(e,A){(e=new _$bn_43(e,16)).red||(e=e.toRed(this.red));var t=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),r=t.redSqrt();if(0!==r.redSqr().redSub(t).cmp(this.zero))throw new Error("invalid point");var i=r.fromRed().isOdd();return(A&&!i||!A&&i)&&(r=r.redNeg()),this.point(e,r)},ShortCurve.prototype.validate=function(e){if(e.inf)return!0;var A=e.x,t=e.y,r=this.a.redMul(A),i=A.redSqr().redMul(A).redIAdd(r).redIAdd(this.b);return 0===t.redSqr().redISub(i).cmpn(0)},ShortCurve.prototype._endoWnafMulAdd=function(e,A,t){for(var r=this._endoWnafT1,i=this._endoWnafT2,n=0;n":""},Point.prototype.isInfinity=function(){return this.inf},Point.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var A=this.y.redSub(e.y);0!==A.cmpn(0)&&(A=A.redMul(this.x.redSub(e.x).redInvm()));var t=A.redSqr().redISub(this.x).redISub(e.x),r=A.redMul(this.x.redSub(t)).redISub(this.y);return this.curve.point(t,r)},Point.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var A=this.curve.a,t=this.x.redSqr(),r=e.redInvm(),i=t.redAdd(t).redIAdd(t).redIAdd(A).redMul(r),n=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,a)},Point.prototype.getX=function(){return this.x.fromRed()},Point.prototype.getY=function(){return this.y.fromRed()},Point.prototype.mul=function(e){return e=new _$bn_43(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},Point.prototype.mulAdd=function(e,A,t){var r=[this,A],i=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(r,i):this.curve._wnafMulAdd(1,r,i,2)},Point.prototype.jmulAdd=function(e,A,t){var r=[this,A],i=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(r,i,!0):this.curve._wnafMulAdd(1,r,i,2,!0)},Point.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},Point.prototype.neg=function(e){if(this.inf)return this;var A=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var t=this.precomputed,r=function(e){return e.neg()};A.precomputed={naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(r)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(r)}}}return A},Point.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},_$inherits_browser_126(JPoint,_$base_94.BasePoint),ShortCurve.prototype.jpoint=function(e,A,t){return new JPoint(this,e,A,t)},JPoint.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),A=e.redSqr(),t=this.x.redMul(A),r=this.y.redMul(A).redMul(e);return this.curve.point(t,r)},JPoint.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},JPoint.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var A=e.z.redSqr(),t=this.z.redSqr(),r=this.x.redMul(A),i=e.x.redMul(t),n=this.y.redMul(A.redMul(e.z)),a=e.y.redMul(t.redMul(this.z)),o=r.redSub(i),s=n.redSub(a);if(0===o.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=o.redSqr(),c=f.redMul(o),h=r.redMul(f),u=s.redSqr().redIAdd(c).redISub(h).redISub(h),g=s.redMul(h.redISub(u)).redISub(n.redMul(c)),_=this.z.redMul(e.z).redMul(o);return this.curve.jpoint(u,g,_)},JPoint.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var A=this.z.redSqr(),t=this.x,r=e.x.redMul(A),i=this.y,n=e.y.redMul(A).redMul(this.z),a=t.redSub(r),o=i.redSub(n);if(0===a.cmpn(0))return 0!==o.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=a.redSqr(),f=s.redMul(a),c=t.redMul(s),h=o.redSqr().redIAdd(f).redISub(c).redISub(c),u=o.redMul(c.redISub(h)).redISub(i.redMul(f)),g=this.z.redMul(a);return this.curve.jpoint(h,u,g)},JPoint.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var A=this,t=0;t=0)return!1;if(t.redIAdd(i),0===this.x.cmp(t))return!0}},JPoint.prototype.inspect=function(){return this.isInfinity()?"":""},JPoint.prototype.isInfinity=function(){return 0===this.z.cmpn(0)};var _$mont_97={};function MontCurve(e){_$base_94.call(this,"mont",e),this.a=new _$bn_43(e.a,16).toRed(this.red),this.b=new _$bn_43(e.b,16).toRed(this.red),this.i4=new _$bn_43(4).toRed(this.red).redInvm(),this.two=new _$bn_43(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function __Point_97(e,A,t){_$base_94.BasePoint.call(this,e,"projective"),null===A&&null===t?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new _$bn_43(A,16),this.z=new _$bn_43(t,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}_$inherits_browser_126(MontCurve,_$base_94),_$mont_97=MontCurve,MontCurve.prototype.validate=function(e){var A=e.normalize().x,t=A.redSqr(),r=t.redMul(A).redAdd(t.redMul(this.a)).redAdd(A);return 0===r.redSqrt().redSqr().cmp(r)},_$inherits_browser_126(__Point_97,_$base_94.BasePoint),MontCurve.prototype.decodePoint=function(e,A){return this.point(_$utils_107.toArray(e,A),1)},MontCurve.prototype.point=function(e,A){return new __Point_97(this,e,A)},MontCurve.prototype.pointFromJSON=function(e){return __Point_97.fromJSON(this,e)},__Point_97.prototype.precompute=function(){},__Point_97.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},__Point_97.fromJSON=function(e,A){return new __Point_97(e,A[0],A[1]||e.one)},__Point_97.prototype.inspect=function(){return this.isInfinity()?"":""},__Point_97.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},__Point_97.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),A=this.x.redSub(this.z).redSqr(),t=e.redSub(A),r=e.redMul(A),i=t.redMul(A.redAdd(this.curve.a24.redMul(t)));return this.curve.point(r,i)},__Point_97.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},__Point_97.prototype.diffAdd=function(e,A){var t=this.x.redAdd(this.z),r=this.x.redSub(this.z),i=e.x.redAdd(e.z),n=e.x.redSub(e.z).redMul(t),a=i.redMul(r),o=A.z.redMul(n.redAdd(a).redSqr()),s=A.x.redMul(n.redISub(a).redSqr());return this.curve.point(o,s)},__Point_97.prototype.mul=function(e){for(var A=e.clone(),t=this,r=this.curve.point(null,null),i=[];0!==A.cmpn(0);A.iushrn(1))i.push(A.andln(1));for(var n=i.length-1;n>=0;n--)0===i[n]?(t=t.diffAdd(r,this),r=r.dbl()):(r=t.diffAdd(r,this),t=t.dbl());return r},__Point_97.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},__Point_97.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},__Point_97.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},__Point_97.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},__Point_97.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var _$edwards_95={};function EdwardsCurve(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,_$base_94.call(this,"edwards",e),this.a=new _$bn_43(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new _$bn_43(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new _$bn_43(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),this.oneC=1==(0|e.c)}function __Point_95(e,A,t,r,i){_$base_94.BasePoint.call(this,e,"projective"),null===A&&null===t&&null===r?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new _$bn_43(A,16),this.y=new _$bn_43(t,16),this.z=r?new _$bn_43(r,16):this.curve.one,this.t=i&&new _$bn_43(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}_$utils_107.assert,_$inherits_browser_126(EdwardsCurve,_$base_94),_$edwards_95=EdwardsCurve,EdwardsCurve.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},EdwardsCurve.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},EdwardsCurve.prototype.jpoint=function(e,A,t,r){return this.point(e,A,t,r)},EdwardsCurve.prototype.pointFromX=function(e,A){(e=new _$bn_43(e,16)).red||(e=e.toRed(this.red));var t=e.redSqr(),r=this.c2.redSub(this.a.redMul(t)),i=this.one.redSub(this.c2.redMul(this.d).redMul(t)),n=r.redMul(i.redInvm()),a=n.redSqrt();if(0!==a.redSqr().redSub(n).cmp(this.zero))throw new Error("invalid point");var o=a.fromRed().isOdd();return(A&&!o||!A&&o)&&(a=a.redNeg()),this.point(e,a)},EdwardsCurve.prototype.pointFromY=function(e,A){(e=new _$bn_43(e,16)).red||(e=e.toRed(this.red));var t=e.redSqr(),r=t.redSub(this.c2),i=t.redMul(this.d).redMul(this.c2).redSub(this.a),n=r.redMul(i.redInvm());if(0===n.cmp(this.zero)){if(A)throw new Error("invalid point");return this.point(this.zero,e)}var a=n.redSqrt();if(0!==a.redSqr().redSub(n).cmp(this.zero))throw new Error("invalid point");return a.fromRed().isOdd()!==A&&(a=a.redNeg()),this.point(a,e)},EdwardsCurve.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var A=e.x.redSqr(),t=e.y.redSqr(),r=A.redMul(this.a).redAdd(t),i=this.c2.redMul(this.one.redAdd(this.d.redMul(A).redMul(t)));return 0===r.cmp(i)},_$inherits_browser_126(__Point_95,_$base_94.BasePoint),EdwardsCurve.prototype.pointFromJSON=function(e){return __Point_95.fromJSON(this,e)},EdwardsCurve.prototype.point=function(e,A,t,r){return new __Point_95(this,e,A,t,r)},__Point_95.fromJSON=function(e,A){return new __Point_95(e,A[0],A[1],A[2])},__Point_95.prototype.inspect=function(){return this.isInfinity()?"":""},__Point_95.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},__Point_95.prototype._extDbl=function(){var e=this.x.redSqr(),A=this.y.redSqr(),t=this.z.redSqr();t=t.redIAdd(t);var r=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(A),n=r.redAdd(A),a=n.redSub(t),o=r.redSub(A),s=i.redMul(a),f=n.redMul(o),c=i.redMul(o),h=a.redMul(n);return this.curve.point(s,f,h,c)},__Point_95.prototype._projDbl=function(){var e,A,t,r=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),n=this.y.redSqr();if(this.curve.twisted){var a=(f=this.curve._mulA(i)).redAdd(n);if(this.zOne)e=r.redSub(i).redSub(n).redMul(a.redSub(this.curve.two)),A=a.redMul(f.redSub(n)),t=a.redSqr().redSub(a).redSub(a);else{var o=this.z.redSqr(),s=a.redSub(o).redISub(o);e=r.redSub(i).redISub(n).redMul(s),A=a.redMul(f.redSub(n)),t=a.redMul(s)}}else{var f=i.redAdd(n);o=this.curve._mulC(this.z).redSqr(),s=f.redSub(o).redSub(o),e=this.curve._mulC(r.redISub(f)).redMul(s),A=this.curve._mulC(f).redMul(i.redISub(n)),t=f.redMul(s)}return this.curve.point(e,A,t)},__Point_95.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},__Point_95.prototype._extAdd=function(e){var A=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),t=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),r=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),n=t.redSub(A),a=i.redSub(r),o=i.redAdd(r),s=t.redAdd(A),f=n.redMul(a),c=o.redMul(s),h=n.redMul(s),u=a.redMul(o);return this.curve.point(f,c,u,h)},__Point_95.prototype._projAdd=function(e){var A,t,r=this.z.redMul(e.z),i=r.redSqr(),n=this.x.redMul(e.x),a=this.y.redMul(e.y),o=this.curve.d.redMul(n).redMul(a),s=i.redSub(o),f=i.redAdd(o),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(n).redISub(a),h=r.redMul(s).redMul(c);return this.curve.twisted?(A=r.redMul(f).redMul(a.redSub(this.curve._mulA(n))),t=s.redMul(f)):(A=r.redMul(f).redMul(a.redSub(n)),t=this.curve._mulC(s).redMul(f)),this.curve.point(h,A,t)},__Point_95.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},__Point_95.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},__Point_95.prototype.mulAdd=function(e,A,t){return this.curve._wnafMulAdd(1,[this,A],[e,t],2,!1)},__Point_95.prototype.jmulAdd=function(e,A,t){return this.curve._wnafMulAdd(1,[this,A],[e,t],2,!0)},__Point_95.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},__Point_95.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},__Point_95.prototype.getX=function(){return this.normalize(),this.x.fromRed()},__Point_95.prototype.getY=function(){return this.normalize(),this.y.fromRed()},__Point_95.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},__Point_95.prototype.eqXToP=function(e){var A=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(A))return!0;for(var t=e.clone(),r=this.curve.redN.redMul(this.z);;){if(t.iadd(this.curve.n),t.cmp(this.curve.p)>=0)return!1;if(A.redIAdd(r),0===this.x.cmp(A))return!0}},__Point_95.prototype.toP=__Point_95.prototype.normalize,__Point_95.prototype.mixedAdd=__Point_95.prototype.add;var _$curve_96={},curve=_$curve_96;curve.base=_$base_94,curve.short=_$short_98,curve.mont=_$mont_97,curve.edwards=_$edwards_95;var _$utils_123={};function isSurrogatePair(e,A){return 55296==(64512&e.charCodeAt(A))&&!(A<0||A+1>=e.length)&&56320==(64512&e.charCodeAt(A+1))}function htonl(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function __zero2_123(e){return 1===e.length?"0"+e:e}function zero8(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}_$utils_123.inherits=_$inherits_browser_126,_$utils_123.toArray=function(e,A){if(Array.isArray(e))return e.slice();if(!e)return[];var t=[];if("string"==typeof e)if(A){if("hex"===A)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),i=0;i>6|192,t[r++]=63&n|128):isSurrogatePair(e,i)?(n=65536+((1023&n)<<10)+(1023&e.charCodeAt(++i)),t[r++]=n>>18|240,t[r++]=n>>12&63|128,t[r++]=n>>6&63|128,t[r++]=63&n|128):(t[r++]=n>>12|224,t[r++]=n>>6&63|128,t[r++]=63&n|128)}else for(i=0;i>>0}return i},_$utils_123.split32=function(e,A){for(var t=new Array(4*e.length),r=0,i=0;r>>24,t[i+1]=n>>>16&255,t[i+2]=n>>>8&255,t[i+3]=255&n):(t[i+3]=n>>>24,t[i+2]=n>>>16&255,t[i+1]=n>>>8&255,t[i]=255&n)}return t},_$utils_123.rotr32=function(e,A){return e>>>A|e<<32-A},_$utils_123.rotl32=function(e,A){return e<>>32-A},_$utils_123.sum32=function(e,A){return e+A>>>0},_$utils_123.sum32_3=function(e,A,t){return e+A+t>>>0},_$utils_123.sum32_4=function(e,A,t,r){return e+A+t+r>>>0},_$utils_123.sum32_5=function(e,A,t,r,i){return e+A+t+r+i>>>0},_$utils_123.sum64=function(e,A,t,r){var i=e[A],n=r+e[A+1]>>>0,a=(n>>0,e[A+1]=n},_$utils_123.sum64_hi=function(e,A,t,r){return(A+r>>>0>>0},_$utils_123.sum64_lo=function(e,A,t,r){return A+r>>>0},_$utils_123.sum64_4_hi=function(e,A,t,r,i,n,a,o){var s=0,f=A;return s+=(f=f+r>>>0)>>0)>>0)>>0},_$utils_123.sum64_4_lo=function(e,A,t,r,i,n,a,o){return A+r+n+o>>>0},_$utils_123.sum64_5_hi=function(e,A,t,r,i,n,a,o,s,f){var c=0,h=A;return c+=(h=h+r>>>0)>>0)>>0)>>0)>>0},_$utils_123.sum64_5_lo=function(e,A,t,r,i,n,a,o,s,f){return A+r+n+o+f>>>0},_$utils_123.rotr64_hi=function(e,A,t){return(A<<32-t|e>>>t)>>>0},_$utils_123.rotr64_lo=function(e,A,t){return(e<<32-t|A>>>t)>>>0},_$utils_123.shr64_hi=function(e,A,t){return e>>>t},_$utils_123.shr64_lo=function(e,A,t){return(e<<32-t|A>>>t)>>>0};var _$common_113={};function BlockHash(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}_$common_113.BlockHash=BlockHash,BlockHash.prototype.update=function(e,A){if(e=_$utils_123.toArray(e,A),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var t=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-t,e.length),0===this.pending.length&&(this.pending=null),e=_$utils_123.join32(e,0,e.length-t,this.endian);for(var r=0;r>>24&255,r[i++]=e>>>16&255,r[i++]=e>>>8&255,r[i++]=255&e}else for(r[i++]=255&e,r[i++]=e>>>8&255,r[i++]=e>>>16&255,r[i++]=e>>>24&255,r[i++]=0,r[i++]=0,r[i++]=0,r[i++]=0,n=8;n>>3},_$common_122.g1_256=function(e){return rotr32(e,17)^rotr32(e,19)^e>>>10};var _$1_117={},rotl32=_$utils_123.rotl32,sum32=_$utils_123.sum32,sum32_5=_$utils_123.sum32_5,ft_1=_$common_122.ft_1,__BlockHash_117=_$common_113.BlockHash,sha1_K=[1518500249,1859775393,2400959708,3395469782];function SHA1(){if(!(this instanceof SHA1))return new SHA1;__BlockHash_117.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}_$utils_123.inherits(SHA1,__BlockHash_117),_$1_117=SHA1,SHA1.blockSize=512,SHA1.outSize=160,SHA1.hmacStrength=80,SHA1.padLength=64,SHA1.prototype._update=function(e,A){for(var t=this.W,r=0;r<16;r++)t[r]=e[A+r];for(;rthis.blockSize&&(e=(new this.Hash).update(e).digest());for(var A=e.length;Athis.reseedInterval)throw new Error("Reseed is required");"string"!=typeof A&&(r=t,t=A,A=null),t&&(t=_$utils_132.toArray(t,r||"hex"),this._update(t));for(var i=[];i.length"};var _$signature_102={};function Signature(e,A){if(e instanceof Signature)return e;this._importDER(e,A)||(this.r=new _$bn_43(e.r,16),this.s=new _$bn_43(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function Position(){this.place=0}function getLength(e,A){var t=e[A.place++];if(!(128&t))return t;for(var r=15&t,i=0,n=0,a=A.place;n>>3);for(e.push(128|t);--t;)e.push(A>>>(t<<3)&255);e.push(A)}}_$utils_107.assert,_$signature_102=Signature,Signature.prototype._importDER=function(e,A){e=_$utils_107.toArray(e,A);var t=new Position;if(48!==e[t.place++])return!1;if(getLength(e,t)+t.place!==e.length)return!1;if(2!==e[t.place++])return!1;var r=getLength(e,t),i=e.slice(t.place,r+t.place);if(t.place+=r,2!==e[t.place++])return!1;var n=getLength(e,t);if(e.length!==n+t.place)return!1;var a=e.slice(t.place,n+t.place);return 0===i[0]&&128&i[1]&&(i=i.slice(1)),0===a[0]&&128&a[1]&&(a=a.slice(1)),this.r=new _$bn_43(i),this.s=new _$bn_43(a),this.recoveryParam=null,!0},Signature.prototype.toDER=function(e){var A=this.r.toArray(),t=this.s.toArray();for(128&A[0]&&(A=[0].concat(A)),128&t[0]&&(t=[0].concat(t)),A=rmPadding(A),t=rmPadding(t);!(t[0]||128&t[1]);)t=t.slice(1);var r=[2];constructLength(r,A.length),(r=r.concat(A)).push(2),constructLength(r,t.length);var i=r.concat(t),n=[48];return constructLength(n,i.length),n=n.concat(i),_$utils_107.encode(n,e)};var _$ec_100={},__KeyPair_100=(_$utils_107.assert,_$key_101);function EC(e){if(!(this instanceof EC))return new EC(e);"string"==typeof e&&(e=_$curves_99[e]),e instanceof _$curves_99.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}_$ec_100=EC,EC.prototype.keyPair=function(e){return new __KeyPair_100(this,e)},EC.prototype.keyFromPrivate=function(e,A){return __KeyPair_100.fromPrivate(this,e,A)},EC.prototype.keyFromPublic=function(e,A){return __KeyPair_100.fromPublic(this,e,A)},EC.prototype.genKeyPair=function(e){e||(e={});for(var A=new _$hmacDrbg_124({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||_$brorand_44(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),t=this.n.byteLength(),r=this.n.sub(new _$bn_43(2));;){var i=new _$bn_43(A.generate(t));if(!(i.cmp(r)>0))return i.iaddn(1),this.keyFromPrivate(i)}},EC.prototype._truncateToN=function(e,A){var t=8*e.byteLength()-this.n.bitLength();return t>0&&(e=e.ushrn(t)),!A&&e.cmp(this.n)>=0?e.sub(this.n):e},EC.prototype.sign=function(e,A,t,r){"object"==typeof t&&(r=t,t=null),r||(r={}),A=this.keyFromPrivate(A,t),e=this._truncateToN(new _$bn_43(e,16));for(var i=this.n.byteLength(),n=A.getPrivate().toArray("be",i),a=e.toArray("be",i),o=new _$hmacDrbg_124({hash:this.hash,entropy:n,nonce:a,pers:r.pers,persEnc:r.persEnc||"utf8"}),s=this.n.sub(new _$bn_43(1)),f=0;;f++){var c=r.k?r.k(f):new _$bn_43(o.generate(this.n.byteLength()));if(!((c=this._truncateToN(c,!0)).cmpn(1)<=0||c.cmp(s)>=0)){var h=this.g.mul(c);if(!h.isInfinity()){var u=h.getX(),g=u.umod(this.n);if(0!==g.cmpn(0)){var _=c.invm(this.n).mul(g.mul(A.getPrivate()).iadd(e));if(0!==(_=_.umod(this.n)).cmpn(0)){var I=(h.getY().isOdd()?1:0)|(0!==u.cmp(g)?2:0);return r.canonical&&_.cmp(this.nh)>0&&(_=this.n.sub(_),I^=1),new _$signature_102({r:g,s:_,recoveryParam:I})}}}}}},EC.prototype.verify=function(e,A,t,r){e=this._truncateToN(new _$bn_43(e,16)),t=this.keyFromPublic(t,r);var i=(A=new _$signature_102(A,"hex")).r,n=A.s;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;var a,o=n.invm(this.n),s=o.mul(e).umod(this.n),f=o.mul(i).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(s,t.getPublic(),f)).isInfinity()&&a.eqXToP(i):!(a=this.g.mulAdd(s,t.getPublic(),f)).isInfinity()&&0===a.getX().umod(this.n).cmp(i)},EC.prototype.recoverPubKey=function(e,A,t,r){A=new _$signature_102(A,r);var i=this.n,n=new _$bn_43(e),a=A.r,o=A.s,s=1&t,f=t>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&f)throw new Error("Unable to find sencond key candinate");a=f?this.curve.pointFromX(a.add(this.curve.n),s):this.curve.pointFromX(a,s);var c=A.r.invm(i),h=i.sub(n).mul(c).umod(i),u=o.mul(c).umod(i);return this.g.mulAdd(h,a,u)},EC.prototype.getKeyRecoveryParam=function(e,A,t,r){if(null!==(A=new _$signature_102(A,r)).recoveryParam)return A.recoveryParam;for(var i=0;i<4;i++){var n;try{n=this.recoverPubKey(e,A,i)}catch(e){continue}if(n.eq(t))return i}throw new Error("Unable to find valid recovery factor")};var _$key_104={},parseBytes=(_$utils_107.assert,_$utils_107.parseBytes),cachedProperty=_$utils_107.cachedProperty;function __KeyPair_104(e,A){this.eddsa=e,this._secret=parseBytes(A.secret),e.isPoint(A.pub)?this._pub=A.pub:this._pubBytes=parseBytes(A.pub)}__KeyPair_104.fromPublic=function(e,A){return A instanceof __KeyPair_104?A:new __KeyPair_104(e,{pub:A})},__KeyPair_104.fromSecret=function(e,A){return A instanceof __KeyPair_104?A:new __KeyPair_104(e,{secret:A})},__KeyPair_104.prototype.secret=function(){return this._secret},cachedProperty(__KeyPair_104,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),cachedProperty(__KeyPair_104,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),cachedProperty(__KeyPair_104,"privBytes",function(){var e=this.eddsa,A=this.hash(),t=e.encodingLength-1,r=A.slice(0,e.encodingLength);return r[0]&=248,r[t]&=127,r[t]|=64,r}),cachedProperty(__KeyPair_104,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),cachedProperty(__KeyPair_104,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),cachedProperty(__KeyPair_104,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),__KeyPair_104.prototype.sign=function(e){return this.eddsa.sign(e,this)},__KeyPair_104.prototype.verify=function(e,A){return this.eddsa.verify(e,A,this)},__KeyPair_104.prototype.getSecret=function(e){return _$utils_107.encode(this.secret(),e)},__KeyPair_104.prototype.getPublic=function(e){return _$utils_107.encode(this.pubBytes(),e)},_$key_104=__KeyPair_104;var _$signature_105={},__cachedProperty_105=(_$utils_107.assert,_$utils_107.cachedProperty),__parseBytes_105=_$utils_107.parseBytes;function __Signature_105(e,A){this.eddsa=e,"object"!=typeof A&&(A=__parseBytes_105(A)),Array.isArray(A)&&(A={R:A.slice(0,e.encodingLength),S:A.slice(e.encodingLength)}),e.isPoint(A.R)&&(this._R=A.R),A.S instanceof _$bn_43&&(this._S=A.S),this._Rencoded=Array.isArray(A.R)?A.R:A.Rencoded,this._Sencoded=Array.isArray(A.S)?A.S:A.Sencoded}__cachedProperty_105(__Signature_105,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),__cachedProperty_105(__Signature_105,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),__cachedProperty_105(__Signature_105,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),__cachedProperty_105(__Signature_105,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),__Signature_105.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},__Signature_105.prototype.toHex=function(){return _$utils_107.encode(this.toBytes(),"hex").toUpperCase()},_$signature_105=__Signature_105;var _$eddsa_103={},__parseBytes_103=(_$utils_107.assert,_$utils_107.parseBytes);function EDDSA(e){if(!(this instanceof EDDSA))return new EDDSA(e);e=_$curves_99[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=_$hash_112.sha512}_$eddsa_103=EDDSA,EDDSA.prototype.sign=function(e,A){e=__parseBytes_103(e);var t=this.keyFromSecret(A),r=this.hashInt(t.messagePrefix(),e),i=this.g.mul(r),n=this.encodePoint(i),a=this.hashInt(n,t.pubBytes(),e).mul(t.priv()),o=r.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:o,Rencoded:n})},EDDSA.prototype.verify=function(e,A,t){e=__parseBytes_103(e),A=this.makeSignature(A);var r=this.keyFromPublic(t),i=this.hashInt(A.Rencoded(),r.pubBytes(),e),n=this.g.mul(A.S());return A.R().add(r.pub().mul(i)).eq(n)},EDDSA.prototype.hashInt=function(){for(var e=this.hash(),A=0;A0&&t.ishrn(r),t}function i(A,t,i){var n,a;do{for(n=new e(0);8*n.length=A)throw new Error("invalid sig")}_$verify_72=function(r,i,n,a,o){var s=_$parseAsn1_137(n);if("ec"===s.type){if("ecdsa"!==a&&"ecdsa/rsa"!==a)throw new Error("wrong public key type");return function(e,t,r){var i=_$curves_69[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var n=new A(i),a=r.data.subjectPrivateKey.data;return n.verify(t,e,a)}(r,i,s)}if("dsa"===s.type){if("dsa"!==a)throw new Error("wrong public key type");return function(e,A,r){var i=r.data.p,n=r.data.q,a=r.data.g,o=r.data.pub_key,s=_$parseAsn1_137.signature.decode(e,"der"),f=s.s,c=s.r;t(f,n),t(c,n);var h=_$bn_43.mont(i),u=f.invm(n);return 0===a.toRed(h).redPow(new _$bn_43(A).mul(u).mod(n)).fromRed().mul(o.toRed(h).redPow(c.mul(u).mod(n)).fromRed()).mod(i).mod(n).cmp(c)}(r,i,s)}if("rsa"!==a&&"ecdsa/rsa"!==a)throw new Error("wrong public key type");i=e.concat([o,i]);for(var f=s.modulus.byteLength(),c=[1],h=0;i.length+c.length+2t-a-2)throw new Error("message too long");var o=__Buffer_149.alloc(t-r-a-2),s=t-n-1,f=_$browser_152(n),c=_$xor_151(__Buffer_149.concat([i,o,__Buffer_149.alloc(1,1),A],s),_$mgf_147(f,s)),h=_$xor_151(f,_$mgf_147(c,n));return new _$bn_43(__Buffer_149.concat([__Buffer_149.alloc(1),h,c],t))}(n,A);else if(1===r)i=function(e,A,t){var r,i=A.length,n=e.modulus.byteLength();if(i>n-11)throw new Error("message too long");return r=t?__Buffer_149.alloc(n-i-3,255):function(e){for(var A,t=__Buffer_149.allocUnsafe(e),r=0,i=_$browser_152(2*e),n=0;r=0)throw new Error("data too long for modulus")}return t?_$browserifyRsa_66(i,n):_$withPublic_150(i,n)},__Buffer_148=_$safeBuffer_170.Buffer,_$privateDecrypt_148=function(e,A,t){var r;r=e.padding?e.padding:t?1:4;var i,n=_$parseAsn1_137(e),a=n.modulus.byteLength();if(A.length>a||new _$bn_43(A).cmp(n.modulus)>=0)throw new Error("decryption error");i=t?_$withPublic_150(new _$bn_43(A),n):_$browserifyRsa_66(A,n);var o=__Buffer_148.alloc(a-i.length);if(i=__Buffer_148.concat([o,i],a),4===r)return function(e,A){var t=e.modulus.byteLength(),r=_$browser_78("sha1").update(__Buffer_148.alloc(0)).digest(),i=r.length;if(0!==A[0])throw new Error("decryption error");var n=A.slice(1,i+1),a=A.slice(i+1),o=_$xor_151(n,_$mgf_147(a,i)),s=_$xor_151(a,_$mgf_147(o,t-i-1));if(function(e,A){e=__Buffer_148.from(e),A=__Buffer_148.from(A);var t=0,r=e.length;e.length!==A.length&&(t++,r=Math.min(e.length,A.length));for(var i=-1;++i=A.length){n++;break}var a=A.slice(2,i-1);if(("0002"!==r.toString("hex")&&!t||"0001"!==r.toString("hex")&&t)&&n++,a.length<8&&n++,n)throw new Error("decryption error");return A.slice(i)}(0,i,t);if(3===r)return i;throw new Error("unknown padding")},_$browser_146={},_$browser_153={};(function(e,A){"use strict";_$safeBuffer_170.Buffer,_$safeBuffer_170.kMaxLength;var t=A.crypto||A.msCrypto;Math.pow(2,32);t&&t.getRandomValues||e.browser}).call(this,_$browser_145,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{});var _$libsodium_21={exports:{}};(function(e,A,t,r,i,n,a,o){!function(r){function i(r){"use strict";var i;void 0===(i=r)&&(i={});var n=i;"object"!=typeof n.sodium&&("object"==typeof A?n=A:"object"==typeof window&&(n=window)),"object"==typeof n.sodium&&"number"==typeof n.sodium.totalMemory&&(i.TOTAL_MEMORY=n.sodium.totalMemory);var a=i;return i.ready=new Promise(function(A,r){(n=a).onAbort=r,n.print=function(e){},n.printErr=function(e){},n.onRuntimeInitialized=function(){try{n._crypto_secretbox_keybytes(),A()}catch(A){r(A)}},n.useBackupModule=function(){var A,r=void 0!==(r={})?r:{},i={};for(A in r)r.hasOwnProperty(A)&&(i[A]=r[A]);var n,s,f,c,h=[],u=!1;n="object"==typeof window,s="function"==typeof importScripts,f="object"==typeof e&&"object"==typeof e.versions&&"string"==typeof e.versions.node,u=f&&!n&&!s,c=!n&&!u&&!s;var g,_,I,d,l,p="";u?(p=o+"/",g=function(e,A){var t;return(t=ce(e))||(d||(d=_$empty_45({})),l||(l=_$pathBrowserify_138({})),e=l.normalize(e),t=d.readFileSync(e)),A?t:t.toString()},I=function(e){var A=g(e,!0);return A.buffer||(A=new Uint8Array(A)),b(A.buffer),A},e.argv.length>1&&e.argv[1].replace(/\\/g,"/"),h=e.argv.slice(2),_$libsodium_21.exports=r,e.on("unhandledRejection",q),r.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(g=function(e){var A=ce(e);return A?se(A):read(e)}),I=function(e){var A;return(A=ce(e))?A:"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(b("object"==typeof(A=read(e,"binary"))),A)},"undefined"!=typeof scriptArgs?h=scriptArgs:void 0!==arguments&&(h=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(n||s)&&(s?p=self.location.href:document.currentScript&&(p=document.currentScript.src),p=0!==p.indexOf("blob:")?p.substr(0,p.lastIndexOf("/")+1):"",g=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.send(null),A.responseText}catch(A){var t=ce(e);if(t)return se(t);throw A}},s&&(I=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.responseType="arraybuffer",A.send(null),new Uint8Array(A.response)}catch(A){var t=ce(e);if(t)return t;throw A}}),_=function(e,A,t){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){if(200==r.status||0==r.status&&r.response)A(r.response);else{var i=ce(e);i?A(i.buffer):t()}},r.onerror=t,r.send(null)});var B=r.print||void 0,y=r.printErr||void 0;for(A in i)i.hasOwnProperty(A)&&(r[A]=i[A]);i=null,r.arguments&&(h=r.arguments),r.thisProgram&&r.thisProgram,r.quit&&r.quit,new Array(8);var C=0;r.wasmBinary&&r.wasmBinary,r.noExitRuntime&&r.noExitRuntime;var E=!1;function b(e,A){e||q("Assertion failed: "+A)}var Q,w,v,m,S,k,D,M="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(e,A){return e?function(e,A,t){for(var r=A+t,i=A;e[i]&&!(i>=r);)++i;if(i-A>16&&e.subarray&&M)return M.decode(e.subarray(A,i));for(var n="";A>10,56320|1023&f)}}else n+=String.fromCharCode((31&a)<<6|o)}else n+=String.fromCharCode(a)}return n}(v,e,A):""}function H(e,A){return e%A>0&&(e+=A-e%A),e}function P(e){Q=e,r.HEAP8=w=new Int8Array(e),r.HEAP16=m=new Int16Array(e),r.HEAP32=S=new Int32Array(e),r.HEAPU8=v=new Uint8Array(e),r.HEAPU16=new Uint16Array(e),r.HEAPU32=new Uint32Array(e),r.HEAPF32=k=new Float32Array(e),r.HEAPF64=D=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var R=r.TOTAL_MEMORY||16777216;function x(e){for(;e.length>0;){var A=e.shift();if("function"!=typeof A){var t=A.func;"number"==typeof t?void 0===A.arg?r.dynCall_v(t):r.dynCall_vi(t,A.arg):t(void 0===A.arg?null:A.arg)}else A()}}R=(Q=r.buffer?r.buffer:new ArrayBuffer(R)).byteLength,P(Q),S[8808]=5278304;var Y=[],G=[],U=[],N=[],L=Math.abs,T=Math.ceil,K=Math.floor,J=Math.min,X=0,j=null,O=null;function q(e){throw r.onAbort&&r.onAbort(e),B(e+=""),y(e),E=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}r.preloadedImages={},r.preloadedAudios={};var z,V,$=null,W="data:application/octet-stream;base64,";function Z(e){return String.prototype.startsWith?e.startsWith(W):0===e.indexOf(W)}var ee=[function(){return r.getRandomValue()},function(){if(void 0===r.getRandomValue)try{var e="object"==typeof window?window:self,A=void 0!==e.crypto?e.crypto:e.msCrypto,t=function(){var e=new Uint32Array(1);return A.getRandomValues(e),e[0]>>>0};t(),r.getRandomValue=t}catch(e){try{var i=_$cryptoBrowserify_82({}),n=function(){var e=i.randomBytes(4);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0};n(),r.getRandomValue=n}catch(e){throw"No secure random number generator found"}}}];function Ae(e){return e}function te(e){return e.replace(/\b__Z[\w\d_]+/g,function(e){var A=Ae(e);return e===A?e:A+" ["+e+"]"})}function re(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(r){e=r}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}function ie(){return w.length}function ne(e){try{var A=new ArrayBuffer(e);if(A.byteLength!=e)return;return new Int8Array(A).set(w),_e(A),P(A),1}catch(e){}}function ae(e){return r.___errno_location&&(S[r.___errno_location()>>2]=e),e}$="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+d4UAAAAAAAAAAAAAAAAAAAAEAjJvPNn5glqO6fKhIWuZ7sr+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/LXxdYR0qMGURsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f1NpZ0VkMjU1MTkgbm8gRWQyNTUxOSBjb2xsaXNpb25zAQAAAAAAAAAAAAAAAAAAAFMtPmJ1ZmxlbiA8PSBCTEFLRTJCX0JMT0NLQllURVMAY3J5cHRvX2dlbmVyaWNoYXNoL2JsYWtlMmIvcmVmL2JsYWtlMmItcmVmLmMAYmxha2UyYl9maW5hbABvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAJGFyZ29uMmlkACRhcmdvbjJpACR2PQAkbT0ALHQ9ACxwPQAkYXJnb24yaWQkdj0AJGFyZ29uMmkkdj0AJGFyZ29uMmlkJAAkYXJnb24yaSQAInsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBiNjRfcG9zIDw9IGI2NF9sZW4Ac29kaXVtL2NvZGVjcy5jAHNvZGl1bV9iaW4yYmFzZTY0ADEuMC4xOA==";var oe=!1;function se(e){for(var A=[],t=0;t255&&(oe&&b(!1,"Character code "+r+" ("+String.fromCharCode(r)+") at offset "+t+" not in 0x00-0xFF."),r&=255),A.push(String.fromCharCode(r))}return A.join("")}var fe="function"==typeof atob?atob:function(e){var A,t,r,i,n,a,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",s="",f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{A=o.indexOf(e.charAt(f++))<<2|(i=o.indexOf(e.charAt(f++)))>>4,t=(15&i)<<4|(n=o.indexOf(e.charAt(f++)))>>2,r=(3&n)<<6|(a=o.indexOf(e.charAt(f++))),s+=String.fromCharCode(A),64!==n&&(s+=String.fromCharCode(t)),64!==a&&(s+=String.fromCharCode(r))}while(f>2]=I,i[g+4>>2]=_,u=u+1|0}while(16!=(0|u));u=e,g=(A=a)+64|0;do{r[A>>0]=0|r[u>>0],A=A+1|0,u=u+1|0}while((0|A)<(0|g));for(i[a+88>>2]=1595750129,i[a+88+4>>2]=-1521486534,J=-1377402159^(n[e+64>>0]|n[e+64+1>>0]<<8|n[e+64+2>>0]<<16|n[e+64+3>>0]<<24),K=1359893119^(n[e+64+4>>0]|n[e+64+4+1>>0]<<8|n[e+64+4+2>>0]<<16|n[e+64+4+3>>0]<<24),F=725511199^(n[e+72>>0]|n[e+72+1>>0]<<8|n[e+72+2>>0]<<16|n[e+72+3>>0]<<24),H=-1694144372^(n[e+72+4>>0]|n[e+72+4+1>>0]<<8|n[e+72+4+2>>0]<<16|n[e+72+4+3>>0]<<24),b=-79577749^(n[e+80>>0]|n[e+80+1>>0]<<8|n[e+80+2>>0]<<16|n[e+80+3>>0]<<24),Q=528734635^(n[e+80+4>>0]|n[e+80+4+1>>0]<<8|n[e+80+4+2>>0]<<16|n[e+80+4+3>>0]<<24),ee=327033209^(n[e+88>>0]|n[e+88+1>>0]<<8|n[e+88+2>>0]<<16|n[e+88+3>>0]<<24),Z=1541459225^(n[e+88+4>>0]|n[e+88+4+1>>0]<<8|n[e+88+4+2>>0]<<16|n[e+88+4+3>>0]<<24),B=0|i[a+32>>2],y=0|i[a+32+4>>2],y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(le=0|St(0|(X=0|i[a+128>>2]),0|(j=0|i[a+128+4>>2]),0|B,0|y)),0|(de=0|f()),0|i[a>>2],0|i[a+4>>2]))^J,(le=0|f())^K,32)),0|(J=0|f()),-205731576,1779033703))^B,(I=0|f())^y,24),B=0|f(),Ae=0|i[a+128+8>>2],te=0|i[a+128+8+4>>2],J=0|jA((le=0|St(0|(le=0|St(0|y,0|B,0|de,0|le)),0|f(),0|Ae,0|te))^K,(de=0|f())^J,16),K=0|f(),i[a+96>>2]=J,i[a+96+4>>2]=K,I=0|St(0|J,0|K,0|A,0|I),A=0|f(),i[a+64>>2]=I,i[a+64+4>>2]=A,B=0|jA(I^y,A^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,V=0|i[a+40>>2],$=0|i[a+40+4>>2],$=0|jA((p=0|St(0|(H=0|jA((ue=0|St(0|(he=0|St(0|(g=0|i[a+128+16>>2]),0|(u=0|i[a+128+16+4>>2]),0|V,0|$)),0|(ue=0|f()),0|i[a+8>>2],0|i[a+8+4>>2]))^F,(he=0|f())^H,32)),0|(F=0|f()),-2067093701,-1150833019))^V,(C=0|f())^$,24),V=0|f(),E=0|i[a+128+24>>2],w=0|i[a+128+24+4>>2],F=0|jA((he=0|St(0|(he=0|St(0|$,0|V,0|ue,0|he)),0|f(),0|E,0|w))^H,(ue=0|f())^F,16),H=0|f(),i[a+104>>2]=F,i[a+104+4>>2]=H,C=0|St(0|F,0|H,0|p,0|C),p=0|f(),i[a+72>>2]=C,i[a+72+4>>2]=p,V=0|jA(C^$,p^V,63),$=0|f(),N=0|i[a+48>>2],L=0|i[a+48+4>>2],L=0|jA((z=0|St(0|(Q=0|jA((fe=0|St(0|(se=0|St(0|(h=0|i[a+128+32>>2]),0|(ge=0|i[a+128+32+4>>2]),0|N,0|L)),0|(fe=0|f()),0|i[a+16>>2],0|i[a+16+4>>2]))^b,(se=0|f())^Q,32)),0|(b=0|f()),-23791573,1013904242))^N,(W=0|f())^L,24),N=0|f(),o=0|i[a+128+40>>2],S=0|i[a+128+40+4>>2],N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|L,0|N,0|fe,0|se)),0|f(),0|o,0|S))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),D=0|i[a+56>>2],k=0|i[a+56+4>>2],k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(ne=0|St(0|(m=0|i[a+128+48>>2]),0|(v=0|i[a+128+48+4>>2]),0|D,0|k)),0|(ae=0|f()),0|i[a+24>>2],0|i[a+24+4>>2]))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),1595750129,-1521486534))^D,(T=0|f())^k,24),D=0|f(),M=0|i[a+128+56>>2],P=0|i[a+128+56+4>>2],D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|k,0|D,0|ae,0|ne)),0|f(),0|M,0|P))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),O=0|i[a+128+64>>2],q=0|i[a+128+64+4>>2],$=0|jA((z=0|St(0|(Z=0|jA((de=0|St(0|(de=0|St(0|V,0|$,0|le,0|de)),0|f(),0|O,0|q))^ee,(le=0|f())^Z,32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),c=0|i[a+128+72>>2],ce=0|i[a+128+72+4>>2],ee=0|jA((le=0|St(0|(le=0|St(0|$,0|V,0|de,0|le)),0|f(),0|c,0|ce))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,W=0|St(0|ee,0|Z,0|z,0|W),z=0|f(),i[a+80>>2]=W,i[a+80+4>>2]=z,V=0|jA(W^$,z^V,63),$=0|f(),re=0|i[a+128+80>>2],ie=0|i[a+128+80+4>>2],L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|N,0|L,0|he,0|ue)),0|f(),0|re,0|ie))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),R=0|i[a+128+88>>2],x=0|i[a+128+88+4>>2],N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|L,0|N,0|ue,0|he)),0|f(),0|R,0|x))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),_=0|i[a+128+96>>2],d=0|i[a+128+96+4>>2],k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|D,0|k,0|se,0|fe)),0|f(),0|_,0|d))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),s=0|i[a+128+104>>2],oe=0|i[a+128+104+4>>2],D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|k,0|D,0|fe,0|se)),0|f(),0|s,0|oe))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),_e=0|i[a+128+112>>2],Ie=0|i[a+128+112+4>>2],y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(ae=0|St(0|ne,0|ae,0|B,0|y)),0|f(),0|_e,0|Ie))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),Y=0|i[a+128+120>>2],G=0|i[a+128+120+4>>2],B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|y,0|B,0|ae,0|ne)),0|f(),0|Y,0|G))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|_e,0|Ie,0|le,0|de)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|re,0|ie)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|h,0|ge)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|O,0|q)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|c,0|ce)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|Y,0|G,0|fe,0|se)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|s,0|oe)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|m,0|v)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|Ae,0|te)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|_,0|d)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|X,0|j)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|g,0|u)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|R,0|x)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|M,0|P)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|o,0|S)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|E,0|w)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|R,0|x)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|O,0|q)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|_,0|d)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|X,0|j)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|o,0|S)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|g,0|u)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|Y,0|G)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|s,0|oe)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|re,0|ie)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|_e,0|Ie)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|E,0|w)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|m,0|v)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|M,0|P)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|Ae,0|te)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|c,0|ce)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|h,0|ge)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|M,0|P)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|c,0|ce)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|E,0|w)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|Ae,0|te)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|s,0|oe)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|_,0|d)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|R,0|x)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|_e,0|Ie)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|g,0|u)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|m,0|v)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|o,0|S)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|re,0|ie)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|h,0|ge)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|X,0|j)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|Y,0|G)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|O,0|q)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|c,0|ce)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|X,0|j)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|o,0|S)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|M,0|P)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|g,0|u)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|h,0|ge)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|re,0|ie)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|Y,0|G)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|_e,0|Ie)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|Ae,0|te)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|R,0|x)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|_,0|d)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|m,0|v)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|O,0|q)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|E,0|w)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|s,0|oe)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|g,0|u)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|_,0|d)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|m,0|v)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|re,0|ie)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|X,0|j)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|R,0|x)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|O,0|q)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|E,0|w)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|h,0|ge)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|s,0|oe)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|M,0|P)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|o,0|S)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|Y,0|G)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|_e,0|Ie)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|Ae,0|te)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|c,0|ce)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|_,0|d)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|o,0|S)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|Ae,0|te)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|Y,0|G)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|_e,0|Ie)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|s,0|oe)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|h,0|ge)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|re,0|ie)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|X,0|j)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|M,0|P)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|m,0|v)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|E,0|w)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|c,0|ce)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|g,0|u)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|O,0|q)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|R,0|x)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|s,0|oe)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|R,0|x)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|M,0|P)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|_e,0|Ie)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|_,0|d)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|Ae,0|te)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|E,0|w)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|c,0|ce)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|o,0|S)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|X,0|j)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|Y,0|G)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|h,0|ge)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|O,0|q)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|m,0|v)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|g,0|u)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|re,0|ie)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|m,0|v)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|Y,0|G)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|_e,0|Ie)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|c,0|ce)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|R,0|x)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|E,0|w)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|X,0|j)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|O,0|q)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|_,0|d)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|g,0|u)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|s,0|oe)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|M,0|P)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|Ae,0|te)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|h,0|ge)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|re,0|ie)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|o,0|S)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|re,0|ie)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|g,0|u)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|O,0|q)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|h,0|ge)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|M,0|P)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|m,0|v)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|Ae,0|te)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|o,0|S)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|Y,0|G)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|R,0|x)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|c,0|ce)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|_e,0|Ie)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|E,0|w)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|_,0|d)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|s,0|oe)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|X,0|j)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((de=0|St(0|(de=0|St(0|le,0|de,0|X,0|j)),0|f(),0|B,0|y))^J,(le=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|Ae,0|te)),0|f(),0|y,0|B))^K,(de=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(pe=0|St(0|V,0|$,0|g,0|u)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|E,0|w)),0|f(),0|$,0|V))^H,(ue=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(pe=0|St(0|N,0|L,0|h,0|ge)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|o,0|S)),0|f(),0|L,0|N))^Q,(fe=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(pe=0|St(0|D,0|k,0|m,0|v)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|M,0|P)),0|f(),0|k,0|D))^Z,(ae=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(de=0|St(0|(de=0|St(0|le,0|de,0|O,0|q)),0|f(),0|V,0|$)),Z^(le=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),ee=0|jA((le=0|St(0|(le=0|St(0|de,0|le,0|c,0|ce)),0|f(),0|$,0|V))^Z,(de=0|f())^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,V=0|jA((W=0|St(0|ee,0|Z,0|z,0|W))^$,(z=0|f())^V,63),$=0|f(),L=0|jA((U=0|St(0|(K=0|jA((ue=0|St(0|(ue=0|St(0|he,0|ue,0|re,0|ie)),0|f(),0|N,0|L))^J,(he=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),N=0|jA((T=0|St(0|(J=0|jA((he=0|St(0|(he=0|St(0|ue,0|he,0|R,0|x)),0|f(),0|L,0|N))^K,(ue=0|f())^J,16)),0|(K=0|f()),0|U,0|T))^L,(U=0|f())^N,63),L=0|f(),k=0|jA((A=0|St(0|(H=0|jA((fe=0|St(0|(fe=0|St(0|se,0|fe,0|_,0|d)),0|f(),0|D,0|k))^F,(se=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),D=0|jA((I=0|St(0|(F=0|jA((se=0|St(0|(se=0|St(0|fe,0|se,0|s,0|oe)),0|f(),0|k,0|D))^H,(fe=0|f())^F,16)),0|(H=0|f()),0|A,0|I))^k,(A=0|f())^D,63),k=0|f(),y=0|jA((p=0|St(0|(Q=0|jA((ae=0|St(0|(pe=0|St(0|B,0|y,0|_e,0|Ie)),0|f(),0|ne,0|ae))^b,(ne=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),B=0|jA((C=0|St(0|(b=0|jA((ne=0|St(0|(ne=0|St(0|ae,0|ne,0|Y,0|G)),0|f(),0|y,0|B))^Q,(ae=0|f())^b,16)),0|(Q=0|f()),0|p,0|C))^y,(p=0|f())^B,63),y=0|f(),y=0|jA((A=0|St(0|(K=0|jA((Ie=0|St(0|(Ie=0|St(0|le,0|de,0|_e,0|Ie)),0|f(),0|B,0|y))^J,(_e=0|f())^K,32)),0|(J=0|f()),0|I,0|A))^B,(I=0|f())^y,24),B=0|f(),B=0|jA((I=0|St(0|(J=0|jA((ie=0|St(0|(ie=0|St(0|Ie,0|_e,0|re,0|ie)),0|f(),0|y,0|B))^K,(re=0|f())^J,16)),0|(K=0|f()),0|A,0|I))^y,(A=0|f())^B,63),y=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=y,$=0|jA((p=0|St(0|(H=0|jA(F^(ue=0|St(0|(ge=0|St(0|V,0|$,0|h,0|ge)),0|f(),0|he,0|ue)),H^(he=0|f()),32)),0|(F=0|f()),0|C,0|p))^V,(C=0|f())^$,24),V=0|f(),V=0|jA((C=0|St(0|(F=0|jA((q=0|St(0|(q=0|St(0|ue,0|he,0|O,0|q)),0|f(),0|$,0|V))^H,(O=0|f())^F,16)),0|(H=0|f()),0|p,0|C))^$,(p=0|f())^V,63),$=0|f(),L=0|jA((z=0|St(0|(Q=0|jA(b^(fe=0|St(0|(ce=0|St(0|N,0|L,0|c,0|ce)),0|f(),0|se,0|fe)),Q^(se=0|f()),32)),0|(b=0|f()),0|W,0|z))^N,(W=0|f())^L,24),N=0|f(),N=0|jA((W=0|St(0|(b=0|jA((G=0|St(0|(G=0|St(0|fe,0|se,0|Y,0|G)),0|f(),0|L,0|N))^Q,(Y=0|f())^b,16)),0|(Q=0|f()),0|z,0|W))^L,(z=0|f())^N,63),L=0|f(),k=0|jA((U=0|St(0|(Z=0|jA((ae=0|St(0|(oe=0|St(0|D,0|k,0|s,0|oe)),0|f(),0|ne,0|ae))^ee,(ne=0|f())^Z,32)),0|(ee=0|f()),0|T,0|U))^D,(T=0|f())^k,24),D=0|f(),D=0|jA((T=0|St(0|(ee=0|jA((v=0|St(0|(v=0|St(0|ae,0|ne,0|m,0|v)),0|f(),0|k,0|D))^Z,(m=0|f())^ee,16)),0|(Z=0|f()),0|U,0|T))^k,(U=0|f())^D,63),k=0|f(),$=0|jA((z=0|St(0|(Z=0|jA(ee^(te=0|St(0|(te=0|St(0|ie,0|re,0|Ae,0|te)),0|f(),0|V,0|$)),Z^(Ae=0|f()),32)),0|(ee=0|f()),0|W,0|z))^V,(W=0|f())^$,24),V=0|f(),d=0|St(0|(d=0|St(0|te,0|Ae,0|_,0|d)),0|f(),0|$,0|V),_=0|f(),i[a>>2]=d,i[a+4>>2]=_,ee=0|jA(d^Z,_^ee,16),Z=0|f(),i[a+120>>2]=ee,i[a+120+4>>2]=Z,W=0|St(0|ee,0|Z,0|z,0|W),z=0|f(),i[a+80>>2]=W,i[a+80+4>>2]=z,V=0|jA(W^$,z^V,63),z=0|f(),i[a+40>>2]=V,i[a+40+4>>2]=z,L=0|jA((U=0|St(0|(K=0|jA((j=0|St(0|(j=0|St(0|q,0|O,0|X,0|j)),0|f(),0|N,0|L))^J,(X=0|f())^K,32)),0|(J=0|f()),0|T,0|U))^N,(T=0|f())^L,24),N=0|f(),u=0|St(0|(u=0|St(0|j,0|X,0|g,0|u)),0|f(),0|L,0|N),g=0|f(),i[a+8>>2]=u,i[a+8+4>>2]=g,J=0|jA(u^K,g^J,16),K=0|f(),i[a+96>>2]=J,i[a+96+4>>2]=K,T=0|St(0|J,0|K,0|U,0|T),U=0|f(),i[a+88>>2]=T,i[a+88+4>>2]=U,N=0|jA(T^L,U^N,63),U=0|f(),i[a+48>>2]=N,i[a+48+4>>2]=U,k=0|jA((A=0|St(0|(H=0|jA((x=0|St(0|(x=0|St(0|G,0|Y,0|R,0|x)),0|f(),0|D,0|k))^F,(R=0|f())^H,32)),0|(F=0|f()),0|I,0|A))^D,(I=0|f())^k,24),D=0|f(),P=0|St(0|(P=0|St(0|x,0|R,0|M,0|P)),0|f(),0|k,0|D),M=0|f(),i[a+16>>2]=P,i[a+16+4>>2]=M,F=0|jA(P^H,M^F,16),M=0|f(),i[a+104>>2]=F,i[a+104+4>>2]=M,I=0|St(0|F,0|M,0|A,0|I),A=0|f(),i[a+64>>2]=I,i[a+64+4>>2]=A,D=0|jA(I^k,A^D,63),k=0|f(),i[a+56>>2]=D,i[a+56+4>>2]=k,y=0|jA((p=0|St(0|(Q=0|jA((m=0|St(0|(S=0|St(0|B,0|y,0|o,0|S)),0|f(),0|v,0|m))^b,(v=0|f())^Q,32)),0|(b=0|f()),0|C,0|p))^B,(C=0|f())^y,24),B=0|f(),w=0|St(0|(w=0|St(0|m,0|v,0|E,0|w)),0|f(),0|y,0|B),E=0|f(),i[a+24>>2]=w,i[a+24+4>>2]=E,b=0|jA(w^Q,E^b,16),E=0|f(),i[a+112>>2]=b,i[a+112+4>>2]=E,C=0|St(0|b,0|E,0|p,0|C),p=0|f(),i[a+72>>2]=C,i[a+72+4>>2]=p,B=0|jA(C^y,p^B,63),p=0|f(),i[a+32>>2]=B,i[a+32+4>>2]=p,I=d^(n[e>>0]|n[e+1>>0]<<8|n[e+2>>0]<<16|n[e+3>>0]<<24)^I,A=_^(n[e+4>>0]|n[e+4+1>>0]<<8|n[e+4+2>>0]<<16|n[e+4+3>>0]<<24)^A,r[e>>0]=I,r[e+1>>0]=I>>8,r[e+2>>0]=I>>16,r[e+3>>0]=I>>24,r[e+4>>0]=A,r[e+4+1>>0]=A>>8,r[e+4+2>>0]=A>>16,r[e+4+3>>0]=A>>24,A=1;le=a+(A+8<<3)|0,de=u^(n[(pe=e+(A<<3)|0)>>0]|n[pe+1>>0]<<8|n[pe+2>>0]<<16|n[pe+3>>0]<<24)^i[le>>2],le=g^(n[pe+4>>0]|n[pe+4+1>>0]<<8|n[pe+4+2>>0]<<16|n[pe+4+3>>0]<<24)^i[le+4>>2],r[pe>>0]=de,r[pe+1>>0]=de>>8,r[pe+2>>0]=de>>16,r[pe+3>>0]=de>>24,r[pe+4>>0]=le,r[pe+4+1>>0]=le>>8,r[pe+4+2>>0]=le>>16,r[pe+4+3>>0]=le>>24,8!=(0|(A=A+1|0));)u=0|i[a+(A<<3)>>2],g=0|i[a+(A<<3)+4>>2];l=t}function B(e,A,t,i){e|=0,t|=0,i|=0;var n,a,o,s,c,h,u,g,_,I,d,l,p,B,y,C,E,b,Q,w,v,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0,N=0,L=0,T=0,K=0,J=0,X=0,j=0,O=0,q=0,z=0,V=0,$=0,W=0,Z=0,ee=0,Ae=0,te=0,re=0,ie=0,ne=0,ae=0,oe=0,se=0,fe=0,ce=0,he=0,ue=0,ge=0,_e=0,Ie=0,de=0,le=0,pe=0,Be=0,ye=0,Ce=0,Ee=0,be=0,Qe=0,we=0,ve=0,me=0,Se=0,ke=0,De=0,Me=0,Fe=0,He=0,Pe=0,Re=0,xe=0,Ye=0,Ge=0,Ue=0,Ne=0,Le=0,Te=0,Ke=0,Je=0,Xe=0,je=0,Oe=0,qe=0,ze=0,Ve=0,$e=0,We=0,Ze=0,eA=0,AA=0,tA=0,rA=0,iA=0,nA=0,aA=0,oA=0,sA=0,fA=0,cA=0,hA=0,uA=0,gA=0,_A=0,IA=0,dA=0,lA=0,pA=0,yA=0,CA=0,EA=0,bA=0,QA=0,wA=0,vA=0,mA=0,SA=0,kA=0,DA=0,MA=0,FA=0,HA=0,PA=0,RA=0,xA=0,YA=0,GA=0,UA=0,NA=0,LA=0,TA=0,KA=0,JA=0,XA=0,jA=0,OA=0,qA=0,zA=0,VA=0,WA=0,et=0,tt=0,rt=0,it=0,nt=0,at=0,st=0,ft=0,ct=0,ut=0,gt=0,_t=0,It=0,dt=0,lt=0,pt=0,Bt=0,yt=0,Ct=0,Et=0,bt=0;de=0|$A(0|r[(A|=0)>>0],0|r[A+1>>0],0|r[A+2>>0]),f(),HA=0|ht(0|(HA=0|BA(A+2|0)),0|f(),5),f(),QA=0|ht(0|(QA=0|$A(0|r[A+5>>0],0|r[A+6>>0],0|r[A+7>>0])),0|f(),2),f(),FA=0|ht(0|(FA=0|BA(A+7|0)),0|f(),7),f(),lA=0|ht(0|(lA=0|BA(A+10|0)),0|f(),4),f(),ie=0|ht(0|(ie=0|$A(0|r[A+13>>0],0|r[A+14>>0],0|r[A+15>>0])),0|f(),1),f(),Ce=0|ht(0|(Ce=0|BA(A+15|0)),0|f(),6),f(),m=0|ht(0|(m=0|$A(0|r[A+18>>0],0|r[A+19>>0],0|r[A+20>>0])),0|f(),3),f(),ne=0|$A(0|r[A+21>>0],0|r[A+22>>0],0|r[A+23>>0]),f(),O=0|ht(0|(O=0|BA(A+23|0)),0|f(),5),f(),Qe=0|ht(0|(Qe=0|$A(0|r[A+26>>0],0|r[A+27>>0],0|r[A+28>>0])),0|f(),2),f(),Se=0|ht(0|(Se=0|BA(A+28|0)),0|f(),7),ke=0|f(),JA=0|$A(0|r[t>>0],0|r[t+1>>0],0|r[t+2>>0]),f(),yA=0|ht(0|(yA=0|BA(t+2|0)),0|f(),5),f(),tA=0|ht(0|(tA=0|$A(0|r[t+5>>0],0|r[t+6>>0],0|r[t+7>>0])),0|f(),2),f(),S=0|ht(0|(S=0|BA(t+7|0)),0|f(),7),f(),k=0|ht(0|(k=0|BA(t+10|0)),0|f(),4),f(),T=0|ht(0|(T=0|$A(0|r[t+13>>0],0|r[t+14>>0],0|r[t+15>>0])),0|f(),1),f(),ze=0|ht(0|(ze=0|BA(t+15|0)),0|f(),6),f(),pe=0|ht(0|(pe=0|$A(0|r[t+18>>0],0|r[t+19>>0],0|r[t+20>>0])),0|f(),3),f(),Ge=0|$A(0|r[t+21>>0],0|r[t+22>>0],0|r[t+23>>0]),f(),Ae=0|ht(0|(Ae=0|BA(t+23|0)),0|f(),5),f(),UA=0|ht(0|(UA=0|$A(0|r[t+26>>0],0|r[t+27>>0],0|r[t+28>>0])),0|f(),2),f(),ge=0|ht(0|(ge=0|BA(t+28|0)),0|f(),7),ue=0|f(),Le=0|$A(0|r[i>>0],0|r[i+1>>0],0|r[i+2>>0]),f(),re=0|ht(0|(re=0|BA(i+2|0)),0|f(),5),f(),Ke=0|ht(0|(Ke=0|$A(0|r[i+5>>0],0|r[i+6>>0],0|r[i+7>>0])),0|f(),2),f(),Re=0|ht(0|(Re=0|BA(i+7|0)),0|f(),7),f(),Ye=0|ht(0|(Ye=0|BA(i+10|0)),0|f(),4),f(),Ve=0|ht(0|(Ve=0|$A(0|r[i+13>>0],0|r[i+14>>0],0|r[i+15>>0])),0|f(),1),f(),mA=0|ht(0|(mA=0|BA(i+15|0)),0|f(),6),f(),H=0|ht(0|(H=0|$A(0|r[i+18>>0],0|r[i+19>>0],0|r[i+20>>0])),0|f(),3),f(),cA=0|$A(0|r[i+21>>0],0|r[i+22>>0],0|r[i+23>>0]),f(),je=0|ht(0|(je=0|BA(i+23|0)),0|f(),5),f(),_e=0|ht(0|(_e=0|$A(0|r[i+26>>0],0|r[i+27>>0],0|r[i+28>>0])),0|f(),2),f(),EA=0|ht(0|(EA=0|BA(i+28|0)),0|f(),7),SA=0|f(),Ne=0|St(2097151&Le|0,0,0|(Ne=0|ZA(2097151&JA|0,0,2097151&de|0,0)),0|f()),Le=0|f(),C=0|ZA(2097151&yA|0,0,2097151&de|0,0),y=0|f(),B=0|ZA(2097151&JA|0,0,2097151&HA|0,0),Ze=0|f(),W=0|ZA(2097151&tA|0,0,2097151&de|0,0),Te=0|f(),Ke=0|St(0|(Te=0|St(0|(Pe=0|St(0|($=0|ZA(2097151&yA|0,0,2097151&HA|0,0)),0|f(),0|(Pe=0|ZA(2097151&JA|0,0,2097151&QA|0,0)),0|f())),0|f(),0|W,0|Te)),0|f(),2097151&Ke|0,0),Te=0|f(),W=0|ZA(2097151&S|0,0,2097151&de|0,0),Pe=0|f(),v=0|ZA(2097151&tA|0,0,2097151&HA|0,0),$=0|f(),p=0|ZA(2097151&yA|0,0,2097151&QA|0,0),l=0|f(),d=0|ZA(2097151&JA|0,0,2097151&FA|0,0),bt=0|f(),he=0|ZA(2097151&k|0,0,2097151&de|0,0),xe=0|f(),pt=0|ZA(2097151&S|0,0,2097151&HA|0,0),$e=0|f(),yt=0|ZA(2097151&tA|0,0,2097151&QA|0,0),Y=0|f(),Ye=0|St(0|(xe=0|St(0|($e=0|St(0|(Y=0|St(0|(Bt=0|St(0|(Ct=0|ZA(2097151&yA|0,0,2097151&FA|0,0)),0|f(),0|(Bt=0|ZA(2097151&JA|0,0,2097151&lA|0,0)),0|f())),0|f(),0|yt,0|Y)),0|f(),0|pt,0|$e)),0|f(),0|he,0|xe)),0|f(),2097151&Ye|0,0),xe=0|f(),he=0|ZA(2097151&T|0,0,2097151&de|0,0),$e=0|f(),pt=0|ZA(2097151&k|0,0,2097151&HA|0,0),Y=0|f(),yt=0|ZA(2097151&S|0,0,2097151&QA|0,0),Bt=0|f(),w=0|ZA(2097151&tA|0,0,2097151&FA|0,0),Ct=0|f(),I=0|ZA(2097151&yA|0,0,2097151&lA|0,0),_=0|f(),g=0|ZA(2097151&JA|0,0,2097151&ie|0,0),Et=0|f(),A=0|ZA(2097151&ze|0,0,2097151&de|0,0),CA=0|f(),st=0|ZA(2097151&T|0,0,2097151&HA|0,0),D=0|f(),ct=0|ZA(2097151&k|0,0,2097151&QA|0,0),F=0|f(),gt=0|ZA(2097151&S|0,0,2097151&FA|0,0),ft=0|f(),It=0|ZA(2097151&tA|0,0,2097151&lA|0,0),ut=0|f(),mA=0|St(0|(CA=0|St(0|(D=0|St(0|(F=0|St(0|(ft=0|St(0|(ut=0|St(0|(_t=0|St(0|(dt=0|ZA(2097151&yA|0,0,2097151&ie|0,0)),0|f(),0|(_t=0|ZA(2097151&JA|0,0,2097151&Ce|0,0)),0|f())),0|f(),0|It,0|ut)),0|f(),0|gt,0|ft)),0|f(),0|ct,0|F)),0|f(),0|st,0|D)),0|f(),0|A,0|CA)),0|f(),2097151&mA|0,0),CA=0|f(),A=0|ZA(2097151&pe|0,0,2097151&de|0,0),D=0|f(),st=0|ZA(2097151&ze|0,0,2097151&HA|0,0),F=0|f(),ct=0|ZA(2097151&T|0,0,2097151&QA|0,0),ft=0|f(),gt=0|ZA(2097151&k|0,0,2097151&FA|0,0),ut=0|f(),It=0|ZA(2097151&S|0,0,2097151&lA|0,0),_t=0|f(),Q=0|ZA(2097151&tA|0,0,2097151&ie|0,0),dt=0|f(),u=0|ZA(2097151&yA|0,0,2097151&Ce|0,0),h=0|f(),c=0|ZA(2097151&JA|0,0,2097151&m|0,0),lt=0|f(),OA=0|ZA(2097151&Ge|0,0,2097151&de|0,0),M=0|f(),j=0|ZA(2097151&pe|0,0,2097151&HA|0,0),hA=0|f(),XA=0|ZA(2097151&ze|0,0,2097151&QA|0,0),jA=0|f(),zA=0|ZA(2097151&T|0,0,2097151&FA|0,0),X=0|f(),WA=0|ZA(2097151&k|0,0,2097151&lA|0,0),qA=0|f(),tt=0|ZA(2097151&S|0,0,2097151&ie|0,0),VA=0|f(),it=0|ZA(2097151&tA|0,0,2097151&Ce|0,0),et=0|f(),cA=0|St(0|(hA=0|St(0|(M=0|St(0|(jA=0|St(0|(X=0|St(0|(qA=0|St(0|(VA=0|St(0|(et=0|St(0|(rt=0|St(0|(nt=0|ZA(2097151&yA|0,0,2097151&m|0,0)),0|f(),0|(rt=0|ZA(2097151&JA|0,0,2097151&ne|0,0)),0|f())),0|f(),0|it,0|et)),0|f(),0|tt,0|VA)),0|f(),0|WA,0|qA)),0|f(),0|zA,0|X)),0|f(),0|XA,0|jA)),0|f(),0|OA,0|M)),0|f(),0|j,0|hA)),0|f(),2097151&cA|0,0),hA=0|f(),j=0|ZA(2097151&Ae|0,0,2097151&de|0,0),M=0|f(),OA=0|ZA(2097151&Ge|0,0,2097151&HA|0,0),jA=0|f(),XA=0|ZA(2097151&pe|0,0,2097151&QA|0,0),X=0|f(),zA=0|ZA(2097151&ze|0,0,2097151&FA|0,0),qA=0|f(),WA=0|ZA(2097151&T|0,0,2097151&lA|0,0),VA=0|f(),tt=0|ZA(2097151&k|0,0,2097151&ie|0,0),et=0|f(),it=0|ZA(2097151&S|0,0,2097151&Ce|0,0),rt=0|f(),b=0|ZA(2097151&tA|0,0,2097151&m|0,0),nt=0|f(),s=0|ZA(2097151&yA|0,0,2097151&ne|0,0),o=0|f(),a=0|ZA(2097151&JA|0,0,2097151&O|0,0),at=0|f(),le=0|ZA(2097151&UA|0,0,2097151&de|0,0),Ie=0|f(),V=0|ZA(2097151&Ae|0,0,2097151&HA|0,0),z=0|f(),oA=0|ZA(2097151&Ge|0,0,2097151&QA|0,0),aA=0|f(),xA=0|ZA(2097151&pe|0,0,2097151&FA|0,0),RA=0|f(),ae=0|ZA(2097151&ze|0,0,2097151&lA|0,0),R=0|f(),vA=0|ZA(2097151&T|0,0,2097151&ie|0,0),wA=0|f(),AA=0|ZA(2097151&k|0,0,2097151&Ce|0,0),eA=0|f(),gA=0|ZA(2097151&S|0,0,2097151&m|0,0),uA=0|f(),q=0|ZA(2097151&tA|0,0,2097151&ne|0,0),i=0|f(),_e=0|St(0|(Ie=0|St(0|(z=0|St(0|(RA=0|St(0|(aA=0|St(0|(R=0|St(0|(wA=0|St(0|(eA=0|St(0|(uA=0|St(0|(i=0|St(0|(TA=0|St(0|ZA(2097151&yA|0,0,2097151&O|0,0),0|(LA=0|f()),0|(TA=0|ZA(2097151&JA|0,0,2097151&Qe|0,0)),0|f())),0|f(),0|q,0|i)),0|f(),0|gA,0|uA)),0|f(),0|AA,0|eA)),0|f(),0|vA,0|wA)),0|f(),0|ae,0|R)),0|f(),0|oA,0|aA)),0|f(),0|xA,0|RA)),0|f(),0|V,0|z)),0|f(),0|le,0|Ie)),0|f(),2097151&_e|0,0),Ie=0|f(),de=0|ZA(0|ge,0|ue,2097151&de|0,0),le=0|f(),z=0|ZA(2097151&UA|0,0,2097151&HA|0,0),V=0|f(),RA=0|ZA(2097151&Ae|0,0,2097151&QA|0,0),xA=0|f(),aA=0|ZA(2097151&Ge|0,0,2097151&FA|0,0),oA=0|f(),R=0|ZA(2097151&pe|0,0,2097151&lA|0,0),ae=0|f(),wA=0|ZA(2097151&ze|0,0,2097151&ie|0,0),vA=0|f(),eA=0|ZA(2097151&T|0,0,2097151&Ce|0,0),AA=0|f(),uA=0|ZA(2097151&k|0,0,2097151&m|0,0),gA=0|f(),i=0|ZA(2097151&S|0,0,2097151&ne|0,0),q=0|f(),TA=0|ZA(2097151&tA|0,0,2097151&O|0,0),LA=0|f(),E=0|ZA(2097151&yA|0,0,2097151&Qe|0,0),n=0|f(),JA=0|ZA(2097151&JA|0,0,0|Se,0|ke),KA=0|f(),HA=0|ZA(0|ge,0|ue,2097151&HA|0,0),PA=0|f(),Be=0|ZA(2097151&UA|0,0,2097151&QA|0,0),bA=0|f(),YA=0|ZA(2097151&Ae|0,0,2097151&FA|0,0),U=0|f(),be=0|ZA(2097151&Ge|0,0,2097151&lA|0,0),ce=0|f(),fe=0|ZA(2097151&pe|0,0,2097151&ie|0,0),GA=0|f(),Fe=0|ZA(2097151&ze|0,0,2097151&Ce|0,0),L=0|f(),we=0|ZA(2097151&T|0,0,2097151&m|0,0),He=0|f(),IA=0|ZA(2097151&k|0,0,2097151&ne|0,0),De=0|f(),pA=0|ZA(2097151&S|0,0,2097151&O|0,0),_A=0|f(),PA=0|St(0|(bA=0|St(0|(U=0|St(0|(GA=0|St(0|(ce=0|St(0|(L=0|St(0|(He=0|St(0|(De=0|St(0|(_A=0|St(0|(yA=0|St(0|(MA=0|ZA(2097151&tA|0,0,2097151&Qe|0,0)),0|(rA=0|f()),0|(yA=0|ZA(2097151&yA|0,0,0|Se,0|ke)),0|f())),0|f(),0|pA,0|_A)),0|f(),0|IA,0|De)),0|f(),0|we,0|He)),0|f(),0|Fe,0|L)),0|f(),0|be,0|ce)),0|f(),0|fe,0|GA)),0|f(),0|YA,0|U)),0|f(),0|Be,0|bA)),0|f(),0|HA,0|PA),HA=0|f(),QA=0|ZA(0|ge,0|ue,2097151&QA|0,0),bA=0|f(),Be=0|ZA(2097151&UA|0,0,2097151&FA|0,0),U=0|f(),YA=0|ZA(2097151&Ae|0,0,2097151&lA|0,0),GA=0|f(),fe=0|ZA(2097151&Ge|0,0,2097151&ie|0,0),ce=0|f(),be=0|ZA(2097151&pe|0,0,2097151&Ce|0,0),L=0|f(),Fe=0|ZA(2097151&ze|0,0,2097151&m|0,0),He=0|f(),we=0|ZA(2097151&T|0,0,2097151&ne|0,0),De=0|f(),IA=0|ZA(2097151&k|0,0,2097151&O|0,0),_A=0|f(),pA=0|ZA(2097151&S|0,0,2097151&Qe|0,0),yA=0|f(),tA=0|ZA(2097151&tA|0,0,0|Se,0|ke),rA=0|f(),FA=0|ZA(0|ge,0|ue,2097151&FA|0,0),MA=0|f(),kA=0|ZA(2097151&UA|0,0,2097151&lA|0,0),dA=0|f(),K=0|ZA(2097151&Ae|0,0,2097151&ie|0,0),DA=0|f(),Oe=0|ZA(2097151&Ge|0,0,2097151&Ce|0,0),Z=0|f(),x=0|ZA(2097151&pe|0,0,2097151&m|0,0),t=0|f(),P=0|ZA(2097151&ze|0,0,2097151&ne|0,0),We=0|f(),Ee=0|ZA(2097151&T|0,0,2097151&O|0,0),ye=0|f(),MA=0|St(0|(dA=0|St(0|(DA=0|St(0|(t=0|St(0|(Z=0|St(0|(We=0|St(0|(ye=0|St(0|(S=0|St(0|(NA=0|ZA(2097151&k|0,0,2097151&Qe|0,0)),0|(N=0|f()),0|(S=0|ZA(2097151&S|0,0,0|Se,0|ke)),0|f())),0|f(),0|Ee,0|ye)),0|f(),0|P,0|We)),0|f(),0|Oe,0|Z)),0|f(),0|x,0|t)),0|f(),0|K,0|DA)),0|f(),0|kA,0|dA)),0|f(),0|FA,0|MA),FA=0|f(),lA=0|ZA(0|ge,0|ue,2097151&lA|0,0),dA=0|f(),kA=0|ZA(2097151&UA|0,0,2097151&ie|0,0),DA=0|f(),K=0|ZA(2097151&Ae|0,0,2097151&Ce|0,0),t=0|f(),x=0|ZA(2097151&Ge|0,0,2097151&m|0,0),Z=0|f(),Oe=0|ZA(2097151&pe|0,0,2097151&ne|0,0),We=0|f(),P=0|ZA(2097151&ze|0,0,2097151&O|0,0),ye=0|f(),Ee=0|ZA(2097151&T|0,0,2097151&Qe|0,0),S=0|f(),k=0|ZA(2097151&k|0,0,0|Se,0|ke),N=0|f(),ie=0|ZA(0|ge,0|ue,2097151&ie|0,0),NA=0|f(),nA=0|ZA(2097151&UA|0,0,2097151&Ce|0,0),te=0|f(),me=0|ZA(2097151&Ae|0,0,2097151&m|0,0),iA=0|f(),J=0|ZA(2097151&Ge|0,0,2097151&ne|0,0),oe=0|f(),se=0|ZA(2097151&pe|0,0,2097151&O|0,0),ve=0|f(),NA=0|St(0|(te=0|St(0|(iA=0|St(0|(ve=0|St(0|(oe=0|St(0|(T=0|St(0|(G=0|ZA(2097151&ze|0,0,2097151&Qe|0,0)),0|(qe=0|f()),0|(T=0|ZA(2097151&T|0,0,0|Se,0|ke)),0|f())),0|f(),0|J,0|oe)),0|f(),0|se,0|ve)),0|f(),0|me,0|iA)),0|f(),0|nA,0|te)),0|f(),0|ie,0|NA),ie=0|f(),Ce=0|ZA(0|ge,0|ue,2097151&Ce|0,0),te=0|f(),nA=0|ZA(2097151&UA|0,0,2097151&m|0,0),iA=0|f(),me=0|ZA(2097151&Ae|0,0,2097151&ne|0,0),ve=0|f(),se=0|ZA(2097151&Ge|0,0,2097151&O|0,0),oe=0|f(),J=0|ZA(2097151&pe|0,0,2097151&Qe|0,0),T=0|f(),ze=0|ZA(2097151&ze|0,0,0|Se,0|ke),qe=0|f(),m=0|ZA(0|ge,0|ue,2097151&m|0,0),G=0|f(),Je=0|ZA(2097151&UA|0,0,2097151&ne|0,0),ee=0|f(),fA=0|ZA(2097151&Ae|0,0,2097151&O|0,0),Xe=0|f(),Ue=0|ZA(2097151&Ge|0,0,2097151&Qe|0,0),sA=0|f(),G=0|St(0|(ee=0|St(0|(Xe=0|St(0|(sA=0|St(0|(pe=0|ZA(2097151&pe|0,0,0|Se,0|ke)),0|f(),0|Ue,0|sA)),0|f(),0|fA,0|Xe)),0|f(),0|Je,0|ee)),0|f(),0|m,0|G),m=0|f(),ne=0|ZA(0|ge,0|ue,2097151&ne|0,0),ee=0|f(),Je=0|ZA(2097151&UA|0,0,2097151&O|0,0),Xe=0|f(),fA=0|ZA(2097151&Ae|0,0,2097151&Qe|0,0),sA=0|f(),Ge=0|ZA(2097151&Ge|0,0,0|Se,0|ke),Ue=0|f(),O=0|ZA(0|ge,0|ue,2097151&O|0,0),pe=0|f(),pe=0|St(0|(Ae=0|St(0|ZA(2097151&UA|0,0,2097151&Qe|0,0),0|(Me=0|f()),0|(Ae=0|ZA(2097151&Ae|0,0,0|Se,0|ke)),0|f())),0|f(),0|O,0|pe),O=0|f(),UA=0|St(0|(Qe=0|ZA(0|ge,0|ue,2097151&Qe|0,0)),0|(Ae=0|f()),0|(UA=0|ZA(2097151&UA|0,0,0|Se,0|ke)),0|f()),Ae=0|f(),ke=0|ZA(0|ge,0|ue,0|Se,0|ke),Se=0|f(),Qe=0|ht(0|(ue=0|St(0|Ne,0|Le,1048576,0)),0|(ge=0|f()),21),Me=0|f(),Me=0|St(0|(re=0|St(0|(Ze=0|St(0|C,0|y,0|B,0|Ze)),0|f(),2097151&re|0,0)),0|f(),0|Qe,0|Me),Qe=0|f(),ge=0|mt(0|Ne,0|Le,-2097152&ue|0,4095&ge|0),ue=0|f(),re=0|ht(0|(Le=0|St(0|Ke,0|Te,1048576,0)),0|(Ne=0|f()),21),Ze=0|f(),Ze=0|St(0|(Re=0|St(0|(Pe=0|St(0|($=0|St(0|(bt=0|St(0|p,0|l,0|d,0|bt)),0|f(),0|v,0|$)),0|f(),0|W,0|Pe)),0|f(),2097151&Re|0,0)),0|f(),0|re,0|Ze),re=0|f(),W=0|At(0|(Re=0|St(0|Ye,0|xe,1048576,0)),0|(Pe=0|f()),21),$=0|f(),$=0|St(0|(Ve=0|St(0|($e=0|St(0|(Y=0|St(0|(Bt=0|St(0|(Ct=0|St(0|(Et=0|St(0|I,0|_,0|g,0|Et)),0|f(),0|w,0|Ct)),0|f(),0|yt,0|Bt)),0|f(),0|pt,0|Y)),0|f(),0|he,0|$e)),0|f(),2097151&Ve|0,0)),0|f(),0|W,0|$),W=0|f(),he=0|At(0|(Ve=0|St(0|mA,0|CA,1048576,0)),0|($e=0|f()),21),Y=0|f(),Y=0|St(0|(H=0|St(0|(D=0|St(0|(F=0|St(0|(ft=0|St(0|(ut=0|St(0|(_t=0|St(0|(dt=0|St(0|(lt=0|St(0|u,0|h,0|c,0|lt)),0|f(),0|Q,0|dt)),0|f(),0|It,0|_t)),0|f(),0|gt,0|ut)),0|f(),0|ct,0|ft)),0|f(),0|st,0|F)),0|f(),0|A,0|D)),0|f(),2097151&H|0,0)),0|f(),0|he,0|Y),he=0|f(),A=0|At(0|(H=0|St(0|cA,0|hA,1048576,0)),0|(D=0|f()),21),F=0|f(),F=0|St(0|(je=0|St(0|(M=0|St(0|(X=0|St(0|(jA=0|St(0|(qA=0|St(0|(VA=0|St(0|(et=0|St(0|(rt=0|St(0|(nt=0|St(0|(at=0|St(0|s,0|o,0|a,0|at)),0|f(),0|b,0|nt)),0|f(),0|it,0|rt)),0|f(),0|tt,0|et)),0|f(),0|WA,0|VA)),0|f(),0|zA,0|qA)),0|f(),0|OA,0|jA)),0|f(),0|XA,0|X)),0|f(),0|j,0|M)),0|f(),2097151&je|0,0)),0|f(),0|A,0|F),A=0|f(),j=0|At(0|(je=0|St(0|_e,0|Ie,1048576,0)),0|(M=0|f()),21),X=0|f(),X=0|St(0|(SA=0|St(0|(V=0|St(0|(le=0|St(0|(xA=0|St(0|(ae=0|St(0|(oA=0|St(0|(vA=0|St(0|(AA=0|St(0|(gA=0|St(0|(q=0|St(0|(LA=0|St(0|(KA=0|St(0|E,0|n,0|JA,0|KA)),0|f(),0|TA,0|LA)),0|f(),0|i,0|q)),0|f(),0|uA,0|gA)),0|f(),0|eA,0|AA)),0|f(),0|wA,0|vA)),0|f(),0|aA,0|oA)),0|f(),0|R,0|ae)),0|f(),0|RA,0|xA)),0|f(),0|de,0|le)),0|f(),0|z,0|V)),0|f(),0|EA,0|SA)),0|f(),0|j,0|X),j=0|f(),V=0|At(0|(SA=0|St(0|PA,0|HA,1048576,0)),0|(EA=0|f()),21),z=0|f(),z=0|St(0|(bA=0|St(0|(U=0|St(0|(GA=0|St(0|(L=0|St(0|(ce=0|St(0|(He=0|St(0|(De=0|St(0|(_A=0|St(0|(rA=0|St(0|pA,0|yA,0|tA,0|rA)),0|f(),0|IA,0|_A)),0|f(),0|we,0|De)),0|f(),0|Fe,0|He)),0|f(),0|fe,0|ce)),0|f(),0|be,0|L)),0|f(),0|YA,0|GA)),0|f(),0|Be,0|U)),0|f(),0|QA,0|bA)),0|f(),0|V,0|z),V=0|f(),U=0|At(0|(bA=0|St(0|MA,0|FA,1048576,0)),0|(QA=0|f()),21),Be=0|f(),Be=0|St(0|(dA=0|St(0|(DA=0|St(0|(t=0|St(0|(We=0|St(0|(Z=0|St(0|(ye=0|St(0|(N=0|St(0|Ee,0|S,0|k,0|N)),0|f(),0|P,0|ye)),0|f(),0|x,0|Z)),0|f(),0|Oe,0|We)),0|f(),0|K,0|t)),0|f(),0|kA,0|DA)),0|f(),0|lA,0|dA)),0|f(),0|U,0|Be),U=0|f(),DA=0|At(0|(dA=0|St(0|NA,0|ie,1048576,0)),0|(lA=0|f()),21),kA=0|f(),kA=0|St(0|(te=0|St(0|(iA=0|St(0|(ve=0|St(0|(T=0|St(0|(qe=0|St(0|se,0|oe,0|ze,0|qe)),0|f(),0|J,0|T)),0|f(),0|me,0|ve)),0|f(),0|nA,0|iA)),0|f(),0|Ce,0|te)),0|f(),0|DA,0|kA),DA=0|f(),iA=0|At(0|(te=0|St(0|G,0|m,1048576,0)),0|(Ce=0|f()),21),nA=0|f(),nA=0|St(0|(ee=0|St(0|(Xe=0|St(0|(Ue=0|St(0|fA,0|sA,0|Ge,0|Ue)),0|f(),0|Je,0|Xe)),0|f(),0|ne,0|ee)),0|f(),0|iA,0|nA),iA=0|f(),Ce=0|mt(0|G,0|m,-2097152&te|0,0|Ce),te=0|f(),ee=0|St(0|UA,0|Ae,0|(ee=0|At(0|(m=0|St(0|pe,0|O,1048576,0)),0|(G=0|f()),21)),0|f()),Ae=0|f(),G=0|mt(0|pe,0|O,-2097152&m|0,0|G),m=0|f(),UA=0|At(0|(O=0|St(0|ke,0|Se,1048576,0)),0|(pe=0|f()),21),ne=0|f(),pe=0|mt(0|ke,0|Se,-2097152&O|0,0|pe),O=0|f(),Xe=0|ht(0|(Se=0|St(0|Me,0|Qe,1048576,0)),0|(ke=0|f()),21),Je=0|f(),ke=0|mt(0|Me,0|Qe,-2097152&Se|0,0|ke),Se=0|f(),Ue=0|At(0|(Qe=0|St(0|Ze,0|re,1048576,0)),0|(Me=0|f()),21),Ge=0|f(),Me=0|mt(0|Ze,0|re,-2097152&Qe|0,0|Me),Qe=0|f(),sA=0|At(0|(re=0|St(0|$,0|W,1048576,0)),0|(Ze=0|f()),21),fA=0|f(),Ze=0|mt(0|$,0|W,-2097152&re|0,0|Ze),re=0|f(),ve=0|At(0|(W=0|St(0|Y,0|he,1048576,0)),0|($=0|f()),21),me=0|f(),qe=0|At(0|(T=0|St(0|F,0|A,1048576,0)),0|(J=0|f()),21),ze=0|f(),t=0|At(0|(oe=0|St(0|X,0|j,1048576,0)),0|(se=0|f()),21),K=0|f(),Z=0|At(0|(We=0|St(0|z,0|V,1048576,0)),0|(Oe=0|f()),21),x=0|f(),N=0|At(0|(ye=0|St(0|Be,0|U,1048576,0)),0|(P=0|f()),21),k=0|f(),te=0|St(0|(GA=0|At(0|(S=0|St(0|kA,0|DA,1048576,0)),0|(Ee=0|f()),21)),0|f(),0|Ce,0|te),Ce=0|f(),Ee=0|mt(0|kA,0|DA,-2097152&S|0,0|Ee),S=0|f(),m=0|St(0|(GA=0|At(0|(DA=0|St(0|nA,0|iA,1048576,0)),0|(kA=0|f()),21)),0|f(),0|G,0|m),G=0|f(),kA=0|mt(0|nA,0|iA,-2097152&DA|0,0|kA),DA=0|f(),O=0|St(0|(GA=0|At(0|(iA=0|St(0|ee,0|Ae,1048576,0)),0|(nA=0|f()),21)),0|f(),0|pe,0|O),pe=0|f(),nA=0|mt(0|ee,0|Ae,-2097152&iA|0,0|nA),iA=0|f(),Ae=0|ZA(0|UA,0|ne,666643,0),ee=0|f(),GA=0|ZA(0|UA,0|ne,470296,0),YA=0|f(),L=0|ZA(0|UA,0|ne,654183,0),be=0|f(),ce=0|ZA(0|UA,0|ne,-997805,-1),fe=0|f(),He=0|ZA(0|UA,0|ne,136657,0),Fe=0|f(),k=0|St(0|(lA=0|mt(0|(ne=0|St(0|NA,0|ie,0|(ne=0|ZA(0|UA,0|ne,-683901,-1)),0|f())),0|f(),-2097152&dA|0,0|lA)),0|f(),0|N,0|k),N=0|f(),lA=0|ZA(0|O,0|pe,666643,0),dA=0|f(),ne=0|ZA(0|O,0|pe,470296,0),ie=0|f(),NA=0|ZA(0|O,0|pe,654183,0),UA=0|f(),De=0|ZA(0|O,0|pe,-997805,-1),we=0|f(),_A=0|ZA(0|O,0|pe,136657,0),IA=0|f(),pe=0|ZA(0|O,0|pe,-683901,-1),O=0|f(),rA=0|ZA(0|nA,0|iA,666643,0),tA=0|f(),yA=0|ZA(0|nA,0|iA,470296,0),pA=0|f(),le=0|ZA(0|nA,0|iA,654183,0),de=0|f(),xA=0|ZA(0|nA,0|iA,-997805,-1),RA=0|f(),ae=0|ZA(0|nA,0|iA,136657,0),R=0|f(),iA=0|ZA(0|nA,0|iA,-683901,-1),nA=0|f(),x=0|St(0|(QA=0|mt(0|(nA=0|St(0|(IA=0|St(0|(fe=0|St(0|MA,0|FA,0|ce,0|fe)),0|f(),0|_A,0|IA)),0|f(),0|iA,0|nA)),0|f(),-2097152&bA|0,0|QA)),0|f(),0|Z,0|x),Z=0|f(),QA=0|ZA(0|m,0|G,666643,0),bA=0|f(),nA=0|ZA(0|m,0|G,470296,0),iA=0|f(),IA=0|ZA(0|m,0|G,654183,0),_A=0|f(),fe=0|ZA(0|m,0|G,-997805,-1),ce=0|f(),FA=0|ZA(0|m,0|G,136657,0),MA=0|f(),G=0|ZA(0|m,0|G,-683901,-1),m=0|f(),oA=0|ZA(0|kA,0|DA,666643,0),aA=0|f(),vA=0|ZA(0|kA,0|DA,470296,0),wA=0|f(),AA=0|ZA(0|kA,0|DA,654183,0),eA=0|f(),gA=0|ZA(0|kA,0|DA,-997805,-1),uA=0|f(),q=0|ZA(0|kA,0|DA,136657,0),i=0|f(),DA=0|ZA(0|kA,0|DA,-683901,-1),kA=0|f(),K=0|St(0|(EA=0|mt(0|(kA=0|St(0|(MA=0|St(0|(HA=0|St(0|(RA=0|St(0|(YA=0|St(0|NA,0|UA,0|GA,0|YA)),0|f(),0|xA,0|RA)),0|f(),0|PA,0|HA)),0|f(),0|FA,0|MA)),0|f(),0|DA,0|kA)),0|f(),-2097152&SA|0,0|EA)),0|f(),0|t,0|K),t=0|f(),$e=0|mt(0|(fA=0|St(0|(EA=0|St(0|mA,0|CA,0|(EA=0|ZA(0|te,0|Ce,666643,0)),0|f())),0|f(),0|sA,0|fA)),0|f(),-2097152&Ve|0,0|$e),Ve=0|f(),fA=0|ZA(0|te,0|Ce,470296,0),sA=0|f(),EA=0|ZA(0|te,0|Ce,654183,0),CA=0|f(),me=0|St(0|(D=0|mt(0|(hA=0|St(0|(CA=0|St(0|(bA=0|St(0|vA,0|wA,0|QA,0|bA)),0|f(),0|EA,0|CA)),0|f(),0|cA,0|hA)),0|f(),-2097152&H|0,0|D)),0|f(),0|ve,0|me),ve=0|f(),D=0|ZA(0|te,0|Ce,-997805,-1),H=0|f(),hA=0|ZA(0|te,0|Ce,136657,0),cA=0|f(),M=0|mt(0|(ze=0|St(0|(Ie=0|St(0|(cA=0|St(0|(uA=0|St(0|(_A=0|St(0|(dA=0|St(0|yA,0|pA,0|lA,0|dA)),0|f(),0|IA,0|_A)),0|f(),0|gA,0|uA)),0|f(),0|hA,0|cA)),0|f(),0|_e,0|Ie)),0|f(),0|qe,0|ze)),0|f(),-2097152&je|0,0|M),je=0|f(),Ce=0|ZA(0|te,0|Ce,-683901,-1),te=0|f(),Ie=0|At(0|(ze=0|St(0|$e,0|Ve,1048576,0)),0|(qe=0|f()),21),_e=0|f(),_e=0|St(0|($=0|mt(0|(he=0|St(0|(aA=0|St(0|fA,0|sA,0|oA,0|aA)),0|f(),0|Y,0|he)),0|f(),-2097152&W|0,0|$)),0|f(),0|Ie,0|_e),Ie=0|f(),he=0|At(0|($=0|St(0|me,0|ve,1048576,0)),0|(W=0|f()),21),Y=0|f(),Y=0|St(0|(J=0|mt(0|(A=0|St(0|(H=0|St(0|(eA=0|St(0|(tA=0|St(0|nA,0|iA,0|rA,0|tA)),0|f(),0|AA,0|eA)),0|f(),0|D,0|H)),0|f(),0|F,0|A)),0|f(),-2097152&T|0,0|J)),0|f(),0|he,0|Y),he=0|f(),A=0|At(0|(J=0|St(0|M,0|je,1048576,0)),0|(T=0|f()),21),F=0|f(),F=0|St(0|(se=0|mt(0|(j=0|St(0|(te=0|St(0|(i=0|St(0|(ce=0|St(0|(de=0|St(0|(ee=0|St(0|ne,0|ie,0|Ae,0|ee)),0|f(),0|le,0|de)),0|f(),0|fe,0|ce)),0|f(),0|q,0|i)),0|f(),0|Ce,0|te)),0|f(),0|X,0|j)),0|f(),-2097152&oe|0,0|se)),0|f(),0|A,0|F),A=0|f(),j=0|At(0|(se=0|St(0|K,0|t,1048576,0)),0|(oe=0|f()),21),X=0|f(),X=0|St(0|(Oe=0|mt(0|(V=0|St(0|(m=0|St(0|(R=0|St(0|(be=0|St(0|De,0|we,0|L,0|be)),0|f(),0|ae,0|R)),0|f(),0|G,0|m)),0|f(),0|z,0|V)),0|f(),-2097152&We|0,0|Oe)),0|f(),0|j,0|X),j=0|f(),oe=0|mt(0|K,0|t,-2097152&se|0,0|oe),se=0|f(),Oe=0|At(0|(t=0|St(0|x,0|Z,1048576,0)),0|(K=0|f()),21),We=0|f(),We=0|St(0|(P=0|mt(0|(U=0|St(0|(Fe=0|St(0|pe,0|O,0|He,0|Fe)),0|f(),0|Be,0|U)),0|f(),-2097152&ye|0,0|P)),0|f(),0|Oe,0|We),Oe=0|f(),K=0|mt(0|x,0|Z,-2097152&t|0,0|K),t=0|f(),S=0|St(0|(P=0|At(0|(Z=0|St(0|k,0|N,1048576,0)),0|(x=0|f()),21)),0|f(),0|Ee,0|S),Ee=0|f(),x=0|mt(0|k,0|N,-2097152&Z|0,0|x),Z=0|f(),P=0|At(0|(N=0|St(0|_e,0|Ie,1048576,0)),0|(k=0|f()),21),ye=0|f(),Fe=0|At(0|(U=0|St(0|Y,0|he,1048576,0)),0|(Be=0|f()),21),He=0|f(),se=0|St(0|(V=0|At(0|(O=0|St(0|F,0|A,1048576,0)),0|(pe=0|f()),21)),0|f(),0|oe,0|se),oe=0|f(),pe=0|mt(0|F,0|A,-2097152&O|0,0|pe),O=0|f(),t=0|St(0|(V=0|At(0|(A=0|St(0|X,0|j,1048576,0)),0|(F=0|f()),21)),0|f(),0|K,0|t),K=0|f(),F=0|mt(0|X,0|j,-2097152&A|0,0|F),A=0|f(),Z=0|St(0|(V=0|At(0|(j=0|St(0|We,0|Oe,1048576,0)),0|(X=0|f()),21)),0|f(),0|x,0|Z),x=0|f(),X=0|mt(0|We,0|Oe,-2097152&j|0,0|X),j=0|f(),Oe=0|St(0|Ze,0|re,0|(Oe=0|ZA(0|S,0|Ee,666643,0)),0|f()),re=0|f(),Ze=0|ZA(0|S,0|Ee,470296,0),We=0|f(),V=0|ZA(0|S,0|Ee,654183,0),z=0|f(),m=0|ZA(0|S,0|Ee,-997805,-1),G=0|f(),R=0|ZA(0|S,0|Ee,136657,0),ae=0|f(),T=0|mt(0|(He=0|St(0|(Ee=0|St(0|M,0|je,0|(Ee=0|ZA(0|S,0|Ee,-683901,-1)),0|f())),0|f(),0|Fe,0|He)),0|f(),-2097152&J|0,0|T),J=0|f(),He=0|ZA(0|Z,0|x,666643,0),Fe=0|f(),Ee=0|St(0|Oe,0|re,0|(Ee=0|ZA(0|Z,0|x,470296,0)),0|f()),re=0|f(),Oe=0|ZA(0|Z,0|x,654183,0),je=0|f(),M=0|ZA(0|Z,0|x,-997805,-1),S=0|f(),be=0|ZA(0|Z,0|x,136657,0),L=0|f(),x=0|ZA(0|Z,0|x,-683901,-1),Z=0|f(),we=0|St(0|Me,0|Qe,0|(we=0|ZA(0|X,0|j,666643,0)),0|f()),Qe=0|f(),Me=0|ZA(0|X,0|j,470296,0),De=0|f(),te=0|St(0|Ee,0|re,0|(te=0|ZA(0|X,0|j,654183,0)),0|f()),re=0|f(),Ee=0|ZA(0|X,0|j,-997805,-1),Ce=0|f(),i=0|ZA(0|X,0|j,136657,0),q=0|f(),j=0|ZA(0|X,0|j,-683901,-1),X=0|f(),X=0|St(0|(L=0|St(0|(W=0|mt(0|(ye=0|St(0|(G=0|St(0|me,0|ve,0|m,0|G)),0|f(),0|P,0|ye)),0|f(),-2097152&$|0,0|W)),0|f(),0|be,0|L)),0|f(),0|j,0|X),j=0|f(),L=0|ZA(0|t,0|K,666643,0),be=0|f(),W=0|ZA(0|t,0|K,470296,0),$=0|f(),ye=0|ZA(0|t,0|K,654183,0),P=0|f(),G=0|ZA(0|t,0|K,-997805,-1),m=0|f(),ve=0|ZA(0|t,0|K,136657,0),me=0|f(),K=0|ZA(0|t,0|K,-683901,-1),t=0|f(),ce=0|ZA(0|F,0|A,666643,0),fe=0|f(),de=0|ZA(0|F,0|A,470296,0),le=0|f(),ee=0|ZA(0|F,0|A,654183,0),Ae=0|f(),ie=0|ZA(0|F,0|A,-997805,-1),ne=0|f(),H=0|ZA(0|F,0|A,136657,0),D=0|f(),A=0|ZA(0|F,0|A,-683901,-1),F=0|f(),F=0|St(0|(me=0|St(0|(Ce=0|St(0|(je=0|St(0|(qe=0|mt(0|(Ve=0|St(0|Ze,0|We,0|$e,0|Ve)),0|f(),-2097152&ze|0,0|qe)),0|f(),0|Oe,0|je)),0|f(),0|Ee,0|Ce)),0|f(),0|ve,0|me)),0|f(),0|A,0|F),A=0|f(),ue=0|St(0|(me=0|ZA(0|se,0|oe,666643,0)),0|f(),0|ge,0|ue),ge=0|f(),me=0|ZA(0|se,0|oe,470296,0),ve=0|f(),Ce=0|ZA(0|se,0|oe,654183,0),Ee=0|f(),le=0|St(0|(be=0|St(0|(Ee=0|St(0|(Ne=0|mt(0|(Te=0|St(0|Xe,0|Je,0|Ke,0|Te)),0|f(),-2097152&Le|0,0|Ne)),0|f(),0|Ce,0|Ee)),0|f(),0|L,0|be)),0|f(),0|de,0|le),de=0|f(),be=0|ZA(0|se,0|oe,-997805,-1),L=0|f(),Ee=0|ZA(0|se,0|oe,136657,0),Ce=0|f(),ne=0|St(0|(P=0|St(0|(Ce=0|St(0|(De=0|St(0|(Fe=0|St(0|(Pe=0|mt(0|(xe=0|St(0|Ue,0|Ge,0|Ye,0|xe)),0|f(),-2097152&Re|0,0|Pe)),0|f(),0|He,0|Fe)),0|f(),0|Me,0|De)),0|f(),0|Ee,0|Ce)),0|f(),0|ye,0|P)),0|f(),0|ie,0|ne),ie=0|f(),oe=0|ZA(0|se,0|oe,-683901,-1),se=0|f(),Ce=0|At(0|(P=0|St(0|ue,0|ge,1048576,0)),0|(ye=0|f()),21),Ee=0|f(),Ee=0|St(0|(fe=0|St(0|(ve=0|St(0|ke,0|Se,0|me,0|ve)),0|f(),0|ce,0|fe)),0|f(),0|Ce,0|Ee),Ce=0|f(),ye=0|mt(0|ue,0|ge,-2097152&P|0,0|ye),P=0|f(),fe=0|At(0|(ge=0|St(0|le,0|de,1048576,0)),0|(ue=0|f()),21),ce=0|f(),ce=0|St(0|(Ae=0|St(0|($=0|St(0|(L=0|St(0|we,0|Qe,0|be,0|L)),0|f(),0|W,0|$)),0|f(),0|ee,0|Ae)),0|f(),0|fe,0|ce),fe=0|f(),$=0|At(0|(Ae=0|St(0|ne,0|ie,1048576,0)),0|(ee=0|f()),21),W=0|f(),W=0|St(0|(D=0|St(0|(m=0|St(0|(se=0|St(0|te,0|re,0|oe,0|se)),0|f(),0|G,0|m)),0|f(),0|H,0|D)),0|f(),0|$,0|W),$=0|f(),m=0|At(0|(D=0|St(0|F,0|A,1048576,0)),0|(H=0|f()),21),G=0|f(),G=0|St(0|(t=0|St(0|(q=0|St(0|(S=0|St(0|(k=0|mt(0|(z=0|St(0|_e,0|Ie,0|V,0|z)),0|f(),-2097152&N|0,0|k)),0|f(),0|M,0|S)),0|f(),0|i,0|q)),0|f(),0|K,0|t)),0|f(),0|m,0|G),m=0|f(),H=0|mt(0|F,0|A,-2097152&D|0,0|H),D=0|f(),t=0|At(0|(A=0|St(0|X,0|j,1048576,0)),0|(F=0|f()),21),K=0|f(),K=0|St(0|(Be=0|mt(0|(he=0|St(0|(ae=0|St(0|x,0|Z,0|R,0|ae)),0|f(),0|Y,0|he)),0|f(),-2097152&U|0,0|Be)),0|f(),0|t,0|K),t=0|f(),F=0|mt(0|X,0|j,-2097152&A|0,0|F),A=0|f(),Be=0|St(0|pe,0|O,0|(Be=0|At(0|(j=0|St(0|T,0|J,1048576,0)),0|(X=0|f()),21)),0|f()),O=0|f(),he=0|At(0|(pe=0|St(0|Ee,0|Ce,1048576,0)),0|(U=0|f()),21),Y=0|f(),Z=0|At(0|(ae=0|St(0|ce,0|fe,1048576,0)),0|(R=0|f()),21),x=0|f(),S=0|St(0|H,0|D,0|(S=0|At(0|(q=0|St(0|W,0|$,1048576,0)),0|(i=0|f()),21)),0|f()),D=0|f(),k=0|St(0|F,0|A,0|(k=0|At(0|(H=0|St(0|G,0|m,1048576,0)),0|(M=0|f()),21)),0|f()),A=0|f(),M=0|mt(0|G,0|m,-2097152&H|0,0|M),H=0|f(),F=0|At(0|(m=0|St(0|K,0|t,1048576,0)),0|(G=0|f()),21),N=0|f(),G=0|mt(0|K,0|t,-2097152&m|0,0|G),m=0|f(),z=0|At(0|(t=0|St(0|Be,0|O,1048576,0)),0|(K=0|f()),21),V=0|f(),K=0|mt(0|Be,0|O,-2097152&t|0,0|K),t=0|f(),O=0|St(0|ye,0|P,0|(O=0|ZA(0|z,0|V,666643,0)),0|f()),P=0|f(),ye=0|ZA(0|z,0|V,470296,0),Be=0|f(),Ie=0|ZA(0|z,0|V,654183,0),_e=0|f(),se=0|ZA(0|z,0|V,-997805,-1),oe=0|f(),re=0|ZA(0|z,0|V,136657,0),te=0|f(),V=0|ZA(0|z,0|V,-683901,-1),z=0|f(),P=0|At(0|O,0|P,21),L=0|f(),P=0|At(0|(L=0|St(0|(U=0|mt(0|(Be=0|St(0|Ee,0|Ce,0|ye,0|Be)),0|f(),-2097152&pe|0,0|U)),0|f(),0|P,0|L)),0|f(),21),U=0|f(),P=0|At(0|(U=0|St(0|(Y=0|St(0|(ue=0|mt(0|(_e=0|St(0|le,0|de,0|Ie,0|_e)),0|f(),-2097152&ge|0,0|ue)),0|f(),0|he,0|Y)),0|f(),0|P,0|U)),0|f(),21),Y=0|f(),P=0|At(0|(Y=0|St(0|(R=0|mt(0|(oe=0|St(0|ce,0|fe,0|se,0|oe)),0|f(),-2097152&ae|0,0|R)),0|f(),0|P,0|Y)),0|f(),21),R=0|f(),P=0|At(0|(R=0|St(0|(x=0|St(0|(ee=0|mt(0|(te=0|St(0|ne,0|ie,0|re,0|te)),0|f(),-2097152&Ae|0,0|ee)),0|f(),0|Z,0|x)),0|f(),0|P,0|R)),0|f(),21),x=0|f(),G=0|At(0|(m=0|St(0|(A=0|At(0|(M=0|St(0|k,0|A,0|(M=0|At(0|(H=0|St(0|(D=0|At(0|(P=0|St(0|S,0|D,0|(P=0|At(0|(x=0|St(0|(i=0|mt(0|(z=0|St(0|W,0|$,0|V,0|z)),0|f(),-2097152&q|0,0|i)),0|f(),0|P,0|x)),0|f(),21)),0|f())),0|f(),21)),0|f(),0|M,0|H)),0|f(),21)),0|f())),0|f(),21)),0|f(),0|G,0|m)),0|f(),21),A=0|f(),O=0|St(0|(X=0|ZA(0|(K=0|At(0|(t=0|St(0|(G=0|At(0|(A=0|St(0|(X=0|mt(0|(J=0|St(0|F,0|N,0|T,0|J)),0|f(),-2097152&j|0,0|X)),0|f(),0|G,0|A)),0|f(),21)),0|f(),0|K,0|t)),0|f(),21)),0|(G=0|f()),666643,0)),0|f(),2097151&O|0,0),X=0|f(),L=0|St(0|(j=0|ZA(0|K,0|G,470296,0)),0|f(),2097151&L|0,0),j=0|f(),U=0|St(0|(J=0|ZA(0|K,0|G,654183,0)),0|f(),2097151&U|0,0),J=0|f(),Y=0|St(0|(T=0|ZA(0|K,0|G,-997805,-1)),0|f(),2097151&Y|0,0),T=0|f(),R=0|St(0|(N=0|ZA(0|K,0|G,136657,0)),0|f(),2097151&R|0,0),N=0|f(),t=0|St(0|(i=0|At(0|(A=0|St(0|(S=0|At(0|(m=0|St(0|(D=0|At(0|(M=0|St(0|(k=0|At(0|(H=0|St(0|(F=0|At(0|(P=0|St(0|(x=0|At(0|(R=0|St(0|(x=0|St(0|(G=0|ZA(0|K,0|G,-683901,-1)),0|f(),2097151&x|0,0)),0|(G=0|f()),0|(R=0|At(0|(Y=0|St(0|R,0|N,0|(Y=0|At(0|(U=0|St(0|Y,0|T,0|(U=0|At(0|(L=0|St(0|U,0|J,0|(L=0|At(0|(K=0|St(0|L,0|j,0|(K=0|At(0|O,0|X,21)),0|f())),0|(j=0|f()),21)),0|f())),0|(J=0|f()),21)),0|f())),0|(T=0|f()),21)),0|f())),0|(N=0|f()),21)),0|f())),0|(G=0|f()),21)),0|f(),2097151&P|0,0)),0|(x=0|f()),21)),0|f(),2097151&H|0,0)),0|(F=0|f()),21)),0|f(),2097151&M|0,0)),0|(k=0|f()),21)),0|f(),2097151&m|0,0)),0|(D=0|f()),21)),0|f(),2097151&A|0,0)),0|(S=0|f()),21)),0|f(),2097151&t|0,0),i=0|f(),r[e>>0]=O,q=0|ht(0|O,0|X,8),f(),r[e+1>>0]=q,X=0|ht(0|O,0|X,16),f(),O=0|ot(2097151&K|0,0,5),f(),r[e+2>>0]=O|31&X,X=0|ht(0|K,0|j,3),f(),r[e+3>>0]=X,j=0|ht(0|K,0|j,11),f(),r[e+4>>0]=j,K=0|ht(2097151&K|0,0,19),j=0|f(),X=0|ot(2097151&L|0,0,2),f(),r[e+5>>0]=X|K,J=0|ht(0|L,0|J,6),f(),r[e+6>>0]=J,L=0|ht(2097151&L|0,0,14),J=0|f(),K=0|ot(2097151&U|0,0,7),f(),r[e+7>>0]=K|L,L=0|ht(0|U,0|T,1),f(),r[e+8>>0]=L,T=0|ht(0|U,0|T,9),f(),r[e+9>>0]=T,U=0|ht(2097151&U|0,0,17),T=0|f(),L=0|ot(2097151&Y|0,0,4),f(),r[e+10>>0]=L|U,U=0|ht(0|Y,0|N,4),f(),r[e+11>>0]=U,N=0|ht(0|Y,0|N,12),f(),r[e+12>>0]=N,Y=0|ht(2097151&Y|0,0,20),N=0|f(),U=0|ot(2097151&R|0,0,1),f(),r[e+13>>0]=U|Y,G=0|ht(0|R,0|G,7),f(),r[e+14>>0]=G,R=0|ht(2097151&R|0,0,15),G=0|f(),Y=0|ot(2097151&P|0,0,6),f(),r[e+15>>0]=Y|R,R=0|ht(0|P,0|x,2),f(),r[e+16>>0]=R,x=0|ht(0|P,0|x,10),f(),r[e+17>>0]=x,P=0|ht(2097151&P|0,0,18),x=0|f(),R=0|ot(0|H,0|F,3),f(),r[e+18>>0]=R|P,P=0|ht(0|H,0|F,5),f(),r[e+19>>0]=P,F=0|ht(0|H,0|F,13),f(),r[e+20>>0]=F,r[e+21>>0]=M,F=0|ht(0|M,0|k,8),f(),r[e+22>>0]=F,k=0|ht(0|M,0|k,16),f(),M=0|ot(2097151&m|0,0,5),f(),r[e+23>>0]=M|31&k,k=0|ht(0|m,0|D,3),f(),r[e+24>>0]=k,D=0|ht(0|m,0|D,11),f(),r[e+25>>0]=D,m=0|ht(2097151&m|0,0,19),D=0|f(),k=0|ot(2097151&A|0,0,2),f(),r[e+26>>0]=k|m,S=0|ht(0|A,0|S,6),f(),r[e+27>>0]=S,A=0|ht(2097151&A|0,0,14),S=0|f(),m=0|ot(0|t,0|i,7),f(),r[e+28>>0]=m|A,A=0|ht(0|t,0|i,1),f(),r[e+29>>0]=A,A=0|ht(0|t,0|i,9),f(),r[e+30>>0]=A,i=0|At(0|t,0|i,17),f(),r[e+31>>0]=i}function y(e,A,t,r){e|=0,r|=0;var n=0,a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0,N=0,L=0,T=0,K=0,J=0;!function(e,A){e|=0,A|=0;var t=0,r=0,n=0,a=0;t=0;do{a=0|Te(A+(t<<3)|0),n=0|f(),i[(r=e+(t<<3)|0)>>2]=a,i[r+4>>2]=n,t=t+1|0}while(16!=(0|t))}(t|=0,A|=0),n=e,a=(A=r)+64|0;do{i[A>>2]=i[n>>2],A=A+4|0,n=n+4|0}while((0|A)<(0|a));A=0|i[t>>2],n=0|i[t+4>>2],y=0;do{if(l=0|jA(Q=0|i[r+32>>2],s=0|i[r+32+4>>2],14),g=0|f(),S=0|jA(Q,s,18),g=(0|f())^g,L=0|jA(Q,s,41),g^=0|f(),R=0|i[r+40>>2],o=0|i[r+40+4>>2],B=0|i[r+48>>2],a=0|i[r+48+4>>2],c=0|i[(Y=32416+(y<<3)|0)>>2],Y=0|i[Y+4>>2],_=0|i[r+56>>2],b=0|i[r+56+4>>2],Y=0|St(0|(b=0|St(0|(Y=0|St(0|(Y=0|St(0|(g=0|St(0|A,0|n,S^l^L|0,0|g)),0|f(),0|c,0|Y)),0|f(),(B^R)&Q^B|0,(a^o)&s^a|0)),0|f(),0|_,0|b)),0|(_=0|f()),0|i[r+24>>2],0|i[r+24+4>>2]),c=0|f(),i[r+24>>2]=Y,i[r+24+4>>2]=c,l=0|jA(g=0|i[r>>2],L=0|i[r+4>>2],28),A=0|f(),S=0|jA(g,L,34),A=(0|f())^A,H=0|jA(g,L,39),A^=0|f(),u=0|i[r+8>>2],N=0|i[r+8+4>>2],h=0|i[r+16>>2],U=0|i[r+16+4>>2],_=0|St(0|(_=0|St(S^l^H|0,0|A,0|b,0|_)),0|f(),(h|u)&g|h&u|0,(U|N)&L|U&N|0),b=0|f(),i[r+56>>2]=_,i[r+56+4>>2]=b,A=0|jA(Y,c,14),H=0|f(),l=0|jA(Y,c,18),H=(0|f())^H,S=0|jA(Y,c,41),H^=0|f(),I=0|i[t+((d=1|y)<<3)>>2],n=0|i[t+(d<<3)+4>>2],p=0|i[32416+(d<<3)>>2],k=0|i[32416+(d<<3)+4>>2],U=0|St(0|(k=0|St(0|(n=0|St(0|(H=0|St(0|(a=0|St(Y&(R^Q)^R|0,c&(o^s)^o|0,0|B,0|a)),0|f(),l^A^S|0,0|H)),0|f(),0|I,0|n)),0|f(),0|p,0|k)),0|(p=0|f()),0|h,0|U),h=0|f(),i[r+16>>2]=U,i[r+16+4>>2]=h,n=0|jA(_,b,28),I=0|f(),H=0|jA(_,b,34),I=(0|f())^I,S=0|jA(_,b,39),I^=0|f(),I=0|St(0|(p=0|St(0|k,0|p,_&(u|g)|u&g|0,b&(N|L)|N&L|0)),0|f(),H^n^S|0,0|I),S=0|f(),i[r+48>>2]=I,i[r+48+4>>2]=S,n=0|jA(U,h,14),H=0|f(),p=0|jA(U,h,18),H=(0|f())^H,k=0|jA(U,h,41),H^=0|f(),l=0|i[t+((A=2|y)<<3)>>2],a=0|i[t+(A<<3)+4>>2],B=0|i[32416+(A<<3)>>2],D=0|i[32416+(A<<3)+4>>2],N=0|St(0|(D=0|St(0|(a=0|St(0|(H=0|St(0|(o=0|St(U&(Y^Q)^Q|0,h&(c^s)^s|0,0|R,0|o)),0|f(),p^n^k|0,0|H)),0|f(),0|l,0|a)),0|f(),0|B,0|D)),0|(B=0|f()),0|u,0|N),u=0|f(),i[r+8>>2]=N,i[r+8+4>>2]=u,a=0|jA(I,S,28),l=0|f(),H=0|jA(I,S,34),l=(0|f())^l,k=0|jA(I,S,39),l^=0|f(),l=0|St(0|(B=0|St(0|D,0|B,I&(_|g)|_&g|0,S&(b|L)|b&L|0)),0|f(),H^a^k|0,0|l),k=0|f(),i[r+40>>2]=l,i[r+40+4>>2]=k,a=0|jA(N,u,14),H=0|f(),B=0|jA(N,u,18),H=(0|f())^H,D=0|jA(N,u,41),H^=0|f(),p=0|i[t+((n=3|y)<<3)>>2],o=0|i[t+(n<<3)+4>>2],R=0|i[32416+(n<<3)>>2],C=0|i[32416+(n<<3)+4>>2],L=0|St(0|(C=0|St(0|(o=0|St(0|(H=0|St(0|(s=0|St(N&(U^Y)^Y|0,u&(h^c)^c|0,0|Q,0|s)),0|f(),B^a^D|0,0|H)),0|f(),0|p,0|o)),0|f(),0|R,0|C)),0|(R=0|f()),0|g,0|L),g=0|f(),i[r>>2]=L,i[r+4>>2]=g,o=0|jA(l,k,28),p=0|f(),H=0|jA(l,k,34),p=(0|f())^p,D=0|jA(l,k,39),p^=0|f(),p=0|St(0|(R=0|St(0|C,0|R,l&(I|_)|I&_|0,k&(S|b)|S&b|0)),0|f(),H^o^D|0,0|p),D=0|f(),i[r+32>>2]=p,i[r+32+4>>2]=D,o=0|jA(L,g,14),H=0|f(),R=0|jA(L,g,18),H=(0|f())^H,C=0|jA(L,g,41),H^=0|f(),B=0|i[t+((a=4|y)<<3)>>2],s=0|i[t+(a<<3)+4>>2],Q=0|i[32416+(a<<3)>>2],x=0|i[32416+(a<<3)+4>>2],b=0|St(0|(x=0|St(0|(s=0|St(0|(H=0|St(0|(c=0|St(L&(N^U)^U|0,g&(u^h)^h|0,0|Y,0|c)),0|f(),R^o^C|0,0|H)),0|f(),0|B,0|s)),0|f(),0|Q,0|x)),0|(Q=0|f()),0|_,0|b),_=0|f(),i[r+56>>2]=b,i[r+56+4>>2]=_,s=0|jA(p,D,28),B=0|f(),H=0|jA(p,D,34),B=(0|f())^B,C=0|jA(p,D,39),B^=0|f(),B=0|St(0|(Q=0|St(0|x,0|Q,p&(l|I)|l&I|0,D&(k|S)|k&S|0)),0|f(),H^s^C|0,0|B),C=0|f(),i[r+24>>2]=B,i[r+24+4>>2]=C,s=0|jA(b,_,14),H=0|f(),Q=0|jA(b,_,18),H=(0|f())^H,x=0|jA(b,_,41),H^=0|f(),R=0|i[t+((o=5|y)<<3)>>2],c=0|i[t+(o<<3)+4>>2],Y=0|i[32416+(o<<3)>>2],M=0|i[32416+(o<<3)+4>>2],S=0|St(0|(M=0|St(0|(c=0|St(0|(H=0|St(0|(h=0|St(b&(L^N)^N|0,_&(g^u)^u|0,0|U,0|h)),0|f(),Q^s^x|0,0|H)),0|f(),0|R,0|c)),0|f(),0|Y,0|M)),0|(Y=0|f()),0|I,0|S),I=0|f(),i[r+48>>2]=S,i[r+48+4>>2]=I,c=0|jA(B,C,28),R=0|f(),H=0|jA(B,C,34),R=(0|f())^R,x=0|jA(B,C,39),R^=0|f(),R=0|St(0|(Y=0|St(0|M,0|Y,B&(p|l)|p&l|0,C&(D|k)|D&k|0)),0|f(),H^c^x|0,0|R),x=0|f(),i[r+16>>2]=R,i[r+16+4>>2]=x,c=0|jA(S,I,14),H=0|f(),Y=0|jA(S,I,18),H=(0|f())^H,M=0|jA(S,I,41),H^=0|f(),Q=0|i[t+((s=6|y)<<3)>>2],h=0|i[t+(s<<3)+4>>2],U=0|i[32416+(s<<3)>>2],G=0|i[32416+(s<<3)+4>>2],k=0|St(0|(G=0|St(0|(h=0|St(0|(H=0|St(0|(u=0|St(S&(b^L)^L|0,I&(_^g)^g|0,0|N,0|u)),0|f(),Y^c^M|0,0|H)),0|f(),0|Q,0|h)),0|f(),0|U,0|G)),0|(U=0|f()),0|l,0|k),l=0|f(),i[r+40>>2]=k,i[r+40+4>>2]=l,h=0|jA(R,x,28),Q=0|f(),H=0|jA(R,x,34),Q=(0|f())^Q,M=0|jA(R,x,39),Q^=0|f(),Q=0|St(0|(U=0|St(0|G,0|U,R&(B|p)|B&p|0,x&(C|D)|C&D|0)),0|f(),H^h^M|0,0|Q),M=0|f(),i[r+8>>2]=Q,i[r+8+4>>2]=M,h=0|jA(k,l,14),H=0|f(),U=0|jA(k,l,18),H=(0|f())^H,G=0|jA(k,l,41),H^=0|f(),Y=0|i[t+((c=7|y)<<3)>>2],u=0|i[t+(c<<3)+4>>2],N=0|i[32416+(c<<3)>>2],T=0|i[32416+(c<<3)+4>>2],D=0|St(0|(T=0|St(0|(u=0|St(0|(H=0|St(0|(g=0|St(k&(S^b)^b|0,l&(I^_)^_|0,0|L,0|g)),0|f(),U^h^G|0,0|H)),0|f(),0|Y,0|u)),0|f(),0|N,0|T)),0|(N=0|f()),0|p,0|D),p=0|f(),i[r+32>>2]=D,i[r+32+4>>2]=p,u=0|jA(Q,M,28),Y=0|f(),H=0|jA(Q,M,34),Y=(0|f())^Y,G=0|jA(Q,M,39),Y^=0|f(),Y=0|St(0|(N=0|St(0|T,0|N,Q&(R|B)|R&B|0,M&(x|C)|x&C|0)),0|f(),H^u^G|0,0|Y),G=0|f(),i[r>>2]=Y,i[r+4>>2]=G,u=0|jA(D,p,14),H=0|f(),N=0|jA(D,p,18),H=(0|f())^H,T=0|jA(D,p,41),H^=0|f(),U=0|i[t+((h=8|y)<<3)>>2],g=0|i[t+(h<<3)+4>>2],L=0|i[32416+(h<<3)>>2],K=0|i[32416+(h<<3)+4>>2],C=0|St(0|(K=0|St(0|(g=0|St(0|(H=0|St(0|(_=0|St(D&(k^S)^S|0,p&(l^I)^I|0,0|b,0|_)),0|f(),N^u^T|0,0|H)),0|f(),0|U,0|g)),0|f(),0|L,0|K)),0|(L=0|f()),0|B,0|C),B=0|f(),i[r+24>>2]=C,i[r+24+4>>2]=B,g=0|jA(Y,G,28),U=0|f(),H=0|jA(Y,G,34),U=(0|f())^U,T=0|jA(Y,G,39),U^=0|f(),U=0|St(0|(L=0|St(0|K,0|L,Y&(Q|R)|Q&R|0,G&(M|x)|M&x|0)),0|f(),H^g^T|0,0|U),T=0|f(),i[r+56>>2]=U,i[r+56+4>>2]=T,g=0|jA(C,B,14),H=0|f(),L=0|jA(C,B,18),H=(0|f())^H,K=0|jA(C,B,41),H^=0|f(),N=0|i[t+((u=9|y)<<3)>>2],_=0|i[t+(u<<3)+4>>2],b=0|i[32416+(u<<3)>>2],J=0|i[32416+(u<<3)+4>>2],x=0|St(0|(J=0|St(0|(_=0|St(0|(H=0|St(0|(I=0|St(C&(D^k)^k|0,B&(p^l)^l|0,0|S,0|I)),0|f(),L^g^K|0,0|H)),0|f(),0|N,0|_)),0|f(),0|b,0|J)),0|(b=0|f()),0|R,0|x),R=0|f(),i[r+16>>2]=x,i[r+16+4>>2]=R,_=0|jA(U,T,28),N=0|f(),H=0|jA(U,T,34),N=(0|f())^N,K=0|jA(U,T,39),N^=0|f(),N=0|St(0|(b=0|St(0|J,0|b,U&(Y|Q)|Y&Q|0,T&(G|M)|G&M|0)),0|f(),H^_^K|0,0|N),K=0|f(),i[r+48>>2]=N,i[r+48+4>>2]=K,_=0|jA(x,R,14),H=0|f(),b=0|jA(x,R,18),H=(0|f())^H,J=0|jA(x,R,41),H^=0|f(),L=0|i[t+((g=10|y)<<3)>>2],I=0|i[t+(g<<3)+4>>2],S=0|i[32416+(g<<3)>>2],E=0|i[32416+(g<<3)+4>>2],M=0|St(0|(E=0|St(0|(I=0|St(0|(H=0|St(0|(l=0|St(x&(C^D)^D|0,R&(B^p)^p|0,0|k,0|l)),0|f(),b^_^J|0,0|H)),0|f(),0|L,0|I)),0|f(),0|S,0|E)),0|(S=0|f()),0|Q,0|M),Q=0|f(),i[r+8>>2]=M,i[r+8+4>>2]=Q,I=0|jA(N,K,28),L=0|f(),H=0|jA(N,K,34),L=(0|f())^L,J=0|jA(N,K,39),L^=0|f(),L=0|St(0|(S=0|St(0|E,0|S,N&(U|Y)|U&Y|0,K&(T|G)|T&G|0)),0|f(),H^I^J|0,0|L),J=0|f(),i[r+40>>2]=L,i[r+40+4>>2]=J,I=0|jA(M,Q,14),H=0|f(),S=0|jA(M,Q,18),H=(0|f())^H,E=0|jA(M,Q,41),H^=0|f(),b=0|i[t+((_=11|y)<<3)>>2],l=0|i[t+(_<<3)+4>>2],k=0|i[32416+(_<<3)>>2],w=0|i[32416+(_<<3)+4>>2],G=0|St(0|(w=0|St(0|(l=0|St(0|(H=0|St(0|(p=0|St(M&(x^C)^C|0,Q&(R^B)^B|0,0|D,0|p)),0|f(),S^I^E|0,0|H)),0|f(),0|b,0|l)),0|f(),0|k,0|w)),0|(k=0|f()),0|Y,0|G),Y=0|f(),i[r>>2]=G,i[r+4>>2]=Y,l=0|jA(L,J,28),b=0|f(),H=0|jA(L,J,34),b=(0|f())^b,E=0|jA(L,J,39),b^=0|f(),b=0|St(0|(k=0|St(0|w,0|k,L&(N|U)|N&U|0,J&(K|T)|K&T|0)),0|f(),H^l^E|0,0|b),E=0|f(),i[r+32>>2]=b,i[r+32+4>>2]=E,l=0|jA(G,Y,14),H=0|f(),k=0|jA(G,Y,18),H=(0|f())^H,w=0|jA(G,Y,41),H^=0|f(),S=0|i[t+((I=12|y)<<3)>>2],p=0|i[t+(I<<3)+4>>2],D=0|i[32416+(I<<3)>>2],v=0|i[32416+(I<<3)+4>>2],T=0|St(0|(v=0|St(0|(p=0|St(0|(H=0|St(0|(B=0|St(G&(M^x)^x|0,Y&(Q^R)^R|0,0|C,0|B)),0|f(),k^l^w|0,0|H)),0|f(),0|S,0|p)),0|f(),0|D,0|v)),0|(D=0|f()),0|U,0|T),U=0|f(),i[r+56>>2]=T,i[r+56+4>>2]=U,p=0|jA(b,E,28),S=0|f(),H=0|jA(b,E,34),S=(0|f())^S,w=0|jA(b,E,39),S^=0|f(),S=0|St(0|(D=0|St(0|v,0|D,b&(L|N)|L&N|0,E&(J|K)|J&K|0)),0|f(),H^p^w|0,0|S),w=0|f(),i[r+24>>2]=S,i[r+24+4>>2]=w,p=0|jA(T,U,14),H=0|f(),D=0|jA(T,U,18),H=(0|f())^H,v=0|jA(T,U,41),H^=0|f(),k=0|i[t+((l=13|y)<<3)>>2],B=0|i[t+(l<<3)+4>>2],C=0|i[32416+(l<<3)>>2],m=0|i[32416+(l<<3)+4>>2],K=0|St(0|(m=0|St(0|(B=0|St(0|(H=0|St(0|(R=0|St(T&(G^M)^M|0,U&(Y^Q)^Q|0,0|x,0|R)),0|f(),D^p^v|0,0|H)),0|f(),0|k,0|B)),0|f(),0|C,0|m)),0|(C=0|f()),0|N,0|K),N=0|f(),i[r+48>>2]=K,i[r+48+4>>2]=N,B=0|jA(S,w,28),k=0|f(),H=0|jA(S,w,34),k=(0|f())^k,v=0|jA(S,w,39),k^=0|f(),k=0|St(0|(C=0|St(0|m,0|C,S&(b|L)|b&L|0,w&(E|J)|E&J|0)),0|f(),H^B^v|0,0|k),v=0|f(),i[r+16>>2]=k,i[r+16+4>>2]=v,B=0|jA(K,N,14),H=0|f(),C=0|jA(K,N,18),H=(0|f())^H,m=0|jA(K,N,41),H^=0|f(),D=0|i[t+((p=14|y)<<3)>>2],R=0|i[t+(p<<3)+4>>2],x=0|i[32416+(p<<3)>>2],P=0|i[32416+(p<<3)+4>>2],J=0|St(0|(P=0|St(0|(R=0|St(0|(H=0|St(0|(Q=0|St(K&(T^G)^G|0,N&(U^Y)^Y|0,0|M,0|Q)),0|f(),C^B^m|0,0|H)),0|f(),0|D,0|R)),0|f(),0|x,0|P)),0|(x=0|f()),0|L,0|J),L=0|f(),i[r+40>>2]=J,i[r+40+4>>2]=L,R=0|jA(k,v,28),D=0|f(),H=0|jA(k,v,34),D=(0|f())^D,m=0|jA(k,v,39),D^=0|f(),D=0|St(0|(x=0|St(0|P,0|x,k&(S|b)|S&b|0,v&(w|E)|w&E|0)),0|f(),H^R^m|0,0|D),m=0|f(),i[r+8>>2]=D,i[r+8+4>>2]=m,R=0|jA(J,L,14),H=0|f(),x=0|jA(J,L,18),H=(0|f())^H,P=0|jA(J,L,41),H^=0|f(),C=0|i[t+((B=15|y)<<3)>>2],Q=0|i[t+(B<<3)+4>>2],M=0|i[32416+(B<<3)>>2],F=0|i[32416+(B<<3)+4>>2],E=0|St(0|(F=0|St(0|(Q=0|St(0|(H=0|St(0|(Y=0|St(J&(K^T)^T|0,L&(N^U)^U|0,0|G,0|Y)),0|f(),x^R^P|0,0|H)),0|f(),0|C,0|Q)),0|f(),0|M,0|F)),0|(M=0|f()),0|b,0|E),b=0|f(),i[r+32>>2]=E,i[r+32+4>>2]=b,b=0|jA(D,m,28),E=0|f(),Q=0|jA(D,m,34),E=(0|f())^E,C=0|jA(D,m,39),E^=0|f(),E=0|St(0|(w=0|St(0|F,0|M,D&(k|S)|k&S|0,m&(v|w)|v&w|0)),0|f(),Q^b^C|0,0|E),C=0|f(),i[r>>2]=E,i[r+4>>2]=C,64==(0|y))break;k=0|jA(K=0|i[t+(p<<3)>>2],J=0|i[t+(p<<3)+4>>2],19),U=0|f(),Q=0|jA(K,J,61),w=0|f(),w=0|St((G=0|ht(0|K,0|J,6))^k^Q|0,0|(w=(0|f())^U^w),0|(U=0|i[t+(u<<3)>>2]),0|(D=0|i[t+(u<<3)+4>>2])),Q=0|f(),R=0|jA(k=0|i[t+(d<<3)>>2],G=0|i[t+(d<<3)+4>>2],1),E=0|f(),N=0|jA(k,G,8),Y=0|f(),x=0|ht(0|k,0|G,7),Y=(0|f())^E^Y,Y=0|St(0|(E=0|St(0|w,0|Q,0|i[(E=t+(y<<3)|0)>>2],0|i[E+4>>2])),0|f(),x^R^N|0,0|Y),N=0|f(),i[(R=t+((y=y+16|0)<<3)|0)>>2]=Y,i[R+4>>2]=N,E=0|jA(R=0|i[t+(B<<3)>>2],x=0|i[t+(B<<3)+4>>2],19),Q=0|f(),w=0|jA(R,x,61),v=0|f(),C=0|ht(0|R,0|x,6),v=(0|f())^Q^v,Q=0|i[t+(d+9<<3)>>2],L=0|i[t+(d+9<<3)+4>>2],b=0|jA(m=0|i[t+(d+1<<3)>>2],M=0|i[t+(d+1<<3)+4>>2],1),H=0|f(),S=0|jA(m,M,8),F=0|f(),P=0|ht(0|m,0|M,7),F=(0|f())^H^F,F=0|St(0|(v=0|St(0|(G=0|St(0|Q,0|L,0|k,0|G)),0|f(),C^E^w|0,0|v)),0|f(),P^b^S|0,0|F),S=0|f(),i[t+(d+16<<3)>>2]=F,i[t+(d+16<<3)+4>>2]=S,b=0|jA(Y,N,19),P=0|f(),v=0|jA(Y,N,61),d=0|f(),d=0|St((N=0|ht(0|Y,0|N,6))^b^v|0,0|(d=(0|f())^P^d),0|(P=0|i[t+(_<<3)>>2]),0|(Y=0|i[t+(_<<3)+4>>2])),v=0|f(),w=0|jA(b=0|i[t+(n<<3)>>2],N=0|i[t+(n<<3)+4>>2],1),E=0|f(),C=0|jA(b,N,8),G=0|f(),k=0|ht(0|b,0|N,7),G=(0|f())^E^G,G=0|St(0|(M=0|St(0|d,0|v,0|m,0|M)),0|f(),k^w^C|0,0|G),C=0|f(),i[t+(A+16<<3)>>2]=G,i[t+(A+16<<3)+4>>2]=C,w=0|jA(F,S,19),k=0|f(),M=0|jA(F,S,61),m=0|f(),S=0|ht(0|F,0|S,6),m=(0|f())^k^m,k=0|i[t+(n+9<<3)>>2],F=0|i[t+(n+9<<3)+4>>2],d=0|jA(v=0|i[t+(n+1<<3)>>2],A=0|i[t+(n+1<<3)+4>>2],1),E=0|f(),L=0|jA(v,A,8),Q=0|f(),H=0|ht(0|v,0|A,7),Q=(0|f())^E^Q,Q=0|St(0|(m=0|St(0|(N=0|St(0|k,0|F,0|b,0|N)),0|f(),S^w^M|0,0|m)),0|f(),H^d^L|0,0|Q),L=0|f(),i[t+(n+16<<3)>>2]=Q,i[t+(n+16<<3)+4>>2]=L,d=0|jA(G,C,19),H=0|f(),m=0|jA(G,C,61),M=0|f(),M=0|St((C=0|ht(0|G,0|C,6))^d^m|0,0|(M=(0|f())^H^M),0|(H=0|i[t+(l<<3)>>2]),0|(G=0|i[t+(l<<3)+4>>2])),m=0|f(),w=0|jA(d=0|i[t+(o<<3)>>2],C=0|i[t+(o<<3)+4>>2],1),S=0|f(),N=0|jA(d,C,8),b=0|f(),F=0|ht(0|d,0|C,7),b=(0|f())^S^b,b=0|St(0|(A=0|St(0|M,0|m,0|v,0|A)),0|f(),F^w^N|0,0|b),N=0|f(),i[t+(a+16<<3)>>2]=b,i[t+(a+16<<3)+4>>2]=N,w=0|jA(Q,L,19),F=0|f(),A=0|jA(Q,L,61),v=0|f(),L=0|ht(0|Q,0|L,6),v=(0|f())^F^v,F=0|i[t+(o+9<<3)>>2],Q=0|i[t+(o+9<<3)+4>>2],S=0|jA(m=0|i[t+(o+1<<3)>>2],M=0|i[t+(o+1<<3)+4>>2],1),k=0|f(),E=0|jA(m,M,8),T=0|f(),n=0|ht(0|m,0|M,7),T=(0|f())^k^T,T=0|St(0|(v=0|St(0|(C=0|St(0|F,0|Q,0|d,0|C)),0|f(),L^w^A|0,0|v)),0|f(),n^S^E|0,0|T),E=0|f(),i[t+(o+16<<3)>>2]=T,i[t+(o+16<<3)+4>>2]=E,S=0|jA(b,N,19),n=0|f(),v=0|jA(b,N,61),A=0|f(),A=0|St((N=0|ht(0|b,0|N,6))^S^v|0,(0|f())^n^A|0,0|R,0|x),n=0|f(),N=0|jA(v=0|i[t+(c<<3)>>2],S=0|i[t+(c<<3)+4>>2],1),b=0|f(),w=0|jA(v,S,8),L=0|f(),C=0|ht(0|v,0|S,7),L=(0|f())^b^L,L=0|St(0|(M=0|St(0|A,0|n,0|m,0|M)),0|f(),C^N^w|0,0|L),w=0|f(),i[t+(s+16<<3)>>2]=L,i[t+(s+16<<3)+4>>2]=w,N=0|jA(T,E,19),C=0|f(),M=0|jA(T,E,61),m=0|f(),E=0|ht(0|T,0|E,6),m=(0|f())^C^m,C=0|i[t+(c+9<<3)>>2],T=0|i[t+(c+9<<3)+4>>2],b=0|jA(n=0|i[t+(c+1<<3)>>2],A=0|i[t+(c+1<<3)+4>>2],1),d=0|f(),Q=0|jA(n,A,8),F=0|f(),k=0|ht(0|n,0|A,7),F=(0|f())^d^F,F=0|St(0|(m=0|St(0|(S=0|St(0|C,0|T,0|v,0|S)),0|f(),E^N^M|0,0|m)),0|f(),k^b^Q|0,0|F),Q=0|f(),i[t+(c+16<<3)>>2]=F,i[t+(c+16<<3)+4>>2]=Q,b=0|jA(L,w,19),k=0|f(),m=0|jA(L,w,61),M=0|f(),M=0|St((w=0|ht(0|L,0|w,6))^b^m|0,0|(M=(0|f())^k^M),0|i[t+(h+9<<3)>>2],0|i[t+(h+9<<3)+4>>2]),m=0|f(),b=0|jA(U,D,1),w=0|f(),k=0|jA(U,D,8),L=0|f(),N=0|ht(0|U,0|D,7),L=w^(0|f())^L,L=0|St(0|(A=0|St(0|M,0|m,0|n,0|A)),0|f(),b^N^k|0,0|L),k=0|f(),i[t+(h+16<<3)>>2]=L,i[t+(h+16<<3)+4>>2]=k,N=0|jA(F,Q,19),b=0|f(),A=0|jA(F,Q,61),n=0|f(),Q=0|ht(0|F,0|Q,6),n=(0|f())^b^n,b=0|i[t+(u+9<<3)>>2],F=0|i[t+(u+9<<3)+4>>2],w=0|jA(m=0|i[t+(u+1<<3)>>2],M=0|i[t+(u+1<<3)+4>>2],1),E=0|f(),S=0|jA(m,M,8),v=0|f(),T=0|ht(0|m,0|M,7),v=(0|f())^E^v,v=0|St(0|(n=0|St(0|(D=0|St(0|b,0|F,0|U,0|D)),0|f(),Q^N^A|0,0|n)),0|f(),T^w^S|0,0|v),S=0|f(),i[t+(u+16<<3)>>2]=v,i[t+(u+16<<3)+4>>2]=S,w=0|jA(L,k,19),T=0|f(),n=0|jA(L,k,61),A=0|f(),A=0|St((k=0|ht(0|L,0|k,6))^w^n|0,0|(A=(0|f())^T^A),0|i[t+(g+9<<3)>>2],0|i[t+(g+9<<3)+4>>2]),n=0|f(),w=0|jA(P,Y,1),k=0|f(),T=0|jA(P,Y,8),L=0|f(),N=0|ht(0|P,0|Y,7),L=k^(0|f())^L,L=0|St(0|(M=0|St(0|A,0|n,0|m,0|M)),0|f(),w^N^T|0,0|L),T=0|f(),i[t+(g+16<<3)>>2]=L,i[t+(g+16<<3)+4>>2]=T,N=0|jA(v,S,19),w=0|f(),M=0|jA(v,S,61),m=0|f(),S=0|ht(0|v,0|S,6),m=(0|f())^w^m,w=0|i[t+(_+9<<3)>>2],v=0|i[t+(_+9<<3)+4>>2],k=0|jA(n=0|i[t+(_+1<<3)>>2],A=0|i[t+(_+1<<3)+4>>2],1),Q=0|f(),D=0|jA(n,A,8),U=0|f(),F=0|ht(0|n,0|A,7),U=(0|f())^Q^U,U=0|St(0|(m=0|St(0|(Y=0|St(0|w,0|v,0|P,0|Y)),0|f(),S^N^M|0,0|m)),0|f(),F^k^D|0,0|U),D=0|f(),i[t+(_+16<<3)>>2]=U,i[t+(_+16<<3)+4>>2]=D,k=0|jA(L,T,19),F=0|f(),m=0|jA(L,T,61),M=0|f(),M=0|St((T=0|ht(0|L,0|T,6))^k^m|0,0|(M=(0|f())^F^M),0|i[t+(I+9<<3)>>2],0|i[t+(I+9<<3)+4>>2]),m=0|f(),k=0|jA(H,G,1),T=0|f(),F=0|jA(H,G,8),L=0|f(),N=0|ht(0|H,0|G,7),L=T^(0|f())^L,L=0|St(0|(A=0|St(0|M,0|m,0|n,0|A)),0|f(),k^N^F|0,0|L),F=0|f(),i[t+(I+16<<3)>>2]=L,i[t+(I+16<<3)+4>>2]=F,N=0|jA(U,D,19),k=0|f(),A=0|jA(U,D,61),n=0|f(),D=0|ht(0|U,0|D,6),n=(0|f())^k^n,k=0|i[t+(l+9<<3)>>2],U=0|i[t+(l+9<<3)+4>>2],T=0|jA(m=0|i[t+(l+1<<3)>>2],M=0|i[t+(l+1<<3)+4>>2],1),S=0|f(),Y=0|jA(m,M,8),P=0|f(),M=0|ht(0|m,0|M,7),P=(0|f())^S^P,P=0|St(0|(n=0|St(0|(G=0|St(0|k,0|U,0|H,0|G)),0|f(),D^N^A|0,0|n)),0|f(),M^T^Y|0,0|P),Y=0|f(),i[t+(l+16<<3)>>2]=P,i[t+(l+16<<3)+4>>2]=Y,T=0|jA(L,F,19),M=0|f(),n=0|jA(L,F,61),A=0|f(),F=0|ht(0|L,0|F,6),A=(0|f())^M^A,M=0|i[t+(p+9<<3)>>2],L=0|i[t+(p+9<<3)+4>>2],N=0|jA(R,x,1),D=0|f(),G=0|jA(R,x,8),H=0|f(),U=0|ht(0|R,0|x,7),H=D^(0|f())^H,H=0|St(0|(A=0|St(0|(J=0|St(0|M,0|L,0|K,0|J)),0|f(),F^T^n|0,0|A)),0|f(),N^U^G|0,0|H),G=0|f(),i[t+(p+16<<3)>>2]=H,i[t+(p+16<<3)+4>>2]=G,G=0|jA(P,Y,19),H=0|f(),U=0|jA(P,Y,61),N=0|f(),Y=0|ht(0|P,0|Y,6),N=(0|f())^H^N,H=0|i[t+(B+9<<3)>>2],P=0|i[t+(B+9<<3)+4>>2],T=0|jA(A=0|i[t+(B+1<<3)>>2],n=0|i[t+(B+1<<3)+4>>2],1),F=0|f(),J=0|jA(A,n,8),K=0|f(),L=0|ht(0|A,0|n,7),K=(0|f())^F^K,K=0|St(0|(N=0|St(0|(x=0|St(0|H,0|P,0|R,0|x)),0|f(),Y^G^U|0,0|N)),0|f(),L^T^J|0,0|K),J=0|f(),i[t+(B+16<<3)>>2]=K,i[t+(B+16<<3)+4>>2]=J}while(y>>>0<80);A=0;do{T=r+(A<<3)|0,T=0|St(0|i[(J=e+(A<<3)|0)>>2],0|i[J+4>>2],0|i[T>>2],0|i[T+4>>2]),K=0|f(),i[J>>2]=T,i[J+4>>2]=K,A=A+1|0}while(8!=(0|A))}function C(e){e|=0;var A,t=0,r=0,n=0,a=0,o=0,s=0,f=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,p=0,B=0,y=0,C=0,E=0,b=0;A=l,I=l=l+63&-64,l=l+16|0;do{if(e>>>0<245){if(_=e>>>0<11?16:e+11&-8,(u=0|i[8679])>>>(_>>>3)&3|0)return e=0|i[8+(r=34756+((u>>>(_>>>3)&1^1)+(_>>>3)<<1<<2)|0)>>2],(0|(t=0|i[e+8>>2]))==(0|r)?i[8679]=u&~(1<<(u>>>(_>>>3)&1^1)+(_>>>3)):(i[t+12>>2]=r,i[r+8>>2]=t),b=(u>>>(_>>>3)&1^1)+(_>>>3)<<3,i[e+4>>2]=3|b,i[e+b+4>>2]=1|i[e+b+4>>2],l=A,0|e+8;if(_>>>0>(g=0|i[8681])>>>0){if(u>>>(_>>>3)|0)return n=0|i[34756+((a=((n=(((e=u>>>(_>>>3)<<(_>>>3)&(2<<(_>>>3)|0-(2<<(_>>>3))))&0-e)-1|0)>>>(((e&0-e)-1|0)>>>12&16))>>>5&8|((e&0-e)-1|0)>>>12&16|n>>>(n>>>5&8)>>>2&4|(a=n>>>(n>>>5&8)>>>(n>>>(n>>>5&8)>>>2&4))>>>1&2|a>>>(a>>>1&2)>>>1&1)+(a>>>(a>>>1&2)>>>(a>>>(a>>>1&2)>>>1&1))|0)<<1<<2)+8>>2],(0|(e=0|i[n+8>>2]))==(34756+(a<<1<<2)|0)?(i[8679]=u&~(1<>2]=34756+(a<<1<<2),i[34756+(a<<1<<2)+8>>2]=e,e=u),i[n+4>>2]=3|_,i[n+_+4>>2]=(a<<3)-_|1,i[n+(a<<3)>>2]=(a<<3)-_,0|g&&(r=0|i[8684],e&1<<(g>>>3)?(e=34756+(g>>>3<<1<<2)+8|0,t=0|i[34756+(g>>>3<<1<<2)+8>>2]):(i[8679]=e|1<<(g>>>3),e=34756+(g>>>3<<1<<2)+8|0,t=34756+(g>>>3<<1<<2)|0),i[e>>2]=r,i[t+12>>2]=r,i[r+8>>2]=t,i[r+12>>2]=34756+(g>>>3<<1<<2)),i[8681]=(a<<3)-_,i[8684]=n+_,l=A,0|n+8;if(s=0|i[8680]){for(h=0|i[35020+(((c=((s&0-s)-1|0)>>>(((s&0-s)-1|0)>>>12&16))>>>5&8|((s&0-s)-1|0)>>>12&16|c>>>(c>>>5&8)>>>2&4|(h=c>>>(c>>>5&8)>>>(c>>>(c>>>5&8)>>>2&4))>>>1&2|h>>>(h>>>1&2)>>>1&1)+(h>>>(h>>>1&2)>>>(h>>>(h>>>1&2)>>>1&1))<<2)>>2],c=(-8&i[h+4>>2])-_|0,t=h;(e=0|i[t+16>>2])||(e=0|i[t+20>>2]);)c=(f=(t=(-8&i[e+4>>2])-_|0)>>>0>>0)?t:c,t=e,h=f?e:h;if((f=h+_|0)>>>0>h>>>0){a=0|i[h+24>>2],e=0|i[h+12>>2];do{if((0|e)==(0|h)){if(!(e=0|i[(t=h+20|0)>>2])&&!(e=0|i[(t=h+16|0)>>2])){t=0;break}for(;;)if(r=0|i[(n=e+20|0)>>2])e=r,t=n;else{if(!(r=0|i[(n=e+16|0)>>2]))break;e=r,t=n}i[t>>2]=0,t=e}else t=0|i[h+8>>2],i[t+12>>2]=e,i[e+8>>2]=t,t=e}while(0);do{if(0|a){if(e=0|i[h+28>>2],(0|h)==(0|i[35020+(e<<2)>>2])){if(i[35020+(e<<2)>>2]=t,!t){i[8680]=s&~(1<>2])==(0|h)?a+16|0:a+20|0)>>2]=t,!t)break;i[t+24>>2]=a,0|(e=0|i[h+16>>2])&&(i[t+16>>2]=e,i[e+24>>2]=t),0|(e=0|i[h+20>>2])&&(i[t+20>>2]=e,i[e+24>>2]=t)}}while(0);return c>>>0<16?(b=c+_|0,i[h+4>>2]=3|b,i[(b=h+b+4|0)>>2]=1|i[b>>2]):(i[h+4>>2]=3|_,i[f+4>>2]=1|c,i[f+c>>2]=c,0|g&&(r=0|i[8684],1<<(g>>>3)&u?(e=34756+(g>>>3<<1<<2)+8|0,t=0|i[34756+(g>>>3<<1<<2)+8>>2]):(i[8679]=1<<(g>>>3)|u,e=34756+(g>>>3<<1<<2)+8|0,t=34756+(g>>>3<<1<<2)|0),i[e>>2]=r,i[t+12>>2]=r,i[r+8>>2]=t,i[r+12>>2]=34756+(g>>>3<<1<<2)),i[8681]=c,i[8684]=f),l=A,0|h+8}}}}else if(e>>>0<=4294967231){if(_=e+11&-8,n=0|i[8680]){c=(e+11|0)>>>8?_>>>0>16777215?31:_>>>(7+(c=14-((520192+(c=(e+11|0)>>>8<<((1048320+((e+11|0)>>>8)|0)>>>16&8))|0)>>>16&4|(1048320+((e+11|0)>>>8)|0)>>>16&8|(245760+(c<<((c+520192|0)>>>16&4))|0)>>>16&2)+(c<<((c+520192|0)>>>16&4)<<((245760+(c<<((c+520192|0)>>>16&4))|0)>>>16&2)>>>15)|0)|0)&1|c<<1:0,e=0|i[35020+(c<<2)>>2];e:do{if(e)for(r=0-_|0,t=0,f=_<<(31==(0|c)?0:25-(c>>>1)|0),s=0;;){if((a=(-8&i[e+4>>2])-_|0)>>>0>>0){if(!a){r=0,t=e,B=65;break e}r=a,s=e}if(t=0==(0|(B=0|i[e+20>>2]))|(0|B)==(0|(e=0|i[e+16+(f>>>31<<2)>>2]))?t:B,!e){e=s,B=61;break}f<<=1}else r=0-_|0,t=0,e=0,B=61}while(0);if(61==(0|B)){if(0==(0|t)&0==(0|e)){if(!(((e=2<>>(g>>>12&16)>>>5&8|g>>>12&16|(e=g>>>(g>>>12&16)>>>(g>>>(g>>>12&16)>>>5&8))>>>2&4|e>>>(e>>>2&4)>>>1&2|(t=e>>>(e>>>2&4)>>>(e>>>(e>>>2&4)>>>1&2))>>>1&1)+(t>>>(t>>>1&1))<<2)>>2],e=0}t?B=65:(s=r,f=e)}if(65==(0|B))for(;;){if(r=(a=(g=(-8&i[t+4>>2])-_|0)>>>0>>0)?g:r,a=a?t:e,(e=0|i[t+16>>2])||(e=0|i[t+20>>2]),!e){s=r,f=a;break}t=e,e=a}if(0!=(0|f)&&s>>>0<((0|i[8681])-_|0)>>>0&&(h=f+_|0)>>>0>f>>>0){o=0|i[f+24>>2],e=0|i[f+12>>2];do{if((0|e)==(0|f)){if(!(e=0|i[(t=f+20|0)>>2])&&!(e=0|i[(t=f+16|0)>>2])){e=0;break}for(;;)if(r=0|i[(a=e+20|0)>>2])e=r,t=a;else{if(!(r=0|i[(a=e+16|0)>>2]))break;e=r,t=a}i[t>>2]=0}else b=0|i[f+8>>2],i[b+12>>2]=e,i[e+8>>2]=b}while(0);do{if(o){if(t=0|i[f+28>>2],(0|f)==(0|i[35020+(t<<2)>>2])){if(i[35020+(t<<2)>>2]=e,!e){i[8680]=n&~(1<>2])==(0|f)?o+16|0:o+20|0)>>2]=e,!e)break;i[e+24>>2]=o,0|(t=0|i[f+16>>2])&&(i[e+16>>2]=t,i[t+24>>2]=e),(t=0|i[f+20>>2])&&(i[e+20>>2]=t,i[t+24>>2]=e)}}while(0);e:do{if(s>>>0<16)b=s+_|0,i[f+4>>2]=3|b,i[(b=f+b+4|0)>>2]=1|i[b>>2];else{if(i[f+4>>2]=3|_,i[h+4>>2]=1|s,i[h+s>>2]=s,r=s>>>3,s>>>0<256){(e=0|i[8679])&1<>2]):(i[8679]=e|1<>2]=h,i[t+12>>2]=h,i[h+8>>2]=t,i[h+12>>2]=34756+(r<<1<<2);break}if(e=35020+((r=(e=s>>>8)?s>>>0>16777215?31:s>>>(7+(r=14-((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4|(e+1048320|0)>>>16&8|(245760+(r=e<<((e+1048320|0)>>>16&8)<<((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(r<<((r+245760|0)>>>16&2)>>>15)|0)|0)&1|r<<1:0)<<2)|0,i[h+28>>2]=r,i[h+16+4>>2]=0,i[h+16>>2]=0,!(n&(t=1<>2]=h,i[h+24>>2]=e,i[h+12>>2]=h,i[h+8>>2]=h;break}e=0|i[e>>2];A:do{if((-8&i[e+4>>2]|0)!=(0|s)){for(n=s<<(31==(0|r)?0:25-(r>>>1)|0);t=0|i[(r=e+16+(n>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(0|s)){e=t;break A}n<<=1,e=t}i[r>>2]=h,i[h+24>>2]=e,i[h+12>>2]=h,i[h+8>>2]=h;break e}}while(0);b=0|i[(E=e+8|0)>>2],i[b+12>>2]=h,i[E>>2]=h,i[h+8>>2]=b,i[h+12>>2]=e,i[h+24>>2]=0}}while(0);return l=A,0|f+8}}}else _=-1}while(0);if((r=0|i[8681])>>>0>=_>>>0)return t=r-_|0,e=0|i[8684],t>>>0>15?(b=e+_|0,i[8684]=b,i[8681]=t,i[b+4>>2]=1|t,i[e+r>>2]=t,i[e+4>>2]=3|_):(i[8681]=0,i[8684]=0,i[e+4>>2]=3|r,i[e+r+4>>2]=1|i[e+r+4>>2]),l=A,0|e+8;if((a=0|i[8682])>>>0>_>>>0)return C=a-_|0,i[8682]=C,E=(b=0|i[8685])+_|0,i[8685]=E,i[E+4>>2]=1|C,i[b+4>>2]=3|_,l=A,0|b+8;if(0|i[8797]?e=0|i[8799]:(i[8799]=4096,i[8798]=4096,i[8800]=-1,i[8801]=-1,i[8802]=0,i[8790]=0,i[8797]=-16&I^1431655768,e=4096),s=_+48|0,((h=e+(f=_+47|0)|0)&(c=0-e|0))>>>0<=_>>>0)return l=A,0;if(0|(e=0|i[8789])&&(((I=0|i[8787])+(h&c)|0)>>>0<=I>>>0||(I+(h&c)|0)>>>0>e>>>0))return l=A,0;e:do{if(4&i[8790])e=0,B=143;else{t=0|i[8685];A:do{if(t){for(r=35164;!((e=0|i[r>>2])>>>0<=t>>>0&&(e+(0|i[(p=r+4|0)>>2])|0)>>>0>t>>>0);){if(!(e=0|i[r+8>>2])){B=128;break A}r=e}if((h-a&c)>>>0<2147483647)if((0|(e=0|kA(h-a&c)))==((0|i[r>>2])+(0|i[p>>2])|0)){if(-1!=(0|e)){s=e,o=h-a&c,B=145;break e}e=h-a&c}else n=e,r=h-a&c,B=136;else e=0}else B=128}while(0);do{if(128==(0|B))if(-1!=(0|(t=0|kA(0)))&&(o=(0==((o=0|i[8798])-1&t|0)?0:(o+-1+t&0-o)-t|0)+(h&c)|0,d=0|i[8787],o>>>0>_>>>0&o>>>0<2147483647)){if(0|(p=0|i[8789])&&(o+d|0)>>>0<=d>>>0|(o+d|0)>>>0>p>>>0){e=0;break}if((0|(e=0|kA(o)))==(0|t)){s=t,B=145;break e}n=e,r=o,B=136}else e=0}while(0);do{if(136==(0|B)){if(t=0-r|0,!(s>>>0>r>>>0&r>>>0<2147483647&-1!=(0|n))){if(-1==(0|n)){e=0;break}s=n,o=r,B=145;break e}if((e=f-r+(e=0|i[8799])&0-e)>>>0>=2147483647){s=n,o=r,B=145;break e}if(-1==(0|kA(e))){kA(t),e=0;break}s=n,o=e+r|0,B=145;break e}}while(0);i[8790]=4|i[8790],B=143}}while(0);if(143==(0|B)&&(h&c)>>>0<2147483647&&!(-1==(0|(y=0|kA(h&c)))|1^(E=((C=0|kA(0))-y|0)>>>0>(_+40|0)>>>0)|y>>>0>>0&-1!=(0|y)&-1!=(0|C)^1)&&(s=y,o=E?C-y|0:e,B=145),145==(0|B)){e=(0|i[8787])+o|0,i[8787]=e,e>>>0>(0|i[8788])>>>0&&(i[8788]=e),c=0|i[8685];e:do{if(c){for(a=35164;;){if((0|s)==((e=0|i[a>>2])+(t=0|i[(n=a+4|0)>>2])|0)){B=154;break}if(!(r=0|i[a+8>>2]))break;a=r}if(154==(0|B)&&0==(8&i[a+12>>2]|0)&&s>>>0>c>>>0&e>>>0<=c>>>0){i[n>>2]=t+o,b=(0|i[8682])+o|0,E=0==(c+8&7|0)?0:0-(c+8)&7,i[8685]=c+E,i[8682]=b-E,i[c+E+4>>2]=b-E|1,i[c+b+4>>2]=40,i[8686]=i[8801];break}for(s>>>0<(0|i[8683])>>>0&&(i[8683]=s),r=s+o|0,t=35164;;){if((0|i[t>>2])==(0|r)){B=162;break}if(!(e=0|i[t+8>>2]))break;t=e}if(162==(0|B)&&0==(8&i[t+12>>2]|0)){i[t>>2]=s,i[(u=t+4|0)>>2]=(0|i[u>>2])+o,h=(u=s+(0==(7&(u=s+8|0)|0)?0:0-u&7)|0)+_|0,f=(e=r+(0==(r+8&7|0)?0:0-(r+8)&7)|0)-u-_|0,i[u+4>>2]=3|_;A:do{if((0|c)==(0|e))b=(0|i[8682])+f|0,i[8682]=b,i[8685]=h,i[h+4>>2]=1|b;else{if((0|i[8684])==(0|e)){b=(0|i[8681])+f|0,i[8681]=b,i[8684]=h,i[h+4>>2]=1|b,i[h+b>>2]=b;break}if(1==(3&(s=0|i[e+4>>2])|0)){t:do{if(s>>>0<256){if(t=0|i[e+8>>2],(0|(r=0|i[e+12>>2]))==(0|t)){i[8679]=i[8679]&~(1<<(s>>>3));break}i[t+12>>2]=r,i[r+8>>2]=t;break}o=0|i[e+24>>2],t=0|i[e+12>>2];do{if((0|t)==(0|e)){if(t=0|i[e+16+4>>2])r=e+16+4|0;else{if(!(t=0|i[e+16>>2])){t=0;break}r=e+16|0}for(;;)if(n=0|i[(a=t+20|0)>>2])t=n,r=a;else{if(!(n=0|i[(a=t+16|0)>>2]))break;t=n,r=a}i[r>>2]=0}else b=0|i[e+8>>2],i[b+12>>2]=t,i[t+8>>2]=b}while(0);if(!o)break;r=0|i[e+28>>2];do{if((0|i[35020+(r<<2)>>2])==(0|e)){if(i[35020+(r<<2)>>2]=t,0|t)break;i[8680]=i[8680]&~(1<>2])==(0|e)?o+16|0:o+20|0)>>2]=t,!t)break t}while(0);if(i[t+24>>2]=o,0|(r=0|i[e+16>>2])&&(i[t+16>>2]=r,i[r+24>>2]=t),!(r=0|i[e+16+4>>2]))break;i[t+20>>2]=r,i[r+24>>2]=t}while(0);e=e+(-8&s)|0,a=(-8&s)+f|0}else a=f;if(i[(r=e+4|0)>>2]=-2&i[r>>2],i[h+4>>2]=1|a,i[h+a>>2]=a,r=a>>>3,a>>>0<256){(e=0|i[8679])&1<>2]):(i[8679]=e|1<>2]=h,i[t+12>>2]=h,i[h+8>>2]=t,i[h+12>>2]=34756+(r<<1<<2);break}e=a>>>8;do{if(e){if(a>>>0>16777215){n=31;break}n=a>>>(7+(n=14-((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4|(e+1048320|0)>>>16&8|(245760+(n=e<<((e+1048320|0)>>>16&8)<<((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(n<<((n+245760|0)>>>16&2)>>>15)|0)|0)&1|n<<1}else n=0}while(0);if(t=35020+(n<<2)|0,i[h+28>>2]=n,i[h+16+4>>2]=0,i[h+16>>2]=0,!((e=0|i[8680])&(r=1<>2]=h,i[h+24>>2]=t,i[h+12>>2]=h,i[h+8>>2]=h;break}e=0|i[t>>2];t:do{if((-8&i[e+4>>2]|0)!=(0|a)){for(n=a<<(31==(0|n)?0:25-(n>>>1)|0);t=0|i[(r=e+16+(n>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(0|a)){e=t;break t}n<<=1,e=t}i[r>>2]=h,i[h+24>>2]=e,i[h+12>>2]=h,i[h+8>>2]=h;break A}}while(0);b=0|i[(E=e+8|0)>>2],i[b+12>>2]=h,i[E>>2]=h,i[h+8>>2]=b,i[h+12>>2]=e,i[h+24>>2]=0}}while(0);return l=A,0|u+8}for(t=35164;!((e=0|i[t>>2])>>>0<=c>>>0&&(b=e+(0|i[t+4>>2])|0)>>>0>c>>>0);)t=0|i[t+8>>2];a=(a=b+-47+(0==(b+-47+8&7|0)?0:0-(b+-47+8)&7)|0)>>>0<(c+16|0)>>>0?c:a,e=o+-40|0,E=s+(C=0==(7&(C=s+8|0)|0)?0:0-C&7)|0,i[8685]=E,i[8682]=e-C,i[E+4>>2]=e-C|1,i[s+e+4>>2]=40,i[8686]=i[8801],i[a+4>>2]=27,i[a+8>>2]=i[8791],i[a+8+4>>2]=i[8792],i[a+8+8>>2]=i[8793],i[a+8+12>>2]=i[8794],i[8791]=s,i[8792]=o,i[8794]=0,i[8793]=a+8,e=a+24|0;do{E=e,i[(e=e+4|0)>>2]=7}while((E+8|0)>>>0>>0);if((0|a)!=(0|c)){if(i[a+4>>2]=-2&i[a+4>>2],i[c+4>>2]=a-c|1,i[a>>2]=a-c,(a-c|0)>>>0<256){r=34756+((a-c|0)>>>3<<1<<2)|0,(e=0|i[8679])&1<<((a-c|0)>>>3)?(e=r+8|0,t=0|i[r+8>>2]):(i[8679]=e|1<<((a-c|0)>>>3),e=r+8|0,t=r),i[e>>2]=c,i[t+12>>2]=c,i[c+8>>2]=t,i[c+12>>2]=r;break}if(t=35020+((n=(a-c|0)>>>8?(a-c|0)>>>0>16777215?31:(a-c|0)>>>(7+(n=14-((520192+(n=(a-c|0)>>>8<<((1048320+((a-c|0)>>>8)|0)>>>16&8))|0)>>>16&4|(1048320+((a-c|0)>>>8)|0)>>>16&8|(245760+(n<<((n+520192|0)>>>16&4))|0)>>>16&2)+(n<<((n+520192|0)>>>16&4)<<((245760+(n<<((n+520192|0)>>>16&4))|0)>>>16&2)>>>15)|0)|0)&1|n<<1:0)<<2)|0,i[c+28>>2]=n,i[c+20>>2]=0,i[c+16>>2]=0,!((e=0|i[8680])&(r=1<>2]=c,i[c+24>>2]=t,i[c+12>>2]=c,i[c+8>>2]=c;break}e=0|i[t>>2];A:do{if((-8&i[e+4>>2]|0)!=(a-c|0)){for(n=a-c<<(31==(0|n)?0:25-(n>>>1)|0);t=0|i[(r=e+16+(n>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(a-c|0)){e=t;break A}n<<=1,e=t}i[r>>2]=c,i[c+24>>2]=e,i[c+12>>2]=c,i[c+8>>2]=c;break e}}while(0);b=0|i[(E=e+8|0)>>2],i[b+12>>2]=c,i[E>>2]=c,i[c+8>>2]=b,i[c+12>>2]=e,i[c+24>>2]=0}}else 0==(0|(b=0|i[8683]))|s>>>0>>0&&(i[8683]=s),i[8791]=s,i[8792]=o,i[8794]=0,i[8688]=i[8797],i[8687]=-1,i[8692]=34756,i[8691]=34756,i[8694]=34764,i[8693]=34764,i[8696]=34772,i[8695]=34772,i[8698]=34780,i[8697]=34780,i[8700]=34788,i[8699]=34788,i[8702]=34796,i[8701]=34796,i[8704]=34804,i[8703]=34804,i[8706]=34812,i[8705]=34812,i[8708]=34820,i[8707]=34820,i[8710]=34828,i[8709]=34828,i[8712]=34836,i[8711]=34836,i[8714]=34844,i[8713]=34844,i[8716]=34852,i[8715]=34852,i[8718]=34860,i[8717]=34860,i[8720]=34868,i[8719]=34868,i[8722]=34876,i[8721]=34876,i[8724]=34884,i[8723]=34884,i[8726]=34892,i[8725]=34892,i[8728]=34900,i[8727]=34900,i[8730]=34908,i[8729]=34908,i[8732]=34916,i[8731]=34916,i[8734]=34924,i[8733]=34924,i[8736]=34932,i[8735]=34932,i[8738]=34940,i[8737]=34940,i[8740]=34948,i[8739]=34948,i[8742]=34956,i[8741]=34956,i[8744]=34964,i[8743]=34964,i[8746]=34972,i[8745]=34972,i[8748]=34980,i[8747]=34980,i[8750]=34988,i[8749]=34988,i[8752]=34996,i[8751]=34996,i[8754]=35004,i[8753]=35004,b=o+-40|0,E=s+(C=0==(7&(C=s+8|0)|0)?0:0-C&7)|0,i[8685]=E,i[8682]=b-C,i[E+4>>2]=b-C|1,i[s+b+4>>2]=40,i[8686]=i[8801]}while(0);if((e=0|i[8682])>>>0>_>>>0)return C=e-_|0,i[8682]=C,E=(b=0|i[8685])+_|0,i[8685]=E,i[E+4>>2]=1|C,i[b+4>>2]=3|_,l=A,0|b+8}return i[8678]=48,l=A,0}function E(e){var A,t,i,n,a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0,N=0,L=0,T=0,K=0,J=0,X=0,j=0,O=0,q=0,z=0,V=0,$=0,W=0,Z=0,ee=0,Ae=0,te=0,re=0,ie=0,ne=0,ae=0,oe=0,se=0,fe=0,ce=0,he=0,ue=0,ge=0,_e=0,Ie=0,de=0,le=0;X=0|$A(0|r[(e|=0)>>0],0|r[e+1>>0],0|r[e+2>>0]),f(),q=0|ht(0|(q=0|BA(e+2|0)),0|f(),5),f(),x=0|ht(0|(x=0|$A(0|r[e+5>>0],0|r[e+6>>0],0|r[e+7>>0])),0|f(),2),f(),l=0|ht(0|(l=0|BA(e+7|0)),0|f(),7),f(),j=0|ht(0|(j=0|BA(e+10|0)),0|f(),4),f(),W=0|ht(0|(W=0|$A(0|r[e+13>>0],0|r[e+14>>0],0|r[e+15>>0])),0|f(),1),f(),v=0|ht(0|(v=0|BA(e+15|0)),0|f(),6),f(),fe=0|ht(0|(fe=0|$A(0|r[e+18>>0],0|r[e+19>>0],0|r[e+20>>0])),0|f(),3),f(),ge=0|$A(0|r[e+21>>0],0|r[e+22>>0],0|r[e+23>>0]),f(),ae=0|ht(0|(ae=0|BA(e+23|0)),0|f(),5),f(),ue=0|ht(0|(ue=0|$A(0|r[e+26>>0],0|r[e+27>>0],0|r[e+28>>0])),0|f(),2),f(),te=0|ht(0|(te=0|BA(e+28|0)),0|f(),7),f(),de=0|ht(0|(de=0|BA(e+31|0)),0|f(),4),f(),D=0|ht(0|(D=0|$A(0|r[e+34>>0],0|r[e+35>>0],0|r[e+36>>0])),0|f(),1),f(),K=0|ht(0|(K=0|BA(e+36|0)),0|f(),6),f(),E=0|ht(0|(E=0|$A(0|r[e+39>>0],0|r[e+40>>0],0|r[e+41>>0])),0|f(),3),f(),s=0|$A(0|r[e+42>>0],0|r[e+43>>0],0|r[e+44>>0]),f(),L=0|ht(0|(L=0|BA(e+44|0)),0|f(),5),f(),ie=0|ht(0|(ie=0|$A(0|r[e+47>>0],0|r[e+48>>0],0|r[e+49>>0])),0|f(),2),f(),le=0|ht(0|(le=0|BA(e+49|0)),0|f(),7),f(),I=0|ht(0|(I=0|BA(e+52|0)),0|f(),4),f(),S=0|ht(0|(S=0|$A(0|r[e+55>>0],0|r[e+56>>0],0|r[e+57>>0])),0|f(),1),f(),H=0|ht(0|(H=0|BA(e+57|0)),0|f(),6),f(),g=0|ZA(0|(O=0|ht(0|(O=0|BA(e+60|0)),0|f(),3)),0|(c=0|f()),666643,0),C=0|f(),he=0|ZA(0|O,0|c,470296,0),b=0|f(),M=0|ZA(0|O,0|c,654183,0),h=0|f(),m=0|ZA(0|O,0|c,-997805,-1),_=0|f(),E=0|St(0|(a=0|ZA(0|O,0|c,136657,0)),0|f(),2097151&E|0,0),a=0|f(),s=0|St(0|(c=0|ZA(0|O,0|c,-683901,-1)),0|f(),2097151&s|0,0),c=0|f(),O=0|ZA(2097151&H|0,0,666643,0),T=0|f(),w=0|ZA(2097151&H|0,0,470296,0),Ae=0|f(),P=0|ZA(2097151&H|0,0,654183,0),o=0|f(),V=0|ZA(2097151&H|0,0,-997805,-1),z=0|f(),J=0|ZA(2097151&H|0,0,136657,0),y=0|f(),H=0|St(0|E,0|a,0|(H=0|ZA(2097151&H|0,0,-683901,-1)),0|f()),a=0|f(),E=0|ZA(2097151&S|0,0,666643,0),$=0|f(),k=0|ZA(2097151&S|0,0,470296,0),re=0|f(),N=0|ZA(2097151&S|0,0,654183,0),u=0|f(),_e=0|ZA(2097151&S|0,0,-997805,-1),ce=0|f(),ee=0|ZA(2097151&S|0,0,136657,0),R=0|f(),y=0|St(0|(_=0|St(0|(K=0|St(0|(S=0|ZA(2097151&S|0,0,-683901,-1)),0|f(),2097151&K|0,0)),0|f(),0|m,0|_)),0|f(),0|J,0|y),J=0|f(),_=0|ZA(2097151&I|0,0,666643,0),m=0|f(),K=0|ZA(2097151&I|0,0,470296,0),S=0|f(),p=0|ZA(2097151&I|0,0,654183,0),Z=0|f(),Y=0|ZA(2097151&I|0,0,-997805,-1),G=0|f(),n=0|ZA(2097151&I|0,0,136657,0),Ie=0|f(),I=0|ZA(2097151&I|0,0,-683901,-1),d=0|f(),B=0|ZA(2097151&le|0,0,666643,0),F=0|f(),oe=0|ZA(2097151&le|0,0,470296,0),se=0|f(),t=0|ZA(2097151&le|0,0,654183,0),ne=0|f(),i=0|ZA(2097151&le|0,0,-997805,-1),U=0|f(),A=0|ZA(2097151&le|0,0,136657,0),Q=0|f(),o=0|St(0|(b=0|St(0|(ce=0|St(0|(Ie=0|St(0|(de=0|St(0|(le=0|ZA(2097151&le|0,0,-683901,-1)),0|f(),2097151&de|0,0)),0|f(),0|n,0|Ie)),0|f(),0|_e,0|ce)),0|f(),0|he,0|b)),0|f(),0|P,0|o),P=0|f(),v=0|St(0|(b=0|ZA(2097151&ie|0,0,666643,0)),0|f(),2097151&v|0,0),b=0|f(),he=0|ZA(2097151&ie|0,0,470296,0),ce=0|f(),m=0|St(0|(se=0|St(0|(ge=0|St(0|(_e=0|ZA(2097151&ie|0,0,654183,0)),0|f(),2097151&ge|0,0)),0|f(),0|oe,0|se)),0|f(),0|_,0|m),_=0|f(),se=0|ZA(2097151&ie|0,0,-997805,-1),oe=0|f(),T=0|St(0|(re=0|St(0|(Z=0|St(0|(U=0|St(0|(ue=0|St(0|(ge=0|ZA(2097151&ie|0,0,136657,0)),0|f(),2097151&ue|0,0)),0|f(),0|i,0|U)),0|f(),0|p,0|Z)),0|f(),0|k,0|re)),0|f(),0|O,0|T),O=0|f(),ie=0|ZA(2097151&ie|0,0,-683901,-1),re=0|f(),p=0|ht(0|(k=0|St(0|v,0|b,1048576,0)),0|(Z=0|f()),21),U=0|f(),U=0|St(0|(F=0|St(0|(fe=0|St(0|he,0|ce,2097151&fe|0,0)),0|f(),0|B,0|F)),0|f(),0|p,0|U),p=0|f(),Z=0|mt(0|v,0|b,-2097152&k|0,2047&Z|0),k=0|f(),F=0|ht(0|(b=0|St(0|m,0|_,1048576,0)),0|(v=0|f()),21),B=0|f(),B=0|St(0|($=0|St(0|(S=0|St(0|(ne=0|St(0|(ae=0|St(0|se,0|oe,2097151&ae|0,0)),0|f(),0|t,0|ne)),0|f(),0|K,0|S)),0|f(),0|E,0|$)),0|f(),0|F,0|B),F=0|f(),S=0|At(0|($=0|St(0|T,0|O,1048576,0)),0|(E=0|f()),21),K=0|f(),K=0|St(0|(Ae=0|St(0|(C=0|St(0|(u=0|St(0|(G=0|St(0|(Q=0|St(0|(te=0|St(0|ie,0|re,2097151&te|0,0)),0|f(),0|A,0|Q)),0|f(),0|Y,0|G)),0|f(),0|N,0|u)),0|f(),0|g,0|C)),0|f(),0|w,0|Ae)),0|f(),0|S,0|K),S=0|f(),C=0|At(0|(Ae=0|St(0|o,0|P,1048576,0)),0|(w=0|f()),21),g=0|f(),g=0|St(0|(z=0|St(0|(h=0|St(0|(R=0|St(0|(D=0|St(0|I,0|d,2097151&D|0,0)),0|f(),0|ee,0|R)),0|f(),0|M,0|h)),0|f(),0|V,0|z)),0|f(),0|C,0|g),C=0|f(),w=0|mt(0|o,0|P,-2097152&Ae|0,0|w),Ae=0|f(),z=0|St(0|H,0|a,0|(z=0|At(0|(P=0|St(0|y,0|J,1048576,0)),0|(o=0|f()),21)),0|f()),a=0|f(),o=0|mt(0|y,0|J,-2097152&P|0,0|o),P=0|f(),L=0|St(0|(H=0|At(0|(J=0|St(0|s,0|c,1048576,0)),0|(y=0|f()),21)),0|f(),2097151&L|0,0),H=0|f(),y=0|mt(0|s,0|c,-2097152&J|0,0|y),J=0|f(),V=0|ht(0|(c=0|St(0|U,0|p,1048576,0)),0|(s=0|f()),21),h=0|f(),s=0|mt(0|U,0|p,-2097152&c|0,0|s),c=0|f(),M=0|At(0|(p=0|St(0|B,0|F,1048576,0)),0|(U=0|f()),21),R=0|f(),Ae=0|St(0|(d=0|At(0|(ee=0|St(0|K,0|S,1048576,0)),0|(D=0|f()),21)),0|f(),0|w,0|Ae),w=0|f(),D=0|mt(0|K,0|S,-2097152&ee|0,0|D),ee=0|f(),P=0|St(0|(d=0|At(0|(S=0|St(0|g,0|C,1048576,0)),0|(K=0|f()),21)),0|f(),0|o,0|P),o=0|f(),K=0|mt(0|g,0|C,-2097152&S|0,0|K),S=0|f(),J=0|St(0|(d=0|At(0|(C=0|St(0|z,0|a,1048576,0)),0|(g=0|f()),21)),0|f(),0|y,0|J),y=0|f(),g=0|mt(0|z,0|a,-2097152&C|0,0|g),C=0|f(),W=0|St(0|(a=0|ZA(0|L,0|H,666643,0)),0|f(),2097151&W|0,0),a=0|f(),z=0|St(0|Z,0|k,0|(z=0|ZA(0|L,0|H,470296,0)),0|f()),k=0|f(),Z=0|St(0|s,0|c,0|(Z=0|ZA(0|L,0|H,654183,0)),0|f()),c=0|f(),s=0|ZA(0|L,0|H,-997805,-1),d=0|f(),I=0|ZA(0|L,0|H,136657,0),u=0|f(),E=0|mt(0|(R=0|St(0|(O=0|St(0|(H=0|ZA(0|L,0|H,-683901,-1)),0|f(),0|T,0|O)),0|f(),0|M,0|R)),0|f(),-2097152&$|0,0|E),$=0|f(),j=0|St(0|(R=0|ZA(0|J,0|y,666643,0)),0|f(),2097151&j|0,0),R=0|f(),M=0|St(0|W,0|a,0|(M=0|ZA(0|J,0|y,470296,0)),0|f()),a=0|f(),W=0|St(0|z,0|k,0|(W=0|ZA(0|J,0|y,654183,0)),0|f()),k=0|f(),z=0|St(0|Z,0|c,0|(z=0|ZA(0|J,0|y,-997805,-1)),0|f()),c=0|f(),Z=0|ZA(0|J,0|y,136657,0),O=0|f(),y=0|ZA(0|J,0|y,-683901,-1),J=0|f(),l=0|St(0|(T=0|ZA(0|g,0|C,666643,0)),0|f(),2097151&l|0,0),T=0|f(),H=0|St(0|j,0|R,0|(H=0|ZA(0|g,0|C,470296,0)),0|f()),R=0|f(),j=0|St(0|M,0|a,0|(j=0|ZA(0|g,0|C,654183,0)),0|f()),a=0|f(),M=0|St(0|W,0|k,0|(M=0|ZA(0|g,0|C,-997805,-1)),0|f()),k=0|f(),W=0|St(0|z,0|c,0|(W=0|ZA(0|g,0|C,136657,0)),0|f()),c=0|f(),C=0|ZA(0|g,0|C,-683901,-1),g=0|f(),g=0|St(0|(O=0|St(0|(d=0|St(0|(v=0|mt(0|(_=0|St(0|V,0|h,0|m,0|_)),0|f(),-2097152&b|0,0|v)),0|f(),0|s,0|d)),0|f(),0|Z,0|O)),0|f(),0|C,0|g),C=0|f(),x=0|St(0|(O=0|ZA(0|P,0|o,666643,0)),0|f(),2097151&x|0,0),O=0|f(),Z=0|St(0|l,0|T,0|(Z=0|ZA(0|P,0|o,470296,0)),0|f()),T=0|f(),l=0|St(0|H,0|R,0|(l=0|ZA(0|P,0|o,654183,0)),0|f()),R=0|f(),H=0|St(0|j,0|a,0|(H=0|ZA(0|P,0|o,-997805,-1)),0|f()),a=0|f(),j=0|St(0|M,0|k,0|(j=0|ZA(0|P,0|o,136657,0)),0|f()),k=0|f(),o=0|St(0|W,0|c,0|(o=0|ZA(0|P,0|o,-683901,-1)),0|f()),c=0|f(),q=0|St(0|(W=0|ZA(0|K,0|S,666643,0)),0|f(),2097151&q|0,0),W=0|f(),P=0|St(0|x,0|O,0|(P=0|ZA(0|K,0|S,470296,0)),0|f()),O=0|f(),x=0|St(0|Z,0|T,0|(x=0|ZA(0|K,0|S,654183,0)),0|f()),T=0|f(),Z=0|St(0|l,0|R,0|(Z=0|ZA(0|K,0|S,-997805,-1)),0|f()),R=0|f(),l=0|St(0|H,0|a,0|(l=0|ZA(0|K,0|S,136657,0)),0|f()),a=0|f(),S=0|St(0|j,0|k,0|(S=0|ZA(0|K,0|S,-683901,-1)),0|f()),k=0|f(),X=0|St(0|(j=0|ZA(0|Ae,0|w,666643,0)),0|f(),2097151&X|0,0),j=0|f(),K=0|St(0|q,0|W,0|(K=0|ZA(0|Ae,0|w,470296,0)),0|f()),W=0|f(),q=0|St(0|P,0|O,0|(q=0|ZA(0|Ae,0|w,654183,0)),0|f()),O=0|f(),P=0|St(0|x,0|T,0|(P=0|ZA(0|Ae,0|w,-997805,-1)),0|f()),T=0|f(),x=0|St(0|Z,0|R,0|(x=0|ZA(0|Ae,0|w,136657,0)),0|f()),R=0|f(),w=0|St(0|l,0|a,0|(w=0|ZA(0|Ae,0|w,-683901,-1)),0|f()),a=0|f(),Z=0|St(0|K,0|W,0|(Z=0|At(0|(l=0|St(0|X,0|j,1048576,0)),0|(Ae=0|f()),21)),0|f()),W=0|f(),Ae=0|mt(0|X,0|j,-2097152&l|0,0|Ae),l=0|f(),K=0|St(0|P,0|T,0|(K=0|At(0|(j=0|St(0|q,0|O,1048576,0)),0|(X=0|f()),21)),0|f()),T=0|f(),M=0|St(0|w,0|a,0|(M=0|At(0|(P=0|St(0|x,0|R,1048576,0)),0|(H=0|f()),21)),0|f()),a=0|f(),s=0|St(0|o,0|c,0|(s=0|At(0|(w=0|St(0|S,0|k,1048576,0)),0|(d=0|f()),21)),0|f()),c=0|f(),d=0|mt(0|S,0|k,-2097152&w|0,0|d),w=0|f(),o=0|At(0|(k=0|St(0|g,0|C,1048576,0)),0|(S=0|f()),21),v=0|f(),v=0|St(0|(J=0|St(0|(U=0|mt(0|(F=0|St(0|I,0|u,0|B,0|F)),0|f(),-2097152&p|0,0|U)),0|f(),0|y,0|J)),0|f(),0|o,0|v),o=0|f(),S=0|mt(0|g,0|C,-2097152&k|0,0|S),k=0|f(),ee=0|St(0|(J=0|At(0|(C=0|St(0|E,0|$,1048576,0)),0|(g=0|f()),21)),0|f(),0|D,0|ee),D=0|f(),g=0|mt(0|E,0|$,-2097152&C|0,0|g),C=0|f(),J=0|At(0|($=0|St(0|Z,0|W,1048576,0)),0|(E=0|f()),21),y=0|f(),F=0|At(0|(U=0|St(0|K,0|T,1048576,0)),0|(p=0|f()),21),B=0|f(),b=0|St(0|d,0|w,0|(b=0|At(0|(u=0|St(0|M,0|a,1048576,0)),0|(I=0|f()),21)),0|f()),w=0|f(),m=0|St(0|S,0|k,0|(m=0|At(0|(d=0|St(0|s,0|c,1048576,0)),0|(_=0|f()),21)),0|f()),k=0|f(),_=0|mt(0|s,0|c,-2097152&d|0,0|_),d=0|f(),S=0|St(0|g,0|C,0|(S=0|At(0|(c=0|St(0|v,0|o,1048576,0)),0|(s=0|f()),21)),0|f()),C=0|f(),s=0|mt(0|v,0|o,-2097152&c|0,0|s),c=0|f(),g=0|At(0|(o=0|St(0|ee,0|D,1048576,0)),0|(v=0|f()),21),h=0|f(),v=0|mt(0|ee,0|D,-2097152&o|0,0|v),o=0|f(),D=0|St(0|Ae,0|l,0|(D=0|ZA(0|g,0|h,666643,0)),0|f()),l=0|f(),Ae=0|ZA(0|g,0|h,470296,0),ee=0|f(),V=0|ZA(0|g,0|h,654183,0),z=0|f(),L=0|ZA(0|g,0|h,-997805,-1),N=0|f(),G=0|ZA(0|g,0|h,136657,0),Y=0|f(),h=0|ZA(0|g,0|h,-683901,-1),g=0|f(),l=0|At(0|D,0|l,21),Q=0|f(),l=0|At(0|(Q=0|St(0|(E=0|mt(0|(W=0|St(0|Ae,0|ee,0|Z,0|W)),0|f(),-2097152&$|0,0|E)),0|f(),0|l,0|Q)),0|f(),21),E=0|f(),l=0|At(0|(E=0|St(0|(y=0|St(0|(X=0|mt(0|(O=0|St(0|V,0|z,0|q,0|O)),0|f(),-2097152&j|0,0|X)),0|f(),0|J,0|y)),0|f(),0|l,0|E)),0|f(),21),y=0|f(),l=0|At(0|(y=0|St(0|(p=0|mt(0|(N=0|St(0|K,0|T,0|L,0|N)),0|f(),-2097152&U|0,0|p)),0|f(),0|l,0|y)),0|f(),21),p=0|f(),l=0|At(0|(p=0|St(0|(B=0|St(0|(H=0|mt(0|(R=0|St(0|G,0|Y,0|x,0|R)),0|f(),-2097152&P|0,0|H)),0|f(),0|F,0|B)),0|f(),0|l,0|p)),0|f(),21),B=0|f(),D=0|St(0|(S=0|ZA(0|(v=0|At(0|(o=0|St(0|(C=0|At(0|(s=0|St(0|S,0|C,0|(s=0|At(0|(c=0|St(0|(k=0|At(0|(_=0|St(0|m,0|k,0|(_=0|At(0|(d=0|St(0|(w=0|At(0|(l=0|St(0|b,0|w,0|(l=0|At(0|(B=0|St(0|(I=0|mt(0|(g=0|St(0|M,0|a,0|h,0|g)),0|f(),-2097152&u|0,0|I)),0|f(),0|l,0|B)),0|f(),21)),0|f())),0|f(),21)),0|f(),0|_,0|d)),0|f(),21)),0|f())),0|f(),21)),0|f(),0|s,0|c)),0|f(),21)),0|f())),0|f(),21)),0|f(),0|v,0|o)),0|f(),21)),0|(C=0|f()),666643,0)),0|f(),2097151&D|0,0),S=0|f(),Q=0|St(0|(k=0|ZA(0|v,0|C,470296,0)),0|f(),2097151&Q|0,0),k=0|f(),E=0|St(0|(m=0|ZA(0|v,0|C,654183,0)),0|f(),2097151&E|0,0),m=0|f(),y=0|St(0|(w=0|ZA(0|v,0|C,-997805,-1)),0|f(),2097151&y|0,0),w=0|f(),p=0|St(0|(b=0|ZA(0|v,0|C,136657,0)),0|f(),2097151&p|0,0),b=0|f(),o=0|St(0|(a=0|At(0|(s=0|St(0|(h=0|At(0|(c=0|St(0|(g=0|At(0|(_=0|St(0|(u=0|At(0|(d=0|St(0|(I=0|At(0|(l=0|St(0|(B=0|At(0|(p=0|St(0|(B=0|St(0|(C=0|ZA(0|v,0|C,-683901,-1)),0|f(),2097151&B|0,0)),0|(C=0|f()),0|(p=0|At(0|(y=0|St(0|p,0|b,0|(y=0|At(0|(E=0|St(0|y,0|w,0|(E=0|At(0|(Q=0|St(0|E,0|m,0|(Q=0|At(0|(v=0|St(0|Q,0|k,0|(v=0|At(0|D,0|S,21)),0|f())),0|(k=0|f()),21)),0|f())),0|(m=0|f()),21)),0|f())),0|(w=0|f()),21)),0|f())),0|(b=0|f()),21)),0|f())),0|(C=0|f()),21)),0|f(),2097151&l|0,0)),0|(B=0|f()),21)),0|f(),2097151&d|0,0)),0|(I=0|f()),21)),0|f(),2097151&_|0,0)),0|(u=0|f()),21)),0|f(),2097151&c|0,0)),0|(g=0|f()),21)),0|f(),2097151&s|0,0)),0|(h=0|f()),21)),0|f(),2097151&o|0,0),a=0|f(),r[e>>0]=D,M=0|ht(0|D,0|S,8),f(),r[e+1>>0]=M,S=0|ht(0|D,0|S,16),f(),D=0|ot(2097151&v|0,0,5),f(),r[e+2>>0]=D|31&S,S=0|ht(0|v,0|k,3),f(),r[e+3>>0]=S,k=0|ht(0|v,0|k,11),f(),r[e+4>>0]=k,v=0|ht(2097151&v|0,0,19),k=0|f(),S=0|ot(2097151&Q|0,0,2),f(),r[e+5>>0]=S|v,m=0|ht(0|Q,0|m,6),f(),r[e+6>>0]=m,Q=0|ht(2097151&Q|0,0,14),m=0|f(),v=0|ot(2097151&E|0,0,7),f(),r[e+7>>0]=v|Q,Q=0|ht(0|E,0|w,1),f(),r[e+8>>0]=Q,w=0|ht(0|E,0|w,9),f(),r[e+9>>0]=w,E=0|ht(2097151&E|0,0,17),w=0|f(),Q=0|ot(2097151&y|0,0,4),f(),r[e+10>>0]=Q|E,E=0|ht(0|y,0|b,4),f(),r[e+11>>0]=E,b=0|ht(0|y,0|b,12),f(),r[e+12>>0]=b,y=0|ht(2097151&y|0,0,20),b=0|f(),E=0|ot(2097151&p|0,0,1),f(),r[e+13>>0]=E|y,C=0|ht(0|p,0|C,7),f(),r[e+14>>0]=C,p=0|ht(2097151&p|0,0,15),C=0|f(),y=0|ot(2097151&l|0,0,6),f(),r[e+15>>0]=y|p,p=0|ht(0|l,0|B,2),f(),r[e+16>>0]=p,B=0|ht(0|l,0|B,10),f(),r[e+17>>0]=B,l=0|ht(2097151&l|0,0,18),B=0|f(),p=0|ot(0|d,0|I,3),f(),r[e+18>>0]=p|l,l=0|ht(0|d,0|I,5),f(),r[e+19>>0]=l,I=0|ht(0|d,0|I,13),f(),r[e+20>>0]=I,r[e+21>>0]=_,I=0|ht(0|_,0|u,8),f(),r[e+22>>0]=I,u=0|ht(0|_,0|u,16),f(),_=0|ot(2097151&c|0,0,5),f(),r[e+23>>0]=_|31&u,u=0|ht(0|c,0|g,3),f(),r[e+24>>0]=u,g=0|ht(0|c,0|g,11),f(),r[e+25>>0]=g,c=0|ht(2097151&c|0,0,19),g=0|f(),u=0|ot(2097151&s|0,0,2),f(),r[e+26>>0]=u|c,h=0|ht(0|s,0|h,6),f(),r[e+27>>0]=h,s=0|ht(2097151&s|0,0,14),h=0|f(),c=0|ot(0|o,0|a,7),f(),r[e+28>>0]=c|s,s=0|ht(0|o,0|a,1),f(),r[e+29>>0]=s,s=0|ht(0|o,0|a,9),f(),r[e+30>>0]=s,a=0|At(0|o,0|a,17),f(),r[e+31>>0]=a}function b(e,A,t){e|=0,t|=0;var r,n,a,o,s,c,h,u,g,_,I,d,l,p,B,y,C,E,b,Q,w,v,m,S,k,D,M,F,H,P,R,x,Y,G,U,N,L,T,K,J,X,j,O,q,z,V,$,W,Z,ee,Ae,te,re,ie,ne,ae,oe,se,fe,ce,he,ue,ge,_e,Ie,de,le,pe,Be,ye,Ce,Ee,be,Qe,we,ve,me,Se,ke,De,Me,Fe,He,Pe,Re,xe,Ye,Ge,Ue,Ne=0,Le=0,Te=0,Ke=0,Je=0,Xe=0,je=0,Oe=0,qe=0,ze=0,Ve=0,$e=0,We=0,Ze=0,eA=0,AA=0,tA=0,rA=0,iA=0,nA=0,aA=0,oA=0,sA=0,fA=0,cA=0,hA=0,uA=0,gA=0,_A=0,IA=0,dA=0,lA=0,pA=0,BA=0,yA=0,CA=0,EA=0,bA=0,QA=0,wA=0,vA=0,mA=0,SA=0,kA=0,DA=0,MA=0,FA=0,HA=0,PA=0,RA=0,xA=0,YA=0,GA=0,UA=0,NA=0,LA=0,TA=0,KA=0,JA=0,XA=0,jA=0,OA=0,qA=0,zA=0,VA=0,$A=0,WA=0,et=0,tt=0,rt=0,it=0,nt=0,at=0,ot=0,st=0,ft=0,ct=0,ut=0,gt=0,_t=0,It=0,dt=0,lt=0,pt=0,Bt=0,yt=0,Ct=0,Et=0,bt=0,Qt=0,wt=0,vt=0,kt=0,Dt=0,Mt=0,Ft=0,Ht=0,Pt=0,Rt=0,xt=0,Yt=0,Gt=0,Ut=0,Nt=0,Lt=0,Tt=0,Kt=0,Jt=0,Xt=0,jt=0;eA=0|i[(A|=0)>>2],Oe=0|i[A+4>>2],Xe=0|i[A+8>>2],We=0|i[A+12>>2],FA=0|i[A+16>>2],$e=0|i[A+20>>2],st=0|i[A+24>>2],Ne=0|i[A+28>>2],EA=0|i[A+32>>2],uA=0|i[A+36>>2],fA=0|i[t>>2],jt=0|i[t+4>>2],vt=0|i[t+8>>2],nt=0|i[t+12>>2],GA=0|i[t+16>>2],Ft=0|i[t+20>>2],ut=0|i[t+24>>2],KA=0|i[t+28>>2],bA=0|i[t+32>>2],Ue=0|i[t+36>>2],Ye=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),Xt=0|f(),ke=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),Se=0|f(),te=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),at=0|f(),Y=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),UA=0|f(),Ee=0|ZA(0|GA,((0|GA)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),Pt=0|f(),se=0|ZA(0|Ft,((0|Ft)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),_t=0|f(),K=0|ZA(0|ut,((0|ut)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),XA=0|f(),Q=0|ZA(0|KA,((0|KA)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),wA=0|f(),_=0|ZA(0|bA,((0|bA)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),gA=0|f(),eA=0|ZA(0|Ue,((0|Ue)<0)<<31>>31|0,0|eA,((0|eA)<0)<<31>>31|0),Ze=0|f(),kt=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|Oe,((0|Oe)<0)<<31>>31|0),Dt=0|f(),ne=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,Oe<<1|0,((Oe<<1|0)<0)<<31>>31|0),ie=0|f(),G=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|Oe,((0|Oe)<0)<<31>>31|0),NA=0|f(),be=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,Oe<<1|0,((Oe<<1|0)<0)<<31>>31|0),Rt=0|f(),fe=0|ZA(0|GA,((0|GA)<0)<<31>>31|0,0|Oe,((0|Oe)<0)<<31>>31|0),It=0|f(),J=0|ZA(0|Ft,((0|Ft)<0)<<31>>31|0,Oe<<1|0,((Oe<<1|0)<0)<<31>>31|0),jA=0|f(),w=0|ZA(0|ut,((0|ut)<0)<<31>>31|0,0|Oe,((0|Oe)<0)<<31>>31|0),vA=0|f(),I=0|ZA(0|KA,((0|KA)<0)<<31>>31|0,Oe<<1|0,((Oe<<1|0)<0)<<31>>31|0),_A=0|f(),r=0|ZA(0|bA,((0|bA)<0)<<31>>31|0,0|Oe,((0|Oe)<0)<<31>>31|0),AA=0|f(),Oe=0|ZA(19*Ue|0,0|(hA=((19*Ue|0)<0)<<31>>31),Oe<<1|0,((Oe<<1|0)<0)<<31>>31|0),A=0|f(),re=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),ot=0|f(),L=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),N=0|f(),Qe=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),xt=0|f(),ce=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),dt=0|f(),X=0|ZA(0|GA,((0|GA)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),OA=0|f(),v=0|ZA(0|Ft,((0|Ft)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),mA=0|f(),d=0|ZA(0|ut,((0|ut)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),IA=0|f(),n=0|ZA(0|KA,((0|KA)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),tA=0|f(),De=0|ZA(19*bA|0,0|(QA=((19*bA|0)<0)<<31>>31),0|Xe,((0|Xe)<0)<<31>>31|0),Gt=0|f(),Xe=0|ZA(19*Ue|0,0|hA,0|Xe,((0|Xe)<0)<<31>>31|0),je=0|f(),U=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),LA=0|f(),me=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,We<<1|0,((We<<1|0)<0)<<31>>31|0),ve=0|f(),he=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),lt=0|f(),j=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,We<<1|0,((We<<1|0)<0)<<31>>31|0),qA=0|f(),m=0|ZA(0|GA,((0|GA)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),SA=0|f(),l=0|ZA(0|Ft,((0|Ft)<0)<<31>>31|0,We<<1|0,((We<<1|0)<0)<<31>>31|0),dA=0|f(),a=0|ZA(0|ut,((0|ut)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),rA=0|f(),Me=0|ZA(19*KA|0,0|(JA=((19*KA|0)<0)<<31>>31),We<<1|0,((We<<1|0)<0)<<31>>31|0),Ut=0|f(),Ie=0|ZA(19*bA|0,0|QA,0|We,((0|We)<0)<<31>>31|0),Bt=0|f(),We=0|ZA(19*Ue|0,0|hA,We<<1|0,((We<<1|0)<0)<<31>>31|0),Je=0|f(),we=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),Yt=0|f(),_e=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),ge=0|f(),O=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),zA=0|f(),S=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),kA=0|f(),p=0|ZA(0|GA,((0|GA)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),lA=0|f(),o=0|ZA(0|Ft,((0|Ft)<0)<<31>>31|0,0|FA,((0|FA)<0)<<31>>31|0),iA=0|f(),Fe=0|ZA(19*ut|0,0|(gt=((19*ut|0)<0)<<31>>31),0|FA,((0|FA)<0)<<31>>31|0),Nt=0|f(),de=0|ZA(19*KA|0,0|JA,0|FA,((0|FA)<0)<<31>>31|0),yt=0|f(),$=0|ZA(19*bA|0,0|QA,0|FA,((0|FA)<0)<<31>>31|0),$A=0|f(),FA=0|ZA(19*Ue|0,0|hA,0|FA,((0|FA)<0)<<31>>31|0),Te=0|f(),ue=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),pt=0|f(),V=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,$e<<1|0,(($e<<1|0)<0)<<31>>31|0),z=0|f(),k=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),DA=0|f(),B=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,$e<<1|0,(($e<<1|0)<0)<<31>>31|0),pA=0|f(),s=0|ZA(0|GA,((0|GA)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),nA=0|f(),He=0|ZA(19*Ft|0,0|(Ht=((19*Ft|0)<0)<<31>>31),$e<<1|0,(($e<<1|0)<0)<<31>>31|0),Lt=0|f(),le=0|ZA(19*ut|0,0|gt,0|$e,((0|$e)<0)<<31>>31|0),Ct=0|f(),W=0|ZA(19*KA|0,0|JA,$e<<1|0,(($e<<1|0)<0)<<31>>31|0),WA=0|f(),H=0|ZA(19*bA|0,0|QA,0|$e,((0|$e)<0)<<31>>31|0),HA=0|f(),$e=0|ZA(19*Ue|0,0|hA,$e<<1|0,(($e<<1|0)<0)<<31>>31|0),Le=0|f(),q=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|st,((0|st)<0)<<31>>31|0),VA=0|f(),F=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,0|st,((0|st)<0)<<31>>31|0),M=0|f(),y=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|st,((0|st)<0)<<31>>31|0),BA=0|f(),c=0|ZA(0|nt,((0|nt)<0)<<31>>31|0,0|st,((0|st)<0)<<31>>31|0),aA=0|f(),Pe=0|ZA(19*GA|0,((19*GA|0)<0)<<31>>31|0,0|st,((0|st)<0)<<31>>31|0),Tt=0|f(),pe=0|ZA(19*Ft|0,0|Ht,0|st,((0|st)<0)<<31>>31|0),Et=0|f(),Z=0|ZA(19*ut|0,0|gt,0|st,((0|st)<0)<<31>>31|0),et=0|f(),P=0|ZA(19*KA|0,0|JA,0|st,((0|st)<0)<<31>>31|0),PA=0|f(),qe=0|ZA(19*bA|0,0|QA,0|st,((0|st)<0)<<31>>31|0),ze=0|f(),st=0|ZA(19*Ue|0,0|hA,0|st,((0|st)<0)<<31>>31|0),Ke=0|f(),D=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|Ne,((0|Ne)<0)<<31>>31|0),MA=0|f(),b=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),E=0|f(),h=0|ZA(0|vt,((0|vt)<0)<<31>>31|0,0|Ne,((0|Ne)<0)<<31>>31|0),oA=0|f(),Re=0|ZA(19*nt|0,((19*nt|0)<0)<<31>>31|0,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),Kt=0|f(),Be=0|ZA(19*GA|0,((19*GA|0)<0)<<31>>31|0,0|Ne,((0|Ne)<0)<<31>>31|0),bt=0|f(),ee=0|ZA(19*Ft|0,0|Ht,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),tt=0|f(),R=0|ZA(19*ut|0,0|gt,0|Ne,((0|Ne)<0)<<31>>31|0),RA=0|f(),cA=0|ZA(19*KA|0,0|JA,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),Ve=0|f(),ae=0|ZA(19*bA|0,0|QA,0|Ne,((0|Ne)<0)<<31>>31|0),ft=0|f(),t=0|ZA(19*Ue|0,0|hA,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),Ne=0|f(),C=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|EA,((0|EA)<0)<<31>>31|0),yA=0|f(),g=0|ZA(0|jt,((0|jt)<0)<<31>>31|0,0|EA,((0|EA)<0)<<31>>31|0),u=0|f(),xe=0|ZA(19*vt|0,((19*vt|0)<0)<<31>>31|0,0|EA,((0|EA)<0)<<31>>31|0),Jt=0|f(),ye=0|ZA(19*nt|0,((19*nt|0)<0)<<31>>31|0,0|EA,((0|EA)<0)<<31>>31|0),Qt=0|f(),Ae=0|ZA(19*GA|0,((19*GA|0)<0)<<31>>31|0,0|EA,((0|EA)<0)<<31>>31|0),rt=0|f(),x=0|ZA(19*Ft|0,0|Ht,0|EA,((0|EA)<0)<<31>>31|0),xA=0|f(),Ce=0|ZA(19*ut|0,0|gt,0|EA,((0|EA)<0)<<31>>31|0),Mt=0|f(),oe=0|ZA(19*KA|0,0|JA,0|EA,((0|EA)<0)<<31>>31|0),ct=0|f(),T=0|ZA(19*bA|0,0|QA,0|EA,((0|EA)<0)<<31>>31|0),TA=0|f(),EA=0|ZA(19*Ue|0,0|hA,0|EA,((0|EA)<0)<<31>>31|0),CA=0|f(),fA=0|ZA(0|fA,((0|fA)<0)<<31>>31|0,0|uA,((0|uA)<0)<<31>>31|0),sA=0|f(),jt=0|ZA(19*jt|0,((19*jt|0)<0)<<31>>31|0,uA<<1|0,((uA<<1|0)<0)<<31>>31|0),Ge=0|f(),vt=0|ZA(19*vt|0,((19*vt|0)<0)<<31>>31|0,0|uA,((0|uA)<0)<<31>>31|0),wt=0|f(),nt=0|ZA(19*nt|0,((19*nt|0)<0)<<31>>31|0,uA<<1|0,((uA<<1|0)<0)<<31>>31|0),it=0|f(),GA=0|ZA(19*GA|0,((19*GA|0)<0)<<31>>31|0,0|uA,((0|uA)<0)<<31>>31|0),YA=0|f(),Ht=0|ZA(19*Ft|0,0|Ht,uA<<1|0,((uA<<1|0)<0)<<31>>31|0),Ft=0|f(),gt=0|ZA(19*ut|0,0|gt,0|uA,((0|uA)<0)<<31>>31|0),ut=0|f(),JA=0|ZA(19*KA|0,0|JA,uA<<1|0,((uA<<1|0)<0)<<31>>31|0),KA=0|f(),QA=0|ZA(19*bA|0,0|QA,0|uA,((0|uA)<0)<<31>>31|0),bA=0|f(),uA=0|ZA(19*Ue|0,0|hA,uA<<1|0,((uA<<1|0)<0)<<31>>31|0),hA=0|f(),A=0|St(0|(Gt=0|St(0|(Ut=0|St(0|(Nt=0|St(0|(Lt=0|St(0|(Tt=0|St(0|(Kt=0|St(0|(Jt=0|St(0|(Xt=0|St(0|jt,0|Ge,0|Ye,0|Xt)),0|f(),0|xe,0|Jt)),0|f(),0|Re,0|Kt)),0|f(),0|Pe,0|Tt)),0|f(),0|He,0|Lt)),0|f(),0|Fe,0|Nt)),0|f(),0|Me,0|Ut)),0|f(),0|De,0|Gt)),0|f(),0|Oe,0|A),Oe=0|f(),Dt=0|St(0|ke,0|Se,0|kt,0|Dt),kt=0|f(),Le=0|St(0|(ze=0|St(0|(Ve=0|St(0|(Mt=0|St(0|(Ft=0|St(0|(Pt=0|St(0|(Rt=0|St(0|(xt=0|St(0|(Yt=0|St(0|me,0|ve,0|we,0|Yt)),0|f(),0|Qe,0|xt)),0|f(),0|be,0|Rt)),0|f(),0|Ee,0|Pt)),0|f(),0|Ht,0|Ft)),0|f(),0|Ce,0|Mt)),0|f(),0|cA,0|Ve)),0|f(),0|qe,0|ze)),0|f(),0|$e,0|Le),$e=0|f(),Ve=0|At(0|(ze=0|St(0|A,0|Oe,33554432,0)),0|(qe=0|f()),26),cA=0|f(),cA=0|St(0|(je=0|St(0|(Bt=0|St(0|(yt=0|St(0|(Ct=0|St(0|(Et=0|St(0|(bt=0|St(0|(Qt=0|St(0|(wt=0|St(0|Dt,0|kt,0|vt,0|wt)),0|f(),0|ye,0|Qt)),0|f(),0|Be,0|bt)),0|f(),0|pe,0|Et)),0|f(),0|le,0|Ct)),0|f(),0|de,0|yt)),0|f(),0|Ie,0|Bt)),0|f(),0|Xe,0|je)),0|f(),0|Ve,0|cA),Ve=0|f(),qe=0|mt(0|A,0|Oe,-67108864&ze|0,0|qe),ze=0|f(),je=0|At(0|(Oe=0|St(0|Le,0|$e,33554432,0)),0|(A=0|f()),26),Xe=0|f(),Xe=0|St(0|(Ke=0|St(0|(ft=0|St(0|(ct=0|St(0|(ut=0|St(0|(_t=0|St(0|(It=0|St(0|(dt=0|St(0|(lt=0|St(0|(pt=0|St(0|_e,0|ge,0|ue,0|pt)),0|f(),0|he,0|lt)),0|f(),0|ce,0|dt)),0|f(),0|fe,0|It)),0|f(),0|se,0|_t)),0|f(),0|gt,0|ut)),0|f(),0|oe,0|ct)),0|f(),0|ae,0|ft)),0|f(),0|st,0|Ke)),0|f(),0|je,0|Xe),je=0|f(),A=0|mt(0|Le,0|$e,-67108864&Oe|0,0|A),Oe=0|f(),Le=0|At(0|($e=0|St(0|cA,0|Ve,16777216,0)),0|f(),25),Ke=0|f(),Ke=0|St(0|(Je=0|St(0|($A=0|St(0|(WA=0|St(0|(et=0|St(0|(tt=0|St(0|(rt=0|St(0|(it=0|St(0|(at=0|St(0|(ot=0|St(0|ne,0|ie,0|re,0|ot)),0|f(),0|te,0|at)),0|f(),0|nt,0|it)),0|f(),0|Ae,0|rt)),0|f(),0|ee,0|tt)),0|f(),0|Z,0|et)),0|f(),0|W,0|WA)),0|f(),0|$,0|$A)),0|f(),0|We,0|Je)),0|f(),0|Le,0|Ke),Le=0|f(),$e=0|mt(0|cA,0|Ve,-33554432&$e|0,0),Ve=0|f(),Je=0|At(0|(cA=0|St(0|Xe,0|je,16777216,0)),0|f(),25),We=0|f(),We=0|St(0|(Ne=0|St(0|(TA=0|St(0|(KA=0|St(0|(XA=0|St(0|(jA=0|St(0|(OA=0|St(0|(qA=0|St(0|(zA=0|St(0|(VA=0|St(0|V,0|z,0|q,0|VA)),0|f(),0|O,0|zA)),0|f(),0|j,0|qA)),0|f(),0|X,0|OA)),0|f(),0|J,0|jA)),0|f(),0|K,0|XA)),0|f(),0|JA,0|KA)),0|f(),0|T,0|TA)),0|f(),0|t,0|Ne)),0|f(),0|Je,0|We),Je=0|f(),cA=0|mt(0|Xe,0|je,-33554432&cA|0,0),je=0|f(),Ne=0|At(0|(Xe=0|St(0|Ke,0|Le,33554432,0)),0|f(),26),t=0|f(),t=0|St(0|(Te=0|St(0|(HA=0|St(0|(PA=0|St(0|(RA=0|St(0|(xA=0|St(0|(YA=0|St(0|(UA=0|St(0|(NA=0|St(0|(LA=0|St(0|L,0|N,0|U,0|LA)),0|f(),0|G,0|NA)),0|f(),0|Y,0|UA)),0|f(),0|GA,0|YA)),0|f(),0|x,0|xA)),0|f(),0|R,0|RA)),0|f(),0|P,0|PA)),0|f(),0|H,0|HA)),0|f(),0|FA,0|Te)),0|f(),0|Ne,0|t),Ne=0|f(),Xe=0|mt(0|Ke,0|Le,-67108864&Xe|0,0),f(),Ke=0|At(0|(Le=0|St(0|We,0|Je,33554432,0)),0|f(),26),Te=0|f(),Te=0|St(0|(CA=0|St(0|(bA=0|St(0|(wA=0|St(0|(vA=0|St(0|(mA=0|St(0|(SA=0|St(0|(kA=0|St(0|(DA=0|St(0|(MA=0|St(0|F,0|M,0|D,0|MA)),0|f(),0|k,0|DA)),0|f(),0|S,0|kA)),0|f(),0|m,0|SA)),0|f(),0|v,0|mA)),0|f(),0|w,0|vA)),0|f(),0|Q,0|wA)),0|f(),0|QA,0|bA)),0|f(),0|EA,0|CA)),0|f(),0|Ke,0|Te),Ke=0|f(),Le=0|mt(0|We,0|Je,-67108864&Le|0,0),f(),Oe=0|St(0|(We=0|At(0|(Je=0|St(0|t,0|Ne,16777216,0)),0|f(),25)),0|f(),0|A,0|Oe),A=0|f(),Je=0|mt(0|t,0|Ne,-33554432&Je|0,0),f(),t=0|At(0|(Ne=0|St(0|Te,0|Ke,16777216,0)),0|f(),25),We=0|f(),We=0|St(0|(hA=0|St(0|(gA=0|St(0|(_A=0|St(0|(IA=0|St(0|(dA=0|St(0|(lA=0|St(0|(pA=0|St(0|(BA=0|St(0|(yA=0|St(0|b,0|E,0|C,0|yA)),0|f(),0|y,0|BA)),0|f(),0|B,0|pA)),0|f(),0|p,0|lA)),0|f(),0|l,0|dA)),0|f(),0|d,0|IA)),0|f(),0|I,0|_A)),0|f(),0|_,0|gA)),0|f(),0|uA,0|hA)),0|f(),0|t,0|We),t=0|f(),Ne=0|mt(0|Te,0|Ke,-33554432&Ne|0,0),f(),Te=0|St(0|cA,0|je,0|(Te=0|ht(0|(Ke=0|St(0|Oe,0|A,33554432,0)),0|f(),26)),0|f()),f(),Ke=0|mt(0|Oe,0|A,-67108864&Ke|0,0),f(),Oe=0|At(0|(A=0|St(0|We,0|t,33554432,0)),0|f(),26),je=0|f(),je=0|St(0|(Ze=0|St(0|(AA=0|St(0|(tA=0|St(0|(rA=0|St(0|(iA=0|St(0|(nA=0|St(0|(aA=0|St(0|(oA=0|St(0|(sA=0|St(0|g,0|u,0|fA,0|sA)),0|f(),0|h,0|oA)),0|f(),0|c,0|aA)),0|f(),0|s,0|nA)),0|f(),0|o,0|iA)),0|f(),0|a,0|rA)),0|f(),0|n,0|tA)),0|f(),0|r,0|AA)),0|f(),0|eA,0|Ze)),0|f(),0|Oe,0|je),Oe=0|f(),A=0|mt(0|We,0|t,-67108864&A|0,0),f(),ze=0|St(0|(We=0|ZA(0|(We=0|At(0|(t=0|St(0|je,0|Oe,16777216,0)),0|f(),25)),0|f(),19,0)),0|f(),0|qe,0|ze),qe=0|f(),t=0|mt(0|je,0|Oe,-33554432&t|0,0),f(),je=0|St(0|$e,0|Ve,0|(je=0|ht(0|(Oe=0|St(0|ze,0|qe,33554432,0)),0|f(),26)),0|f()),f(),Oe=0|mt(0|ze,0|qe,-67108864&Oe|0,0),f(),i[e>>2]=Oe,i[e+4>>2]=je,i[e+8>>2]=Xe,i[e+12>>2]=Je,i[e+16>>2]=Ke,i[e+20>>2]=Te,i[e+24>>2]=Le,i[e+28>>2]=Ne,i[e+32>>2]=A,i[e+36>>2]=t}function Q(e,A,t){e|=0,t|=0;var r,n,a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0;r=l,n=l=l+63&-64,l=l+2048|0,fr(n+1024|0,A|=0),vA(n+1024|0,e),fr(n,n+1024|0),vA(n,t),e=0;do{o=0|i[n+1024+((4|(A=e<<4))<<3)>>2],s=0|i[n+1024+((4|A)<<3)+4>>2],R=0|lA(0|i[n+1024+(A<<3)>>2],0|i[n+1024+(A<<3)+4>>2],o,s),U=0|f(),D=0|jA(i[n+1024+((12|A)<<3)>>2]^R,i[n+1024+((12|A)<<3)+4>>2]^U,32),Q=0|f(),Q=0|jA((U=0|lA(R,U,s=0|jA((C=0|lA(0|i[n+1024+((8|A)<<3)>>2],0|i[n+1024+((8|A)<<3)+4>>2],D,Q))^o,(y=0|f())^s,24),o=0|f()))^D,(R=0|f())^Q,16),D=0|f(),i[n+1024+((12|A)<<3)>>2]=Q,i[n+1024+((12|A)<<3)+4>>2]=D,y=0|lA(C,y,Q,D),C=0|f(),i[n+1024+((8|A)<<3)>>2]=y,i[n+1024+((8|A)<<3)+4>>2]=C,o=0|jA(y^s,C^o,63),s=0|f(),i[n+1024+((4|A)<<3)>>2]=o,i[n+1024+((4|A)<<3)+4>>2]=s,H=0|i[n+1024+((5|A)<<3)>>2],P=0|i[n+1024+((5|A)<<3)+4>>2],m=0|lA(0|i[n+1024+((1|A)<<3)>>2],0|i[n+1024+((1|A)<<3)+4>>2],H,P),M=0|f(),E=0|jA(i[n+1024+((13|A)<<3)>>2]^m,i[n+1024+((13|A)<<3)+4>>2]^M,32),I=0|f(),h=0|lA(u=0|lA(0|i[n+1024+((9|A)<<3)>>2],0|i[n+1024+((9|A)<<3)+4>>2],E,I),h=0|f(),I=0|jA((M=0|lA(m,M,P=0|jA(u^H,h^P,24),H=0|f()))^E,(m=0|f())^I,16),E=0|f()),u=0|f(),i[n+1024+((9|A)<<3)>>2]=h,i[n+1024+((9|A)<<3)+4>>2]=u,H=0|jA(h^P,u^H,63),P=0|f(),w=0|i[n+1024+((6|A)<<3)>>2],v=0|i[n+1024+((6|A)<<3)+4>>2],B=0|lA(0|i[n+1024+((2|A)<<3)>>2],0|i[n+1024+((2|A)<<3)+4>>2],w,v),b=0|f(),g=0|jA(i[n+1024+((14|A)<<3)>>2]^B,i[n+1024+((14|A)<<3)+4>>2]^b,32),a=0|f(),w=0|jA((x=0|lA(Y=0|lA(0|i[n+1024+((10|A)<<3)>>2],0|i[n+1024+((10|A)<<3)+4>>2],g,a),x=0|f(),a=0|jA((b=0|lA(B,b,v=0|jA(Y^w,x^v,24),w=0|f()))^g,(B=0|f())^a,16),g=0|f()))^v,(Y=0|f())^w,63),v=0|f(),d=0|i[n+1024+((7|A)<<3)>>2],p=0|i[n+1024+((7|A)<<3)+4>>2],c=0|lA(0|i[n+1024+((3|A)<<3)>>2],0|i[n+1024+((3|A)<<3)+4>>2],d,p),_=0|f(),G=0|jA(i[n+1024+((15|A)<<3)>>2]^c,i[n+1024+((15|A)<<3)+4>>2]^_,32),F=0|f(),d=0|jA((S=0|lA(k=0|lA(0|i[n+1024+((11|A)<<3)>>2],0|i[n+1024+((11|A)<<3)+4>>2],G,F),S=0|f(),F=0|jA((_=0|lA(c,_,p=0|jA(k^d,S^p,24),d=0|f()))^G,(c=0|f())^F,16),G=0|f()))^p,(k=0|f())^d,63),p=0|f(),U=0|lA(R=0|lA(U,R,H,P),U=0|f(),P=0|jA((Y=0|lA(x,Y,G=0|jA(R^F,U^G,32),F=0|f()))^H,(x=0|f())^P,24),H=0|f()),R=0|f(),i[n+1024+(A<<3)>>2]=U,i[n+1024+(A<<3)+4>>2]=R,F=0|jA(U^G,R^F,16),R=0|f(),i[n+1024+((15|A)<<3)>>2]=F,i[n+1024+((15|A)<<3)+4>>2]=R,R=0|lA(Y,x,F,R),F=0|f(),i[n+1024+((10|A)<<3)>>2]=R,i[n+1024+((10|A)<<3)+4>>2]=F,H=0|jA(R^P,F^H,63),F=0|f(),i[n+1024+((5|A)<<3)>>2]=H,i[n+1024+((5|A)<<3)+4>>2]=F,M=0|lA(m=0|lA(M,m,w,v),M=0|f(),v=0|jA((k=0|lA(S,k,D=0|jA(m^Q,M^D,32),Q=0|f()))^w,(S=0|f())^v,24),w=0|f()),m=0|f(),i[n+1024+((1|A)<<3)>>2]=M,i[n+1024+((1|A)<<3)+4>>2]=m,Q=0|jA(M^D,m^Q,16),m=0|f(),i[n+1024+((12|A)<<3)>>2]=Q,i[n+1024+((12|A)<<3)+4>>2]=m,m=0|lA(k,S,Q,m),Q=0|f(),i[n+1024+((11|A)<<3)>>2]=m,i[n+1024+((11|A)<<3)+4>>2]=Q,w=0|jA(m^v,Q^w,63),Q=0|f(),i[n+1024+((6|A)<<3)>>2]=w,i[n+1024+((6|A)<<3)+4>>2]=Q,b=0|lA(B=0|lA(b,B,d,p),b=0|f(),p=0|jA((C=0|lA(y,C,E=0|jA(B^I,b^E,32),I=0|f()))^d,(y=0|f())^p,24),d=0|f()),B=0|f(),i[n+1024+((2|A)<<3)>>2]=b,i[n+1024+((2|A)<<3)+4>>2]=B,I=0|jA(b^E,B^I,16),B=0|f(),i[n+1024+((13|A)<<3)>>2]=I,i[n+1024+((13|A)<<3)+4>>2]=B,B=0|lA(C,y,I,B),I=0|f(),i[n+1024+((8|A)<<3)>>2]=B,i[n+1024+((8|A)<<3)+4>>2]=I,d=0|jA(B^p,I^d,63),I=0|f(),i[n+1024+((7|A)<<3)>>2]=d,i[n+1024+((7|A)<<3)+4>>2]=I,_=0|lA(c=0|lA(_,c,o,s),_=0|f(),s=0|jA((u=0|lA(h,u,g=0|jA(c^a,_^g,32),a=0|f()))^o,(h=0|f())^s,24),o=0|f()),c=0|f(),i[n+1024+((3|A)<<3)>>2]=_,i[n+1024+((3|A)<<3)+4>>2]=c,a=0|jA(_^g,c^a,16),c=0|f(),i[n+1024+((14|A)<<3)>>2]=a,i[n+1024+((14|A)<<3)+4>>2]=c,c=0|lA(u,h,a,c),a=0|f(),i[n+1024+((9|A)<<3)>>2]=c,i[n+1024+((9|A)<<3)+4>>2]=a,o=0|jA(c^s,a^o,63),a=0|f(),i[n+1024+((4|A)<<3)>>2]=o,i[n+1024+((4|A)<<3)+4>>2]=a,e=e+1|0}while(8!=(0|e));e=0;do{Y=0|i[(x=n+1024+(32+(U=e<<1)<<3)|0)>>2],x=0|i[x+4>>2],c=0|lA(0|i[n+1024+(U<<3)>>2],0|i[n+1024+(U<<3)+4>>2],Y,x),A=0|f(),I=0|jA(i[(I=n+1024+(U+96<<3)|0)>>2]^c,i[I+4>>2]^A,32),C=0|f(),C=0|jA((A=0|lA(c,A,x=0|jA((w=0|lA(0|i[(w=n+1024+(U+64<<3)|0)>>2],0|i[w+4>>2],I,C))^Y,(v=0|f())^x,24),Y=0|f()))^I,(c=0|f())^C,16),I=0|f(),i[(g=n+1024+(U+96<<3)|0)>>2]=C,i[g+4>>2]=I,v=0|lA(w,v,C,I),w=0|f(),i[(g=n+1024+(U+64<<3)|0)>>2]=v,i[g+4>>2]=w,Y=0|jA(v^x,w^Y,63),x=0|f(),i[(g=n+1024+(U+32<<3)|0)>>2]=Y,i[g+4>>2]=x,h=0|i[(g=n+1024+(U+33<<3)|0)>>2],g=0|i[g+4>>2],B=0|lA(0|i[n+1024+((1|U)<<3)>>2],0|i[n+1024+((1|U)<<3)+4>>2],h,g),_=0|f(),Q=0|jA(i[(Q=n+1024+(U+97<<3)|0)>>2]^B,i[Q+4>>2]^_,32),k=0|f(),P=0|lA(H=0|lA(0|i[(H=n+1024+(U+65<<3)|0)>>2],0|i[H+4>>2],Q,k),P=0|f(),k=0|jA((_=0|lA(B,_,g=0|jA(H^h,P^g,24),h=0|f()))^Q,(B=0|f())^k,16),Q=0|f()),H=0|f(),i[(m=n+1024+(U+65<<3)|0)>>2]=P,i[m+4>>2]=H,h=0|jA(P^g,H^h,63),g=0|f(),m=n+1024+(U+16<<3)|0,y=0|i[(E=n+1024+(U+48<<3)|0)>>2],E=0|i[E+4>>2],m=0|lA(0|i[m>>2],0|i[m+4>>2],y,E),b=0|f(),F=0|jA(i[(F=n+1024+(U+112<<3)|0)>>2]^m,i[F+4>>2]^b,32),G=0|f(),y=0|jA((s=0|lA(o=0|lA(0|i[(o=n+1024+(U+80<<3)|0)>>2],0|i[o+4>>2],F,G),s=0|f(),G=0|jA((b=0|lA(m,b,E=0|jA(o^y,s^E,24),y=0|f()))^F,(m=0|f())^G,16),F=0|f()))^E,(o=0|f())^y,63),E=0|f(),R=n+1024+(U+17<<3)|0,S=0|i[(D=n+1024+(U+49<<3)|0)>>2],D=0|i[D+4>>2],R=0|lA(0|i[R>>2],0|i[R+4>>2],S,D),M=0|f(),a=0|jA(i[(a=n+1024+(U+113<<3)|0)>>2]^R,i[a+4>>2]^M,32),u=0|f(),S=0|jA((p=0|lA(d=0|lA(0|i[(d=n+1024+(U+81<<3)|0)>>2],0|i[d+4>>2],a,u),p=0|f(),u=0|jA((M=0|lA(R,M,D=0|jA(d^S,p^D,24),S=0|f()))^a,(R=0|f())^u,16),a=0|f()))^D,(d=0|f())^S,63),D=0|f(),A=0|lA(c=0|lA(A,c,h,g),A=0|f(),g=0|jA((o=0|lA(s,o,a=0|jA(c^u,A^a,32),u=0|f()))^h,(s=0|f())^g,24),h=0|f()),c=0|f(),i[n+1024+(U<<3)>>2]=A,i[n+1024+(U<<3)+4>>2]=c,u=0|jA(A^a,c^u,16),c=0|f(),i[(a=n+1024+(U+113<<3)|0)>>2]=u,i[a+4>>2]=c,c=0|lA(o,s,u,c),u=0|f(),i[(s=n+1024+(U+80<<3)|0)>>2]=c,i[s+4>>2]=u,h=0|jA(c^g,u^h,63),u=0|f(),i[(g=n+1024+(U+33<<3)|0)>>2]=h,i[g+4>>2]=u,_=0|lA(B=0|lA(_,B,y,E),_=0|f(),E=0|jA((d=0|lA(p,d,I=0|jA(B^C,_^I,32),C=0|f()))^y,(p=0|f())^E,24),y=0|f()),B=0|f(),i[n+1024+((1|U)<<3)>>2]=_,i[n+1024+((1|U)<<3)+4>>2]=B,C=0|jA(_^I,B^C,16),B=0|f(),i[(I=n+1024+(U+96<<3)|0)>>2]=C,i[I+4>>2]=B,B=0|lA(d,p,C,B),C=0|f(),i[(p=n+1024+(U+81<<3)|0)>>2]=B,i[p+4>>2]=C,y=0|jA(B^E,C^y,63),C=0|f(),i[(E=n+1024+(U+48<<3)|0)>>2]=y,i[E+4>>2]=C,b=0|lA(m=0|lA(b,m,S,D),b=0|f(),D=0|jA((w=0|lA(v,w,Q=0|jA(m^k,b^Q,32),k=0|f()))^S,(v=0|f())^D,24),S=0|f()),m=0|f(),i[(E=n+1024+(U+16<<3)|0)>>2]=b,i[E+4>>2]=m,k=0|jA(b^Q,m^k,16),m=0|f(),i[(Q=n+1024+(U+97<<3)|0)>>2]=k,i[Q+4>>2]=m,m=0|lA(w,v,k,m),k=0|f(),i[(v=n+1024+(U+64<<3)|0)>>2]=m,i[v+4>>2]=k,S=0|jA(m^D,k^S,63),k=0|f(),i[(D=n+1024+(U+49<<3)|0)>>2]=S,i[D+4>>2]=k,M=0|lA(R=0|lA(M,R,Y,x),M=0|f(),x=0|jA((H=0|lA(P,H,F=0|jA(R^G,M^F,32),G=0|f()))^Y,(P=0|f())^x,24),Y=0|f()),R=0|f(),i[(D=n+1024+(U+17<<3)|0)>>2]=M,i[D+4>>2]=R,G=0|jA(M^F,R^G,16),R=0|f(),i[(F=n+1024+(U+112<<3)|0)>>2]=G,i[F+4>>2]=R,R=0|lA(H,P,G,R),G=0|f(),i[(P=n+1024+(U+65<<3)|0)>>2]=R,i[P+4>>2]=G,Y=0|jA(R^x,G^Y,63),G=0|f(),i[(U=n+1024+(U+32<<3)|0)>>2]=Y,i[U+4>>2]=G,e=e+1|0}while(8!=(0|e));fr(t,n),vA(t,n+1024|0),l=r}function w(e,A,t){e|=0,t|=0;var r,n,a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0;r=l,n=l=l+63&-64,l=l+2048|0,fr(n+1024|0,A|=0),vA(n+1024|0,e),fr(n,n+1024|0),e=0;do{o=0|i[n+1024+((4|(A=e<<4))<<3)>>2],s=0|i[n+1024+((4|A)<<3)+4>>2],R=0|lA(0|i[n+1024+(A<<3)>>2],0|i[n+1024+(A<<3)+4>>2],o,s),U=0|f(),D=0|jA(i[n+1024+((12|A)<<3)>>2]^R,i[n+1024+((12|A)<<3)+4>>2]^U,32),Q=0|f(),Q=0|jA((U=0|lA(R,U,s=0|jA((C=0|lA(0|i[n+1024+((8|A)<<3)>>2],0|i[n+1024+((8|A)<<3)+4>>2],D,Q))^o,(y=0|f())^s,24),o=0|f()))^D,(R=0|f())^Q,16),D=0|f(),i[n+1024+((12|A)<<3)>>2]=Q,i[n+1024+((12|A)<<3)+4>>2]=D,y=0|lA(C,y,Q,D),C=0|f(),i[n+1024+((8|A)<<3)>>2]=y,i[n+1024+((8|A)<<3)+4>>2]=C,o=0|jA(y^s,C^o,63),s=0|f(),i[n+1024+((4|A)<<3)>>2]=o,i[n+1024+((4|A)<<3)+4>>2]=s,H=0|i[n+1024+((5|A)<<3)>>2],P=0|i[n+1024+((5|A)<<3)+4>>2],m=0|lA(0|i[n+1024+((1|A)<<3)>>2],0|i[n+1024+((1|A)<<3)+4>>2],H,P),M=0|f(),E=0|jA(i[n+1024+((13|A)<<3)>>2]^m,i[n+1024+((13|A)<<3)+4>>2]^M,32),I=0|f(),h=0|lA(u=0|lA(0|i[n+1024+((9|A)<<3)>>2],0|i[n+1024+((9|A)<<3)+4>>2],E,I),h=0|f(),I=0|jA((M=0|lA(m,M,P=0|jA(u^H,h^P,24),H=0|f()))^E,(m=0|f())^I,16),E=0|f()),u=0|f(),i[n+1024+((9|A)<<3)>>2]=h,i[n+1024+((9|A)<<3)+4>>2]=u,H=0|jA(h^P,u^H,63),P=0|f(),w=0|i[n+1024+((6|A)<<3)>>2],v=0|i[n+1024+((6|A)<<3)+4>>2],B=0|lA(0|i[n+1024+((2|A)<<3)>>2],0|i[n+1024+((2|A)<<3)+4>>2],w,v),b=0|f(),g=0|jA(i[n+1024+((14|A)<<3)>>2]^B,i[n+1024+((14|A)<<3)+4>>2]^b,32),a=0|f(),w=0|jA((x=0|lA(Y=0|lA(0|i[n+1024+((10|A)<<3)>>2],0|i[n+1024+((10|A)<<3)+4>>2],g,a),x=0|f(),a=0|jA((b=0|lA(B,b,v=0|jA(Y^w,x^v,24),w=0|f()))^g,(B=0|f())^a,16),g=0|f()))^v,(Y=0|f())^w,63),v=0|f(),d=0|i[n+1024+((7|A)<<3)>>2],p=0|i[n+1024+((7|A)<<3)+4>>2],c=0|lA(0|i[n+1024+((3|A)<<3)>>2],0|i[n+1024+((3|A)<<3)+4>>2],d,p),_=0|f(),G=0|jA(i[n+1024+((15|A)<<3)>>2]^c,i[n+1024+((15|A)<<3)+4>>2]^_,32),F=0|f(),d=0|jA((S=0|lA(k=0|lA(0|i[n+1024+((11|A)<<3)>>2],0|i[n+1024+((11|A)<<3)+4>>2],G,F),S=0|f(),F=0|jA((_=0|lA(c,_,p=0|jA(k^d,S^p,24),d=0|f()))^G,(c=0|f())^F,16),G=0|f()))^p,(k=0|f())^d,63),p=0|f(),U=0|lA(R=0|lA(U,R,H,P),U=0|f(),P=0|jA((Y=0|lA(x,Y,G=0|jA(R^F,U^G,32),F=0|f()))^H,(x=0|f())^P,24),H=0|f()),R=0|f(),i[n+1024+(A<<3)>>2]=U,i[n+1024+(A<<3)+4>>2]=R,F=0|jA(U^G,R^F,16),R=0|f(),i[n+1024+((15|A)<<3)>>2]=F,i[n+1024+((15|A)<<3)+4>>2]=R,R=0|lA(Y,x,F,R),F=0|f(),i[n+1024+((10|A)<<3)>>2]=R,i[n+1024+((10|A)<<3)+4>>2]=F,H=0|jA(R^P,F^H,63),F=0|f(),i[n+1024+((5|A)<<3)>>2]=H,i[n+1024+((5|A)<<3)+4>>2]=F,M=0|lA(m=0|lA(M,m,w,v),M=0|f(),v=0|jA((k=0|lA(S,k,D=0|jA(m^Q,M^D,32),Q=0|f()))^w,(S=0|f())^v,24),w=0|f()),m=0|f(),i[n+1024+((1|A)<<3)>>2]=M,i[n+1024+((1|A)<<3)+4>>2]=m,Q=0|jA(M^D,m^Q,16),m=0|f(),i[n+1024+((12|A)<<3)>>2]=Q,i[n+1024+((12|A)<<3)+4>>2]=m,m=0|lA(k,S,Q,m),Q=0|f(),i[n+1024+((11|A)<<3)>>2]=m,i[n+1024+((11|A)<<3)+4>>2]=Q,w=0|jA(m^v,Q^w,63),Q=0|f(),i[n+1024+((6|A)<<3)>>2]=w,i[n+1024+((6|A)<<3)+4>>2]=Q,b=0|lA(B=0|lA(b,B,d,p),b=0|f(),p=0|jA((C=0|lA(y,C,E=0|jA(B^I,b^E,32),I=0|f()))^d,(y=0|f())^p,24),d=0|f()),B=0|f(),i[n+1024+((2|A)<<3)>>2]=b,i[n+1024+((2|A)<<3)+4>>2]=B,I=0|jA(b^E,B^I,16),B=0|f(),i[n+1024+((13|A)<<3)>>2]=I,i[n+1024+((13|A)<<3)+4>>2]=B,B=0|lA(C,y,I,B),I=0|f(),i[n+1024+((8|A)<<3)>>2]=B,i[n+1024+((8|A)<<3)+4>>2]=I,d=0|jA(B^p,I^d,63),I=0|f(),i[n+1024+((7|A)<<3)>>2]=d,i[n+1024+((7|A)<<3)+4>>2]=I,_=0|lA(c=0|lA(_,c,o,s),_=0|f(),s=0|jA((u=0|lA(h,u,g=0|jA(c^a,_^g,32),a=0|f()))^o,(h=0|f())^s,24),o=0|f()),c=0|f(),i[n+1024+((3|A)<<3)>>2]=_,i[n+1024+((3|A)<<3)+4>>2]=c,a=0|jA(_^g,c^a,16),c=0|f(),i[n+1024+((14|A)<<3)>>2]=a,i[n+1024+((14|A)<<3)+4>>2]=c,c=0|lA(u,h,a,c),a=0|f(),i[n+1024+((9|A)<<3)>>2]=c,i[n+1024+((9|A)<<3)+4>>2]=a,o=0|jA(c^s,a^o,63),a=0|f(),i[n+1024+((4|A)<<3)>>2]=o,i[n+1024+((4|A)<<3)+4>>2]=a,e=e+1|0}while(8!=(0|e));e=0;do{Y=0|i[(x=n+1024+(32+(U=e<<1)<<3)|0)>>2],x=0|i[x+4>>2],c=0|lA(0|i[n+1024+(U<<3)>>2],0|i[n+1024+(U<<3)+4>>2],Y,x),A=0|f(),I=0|jA(i[(I=n+1024+(U+96<<3)|0)>>2]^c,i[I+4>>2]^A,32),C=0|f(),C=0|jA((A=0|lA(c,A,x=0|jA((w=0|lA(0|i[(w=n+1024+(U+64<<3)|0)>>2],0|i[w+4>>2],I,C))^Y,(v=0|f())^x,24),Y=0|f()))^I,(c=0|f())^C,16),I=0|f(),i[(g=n+1024+(U+96<<3)|0)>>2]=C,i[g+4>>2]=I,v=0|lA(w,v,C,I),w=0|f(),i[(g=n+1024+(U+64<<3)|0)>>2]=v,i[g+4>>2]=w,Y=0|jA(v^x,w^Y,63),x=0|f(),i[(g=n+1024+(U+32<<3)|0)>>2]=Y,i[g+4>>2]=x,h=0|i[(g=n+1024+(U+33<<3)|0)>>2],g=0|i[g+4>>2],B=0|lA(0|i[n+1024+((1|U)<<3)>>2],0|i[n+1024+((1|U)<<3)+4>>2],h,g),_=0|f(),Q=0|jA(i[(Q=n+1024+(U+97<<3)|0)>>2]^B,i[Q+4>>2]^_,32),k=0|f(),P=0|lA(H=0|lA(0|i[(H=n+1024+(U+65<<3)|0)>>2],0|i[H+4>>2],Q,k),P=0|f(),k=0|jA((_=0|lA(B,_,g=0|jA(H^h,P^g,24),h=0|f()))^Q,(B=0|f())^k,16),Q=0|f()),H=0|f(),i[(m=n+1024+(U+65<<3)|0)>>2]=P,i[m+4>>2]=H,h=0|jA(P^g,H^h,63),g=0|f(),m=n+1024+(U+16<<3)|0,y=0|i[(E=n+1024+(U+48<<3)|0)>>2],E=0|i[E+4>>2],m=0|lA(0|i[m>>2],0|i[m+4>>2],y,E),b=0|f(),F=0|jA(i[(F=n+1024+(U+112<<3)|0)>>2]^m,i[F+4>>2]^b,32),G=0|f(),y=0|jA((s=0|lA(o=0|lA(0|i[(o=n+1024+(U+80<<3)|0)>>2],0|i[o+4>>2],F,G),s=0|f(),G=0|jA((b=0|lA(m,b,E=0|jA(o^y,s^E,24),y=0|f()))^F,(m=0|f())^G,16),F=0|f()))^E,(o=0|f())^y,63),E=0|f(),R=n+1024+(U+17<<3)|0,S=0|i[(D=n+1024+(U+49<<3)|0)>>2],D=0|i[D+4>>2],R=0|lA(0|i[R>>2],0|i[R+4>>2],S,D),M=0|f(),a=0|jA(i[(a=n+1024+(U+113<<3)|0)>>2]^R,i[a+4>>2]^M,32),u=0|f(),S=0|jA((p=0|lA(d=0|lA(0|i[(d=n+1024+(U+81<<3)|0)>>2],0|i[d+4>>2],a,u),p=0|f(),u=0|jA((M=0|lA(R,M,D=0|jA(d^S,p^D,24),S=0|f()))^a,(R=0|f())^u,16),a=0|f()))^D,(d=0|f())^S,63),D=0|f(),A=0|lA(c=0|lA(A,c,h,g),A=0|f(),g=0|jA((o=0|lA(s,o,a=0|jA(c^u,A^a,32),u=0|f()))^h,(s=0|f())^g,24),h=0|f()),c=0|f(),i[n+1024+(U<<3)>>2]=A,i[n+1024+(U<<3)+4>>2]=c,u=0|jA(A^a,c^u,16),c=0|f(),i[(a=n+1024+(U+113<<3)|0)>>2]=u,i[a+4>>2]=c,c=0|lA(o,s,u,c),u=0|f(),i[(s=n+1024+(U+80<<3)|0)>>2]=c,i[s+4>>2]=u,h=0|jA(c^g,u^h,63),u=0|f(),i[(g=n+1024+(U+33<<3)|0)>>2]=h,i[g+4>>2]=u,_=0|lA(B=0|lA(_,B,y,E),_=0|f(),E=0|jA((d=0|lA(p,d,I=0|jA(B^C,_^I,32),C=0|f()))^y,(p=0|f())^E,24),y=0|f()),B=0|f(),i[n+1024+((1|U)<<3)>>2]=_,i[n+1024+((1|U)<<3)+4>>2]=B,C=0|jA(_^I,B^C,16),B=0|f(),i[(I=n+1024+(U+96<<3)|0)>>2]=C,i[I+4>>2]=B,B=0|lA(d,p,C,B),C=0|f(),i[(p=n+1024+(U+81<<3)|0)>>2]=B,i[p+4>>2]=C,y=0|jA(B^E,C^y,63),C=0|f(),i[(E=n+1024+(U+48<<3)|0)>>2]=y,i[E+4>>2]=C,b=0|lA(m=0|lA(b,m,S,D),b=0|f(),D=0|jA((w=0|lA(v,w,Q=0|jA(m^k,b^Q,32),k=0|f()))^S,(v=0|f())^D,24),S=0|f()),m=0|f(),i[(E=n+1024+(U+16<<3)|0)>>2]=b,i[E+4>>2]=m,k=0|jA(b^Q,m^k,16),m=0|f(),i[(Q=n+1024+(U+97<<3)|0)>>2]=k,i[Q+4>>2]=m,m=0|lA(w,v,k,m),k=0|f(),i[(v=n+1024+(U+64<<3)|0)>>2]=m,i[v+4>>2]=k,S=0|jA(m^D,k^S,63),k=0|f(),i[(D=n+1024+(U+49<<3)|0)>>2]=S,i[D+4>>2]=k,M=0|lA(R=0|lA(M,R,Y,x),M=0|f(),x=0|jA((H=0|lA(P,H,F=0|jA(R^G,M^F,32),G=0|f()))^Y,(P=0|f())^x,24),Y=0|f()),R=0|f(),i[(D=n+1024+(U+17<<3)|0)>>2]=M,i[D+4>>2]=R,G=0|jA(M^F,R^G,16),R=0|f(),i[(F=n+1024+(U+112<<3)|0)>>2]=G,i[F+4>>2]=R,R=0|lA(H,P,G,R),G=0|f(),i[(P=n+1024+(U+65<<3)|0)>>2]=R,i[P+4>>2]=G,Y=0|jA(R^x,G^Y,63),G=0|f(),i[(U=n+1024+(U+32<<3)|0)>>2]=Y,i[U+4>>2]=G,e=e+1|0}while(8!=(0|e));fr(t,n),vA(t,n+1024|0),l=r}function v(e,A){e|=0;var t,r,n,a,o,s,c,h,u,g,_,I,d,l,p,B,y,C,E,b,Q,w,v,m,S,k,D,M,F,H,P,R,x,Y,G,U,N,L,T,K,J,X,j,O,q,z,V,$,W,Z,ee=0,Ae=0,te=0,re=0,ie=0,ne=0,ae=0,oe=0,se=0,fe=0,ce=0,he=0,ue=0,ge=0,_e=0,Ie=0,de=0,le=0,pe=0,Be=0,ye=0,Ce=0,Ee=0,be=0,Qe=0,we=0,ve=0,me=0,Se=0,ke=0,De=0,Me=0,Fe=0,He=0,Pe=0,Re=0,xe=0,Ye=0,Ge=0,Ue=0,Ne=0,Le=0,Te=0,Ke=0,Je=0,Xe=0,je=0,Oe=0,qe=0,ze=0,Ve=0,$e=0,We=0,Ze=0,eA=0,AA=0,tA=0,rA=0,iA=0;_e=0|i[(A|=0)>>2],ee=0|i[A+4>>2],ae=0|i[A+8>>2],ne=0|i[A+12>>2],Me=0|i[A+16>>2],ue=0|i[A+20>>2],je=0|i[A+24>>2],Ae=0|i[A+28>>2],me=0|i[A+32>>2],Ce=0|i[A+36>>2],$=0|ZA(0|_e,((0|_e)<0)<<31>>31|0,0|_e,((0|_e)<0)<<31>>31|0),iA=0|f(),Y=0|ZA(_e<<1|0,0|(Ie=((_e<<1|0)<0)<<31>>31),0|ee,((0|ee)<0)<<31>>31|0),We=0|f(),O=0|ZA(0|ae,((0|ae)<0)<<31>>31|0,_e<<1|0,0|Ie),j=0|f(),X=0|ZA(0|ne,((0|ne)<0)<<31>>31|0,_e<<1|0,0|Ie),J=0|f(),N=0|ZA(0|Me,((0|Me)<0)<<31>>31|0,_e<<1|0,0|Ie),Ze=0|f(),M=0|ZA(0|ue,((0|ue)<0)<<31>>31|0,_e<<1|0,0|Ie),qe=0|f(),E=0|ZA(0|je,((0|je)<0)<<31>>31|0,_e<<1|0,0|Ie),Ge=0|f(),I=0|ZA(0|Ae,((0|Ae)<0)<<31>>31|0,_e<<1|0,0|Ie),Se=0|f(),s=0|ZA(0|me,((0|me)<0)<<31>>31|0,_e<<1|0,0|Ie),Ee=0|f(),Ie=0|ZA(0|Ce,((0|Ce)<0)<<31>>31|0,_e<<1|0,0|Ie),_e=0|f(),Je=0|ZA(ee<<1|0,0|(se=((ee<<1|0)<0)<<31>>31),0|ee,((0|ee)<0)<<31>>31|0),Xe=0|f(),Pe=0|ZA(ee<<1|0,0|se,0|ae,((0|ae)<0)<<31>>31|0),Re=0|f(),K=0|ZA(ne<<1|0,0|(ge=((ne<<1|0)<0)<<31>>31),ee<<1|0,0|se),T=0|f(),P=0|ZA(0|Me,((0|Me)<0)<<31>>31|0,ee<<1|0,0|se),H=0|f(),b=0|ZA(ue<<1|0,((ue<<1|0)<0)<<31>>31|0,ee<<1|0,0|se),Ue=0|f(),d=0|ZA(0|je,((0|je)<0)<<31>>31|0,ee<<1|0,0|se),ke=0|f(),c=0|ZA(Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0,ee<<1|0,0|se),be=0|f(),t=0|ZA(0|me,((0|me)<0)<<31>>31|0,ee<<1|0,0|se),de=0|f(),se=0|ZA(38*Ce|0,0|(ye=((38*Ce|0)<0)<<31>>31),ee<<1|0,0|se),ee=0|f(),L=0|ZA(0|ae,((0|ae)<0)<<31>>31|0,0|ae,((0|ae)<0)<<31>>31|0),eA=0|f(),F=0|ZA(ae<<1|0,((ae<<1|0)<0)<<31>>31|0,0|ne,((0|ne)<0)<<31>>31|0),ze=0|f(),Q=0|ZA(0|Me,((0|Me)<0)<<31>>31|0,ae<<1|0,((ae<<1|0)<0)<<31>>31|0),Ne=0|f(),B=0|ZA(0|ue,((0|ue)<0)<<31>>31|0,ae<<1|0,((ae<<1|0)<0)<<31>>31|0),p=0|f(),_=0|ZA(0|je,((0|je)<0)<<31>>31|0,ae<<1|0,((ae<<1|0)<0)<<31>>31|0),g=0|f(),r=0|ZA(0|Ae,((0|Ae)<0)<<31>>31|0,ae<<1|0,((ae<<1|0)<0)<<31>>31|0),le=0|f(),q=0|ZA(19*me|0,0|(Ye=((19*me|0)<0)<<31>>31),ae<<1|0,((ae<<1|0)<0)<<31>>31|0),AA=0|f(),ae=0|ZA(38*Ce|0,0|ye,0|ae,((0|ae)<0)<<31>>31|0),oe=0|f(),v=0|ZA(ne<<1|0,0|ge,0|ne,((0|ne)<0)<<31>>31|0),w=0|f(),l=0|ZA(ne<<1|0,0|ge,0|Me,((0|Me)<0)<<31>>31|0),De=0|f(),h=0|ZA(ue<<1|0,((ue<<1|0)<0)<<31>>31|0,ne<<1|0,0|ge),Qe=0|f(),o=0|ZA(0|je,((0|je)<0)<<31>>31|0,ne<<1|0,0|ge),a=0|f(),z=0|ZA(38*Ae|0,0|(Be=((38*Ae|0)<0)<<31>>31),ne<<1|0,0|ge),tA=0|f(),R=0|ZA(19*me|0,0|Ye,ne<<1|0,0|ge),Ve=0|f(),ge=0|ZA(38*Ce|0,0|ye,ne<<1|0,0|ge),ne=0|f(),u=0|ZA(0|Me,((0|Me)<0)<<31>>31|0,0|Me,((0|Me)<0)<<31>>31|0),we=0|f(),n=0|ZA(Me<<1|0,((Me<<1|0)<0)<<31>>31|0,0|ue,((0|ue)<0)<<31>>31|0),pe=0|f(),V=0|ZA(19*je|0,((19*je|0)<0)<<31>>31|0,Me<<1|0,((Me<<1|0)<0)<<31>>31|0),rA=0|f(),x=0|ZA(38*Ae|0,0|Be,0|Me,((0|Me)<0)<<31>>31|0),$e=0|f(),m=0|ZA(19*me|0,0|Ye,Me<<1|0,((Me<<1|0)<0)<<31>>31|0),Le=0|f(),Me=0|ZA(38*Ce|0,0|ye,0|Me,((0|Me)<0)<<31>>31|0),re=0|f(),Z=0|ZA(38*ue|0,((38*ue|0)<0)<<31>>31|0,0|ue,((0|ue)<0)<<31>>31|0),W=0|f(),U=0|ZA(19*je|0,((19*je|0)<0)<<31>>31|0,ue<<1|0,((ue<<1|0)<0)<<31>>31|0),G=0|f(),S=0|ZA(38*Ae|0,0|Be,ue<<1|0,((ue<<1|0)<0)<<31>>31|0),Te=0|f(),y=0|ZA(19*me|0,0|Ye,ue<<1|0,((ue<<1|0)<0)<<31>>31|0),Fe=0|f(),ue=0|ZA(38*Ce|0,0|ye,ue<<1|0,((ue<<1|0)<0)<<31>>31|0),te=0|f(),k=0|ZA(19*je|0,((19*je|0)<0)<<31>>31|0,0|je,((0|je)<0)<<31>>31|0),Ke=0|f(),C=0|ZA(38*Ae|0,0|Be,0|je,((0|je)<0)<<31>>31|0),He=0|f(),fe=0|ZA(19*me|0,0|Ye,je<<1|0,((je<<1|0)<0)<<31>>31|0),ce=0|f(),je=0|ZA(38*Ce|0,0|ye,0|je,((0|je)<0)<<31>>31|0),ie=0|f(),Be=0|ZA(38*Ae|0,0|Be,0|Ae,((0|Ae)<0)<<31>>31|0),he=0|f(),D=0|ZA(19*me|0,0|Ye,Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0),Oe=0|f(),A=0|ZA(38*Ce|0,0|ye,Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0),Ae=0|f(),Ye=0|ZA(19*me|0,0|Ye,0|me,((0|me)<0)<<31>>31|0),xe=0|f(),me=0|ZA(38*Ce|0,0|ye,0|me,((0|me)<0)<<31>>31|0),ve=0|f(),Ce=0|ZA(38*Ce|0,0|ye,0|Ce,((0|Ce)<0)<<31>>31|0),ye=0|f(),ee=0|St(0|(AA=0|St(0|(tA=0|St(0|(rA=0|St(0|(iA=0|St(0|Z,0|W,0|$,0|iA)),0|f(),0|V,0|rA)),0|f(),0|z,0|tA)),0|f(),0|q,0|AA)),0|f(),0|se,0|ee),se=0|f(),Xe=0|St(0|O,0|j,0|Je,0|Xe),Je=0|f(),Re=0|St(0|X,0|J,0|Pe,0|Re),Pe=0|f(),te=0|St(0|(ce=0|St(0|(he=0|St(0|(Ze=0|St(0|(eA=0|St(0|K,0|T,0|L,0|eA)),0|f(),0|N,0|Ze)),0|f(),0|Be,0|he)),0|f(),0|fe,0|ce)),0|f(),0|ue,0|te),ue=0|f(),he=0|At(0|(ce=0|St(0|ee,0|se,33554432,0)),0|(fe=0|f()),26),Be=0|f(),Be=0|St(0|(oe=0|St(0|(Ve=0|St(0|($e=0|St(0|(We=0|St(0|U,0|G,0|Y,0|We)),0|f(),0|x,0|$e)),0|f(),0|R,0|Ve)),0|f(),0|ae,0|oe)),0|f(),0|he,0|Be),he=0|f(),fe=0|mt(0|ee,0|se,-67108864&ce|0,0|fe),ce=0|f(),oe=0|At(0|(se=0|St(0|te,0|ue,33554432,0)),0|(ee=0|f()),26),ae=0|f(),ae=0|St(0|(ie=0|St(0|(Oe=0|St(0|(qe=0|St(0|(ze=0|St(0|P,0|H,0|F,0|ze)),0|f(),0|M,0|qe)),0|f(),0|D,0|Oe)),0|f(),0|je,0|ie)),0|f(),0|oe,0|ae),oe=0|f(),ee=0|mt(0|te,0|ue,-67108864&se|0,0|ee),se=0|f(),te=0|At(0|(ue=0|St(0|Be,0|he,16777216,0)),0|f(),25),ie=0|f(),ie=0|St(0|(ne=0|St(0|(Le=0|St(0|(Te=0|St(0|(Ke=0|St(0|Xe,0|Je,0|k,0|Ke)),0|f(),0|S,0|Te)),0|f(),0|m,0|Le)),0|f(),0|ge,0|ne)),0|f(),0|te,0|ie),te=0|f(),ue=0|mt(0|Be,0|he,-33554432&ue|0,0),he=0|f(),ne=0|At(0|(Be=0|St(0|ae,0|oe,16777216,0)),0|f(),25),ge=0|f(),ge=0|St(0|(Ae=0|St(0|(xe=0|St(0|(Ge=0|St(0|(Ue=0|St(0|(Ne=0|St(0|v,0|w,0|Q,0|Ne)),0|f(),0|b,0|Ue)),0|f(),0|E,0|Ge)),0|f(),0|Ye,0|xe)),0|f(),0|A,0|Ae)),0|f(),0|ne,0|ge),ne=0|f(),Be=0|mt(0|ae,0|oe,-33554432&Be|0,0),oe=0|f(),Ae=0|At(0|(ae=0|St(0|ie,0|te,33554432,0)),0|f(),26),A=0|f(),A=0|St(0|(re=0|St(0|(Fe=0|St(0|(He=0|St(0|Re,0|Pe,0|C,0|He)),0|f(),0|y,0|Fe)),0|f(),0|Me,0|re)),0|f(),0|Ae,0|A),Ae=0|f(),ae=0|mt(0|ie,0|te,-67108864&ae|0,0),f(),ie=0|At(0|(te=0|St(0|ge,0|ne,33554432,0)),0|f(),26),re=0|f(),re=0|St(0|(ve=0|St(0|(Se=0|St(0|(ke=0|St(0|(De=0|St(0|B,0|p,0|l,0|De)),0|f(),0|d,0|ke)),0|f(),0|I,0|Se)),0|f(),0|me,0|ve)),0|f(),0|ie,0|re),ie=0|f(),te=0|mt(0|ge,0|ne,-67108864&te|0,0),f(),se=0|St(0|(ge=0|At(0|(ne=0|St(0|A,0|Ae,16777216,0)),0|f(),25)),0|f(),0|ee,0|se),ee=0|f(),ne=0|mt(0|A,0|Ae,-33554432&ne|0,0),f(),A=0|At(0|(Ae=0|St(0|re,0|ie,16777216,0)),0|f(),25),ge=0|f(),ge=0|St(0|(ye=0|St(0|(Ee=0|St(0|(be=0|St(0|(Qe=0|St(0|(we=0|St(0|_,0|g,0|u,0|we)),0|f(),0|h,0|Qe)),0|f(),0|c,0|be)),0|f(),0|s,0|Ee)),0|f(),0|Ce,0|ye)),0|f(),0|A,0|ge),A=0|f(),Ae=0|mt(0|re,0|ie,-33554432&Ae|0,0),f(),re=0|St(0|Be,0|oe,0|(re=0|ht(0|(ie=0|St(0|se,0|ee,33554432,0)),0|f(),26)),0|f()),f(),ie=0|mt(0|se,0|ee,-67108864&ie|0,0),f(),se=0|At(0|(ee=0|St(0|ge,0|A,33554432,0)),0|f(),26),oe=0|f(),oe=0|St(0|(_e=0|St(0|(de=0|St(0|(le=0|St(0|(pe=0|St(0|o,0|a,0|n,0|pe)),0|f(),0|r,0|le)),0|f(),0|t,0|de)),0|f(),0|Ie,0|_e)),0|f(),0|se,0|oe),se=0|f(),ee=0|mt(0|ge,0|A,-67108864&ee|0,0),f(),ce=0|St(0|(ge=0|ZA(0|(ge=0|At(0|(A=0|St(0|oe,0|se,16777216,0)),0|f(),25)),0|f(),19,0)),0|f(),0|fe,0|ce),fe=0|f(),A=0|mt(0|oe,0|se,-33554432&A|0,0),f(),oe=0|St(0|ue,0|he,0|(oe=0|ht(0|(se=0|St(0|ce,0|fe,33554432,0)),0|f(),26)),0|f()),f(),se=0|mt(0|ce,0|fe,-67108864&se|0,0),f(),i[e>>2]=se,i[e+4>>2]=oe,i[e+8>>2]=ae,i[e+12>>2]=ne,i[e+16>>2]=ie,i[e+20>>2]=re,i[e+24>>2]=te,i[e+28>>2]=Ae,i[e+32>>2]=ee,i[e+36>>2]=A}function m(e){var A=0,t=0,r=0,n=0,a=0,o=0,s=0,f=0,c=0;if(e|=0){A=0|i[8683],c=e+-8+(-8&(t=0|i[e+-4>>2]))|0;do{if(1&t)s=e+-8|0,f=e+-8|0,e=-8&t;else{if(r=0|i[e+-8>>2],!(3&t))return;if(o=r+(-8&t)|0,(a=e+-8+(0-r)|0)>>>0>>0)return;if((0|i[8684])==(0|a)){if(3!=(3&(e=0|i[c+4>>2])|0)){s=a,f=a,e=o;break}return i[8681]=o,i[c+4>>2]=-2&e,i[a+4>>2]=1|o,void(i[a+o>>2]=o)}if(r>>>0<256){if(e=0|i[a+8>>2],(0|(A=0|i[a+12>>2]))==(0|e)){i[8679]=i[8679]&~(1<<(r>>>3)),s=a,f=a,e=o;break}i[e+12>>2]=A,i[A+8>>2]=e,s=a,f=a,e=o;break}n=0|i[a+24>>2],e=0|i[a+12>>2];do{if((0|e)==(0|a)){if(e=0|i[a+16+4>>2])A=a+16+4|0;else{if(!(e=0|i[a+16>>2])){e=0;break}A=a+16|0}for(;;)if(t=0|i[(r=e+20|0)>>2])e=t,A=r;else{if(!(t=0|i[(r=e+16|0)>>2]))break;e=t,A=r}i[A>>2]=0}else f=0|i[a+8>>2],i[f+12>>2]=e,i[e+8>>2]=f}while(0);if(n){if(A=0|i[a+28>>2],(0|i[35020+(A<<2)>>2])==(0|a)){if(i[35020+(A<<2)>>2]=e,!e){i[8680]=i[8680]&~(1<>2])==(0|a)?n+16|0:n+20|0)>>2]=e,!e){s=a,f=a,e=o;break}i[e+24>>2]=n,0|(A=0|i[a+16>>2])&&(i[e+16>>2]=A,i[A+24>>2]=e),(A=0|i[a+16+4>>2])?(i[e+20>>2]=A,i[A+24>>2]=e,s=a,f=a,e=o):(s=a,f=a,e=o)}else s=a,f=a,e=o}}while(0);if(!(s>>>0>=c>>>0)&&1&(t=0|i[c+4>>2])){if(2&t)i[c+4>>2]=-2&t,i[f+4>>2]=1|e,i[s+e>>2]=e,n=e;else{if((0|i[8685])==(0|c)){if(c=(0|i[8682])+e|0,i[8682]=c,i[8685]=f,i[f+4>>2]=1|c,(0|f)!=(0|i[8684]))return;return i[8684]=0,void(i[8681]=0)}if((0|i[8684])==(0|c))return c=(0|i[8681])+e|0,i[8681]=c,i[8684]=s,i[f+4>>2]=1|c,void(i[s+c>>2]=c);n=(-8&t)+e|0;do{if(t>>>0<256){if(A=0|i[c+8>>2],(0|(e=0|i[c+12>>2]))==(0|A)){i[8679]=i[8679]&~(1<<(t>>>3));break}i[A+12>>2]=e,i[e+8>>2]=A;break}a=0|i[c+24>>2],e=0|i[c+12>>2];do{if((0|e)==(0|c)){if(e=0|i[c+16+4>>2])A=c+16+4|0;else{if(!(e=0|i[c+16>>2])){A=0;break}A=c+16|0}for(;;)if(t=0|i[(r=e+20|0)>>2])e=t,A=r;else{if(!(t=0|i[(r=e+16|0)>>2]))break;e=t,A=r}i[A>>2]=0,A=e}else A=0|i[c+8>>2],i[A+12>>2]=e,i[e+8>>2]=A,A=e}while(0);if(0|a){if(e=0|i[c+28>>2],(0|i[35020+(e<<2)>>2])==(0|c)){if(i[35020+(e<<2)>>2]=A,!A){i[8680]=i[8680]&~(1<>2])==(0|c)?a+16|0:a+20|0)>>2]=A,!A)break;i[A+24>>2]=a,0|(e=0|i[c+16>>2])&&(i[A+16>>2]=e,i[e+24>>2]=A),0|(e=0|i[c+16+4>>2])&&(i[A+20>>2]=e,i[e+24>>2]=A)}}while(0);if(i[f+4>>2]=1|n,i[s+n>>2]=n,(0|f)==(0|i[8684]))return void(i[8681]=n)}if(t=n>>>3,n>>>0<256)return(e=0|i[8679])&1<>2]):(i[8679]=e|1<>2]=f,i[A+12>>2]=f,i[f+8>>2]=A,void(i[f+12>>2]=34756+(t<<1<<2));A=35020+((r=(e=n>>>8)?n>>>0>16777215?31:n>>>(7+(r=14-((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4|(e+1048320|0)>>>16&8|(245760+(r=e<<((e+1048320|0)>>>16&8)<<((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(r<<((r+245760|0)>>>16&2)>>>15)|0)|0)&1|r<<1:0)<<2)|0,i[f+28>>2]=r,i[f+20>>2]=0,i[f+16>>2]=0,e=0|i[8680],t=1<>2];A:do{if((-8&i[e+4>>2]|0)!=(0|n)){for(r=n<<(31==(0|r)?0:25-(r>>>1)|0);A=0|i[(t=e+16+(r>>>31<<2)|0)>>2];){if((-8&i[A+4>>2]|0)==(0|n)){e=A;break A}r<<=1,e=A}i[t>>2]=f,i[f+24>>2]=e,i[f+12>>2]=f,i[f+8>>2]=f;break e}}while(0);c=0|i[(s=e+8|0)>>2],i[c+12>>2]=f,i[s>>2]=f,i[f+8>>2]=c,i[f+12>>2]=e,i[f+24>>2]=0}else i[8680]=e|t,i[A>>2]=f,i[f+24>>2]=A,i[f+12>>2]=f,i[f+8>>2]=f}while(0);if(c=(0|i[8687])-1|0,i[8687]=c,!(0|c)){for(e=35172;e=0|i[e>>2];)e=e+8|0;i[8687]=-1}}}}function S(e,A){A|=0;var t=0,r=0,n=0,a=0,o=0,s=0,f=0;t=0|i[4+(e|=0)>>2];do{if(1&t)f=e,t=A;else{if(s=0|i[e>>2],!(3&t))return;if((0|i[8684])==(e+(0-s)|0)){if(3!=(3&(t=0|i[e+A+4>>2])|0)){f=e+(0-s)|0,t=s+A|0;break}return i[8681]=s+A,i[e+A+4>>2]=-2&t,i[e+(0-s)+4>>2]=s+A|1,void(i[e+A>>2]=s+A)}if(s>>>0<256){if(t=0|i[e+(0-s)+8>>2],(0|(r=0|i[e+(0-s)+12>>2]))==(0|t)){i[8679]=i[8679]&~(1<<(s>>>3)),f=e+(0-s)|0,t=s+A|0;break}i[t+12>>2]=r,i[r+8>>2]=t,f=e+(0-s)|0,t=s+A|0;break}o=0|i[e+(0-s)+24>>2],t=0|i[e+(0-s)+12>>2];do{if((0|t)==(e+(0-s)|0)){if(t=0|i[4+(r=e+(0-s)+16|0)>>2])r=r+4|0;else if(!(t=0|i[r>>2])){r=0;break}for(;;)if(n=0|i[(a=t+20|0)>>2])t=n,r=a;else{if(!(n=0|i[(a=t+16|0)>>2]))break;t=n,r=a}i[r>>2]=0,r=t}else r=0|i[e+(0-s)+8>>2],i[r+12>>2]=t,i[t+8>>2]=r,r=t}while(0);if(o){if(t=0|i[e+(0-s)+28>>2],(0|i[35020+(t<<2)>>2])==(e+(0-s)|0)){if(i[35020+(t<<2)>>2]=r,!r){i[8680]=i[8680]&~(1<>2])==(e+(0-s)|0)?o+16|0:o+20|0)>>2]=r,!r){f=e+(0-s)|0,t=s+A|0;break}i[r+24>>2]=o,0|(t=0|i[e+(0-s)+16>>2])&&(i[r+16>>2]=t,i[t+24>>2]=r),(t=0|i[e+(0-s)+16+4>>2])?(i[r+20>>2]=t,i[t+24>>2]=r,f=e+(0-s)|0,t=s+A|0):(f=e+(0-s)|0,t=s+A|0)}else f=e+(0-s)|0,t=s+A|0}}while(0);if(2&(n=0|i[e+A+4>>2]))i[e+A+4>>2]=-2&n,i[f+4>>2]=1|t,i[f+t>>2]=t,o=t;else{if((0|i[8685])==(e+A|0)){if(A=(0|i[8682])+t|0,i[8682]=A,i[8685]=f,i[f+4>>2]=1|A,(0|f)!=(0|i[8684]))return;return i[8684]=0,void(i[8681]=0)}if((0|i[8684])==(e+A|0))return A=(0|i[8681])+t|0,i[8681]=A,i[8684]=f,i[f+4>>2]=1|A,void(i[f+A>>2]=A);o=(-8&n)+t|0;do{if(n>>>0<256){if(r=0|i[e+A+8>>2],(0|(t=0|i[e+A+12>>2]))==(0|r)){i[8679]=i[8679]&~(1<<(n>>>3));break}i[r+12>>2]=t,i[t+8>>2]=r;break}s=0|i[e+A+24>>2],t=0|i[e+A+12>>2];do{if((0|t)==(e+A|0)){if(t=0|i[e+A+16+4>>2])r=e+A+16+4|0;else{if(!(t=0|i[e+A+16>>2])){r=0;break}r=e+A+16|0}for(;;)if(n=0|i[(a=t+20|0)>>2])t=n,r=a;else{if(!(n=0|i[(a=t+16|0)>>2]))break;t=n,r=a}i[r>>2]=0,r=t}else r=0|i[e+A+8>>2],i[r+12>>2]=t,i[t+8>>2]=r,r=t}while(0);if(0|s){if(t=0|i[e+A+28>>2],(0|i[35020+(t<<2)>>2])==(e+A|0)){if(i[35020+(t<<2)>>2]=r,!r){i[8680]=i[8680]&~(1<>2])==(e+A|0)?s+16|0:s+20|0)>>2]=r,!r)break;i[r+24>>2]=s,0|(t=0|i[e+A+16>>2])&&(i[r+16>>2]=t,i[t+24>>2]=r),0|(t=0|i[e+A+16+4>>2])&&(i[r+20>>2]=t,i[t+24>>2]=r)}}while(0);if(i[f+4>>2]=1|o,i[f+o>>2]=o,(0|f)==(0|i[8684]))return void(i[8681]=o)}if(n=o>>>3,o>>>0<256)return(t=0|i[8679])&1<>2]):(i[8679]=t|1<>2]=f,i[r+12>>2]=f,i[f+8>>2]=r,void(i[f+12>>2]=34756+(n<<1<<2));if(r=35020+((a=(t=o>>>8)?o>>>0>16777215?31:o>>>(7+(a=14-((520192+(t<<((t+1048320|0)>>>16&8))|0)>>>16&4|(t+1048320|0)>>>16&8|(245760+(a=t<<((t+1048320|0)>>>16&8)<<((520192+(t<<((t+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(a<<((a+245760|0)>>>16&2)>>>15)|0)|0)&1|a<<1:0)<<2)|0,i[f+28>>2]=a,i[f+20>>2]=0,i[f+16>>2]=0,!((t=0|i[8680])&(n=1<>2]=f,i[f+24>>2]=r,i[f+12>>2]=f,void(i[f+8>>2]=f);t=0|i[r>>2];e:do{if((-8&i[t+4>>2]|0)!=(0|o)){for(a=o<<(31==(0|a)?0:25-(a>>>1)|0);r=0|i[(n=t+16+(a>>>31<<2)|0)>>2];){if((-8&i[r+4>>2]|0)==(0|o)){t=r;break e}a<<=1,t=r}return i[n>>2]=f,i[f+24>>2]=t,i[f+12>>2]=f,void(i[f+8>>2]=f)}}while(0);A=0|i[(e=t+8|0)>>2],i[A+12>>2]=f,i[e>>2]=f,i[f+8>>2]=A,i[f+12>>2]=t,i[f+24>>2]=0}function k(e,A,t,n,a){e|=0,A|=0,t|=0;var o,s,c=0,h=0,u=0,g=0,_=0,I=0,d=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0,N=0,L=0,T=0,K=0,J=0,X=0,j=0,O=0,q=0,z=0,V=0,$=0,W=0,Z=0,ee=0,Ae=0,te=0,re=0,ie=0,ne=0,ae=0,oe=0,se=0,fe=0,ce=0,he=0,ue=0,ge=0;if(s=l,o=l=l+63&-64,l=l+64|0,!(0==(0|(n|=0))&0==(0|(a|=0)))){for(L=0|i[e>>2],T=0|i[e+4>>2],K=0|i[e+8>>2],J=0|i[e+12>>2],X=0|i[e+16>>2],F=0|i[e+20>>2],H=0|i[e+24>>2],P=0|i[e+28>>2],R=0|i[e+32>>2],x=0|i[e+36>>2],Y=0|i[e+40>>2],G=0|i[e+44>>2],U=0|i[e+56>>2],N=0|i[e+60>>2],h=0,D=0|i[e+48>>2],M=0|i[e+52>>2],u=A;;){if(k=a>>>0<0|0==(0|a)&n>>>0<64){c=(A=o)+64|0;do{i[A>>2]=0,A=A+4|0}while((0|A)<(0|c));A=0;do{r[o+A>>0]=0|r[u+A>>0],A=A+1|0}while(a>>>0>0|0==(0|a)&n>>>0>A>>>0);S=o,h=t,u=o}else S=t;t=20,A=L,c=T,g=Y,_=G,I=D,d=M,p=U,B=N,y=K,C=J,E=X,b=F,Q=H,w=P,v=R,m=x;do{V=0|cr((ee=0|cr((ue=0|cr((Z=(ee=0|cr((he=A+E|0)^I,16))+v|0)^E,12))+he^ee,8))+Z^ue,7),ge=0|cr((q=0|cr((se=0|cr((O=(q=0|cr((oe=c+b|0)^d,16))+m|0)^b,12))+oe^q,8))+O^se,7),fe=0|cr((z=0|cr((re=0|cr((Ae=(z=0|cr((te=y+Q|0)^p,16))+g|0)^Q,12))+te^z,8))+Ae^re,7),ie=0|cr((ne=0|cr((W=0|cr((j=(ne=0|cr(($=C+w|0)^B,16))+_|0)^w,12))+$^ne,8))+j^W,7),b=0|cr((g=(B=0|cr((A=(ae=0|cr((ce=0|cr(ne^ge+(ue+he),16))+(z+Ae)^ge,12))+(ge+(ue+he))|0)^ce,8))+(ce+(z+Ae))|0)^ae,7),Q=0|cr((_=(I=0|cr((c=(Ae=0|cr((ae=0|cr(fe+(se+oe)^ee,16))+(ne+j)^fe,12))+(fe+(se+oe))|0)^ae,8))+(ae+(ne+j))|0)^Ae,7),w=0|cr((v=(d=0|cr((y=(j=0|cr((Ae=0|cr(ie+(re+te)^q,16))+(ee+Z)^ie,12))+(ie+(re+te))|0)^Ae,8))+(Ae+(ee+Z))|0)^j,7),E=0|cr((m=(p=0|cr((C=(j=0|cr((z=0|cr(W+$+V^z,16))+(q+O)^V,12))+(W+$+V)|0)^z,8))+(z+(q+O))|0)^j,7),t=t+-2|0}while(0!=(0|t));if(W=(0|Tt(u))^A+L,Z=(0|Tt(u+4|0))^c+T,ee=(0|Tt(u+8|0))^y+K,Ae=(0|Tt(u+12|0))^C+J,te=(0|Tt(u+16|0))^E+X,re=(0|Tt(u+20|0))^b+F,ie=(0|Tt(u+24|0))^Q+H,ne=(0|Tt(u+28|0))^w+P,ae=(0|Tt(u+32|0))^v+R,oe=(0|Tt(u+36|0))^m+x,se=(0|Tt(u+40|0))^g+Y,fe=(0|Tt(u+44|0))^_+G,ce=(0|Tt(u+48|0))^I+D,he=(0|Tt(u+52|0))^d+M,ue=(0|Tt(u+56|0))^p+U,ge=(0|Tt(u+60|0))^B+N,c=M+(0==(0|(A=D+1|0))&1)|0,Mt(S,W),Mt(S+4|0,Z),Mt(S+8|0,ee),Mt(S+12|0,Ae),Mt(S+16|0,te),Mt(S+20|0,re),Mt(S+24|0,ie),Mt(S+28|0,ne),Mt(S+32|0,ae),Mt(S+36|0,oe),Mt(S+40|0,se),Mt(S+44|0,fe),Mt(S+48|0,ce),Mt(S+52|0,he),Mt(S+56|0,ue),Mt(S+60|0,ge),a>>>0<0|0==(0|a)&n>>>0<65)break;t=0|St(0|n,0|a,-64,-1),a=0|f(),n=t,t=S+64|0,D=A,M=c,u=u+64|0}if(k&&0|n){a=0;do{r[h+a>>0]=0|r[S+a>>0],a=a+1|0}while((0|a)!=(0|n))}i[e+48>>2]=A,i[e+52>>2]=c}l=s}function D(e,A,t,n){A|=0,t|=0,n|=0;var a,o,s,c,h,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0;if(h=0==(0|r[80+(e|=0)>>0])?16777216:0,a=0|i[e+4>>2],o=0|i[e+8>>2],s=0|i[e+12>>2],c=0|i[e+16>>2],d=0|i[e+20>>2],I=0|i[e+24>>2],_=0|i[e+28>>2],g=0|i[e+32>>2],u=0|i[e+36>>2],n>>>0>0|0==(0|n)&t>>>0>15)for(y=0|i[e>>2];;){if(w=(67108863&(0|Tt(A)))+d|0,v=((0|Tt(A+3|0))>>>2&67108863)+I|0,Q=((0|Tt(A+6|0))>>>4&67108863)+_|0,b=((0|Tt(A+9|0))>>>6)+g|0,d=((0|Tt(A+12|0))>>>8|h)+u|0,u=0|ZA(0|w,0,0|y,0),l=0|f(),_=0|St(0|(l=0|St(0|(_=0|St(0|(l=0|St(0|(_=0|ZA(0|v,0,5*c|0,0)),0|f(),0|u,0|l)),0|(u=0|f()),0|(_=0|ZA(0|Q,0,5*s|0,0)),0|f())),0|(u=0|f()),0|(l=0|ZA(0|b,0,5*o|0,0)),0|f())),0|(u=0|f()),0|(_=0|ZA(0|d,0,5*a|0,0)),0|f()),u=0|f(),l=0|ZA(0|w,0,0|a,0),p=0|f(),E=0|St(0|(p=0|St(0|(E=0|St(0|(p=0|St(0|(E=0|ZA(0|v,0,0|y,0)),0|f(),0|l,0|p)),0|(l=0|f()),0|(E=0|ZA(0|Q,0,5*c|0,0)),0|f())),0|(l=0|f()),0|(p=0|ZA(0|b,0,5*s|0,0)),0|f())),0|(l=0|f()),0|(E=0|ZA(0|d,0,5*o|0,0)),0|f()),l=0|f(),p=0|ZA(0|w,0,0|o,0),B=0|f(),C=0|St(0|(B=0|St(0|(C=0|St(0|(B=0|St(0|(C=0|ZA(0|v,0,0|a,0)),0|f(),0|p,0|B)),0|(p=0|f()),0|(C=0|ZA(0|Q,0,0|y,0)),0|f())),0|(p=0|f()),0|(B=0|ZA(0|b,0,5*c|0,0)),0|f())),0|(p=0|f()),0|(C=0|ZA(0|d,0,5*s|0,0)),0|f()),p=0|f(),B=0|ZA(0|w,0,0|s,0),g=0|f(),I=0|St(0|(g=0|St(0|(I=0|St(0|(g=0|St(0|(I=0|ZA(0|v,0,0|o,0)),0|f(),0|B,0|g)),0|(B=0|f()),0|(I=0|ZA(0|Q,0,0|a,0)),0|f())),0|(B=0|f()),0|(g=0|ZA(0|b,0,0|y,0)),0|f())),0|(B=0|f()),0|(I=0|ZA(0|d,0,5*c|0,0)),0|f()),B=0|f(),g=0|ZA(0|w,0,0|c,0),w=0|f(),d=0|St(0|(b=0|St(0|(Q=0|St(0|(w=0|St(0|(v=0|ZA(0|v,0,0|s,0)),0|f(),0|g,0|w)),0|(g=0|f()),0|(Q=0|ZA(0|Q,0,0|o,0)),0|f())),0|(g=0|f()),0|(b=0|ZA(0|b,0,0|a,0)),0|f())),0|(g=0|f()),0|(d=0|ZA(0|d,0,0|y,0)),0|f()),g=0|f(),u=0|ht(0|_,0|u,26),f(),l=0|ht(0|(u=0|St(0|E,0|l,0|u,0)),0|f(),26),f(),p=0|ht(0|(l=0|St(0|C,0|p,0|l,0)),0|f(),26),f(),B=0|ht(0|(p=0|St(0|I,0|B,0|p,0)),0|f(),26),f(),g=0|ht(0|(B=0|St(0|d,0|g,0|B,0)),0|f(),26),f(),t=0|St(0|t,0|n,-16,-1),!((n=0|f())>>>0>0|0==(0|n)&t>>>0>15)){t=(5*g|0)+(67108863&_)&67108863,I=(((5*g|0)+(67108863&_)|0)>>>26)+(67108863&u)|0,_=67108863&l,g=67108863&p,u=67108863&B;break}d=(5*g|0)+(67108863&_)&67108863,I=(((5*g|0)+(67108863&_)|0)>>>26)+(67108863&u)|0,_=67108863&l,g=67108863&p,u=67108863&B,A=A+16|0}else t=d;i[e+20>>2]=t,i[e+24>>2]=I,i[e+28>>2]=_,i[e+32>>2]=g,i[e+36>>2]=u}function M(e,A){e|=0;var t=0,n=0,a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0;h=0|BA(A|=0),c=0|f(),b=0|ot(0|(b=0|$A(0|r[A+4>>0],0|r[A+5>>0],0|r[A+6>>0])),0|f(),6),Q=0|f(),s=0|ot(0|(s=0|$A(0|r[A+7>>0],0|r[A+8>>0],0|r[A+9>>0])),0|f(),5),o=0|f(),C=0|ot(0|(C=0|$A(0|r[A+10>>0],0|r[A+11>>0],0|r[A+12>>0])),0|f(),3),E=0|f(),a=0|ot(0|(a=0|$A(0|r[A+13>>0],0|r[A+14>>0],0|r[A+15>>0])),0|f(),2),n=0|f(),B=0|BA(A+16|0),y=0|f(),u=0|ot(0|(u=0|$A(0|r[A+20>>0],0|r[A+21>>0],0|r[A+22>>0])),0|f(),7),t=0|f(),g=0|ot(0|(g=0|$A(0|r[A+23>>0],0|r[A+24>>0],0|r[A+25>>0])),0|f(),5),p=0|f(),_=0|ot(0|(_=0|$A(0|r[A+26>>0],0|r[A+27>>0],0|r[A+28>>0])),0|f(),4),I=0|f(),d=0|ot(0|(d=0|$A(0|r[A+29>>0],0|r[A+30>>0],0|r[A+31>>0])),0|f(),2),f(),w=0|mt(0,0,0|(w=0|ht(0|(l=0|St(33554428&d|0,0,16777216,0)),0|f(),25)),0|f()),f(),c=0|St(19&w|0,0,0|h,0|c),h=0|f(),l=0|mt(33554428&d|0,0,33554432&l|0,0),d=0|f(),o=0|St(0|(A=0|At(0|(w=0|St(0|b,0|Q,16777216,0)),0|f(),25)),0|f(),0|s,0|o),s=0|f(),w=0|mt(0|b,0|Q,-33554432&w|0,0),Q=0|f(),n=0|St(0|(A=0|At(0|(b=0|St(0|C,0|E,16777216,0)),0|f(),25)),0|f(),0|a,0|n),a=0|f(),b=0|mt(0|C,0|E,-33554432&b|0,0),E=0|f(),A=0|St(0|u,0|t,0|(A=0|At(0|(C=0|St(0|B,0|y,16777216,0)),0|f(),25)),0|f()),t=0|f(),C=0|mt(0|B,0|y,-33554432&C|0,0),y=0|f(),I=0|St(0|(u=0|At(0|(B=0|St(0|g,0|p,16777216,0)),0|f(),25)),0|f(),0|_,0|I),_=0|f(),B=0|mt(0|g,0|p,-33554432&B|0,0),p=0|f(),u=0|St(0|w,0|Q,0|(u=0|ht(0|(g=0|St(0|c,0|h,33554432,0)),0|f(),26)),0|f()),f(),g=0|mt(0|c,0|h,-67108864&g|0,0),f(),c=0|St(0|b,0|E,0|(c=0|ht(0|(h=0|St(0|o,0|s,33554432,0)),0|f(),26)),0|f()),f(),h=0|mt(0|o,0|s,-67108864&h|0,0),f(),o=0|St(0|C,0|y,0|(o=0|ht(0|(s=0|St(0|n,0|a,33554432,0)),0|f(),26)),0|f()),f(),s=0|mt(0|n,0|a,-67108864&s|0,0),f(),n=0|St(0|B,0|p,0|(n=0|ht(0|(a=0|St(0|A,0|t,33554432,0)),0|f(),26)),0|f()),f(),a=0|mt(0|A,0|t,-67108864&a|0,0),f(),A=0|St(0|l,0|d,0|(A=0|ht(0|(t=0|St(0|I,0|_,33554432,0)),0|f(),26)),0|f()),f(),t=0|mt(0|I,0|_,-67108864&t|0,0),f(),i[e>>2]=g,i[e+4>>2]=u,i[e+8>>2]=h,i[e+12>>2]=c,i[e+16>>2]=s,i[e+20>>2]=o,i[e+24>>2]=a,i[e+28>>2]=n,i[e+32>>2]=t,i[e+36>>2]=A}function F(e,A){e|=0;var t=0,r=0,n=0,a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0;c=0|i[(A|=0)>>2],E=0|i[A+4>>2],o=0|i[A+8>>2],y=0|i[A+12>>2],n=0|i[A+16>>2],p=0|i[A+20>>2],t=0|i[A+24>>2],u=0|i[A+28>>2],g=0|i[A+32>>2],Q=0|i[A+36>>2],c=0|ZA(0|c,((0|c)<0)<<31>>31|0,121666,0),s=0|f(),E=0|ZA(0|E,((0|E)<0)<<31>>31|0,121666,0),b=0|f(),o=0|ZA(0|o,((0|o)<0)<<31>>31|0,121666,0),a=0|f(),y=0|ZA(0|y,((0|y)<0)<<31>>31|0,121666,0),C=0|f(),n=0|ZA(0|n,((0|n)<0)<<31>>31|0,121666,0),r=0|f(),p=0|ZA(0|p,((0|p)<0)<<31>>31|0,121666,0),B=0|f(),t=0|ZA(0|t,((0|t)<0)<<31>>31|0,121666,0),A=0|f(),u=0|ZA(0|u,((0|u)<0)<<31>>31|0,121666,0),l=0|f(),g=0|ZA(0|g,((0|g)<0)<<31>>31|0,121666,0),_=0|f(),s=0|St(0|(h=0|ZA(0|(h=0|At(0|(d=0|St(0|(Q=0|ZA(0|Q,((0|Q)<0)<<31>>31|0,121666,0)),0|(I=0|f()),16777216,0)),0|f(),25)),0|f(),19,0)),0|f(),0|c,0|s),c=0|f(),d=0|mt(0|Q,0|I,-33554432&d|0,0),I=0|f(),a=0|St(0|(h=0|At(0|(Q=0|St(0|E,0|b,16777216,0)),0|f(),25)),0|f(),0|o,0|a),o=0|f(),Q=0|mt(0|E,0|b,-33554432&Q|0,0),b=0|f(),r=0|St(0|(h=0|At(0|(E=0|St(0|y,0|C,16777216,0)),0|f(),25)),0|f(),0|n,0|r),n=0|f(),E=0|mt(0|y,0|C,-33554432&E|0,0),C=0|f(),A=0|St(0|(h=0|At(0|(y=0|St(0|p,0|B,16777216,0)),0|f(),25)),0|f(),0|t,0|A),t=0|f(),y=0|mt(0|p,0|B,-33554432&y|0,0),B=0|f(),_=0|St(0|(h=0|At(0|(p=0|St(0|u,0|l,16777216,0)),0|f(),25)),0|f(),0|g,0|_),g=0|f(),p=0|mt(0|u,0|l,-33554432&p|0,0),l=0|f(),h=0|St(0|Q,0|b,0|(h=0|ht(0|(u=0|St(0|s,0|c,33554432,0)),0|f(),26)),0|f()),f(),u=0|mt(0|s,0|c,-67108864&u|0,0),f(),s=0|St(0|E,0|C,0|(s=0|ht(0|(c=0|St(0|a,0|o,33554432,0)),0|f(),26)),0|f()),f(),c=0|mt(0|a,0|o,-67108864&c|0,0),f(),a=0|St(0|y,0|B,0|(a=0|ht(0|(o=0|St(0|r,0|n,33554432,0)),0|f(),26)),0|f()),f(),o=0|mt(0|r,0|n,-67108864&o|0,0),f(),r=0|St(0|p,0|l,0|(r=0|ht(0|(n=0|St(0|A,0|t,33554432,0)),0|f(),26)),0|f()),f(),n=0|mt(0|A,0|t,-67108864&n|0,0),f(),A=0|St(0|d,0|I,0|(A=0|ht(0|(t=0|St(0|_,0|g,33554432,0)),0|f(),26)),0|f()),f(),t=0|mt(0|_,0|g,-67108864&t|0,0),f(),i[e>>2]=u,i[e+4>>2]=h,i[e+8>>2]=c,i[e+12>>2]=s,i[e+16>>2]=o,i[e+20>>2]=a,i[e+24>>2]=n,i[e+28>>2]=r,i[e+32>>2]=t,i[e+36>>2]=A}function H(e,A,t){e|=0,A|=0;var i,a,o=0,s=0,f=0;if(a=l,i=l=l+63&-64,l=l+64|0,(t|=0)<<24>>24&&(255&t)<=64){if(0|function(e,A){return 1&(0!=(0|(e|=0))|0!=(0|(A|=0)))|0}(n[e+80>>0]|n[e+80+1>>0]<<8|n[e+80+2>>0]<<16|n[e+80+3>>0]<<24,n[e+80+4>>0]|n[e+80+4+1>>0]<<8|n[e+80+4+2>>0]<<16|n[e+80+4+3>>0]<<24))o=-1;else{o=n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24;do{if(o>>>0>128){if(fe(e,128,0),p(e,e+96|0),o=(n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24)-128|0,r[e+352>>0]=o,r[e+352+1>>0]=o>>8,r[e+352+2>>0]=o>>16,r[e+352+3>>0]=o>>24,o>>>0<129){Ae(e+96|0,e+224|0,0|o),s=n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24,f=e+96|0;break}c(33456,33488,306,33533)}else s=o,f=e+96|0}while(0);fe(e,s,0),function(e){0|r[356+(e|=0)>>0]&&function(e){r[88+(e|=0)>>0]=-1,r[e+88+1>>0]=-1,r[e+88+2>>0]=-1,r[e+88+3>>0]=-1,r[e+88+4>>0]=-1,r[e+88+4+1>>0]=-1,r[e+88+4+2>>0]=-1,r[e+88+4+3>>0]=-1}(e),r[e+80>>0]=-1,r[e+80+1>>0]=-1,r[e+80+2>>0]=-1,r[e+80+3>>0]=-1,r[e+80+4>>0]=-1,r[e+80+4+1>>0]=-1,r[e+80+4+2>>0]=-1,r[e+80+4+3>>0]=-1}(e),me(e+96+(o=n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24)|0,0,256-o|0),p(e,f),RA(i,n[e>>0]|n[e+1>>0]<<8|n[e+2>>0]<<16|n[e+3>>0]<<24,n[e+4>>0]|n[e+4+1>>0]<<8|n[e+4+2>>0]<<16|n[e+4+3>>0]<<24),RA(i+8|0,n[e+8>>0]|n[e+8+1>>0]<<8|n[e+8+2>>0]<<16|n[e+8+3>>0]<<24,n[e+8+4>>0]|n[e+8+4+1>>0]<<8|n[e+8+4+2>>0]<<16|n[e+8+4+3>>0]<<24),RA(i+16|0,n[e+16>>0]|n[e+16+1>>0]<<8|n[e+16+2>>0]<<16|n[e+16+3>>0]<<24,n[e+16+4>>0]|n[e+16+4+1>>0]<<8|n[e+16+4+2>>0]<<16|n[e+16+4+3>>0]<<24),RA(i+24|0,n[e+24>>0]|n[e+24+1>>0]<<8|n[e+24+2>>0]<<16|n[e+24+3>>0]<<24,n[e+24+4>>0]|n[e+24+4+1>>0]<<8|n[e+24+4+2>>0]<<16|n[e+24+4+3>>0]<<24),RA(i+32|0,n[e+32>>0]|n[e+32+1>>0]<<8|n[e+32+2>>0]<<16|n[e+32+3>>0]<<24,n[e+32+4>>0]|n[e+32+4+1>>0]<<8|n[e+32+4+2>>0]<<16|n[e+32+4+3>>0]<<24),RA(i+40|0,n[e+40>>0]|n[e+40+1>>0]<<8|n[e+40+2>>0]<<16|n[e+40+3>>0]<<24,n[e+40+4>>0]|n[e+40+4+1>>0]<<8|n[e+40+4+2>>0]<<16|n[e+40+4+3>>0]<<24),RA(i+48|0,n[e+48>>0]|n[e+48+1>>0]<<8|n[e+48+2>>0]<<16|n[e+48+3>>0]<<24,n[e+48+4>>0]|n[e+48+4+1>>0]<<8|n[e+48+4+2>>0]<<16|n[e+48+4+3>>0]<<24),RA(i+56|0,n[e+56>>0]|n[e+56+1>>0]<<8|n[e+56+2>>0]<<16|n[e+56+3>>0]<<24,n[e+56+4>>0]|n[e+56+4+1>>0]<<8|n[e+56+4+2>>0]<<16|n[e+56+4+3>>0]<<24),Ae(0|A,0|i,255&t|0),wA(e,64),wA(f,256),o=0}return l=a,0|o}return vr(),0}function P(e,A,t,n){e|=0,A|=0,t|=0;var a,o,s=0,f=0,c=0,h=0,u=0,g=0;switch(o=l,a=l=l+63&-64,l=l+16|0,0|(n|=0)){case 2:if(A>>>0<13)n=-31;else{s=33688,f=(n=e)+13|0;do{r[n>>0]=0|r[s>>0],n=n+1|0,s=s+1|0}while((0|n)<(0|f));e=e+12|0,f=A+-12|0,s=6}break;case 1:if(A>>>0<12)n=-31;else{s=33701,f=(n=e)+12|0;do{r[n>>0]=0|r[s>>0],n=n+1|0,s=s+1|0}while((0|n)<(0|f));e=e+11|0,f=A+-11|0,s=6}break;default:n=-31}do{if(6==(0|s)&&!(n=0|oe(t))){if(nA(a,19),s=e+(n=0|qe(a))|0,h=f-n|0,f>>>0<=n>>>0){n=-31;break}if(Ae(0|e,0|a,n+1|0),h>>>0>=4){if(r[s>>0]=36,r[s+1>>0]=109,r[s+2>>0]=61,r[s+3>>0]=0,nA(a,0|i[t+44>>2]),f=s+3+(e=0|qe(a))|0,(h+-3|0)>>>0<=e>>>0){n=-31;break}if(Ae(s+3|0,0|a,e+1|0),(h+-3-e|0)>>>0>=4){if(r[f>>0]=44,r[f+1>>0]=116,r[f+2>>0]=61,r[f+3>>0]=0,nA(a,0|i[t+40>>2]),A=f+3+(n=0|qe(a))|0,c=h+-3-e-3-n|0,(h+-3-e-3|0)>>>0<=n>>>0){n=-31;break}if(Ae(f+3|0,0|a,n+1|0),c>>>0>=4){if(r[A>>0]=44,r[A+1>>0]=112,r[A+2>>0]=61,r[A+3>>0]=0,nA(a,0|i[t+48>>2]),(c+-3|0)>>>0<=(s=0|qe(a))>>>0){n=-31;break}if(Ae(A+3|0,0|a,s+1|0),n=A+3+s+1|0,(c+-3-s|0)>>>0>=2&&(r[A+3+s>>0]=36,r[A+3+s+1>>0]=0,X(n,c+-3-s-1|0,0|i[t+16>>2],0|i[t+20>>2],3),(g=c+-3-s-1-(u=0|qe(n))|0)>>>0>=2))return r[n+u>>0]=36,r[n+u+1>>0]=0,X(n+u+1|0,g+-1|0,0|i[t>>2],0|i[t+4>>2],3),l=o,0;n=-31}else n=-31}else n=-31}else n=-31}}while(0);return l=o,0|n}function R(e,A,t,n){e|=0,A|=0,t|=0,n|=0;var a,o,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,p=0;o=l,a=l=l+63&-64,l=l+704|0;e:do{if(!(0==(0|t)&0==(0|n))){if(g=0|ht(0|(p=0|i[e+72>>2]),0|(I=0|i[e+72+4>>2]),3),f(),_=0|ot(0|t,0|n,3),d=0|f(),h=0|ht(0|t,0|n,61),u=0|f(),I=0|St(0|p,0|I,0|_,0|d),p=0|f(),i[e+72>>2]=I,i[e+72+4>>2]=p,s=0|i[e+64>>2],c=0|i[e+64+4>>2],p>>>0>>0|(0|p)==(0|d)&I>>>0<_>>>0&&(s=0|St(0|s,0|c,1,0),c=0|f(),i[e+64>>2]=s,i[e+64+4>>2]=c),s=0|St(0|s,0|c,0|h,0|u),u=0|f(),i[e+64>>2]=s,i[e+64+4>>2]=u,u=0|mt(128,0,127&g|0,0),(s=0|f())>>>0>n>>>0|(0|s)==(0|n)&u>>>0>t>>>0)for(s=0,c=0;;)if(d=0|r[A+s>>0],p=0|St(0|s,0|c,127&g|0,0),f(),r[e+80+p>>0]=d,s=0|St(0|s,0|c,1,0),!((c=0|f())>>>0>>0|(0|c)==(0|n)&s>>>0>>0))break e;if(!(0==(0|u)&0==(0|s))){c=0,h=0;do{d=0|r[A+c>>0],p=0|St(0|c,0|h,127&g|0,0),f(),r[e+80+p>>0]=d,c=0|St(0|c,0|h,1,0),h=0|f()}while(h>>>0>>0|(0|h)==(0|s)&c>>>0>>0)}if(y(e,e+80|0,a,a+640|0),s=0|mt(0|t,0|n,0|u,0|s),(h=0|f())>>>0>0|0==(0|h)&s>>>0>127){c=A+u|0;do{y(e,c,a,a+640|0),c=c+128|0,s=0|St(0|s,0|h,-128,-1),h=0|f()}while(h>>>0>0|0==(0|h)&s>>>0>127)}else c=A+u|0;if(!(0==(0|(u=127&s))&!0)){s=0,h=0;do{r[e+80+s>>0]=0|r[c+s>>0],s=0|St(0|s,0|h,1,0),h=0|f()}while(h>>>0<0|0==(0|h)&s>>>0>>0)}wA(a,704)}}while(0);l=o}function x(e,A,t){e|=0,A|=0;var r=0,i=0,n=0,a=0,o=0,s=0,f=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0;i=0|Tt(t|=0),n=0|Tt(t+4|0),a=0|Tt(t+8|0),o=0|Tt(t+12|0),s=0|Tt(t+16|0),f=0|Tt(t+20|0),g=0|Tt(t+24|0),_=0|Tt(t+28|0),I=0|Tt(A),d=0|Tt(A+4|0),l=0|Tt(A+8|0),c=0,h=1634760805,u=857760878,t=0|Tt(A+12|0),A=2036477234,r=1797285236;do{E=0|cr((v=0|cr((G=0|cr((w=(v=0|cr(I^(Y=i+h|0),16))+s|0)^i,12))+Y^v,8))+w^G,7),U=0|cr((y=0|cr((P=0|cr((B=(y=0|cr(d^(H=n+u|0),16))+f|0)^n,12))+H^y,8))+B^P,7),R=0|cr((C=0|cr((k=0|cr((m=(C=0|cr(l^(S=a+A|0),16))+g|0)^a,12))+S^C,8))+m^k,7),D=0|cr((M=0|cr((Q=0|cr((p=(M=0|cr(t^(b=o+r|0),16))+_|0)^o,12))+b^M,8))+p^Q,7),n=0|cr((g=(t=0|cr((h=(F=0|cr((x=0|cr(M^U+(G+Y),16))+(C+m)^U,12))+(U+(G+Y))|0)^x,8))+(x+(C+m))|0)^F,7),a=0|cr((_=(I=0|cr((u=(m=0|cr((F=0|cr(R+(P+H)^v,16))+(M+p)^R,12))+(R+(P+H))|0)^F,8))+(F+(M+p))|0)^m,7),o=0|cr((s=(d=0|cr((A=(p=0|cr((m=0|cr(D+(k+S)^y,16))+(v+w)^D,12))+(D+(k+S))|0)^m,8))+(m+(v+w))|0)^p,7),i=0|cr((f=(l=0|cr((r=(p=0|cr((C=0|cr(Q+b+E^C,16))+(y+B)^E,12))+(Q+b+E)|0)^C,8))+(C+(y+B))|0)^p,7),c=c+1|0}while(10!=(0|c));Mt(e,h),Mt(e+4|0,u),Mt(e+8|0,A),Mt(e+12|0,r),Mt(e+16|0,I),Mt(e+20|0,d),Mt(e+24|0,l),Mt(e+28|0,t)}function Y(e,A,t,i){e|=0,t|=0,i|=0;var n,a,o=0,s=0;for(n=l,a=l=l+63&-64,l=l+2272|0,Ie(a+1536|0,A|=0),Ie(a+1280|0,i),tt(a,t),rt(a+2112|0,t),et(a+1792|0,a+2112|0),We(a+2112|0,a+1792|0,a),et(a+1952|0,a+2112|0),tt(a+160|0,a+1952|0),We(a+2112|0,a+1792|0,a+160|0),et(a+1952|0,a+2112|0),tt(a+320|0,a+1952|0),We(a+2112|0,a+1792|0,a+320|0),et(a+1952|0,a+2112|0),tt(a+480|0,a+1952|0),We(a+2112|0,a+1792|0,a+480|0),et(a+1952|0,a+2112|0),tt(a+640|0,a+1952|0),We(a+2112|0,a+1792|0,a+640|0),et(a+1952|0,a+2112|0),tt(a+800|0,a+1952|0),We(a+2112|0,a+1792|0,a+800|0),et(a+1952|0,a+2112|0),tt(a+960|0,a+1952|0),We(a+2112|0,a+1792|0,a+960|0),et(a+1952|0,a+2112|0),tt(a+1120|0,a+1952|0),function(e){Yt(e|=0),vt(e+40|0),vt(e+80|0)}(e),t=255;;){if(0|r[a+1536+t>>0]){o=t,s=5;break}if(0|r[a+1280+t>>0]){o=t,s=5;break}if(!t)break;t=t+-1|0}if(5==(0|s)&&(0|o)>-1)for(;aA(a+2112|0,e),(t=0|r[a+1536+o>>0])<<24>>24<=0?t<<24>>24<0&&(et(a+1952|0,a+2112|0),$e(a+2112|0,a+1952|0,a+(160*(((t<<24>>24)/-2|0)<<24>>24)|0)|0)):(et(a+1952|0,a+2112|0),We(a+2112|0,a+1952|0,a+(160*((255&t)>>>1&255)|0)|0)),(t=0|r[a+1280+o>>0])<<24>>24<=0?t<<24>>24<0&&(et(a+1952|0,a+2112|0),Ze(a+2112|0,a+1952|0,160+(120*(((t<<24>>24)/-2|0)<<24>>24)|0)|0)):(et(a+1952|0,a+2112|0),eA(a+2112|0,a+1952|0,160+(120*((255&t)>>>1&255)|0)|0)),pt(e,a+2112|0),(0|o)>0;)o=o+-1|0;l=n}function G(e,A,t,n,a,o,s,f){e|=0,A|=0,t|=0,n|=0,a|=0,o|=0,s|=0,f|=0;var c,h,u=0,g=0,_=0,I=0,d=0,p=0,B=0;if(h=l,c=l=l+63&-64,l=l+16|0,i[c>>2]=0,er(f),n){I=0,g=0,_=0,u=0;e:for(;;){for(p=u;u=0|r[t+p>>0],255==(0|(d=4&f?0|Xe(u):0|je(u)));){if(!a){d=18;break e}if(!(0|Lt(a,u))){d=19;break e}if(!((u=p+1|0)>>>0>>0)){d=17;break e}p=u}if(I=d+(I<<6)|0,(u=g+6|0)>>>0>7){if(g=g+-2|0,_>>>0>=A>>>0){d=13;break}r[e+_>>0]=I>>>g,_=_+1|0}else g=u;if((u=p+1|0)>>>0>=n>>>0){d=16;break}}13==(0|d)?(i[c>>2]=p,i[8678]=68,u=-1):16==(0|d)?(i[c>>2]=u,u=0):17==(0|d)?(i[c>>2]=u,u=0):18==(0|d)?(i[c>>2]=p,u=0):19==(0|d)&&(i[c>>2]=p,u=0),g>>>0>4?(_=0,u=-1):d=21}else I=0,g=0,_=0,u=0,d=21;do{if(21==(0|d))if((1<>>1)),u)_=0;else if(0!=(0|a)&&(B=0|i[c>>2])>>>0>>0){for(u=B;;){if(!(0|Lt(a,0|r[t+u>>0]))){d=31;break}if((u=u+1|0)>>>0>=n>>>0){d=30;break}}if(30==(0|d)){i[c>>2]=u,u=0;break}if(31==(0|d)){i[c>>2]=u,u=0;break}}else u=0}while(0);return g=0|i[c>>2],s?i[s>>2]=t+g:(0|g)!=(0|n)&&(i[8678]=28,u=-1),0|o&&(i[o>>2]=_),l=h,0|u}function U(e,A,t){A|=0,t|=0;var n,a,o,s=0,f=0,c=0;switch(o=l,a=l=l+63&-64,l=l+16|0,c=0|i[20+(e|=0)>>2],n=0|i[e+4>>2],i[e+20>>2]=0,i[e+4>>2]=0,0|t){case 2:0|iA(A,33653,9)?A=-32:(A=A+9|0,f=4);break;case 1:0|iA(A,33663,8)?A=-32:(A=A+8|0,f=4);break;default:A=-26}do{if(4==(0|f))if(0==(0|iA(A,33672,3))&&0!=(0|(s=0|Je(A+3|0,a+4|0))))if(19==(0|i[a+4>>2]))if(0|iA(s,33676,3))A=-32;else{if(!(A=0|Je(s+3|0,a+4|0))){A=-32;break}if(i[e+44>>2]=i[a+4>>2],0|iA(A,33680,3))A=-32;else{if(!(A=0|Je(A+3|0,a+4|0))){A=-32;break}if(i[e+40>>2]=i[a+4>>2],0|iA(A,33684,3))A=-32;else{if(!(A=0|Je(A+3|0,a+4|0))){A=-32;break}if(f=0|i[a+4>>2],i[e+48>>2]=f,i[e+52>>2]=f,A=(f=36==(0|r[A>>0]))?A+1|0:A,f){if(i[a+4>>2]=c,0|G(f=0|i[e+16>>2],c,A,0|qe(A),0,a+4|0,a,3)){A=-32;break}if(i[e+20>>2]=i[a+4>>2],A=0|i[a>>2],A=(c=36==(0|r[A>>0]))?A+1|0:A,c){if(i[a+4>>2]=n,0|G(c=0|i[e>>2],n,A,0|qe(A),0,a+4|0,a,3)){A=-32;break}i[e+4>>2]=i[a+4>>2],t=0|i[a>>2],(A=0|oe(e))||(A=0==(0|r[t>>0])?0:-32)}else A=-32}else A=-32}}}else A=-26;else A=-32}while(0);return l=o,0|A}function N(e,A,t){e|=0,A|=0;var r=0,i=0,n=0,a=0,o=0,s=0,f=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0;n=0|Tt(t|=0),u=0|Tt(t+4|0),g=0|Tt(t+8|0),_=0|Tt(t+12|0),o=0|Tt(t+16|0),s=0|Tt(t+20|0),f=0|Tt(t+24|0),c=0|Tt(t+28|0),d=0|Tt(A),l=0|Tt(A+4|0),p=0|Tt(A+8|0),r=20,i=1634760805,a=2036477234,h=1797285236,I=857760878,t=0|Tt(A+12|0);do{D=(0|cr((C=(0|cr((Q=(0|cr((m=(0|cr(s+i|0,7))^_)+i|0,9))^p)+m|0,13))^s)+Q|0,18))^i,v=(0|cr((H=(0|cr((y=(0|cr((b=(0|cr(I+n|0,7))^t)+I|0,9))^f)+b|0,13))^n)+y|0,18))^I,E=(0|cr((k=(0|cr((F=(0|cr((B=(0|cr(a+d|0,7))^c)+a|0,9))^u)+B|0,13))^d)+F|0,18))^a,A=(0|cr((w=(0|cr((S=(0|cr((M=(0|cr(h+o|0,7))^g)+h|0,9))^l)+M|0,13))^o)+S|0,18))^h,i=(0|cr((g=(0|cr((u=(0|cr((n=(0|cr(M+D|0,7))^H)+D|0,9))^F)+n|0,13))^M)+u|0,18))^D,I=(0|cr((_=(0|cr((l=(0|cr((d=(0|cr(v+m|0,7))^k)+v|0,9))^S)+d|0,13))^m)+l|0,18))^v,a=(0|cr((t=(0|cr((p=(0|cr((o=(0|cr(E+b|0,7))^w)+E|0,9))^Q)+o|0,13))^b)+p|0,18))^E,h=(0|cr((c=(0|cr((f=(0|cr((s=(0|cr(A+B|0,7))^C)+A|0,9))^y)+s|0,13))^B)+f|0,18))^A,r=r+-2|0}while(0!=(0|r));Mt(e,i),Mt(e+4|0,I),Mt(e+8|0,a),Mt(e+12|0,h),Mt(e+16|0,d),Mt(e+20|0,l),Mt(e+24|0,p),Mt(e+28|0,t)}function L(e,A,t,n){A|=0,t|=0,n|=0;var a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0;if(0==(0|(o=0|i[56+(e|=0)>>2]))&0==(0|(a=0|i[e+56+4>>2])))g=7;else{if(c=0|mt(16,0,0|o,0|a),!(0==(0|(u=(h=0|f())>>>0>n>>>0|(0|h)==(0|n)&c>>>0>t>>>0?t:c))&0==(0|(h=h>>>0>n>>>0|(0|h)==(0|n)&c>>>0>t>>>0?n:h)))){c=0,s=0;do{_=0|r[A+c>>0],o=0|St(0|o,0|a,0|c,0|s),f(),r[e+64+o>>0]=_,c=0|St(0|c,0|s,1,0),s=0|f(),o=0|i[e+56>>2],a=0|i[e+56+4>>2]}while(s>>>0>>0|(0|s)==(0|h)&c>>>0>>0)}_=0|St(0|o,0|a,0|u,0|h),c=0|f(),i[e+56>>2]=_,i[e+56+4>>2]=c,c>>>0<0|0==(0|c)&_>>>0<16||(t=0|mt(0|t,0|n,0|u,0|h),n=0|f(),D(e,e+64|0,16,0),i[e+56>>2]=0,i[e+56+4>>2]=0,A=A+u|0,g=7)}if(7==(0|g)&&(a=-16&t,n>>>0>0|0==(0|n)&t>>>0>15?(o=0|mt(0|t,0|n,0|a,0|n),_=0|f(),D(e,A,a,n),n=_,A=A+a|0):o=t,!(0==(0|o)&0==(0|n)))){a=0,t=0;do{g=0|r[A+a>>0],_=0|St(0|i[e+56>>2],0|i[e+56+4>>2],0|a,0|t),f(),r[e+64+_>>0]=g,a=0|St(0|a,0|t,1,0),t=0|f()}while(t>>>0>>0|(0|t)==(0|n)&a>>>0>>0);g=0|St(0|i[e+56>>2],0|i[e+56+4>>2],0|o,0|n),_=0|f(),i[e+56>>2]=g,i[e+56+4>>2]=_}}function T(e,A){e|=0,A|=0;var t=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0;e:do{if(0|e){do{if(2==(0|i[e+36>>2])){if(0==(0|(t=0|i[A>>2]))&&(0|n[A+8>>0])<=1){o=6;break}_=0|i[e+4>>2],g=0}else o=6}while(0);if(6==(0|o)&&(re(e,A,_=0|i[e+4>>2]),t=0|i[A>>2],g=1),t=0==(0|t)&(s=0|r[A+8>>0])<<24>>24==0?2:0,o=0|i[e+24>>2],h=0|a(o,0|i[A+4>>2]),u=0|i[e+20>>2],s=h+t+(0|a(u,255&s))|0,t>>>0>>0)for(c=o,u=s,o=(0==(0|(s>>>0)%(o>>>0))?o+-1|0:-1)+s|0;;){if(h=1==(0|(u>>>0)%(c>>>0))?u+-1|0:o,o=g?_+(t<<3)|0:(0|i[4+(0|i[e>>2])>>2])+(h<<10)|0,l=0|i[(c=o)>>2],c=0|qA(0|i[c+4>>2],0,0|i[e+28>>2],0),s=0|f(),I=0|i[A>>2],o=0|r[A+8>>0],d=0|i[A+4>>2],c=0==(0|I)&o<<24>>24==0?d:c,i[A+12>>2]=t,s=0|pe(e,I,o,t,l,1&((0|c)==(0|d)?0==(0|(0==(0|I)&o<<24>>24==0?0:s)):0)),s=(o=0|i[4+(0|i[e>>2])>>2])+((0|a(0|i[e+24>>2],c))<<10)+(s<<10)|0,c=o+(u<<10)|0,I?Q(o+(h<<10)|0,s,c):w(o+(h<<10)|0,s,c),(t=t+1|0)>>>0>=(0|i[e+20>>2])>>>0)break e;c=0|i[e+24>>2],u=u+1|0,o=h+1|0}}}while(0)}function K(e,A,t){var r,n;t|=0,r=l,n=l=l+63&-64,l=l+400|0,0==(0|(e|=0))|0==(0|(A|=0))||(pA(n,0,0,64),Mt(n+384|0,0|i[A+48>>2]),Gt(n,n+384|0,4,0),Mt(n+384|0,0|i[A+4>>2]),Gt(n,n+384|0,4,0),Mt(n+384|0,0|i[A+44>>2]),Gt(n,n+384|0,4,0),Mt(n+384|0,0|i[A+40>>2]),Gt(n,n+384|0,4,0),Mt(n+384|0,19),Gt(n,n+384|0,4,0),Mt(n+384|0,t),Gt(n,n+384|0,4,0),Mt(n+384|0,0|i[A+12>>2]),Gt(n,n+384|0,4,0),0|(t=0|i[A+8>>2])&&(Gt(n,t,0|i[A+12>>2],0),1&i[A+56>>2]|0)&&(wA(0|i[A+8>>2],0|i[A+12>>2]),i[A+12>>2]=0),Mt(n+384|0,0|i[A+20>>2]),Gt(n,n+384|0,4,0),0|(t=0|i[A+16>>2])&&Gt(n,t,0|i[A+20>>2],0),Mt(n+384|0,0|i[A+28>>2]),Gt(n,n+384|0,4,0),0|(t=0|i[A+24>>2])&&(Gt(n,t,0|i[A+28>>2],0),2&i[A+56>>2]|0)&&(wA(0|i[A+24>>2],0|i[A+28>>2]),i[A+28>>2]=0),Mt(n+384|0,0|i[A+36>>2]),Gt(n,n+384|0,4,0),0|(t=0|i[A+32>>2])&&Gt(n,t,0|i[A+36>>2],0),ft(n,e,64)),l=r}function J(e,A,t,n){e|=0,A|=0,t|=0,n|=0;var a,o,s=0,f=0,c=0;if(a=l,o=l=l+63&-64,l=l+528|0,i[o+512>>2]=0,Mt(o+512|0,A),A>>>0<65)(0|pA(o,0,0,A))>=0&&(Gt(o,o+512|0,4,0),Gt(o,t,n,0),ft(o,e,A));else e:do{if((0|pA(o,0,0,64))>=0&&(Gt(o,o+512|0,4,0),Gt(o,t,n,0),(0|ft(o,o+448|0,64))>=0)){f=o+448|0,c=(s=e)+32|0;do{r[s>>0]=0|r[f>>0],s=s+1|0,f=f+1|0}while((0|s)<(0|c));f=o+448|0,c=64+(s=o+384|0)|0;do{i[s>>2]=i[f>>2],s=s+4|0,f=f+4|0}while((0|s)<(0|c));if((A+-32|0)>>>0>64){n=e+32|0,t=A+-32|0;do{if((0|NA(o+448|0,64,o+384|0,64,0,0,0))<0)break e;f=o+448|0,c=(s=n)+32|0;do{r[s>>0]=0|r[f>>0],s=s+1|0,f=f+1|0}while((0|s)<(0|c));t=t+-32|0,n=n+32|0,f=o+448|0,c=64+(s=o+384|0)|0;do{i[s>>2]=i[f>>2],s=s+4|0,f=f+4|0}while((0|s)<(0|c))}while(t>>>0>64)}else n=e+32|0,t=A+-32|0;(0|NA(o+448|0,t,o+384|0,64,0,0,0))>=0&&Ae(0|n,o+448|0,0|t)}}while(0);wA(o,384),l=a}function X(e,A,t,i,o){e|=0,A|=0,t|=0,i|=0;var s=0,f=0,h=0,u=0,g=0,_=0;er(o|=0),f=(0|a((i>>>0)/3|0,-3))+i|0,s=((i>>>0)/3|0)<<2;do{if(f){if(2&o){s=(2|s)+(f>>>1)|0;break}s=s+4|0;break}}while(0);if(s>>>0>=A>>>0&&vr(),4&o)if(0|i){u=0,o=0,f=0,g=0;do{if(_=g,g=g+1|0,u=u<<8|0|n[t+_>>0],(o=o+8|0)>>>0>5)for(;;){if(_=255&(0|GA(u>>>(o=o+-6|0)&63)),h=f+1|0,r[e+f>>0]=_,!(o>>>0>5)){f=h;break}f=h}}while((0|g)!=(0|i));o&&(_=255&(0|GA(u<<6-o&63)),r[e+f>>0]=_,f=f+1|0)}else f=0;else if(0|i){u=0,o=0,f=0,g=0;do{if(h=g,g=g+1|0,u=u<<8|0|n[t+h>>0],(o=o+8|0)>>>0>5)for(;;){if(_=255&(0|UA(u>>>(o=o+-6|0)&63)),h=f+1|0,r[e+f>>0]=_,!(o>>>0>5)){f=h;break}f=h}}while((0|g)!=(0|i));o&&(_=255&(0|UA(u<<6-o&63)),r[e+f>>0]=_,f=f+1|0)}else f=0;return s>>>0>>0&&c(34564,34583,230,34599),s>>>0>f>>>0?me(e+f|0,61,s-f|0):s=f,me(e+s|0,0,((_=s+1|0)>>>0>>0?A:_)-s|0),0|e}function j(e,A,t,a,o,s,c,h){e|=0,A|=0,o|=0,s|=0,c|=0,h|=0;var u,g,_=0,I=0;if(u=l,g=l=l+63&-64,l=l+112|0,!(0==(0|(t|=0))&0==(0|(a|=0)))){_=(I=g)+32|0;do{r[I>>0]=0|r[h>>0],I=I+1|0,h=h+1|0}while((0|I)<(0|_));h=n[o+4>>0]|n[o+4+1>>0]<<8|n[o+4+2>>0]<<16|n[o+4+3>>0]<<24,i[g+96>>2]=n[o>>0]|n[o+1>>0]<<8|n[o+2>>0]<<16|n[o+3>>0]<<24,i[g+96+4>>2]=h,h=8;do{r[g+96+h>>0]=s,s=0|ht(0|s,0|c,8),c=0|f(),h=h+1|0}while(16!=(0|h));if(a>>>0>0|0==(0|a)&t>>>0>63)for(s=a;;){Ar(g+32|0,g+96|0,g),c=0;do{r[e+c>>0]=r[g+32+c>>0]^r[A+c>>0],c=c+1|0}while(64!=(0|c));for(h=8,c=1;c=c+(0|n[(a=g+96+h|0)>>0])|0,r[a>>0]=c,16!=(0|(h=h+1|0));)c>>>=8;if(c=0|St(0|t,0|s,-64,-1),e=e+64|0,A=A+64|0,!((h=0|f())>>>0>0|0==(0|h)&c>>>0>63)){s=c;break}t=c,s=h}else s=t,h=a;if(!(0==(0|s)&0==(0|h))&&(Ar(g+32|0,g+96|0,g),0|s)){c=0;do{r[e+c>>0]=r[g+32+c>>0]^r[A+c>>0],c=c+1|0}while((0|c)!=(0|s))}wA(g+32|0,64),wA(g,32)}l=u}function O(e,A){A|=0;var t,n,a,o,s,c,h=0,u=0,g=0,_=0;0==(0|(u=0|i[56+(e|=0)>>2]))&0==(0|(h=0|i[e+56+4>>2]))||(r[e+64+u>>0]=1,h=0|St(0|u,0|h,1,0),(g=0|f())>>>0<0|0==(0|g)&h>>>0<16&&me(e+64+h|0,0,14-u+1|0),r[e+80>>0]=1,D(e,e+64|0,16,0)),u=0|i[e+24>>2],_=(a=(-67108864|(n=((_=((g=(0|i[e+28>>2])+(u>>>26)|0)>>>26)+(0|i[e+32>>2])|0)>>>26)+(0|i[e+36>>2])|0))+((((((o=((c=(5*(n>>>26)|0)+(0|i[e+20>>2])|0)>>>26)+(67108863&u)+((5+(67108863&c)|0)>>>26)|0)>>>26)+(67108863&g)|0)>>>26)+(67108863&_)|0)>>>26)|0)>>31&67108863&_|(s=(a>>>31)-1&67108863)&(((o>>>26)+(67108863&g)|0)>>>26)+(67108863&_),t=0|St(a>>31&67108863&c|s&5+(67108863&c)|(a>>31&(c>>>26)+(67108863&u)|s&o)<<26|0,0,0|i[e+40>>2],0),h=0|f(),h=0|St(0|(u=0|St((a>>31&(c>>>26)+(67108863&u)|s&o)>>>6|(a>>31&67108863&g|s&(o>>>26)+(67108863&g))<<20|0,0,0|i[e+44>>2],0)),0|f(),0|h,0),u=0|f(),u=0|St(0|(g=0|St((a>>31&67108863&g|s&(o>>>26)+(67108863&g))>>>12|_<<14|0,0,0|i[e+48>>2],0)),0|f(),0|u,0),g=0|f(),g=0|St(0|(_=0|St(((a>>>31)-1&a|a>>31&n)<<8|_>>>18|0,0,0|i[e+52>>2],0)),0|f(),0|g,0),f(),Mt(A,t),Mt(A+4|0,h),Mt(A+8|0,u),Mt(A+12|0,g),wA(e,88)}function q(e,A){var t,r;e|=0,t=l,r=l=l+63&-64,l=l+192|0,v(r+144|0,A|=0),v(r+96|0,r+144|0),v(r+96|0,r+96|0),b(r+96|0,A,r+96|0),b(r+144|0,r+144|0,r+96|0),v(r+48|0,r+144|0),b(r+96|0,r+96|0,r+48|0),v(r+48|0,r+96|0),A=1;do{v(r+48|0,r+48|0),A=A+1|0}while(5!=(0|A));b(r+96|0,r+48|0,r+96|0),v(r+48|0,r+96|0),A=1;do{v(r+48|0,r+48|0),A=A+1|0}while(10!=(0|A));b(r+48|0,r+48|0,r+96|0),v(r,r+48|0),A=1;do{v(r,r),A=A+1|0}while(20!=(0|A));b(r+48|0,r,r+48|0),v(r+48|0,r+48|0),A=1;do{v(r+48|0,r+48|0),A=A+1|0}while(10!=(0|A));b(r+96|0,r+48|0,r+96|0),v(r+48|0,r+96|0),A=1;do{v(r+48|0,r+48|0),A=A+1|0}while(50!=(0|A));b(r+48|0,r+48|0,r+96|0),v(r,r+48|0),A=1;do{v(r,r),A=A+1|0}while(100!=(0|A));b(r+48|0,r,r+48|0),v(r+48|0,r+48|0),A=1;do{v(r+48|0,r+48|0),A=A+1|0}while(50!=(0|A));b(r+96|0,r+48|0,r+96|0),v(r+96|0,r+96|0),A=1;do{v(r+96|0,r+96|0),A=A+1|0}while(5!=(0|A));b(e,r+96|0,r+144|0),l=t}function z(e,A){e|=0;var t,i,n=0;for(t=l,i=l=l+63&-64,l=l+1760|0,tt(i,A|=0),rt(i+1600|0,A),et(i+1280|0,i+1600|0),We(i+1600|0,i+1280|0,i),et(i+1440|0,i+1600|0),tt(i+160|0,i+1440|0),We(i+1600|0,i+1280|0,i+160|0),et(i+1440|0,i+1600|0),tt(i+320|0,i+1440|0),We(i+1600|0,i+1280|0,i+320|0),et(i+1440|0,i+1600|0),tt(i+480|0,i+1440|0),We(i+1600|0,i+1280|0,i+480|0),et(i+1440|0,i+1600|0),tt(i+640|0,i+1440|0),We(i+1600|0,i+1280|0,i+640|0),et(i+1440|0,i+1600|0),tt(i+800|0,i+1440|0),We(i+1600|0,i+1280|0,i+800|0),et(i+1440|0,i+1600|0),tt(i+960|0,i+1440|0),We(i+1600|0,i+1280|0,i+960|0),et(i+1440|0,i+1600|0),tt(i+1120|0,i+1440|0),Xt(e),n=252;rt(i+1600|0,e),(A=0|r[31840+n>>0])<<24>>24<=0?A<<24>>24<0&&(et(i+1440|0,i+1600|0),$e(i+1600|0,i+1440|0,i+(160*(((A<<24>>24)/-2|0)<<24>>24)|0)|0)):(et(i+1440|0,i+1600|0),We(i+1600|0,i+1440|0,i+(160*((255&A)>>>1&255)|0)|0)),et(e,i+1600|0),n;)n=n+-1|0;l=t}function V(e,A,t,r,n,a,o){e|=0,A|=0,t|=0,r|=0,n|=0;var s,c,h=0,u=0;return s=l,c=l=l+63&-64,l=l+352|0,N(c,a|=0,o|=0),e>>>0>t>>>0&&0>>0|0==(0|n)&(e-t|0)>>>0>>0?u=5:t>>>0>e>>>0&&0>>0|0==(0|n)&(t-e|0)>>>0>>0?u=5:h=t,5==(0|u)&&(QA(0|e,0|t,0|r),h=e),i[c+32>>2]=0,i[c+32+4>>2]=0,i[c+32+8>>2]=0,i[c+32+12>>2]=0,i[c+32+16>>2]=0,i[c+32+20>>2]=0,i[c+32+24>>2]=0,i[c+32+28>>2]=0,0==(0|(o=n>>>0>0|0==(0|n)&r>>>0>32?32:r))&0==(0|(t=n>>>0>0|0==(0|n)&r>>>0>32?0:n))||Ae(c+32+32|0,0|h,-2-(u=~n>>>0>4294967295|-1==(0|~n)&~r>>>0>4294967263?~r:-33)+1|0),Qt(c+32|0,c+32|0,u=0|St(0|o,0|t,32,0),0|f(),a+16|0,c),Vt(c+96|0,c+32|0),0==(0|o)&0==(0|t)||Ae(0|e,c+32+32|0,-2-(u=~n>>>0>4294967295|-1==(0|~n)&~r>>>0>4294967263?~r:-33)+1|0),wA(c+32|0,64),n>>>0>0|0==(0|n)&r>>>0>32&&Ct(e+o|0,h+o|0,u=0|mt(0|r,0|n,0|o,0|t),0|f(),a+16|0,c),wA(c,32),kt(c+96|0,e,r,n),zt(c+96|0,A),wA(c+96|0,256),l=s,0}function $(e,A,t,i){e|=0,A|=0,t|=0,i|=0;var a=0,o=0,s=0,c=0;e:do{if(!(0==(0|t)&0==(0|i))){for(a=n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24,s=A;A=e+96+a|0,i>>>0>0|0==(0|i)&t>>>0>(c=256-a|0)>>>0;){Ae(0|A,0|s,0|c),A=(n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24)+c|0,r[e+352>>0]=A,r[e+352+1>>0]=A>>8,r[e+352+2>>0]=A>>16,r[e+352+3>>0]=A>>24,fe(e,128,0),p(e,e+96|0),a=e+224|0,o=128+(A=e+96|0)|0;do{r[A>>0]=0|r[a>>0],A=A+1|0,a=a+1|0}while((0|A)<(0|o));if(a=(n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24)-128|0,r[e+352>>0]=a,r[e+352+1>>0]=a>>8,r[e+352+2>>0]=a>>16,r[e+352+3>>0]=a>>24,0==(0|(t=0|mt(0|t,0|i,0|c,0)))&0==(0|(i=0|f())))break e;s=s+c|0}Ae(0|A,0|s,0|t),c=(n[e+352>>0]|n[e+352+1>>0]<<8|n[e+352+2>>0]<<16|n[e+352+3>>0]<<24)+t|0,r[e+352>>0]=c,r[e+352+1>>0]=c>>8,r[e+352+2>>0]=c>>16,r[e+352+3>>0]=c>>24}}while(0)}function W(e,A,t){var r,n,a,o,s,f,c,h,u,g,_,I,d,l,p,B,y,C,E,b;A|=0,t|=0,b=0|i[(e|=0)>>2],C=0|i[e+4>>2],B=0|i[e+8>>2],l=0|i[e+12>>2],I=0|i[e+16>>2],g=0|i[e+20>>2],h=0|i[e+24>>2],f=0|i[e+28>>2],o=0|i[e+32>>2],n=0|i[e+36>>2],E=0|i[A>>2],y=0|i[A+4>>2],p=0|i[A+8>>2],d=0|i[A+12>>2],_=0|i[A+16>>2],u=0|i[A+20>>2],c=0|i[A+24>>2],s=0|i[A+28>>2],a=0|i[A+32>>2],r=0|i[A+36>>2],i[e>>2]=(E^b)&0-t^b,i[e+4>>2]=(y^C)&0-t^C,i[e+8>>2]=(p^B)&0-t^B,i[e+12>>2]=(d^l)&0-t^l,i[e+16>>2]=(_^I)&0-t^I,i[e+20>>2]=(u^g)&0-t^g,i[e+24>>2]=(c^h)&0-t^h,i[e+28>>2]=(s^f)&0-t^f,i[e+32>>2]=(a^o)&0-t^o,i[e+36>>2]=(r^n)&0-t^n,i[A>>2]=(E^b)&0-t^E,i[A+4>>2]=(y^C)&0-t^y,i[A+8>>2]=(p^B)&0-t^p,i[A+12>>2]=(d^l)&0-t^d,i[A+16>>2]=(_^I)&0-t^_,i[A+20>>2]=(u^g)&0-t^u,i[A+24>>2]=(c^h)&0-t^c,i[A+28>>2]=(s^f)&0-t^s,i[A+32>>2]=(a^o)&0-t^a,i[A+36>>2]=(r^n)&0-t^r}function Z(e,A,t,a,o){e|=0,a|=0,o|=0;var s,c,h=0,u=0,g=0,_=0,I=0;if(s=l,c=l=l+63&-64,l=l+112|0,!(0==(0|(A|=0))&0==(0|(t|=0)))){h=(u=c)+32|0;do{r[u>>0]=0|r[o>>0],u=u+1|0,o=o+1|0}while((0|u)<(0|h));if(u=n[a+4>>0]|n[a+4+1>>0]<<8|n[a+4+2>>0]<<16|n[a+4+3>>0]<<24,i[c+96>>2]=n[a>>0]|n[a+1>>0]<<8|n[a+2>>0]<<16|n[a+3>>0]<<24,i[c+96+4>>2]=u,i[c+96+8>>2]=0,i[c+96+8+4>>2]=0,t>>>0>0|0==(0|t)&A>>>0>63){do{for(Ar(e,c+96|0,c),h=8,o=1;o=o+(0|n[(u=c+96+h|0)>>0])|0,r[u>>0]=o,16!=(0|(h=h+1|0));)o>>>=8;A=0|St(0|A,0|t,-64,-1),t=0|f(),e=e+64|0}while(t>>>0>0|0==(0|t)&A>>>0>63);0==(0|A)&0==(0|t)||(_=e,I=A,g=8)}else _=e,I=A,g=8;if(8==(0|g)&&(Ar(c+32|0,c+96|0,c),0|I)){o=0;do{r[_+o>>0]=0|r[c+32+o>>0],o=o+1|0}while((0|o)!=(0|I))}wA(c+32|0,64),wA(c,32)}l=s}function ee(e,A,t,r,i,n,a){e|=0,A|=0,t|=0,r|=0,i|=0;var o,s,c=0;return s=l,o=l=l+63&-64,l=l+96|0,N(o,n|=0,a|=0),function(e,A,t){Z(e|=0,32,0,A|=0,t|=0)}(o+32|0,n+16|0,o),0|function(e,A,t,r,i){return 0|function(e,A,t,r,i){var n,a;return e|=0,n=l,a=l=l+63&-64,l=l+16|0,function(e,A,t,r,i){var n,a;e|=0,A|=0,t|=0,r|=0,n=l,a=l=l+63&-64,l=l+96|0,Se(a,i|=0),L(a,A,t,r),O(a,e),l=n}(a,A|=0,t|=0,r|=0,i|=0),i=0|sr(e,a),l=n,0|i}(e|=0,A|=0,t|=0,r|=0,i|=0)}(t,A,r,i,o+32|0)?(wA(o,32),A=-1):e?(A>>>0>=e>>>0&&0>>0|0==(0|i)&(A-e|0)>>>0>>0?c=8:e>>>0>=A>>>0&&0>>0|0==(0|i)&(e-A|0)>>>0>>0?c=8:t=A,8==(0|c)&&(QA(0|e,0|A,0|r),t=e),0==(0|(A=i>>>0>0|0==(0|i)&r>>>0>32?32:r))&0==(0|(a=i>>>0>0|0==(0|i)&r>>>0>32?0:i))?Qt(o+32|0,o+32|0,32,0,n+16|0,o):(Ae(o+32+32|0,0|t,-2-(c=~i>>>0>4294967295|-1==(0|~i)&~r>>>0>4294967263?~r:-33)+1|0),Qt(o+32|0,o+32|0,0|St(0|A,0|a,32,0),0|f(),n+16|0,o),Ae(0|e,o+32+32|0,-2-c+1|0)),i>>>0>0|0==(0|i)&r>>>0>32&&Ct(e+A|0,t+A|0,0|mt(0|r,0|i,0|A,0|a),0|f(),n+16|0,o),wA(o,32),A=0):A=0,l=s,0|A}function Ae(e,A,t){e|=0,A|=0;var n,a,o=0;if((0|(t|=0))>=8192)return _(0|e,0|A,0|t),0|e;if(a=0|e,n=e+t|0,(3&e)==(3&A)){for(;3&e;){if(!t)return 0|a;r[e>>0]=0|r[A>>0],e=e+1|0,A=A+1|0,t=t-1|0}for(o=(t=-4&n|0)-64|0;(0|e)<=(0|o);)i[e>>2]=i[A>>2],i[e+4>>2]=i[A+4>>2],i[e+8>>2]=i[A+8>>2],i[e+12>>2]=i[A+12>>2],i[e+16>>2]=i[A+16>>2],i[e+20>>2]=i[A+20>>2],i[e+24>>2]=i[A+24>>2],i[e+28>>2]=i[A+28>>2],i[e+32>>2]=i[A+32>>2],i[e+36>>2]=i[A+36>>2],i[e+40>>2]=i[A+40>>2],i[e+44>>2]=i[A+44>>2],i[e+48>>2]=i[A+48>>2],i[e+52>>2]=i[A+52>>2],i[e+56>>2]=i[A+56>>2],i[e+60>>2]=i[A+60>>2],e=e+64|0,A=A+64|0;for(;(0|e)<(0|t);)i[e>>2]=i[A>>2],e=e+4|0,A=A+4|0}else for(t=n-4|0;(0|e)<(0|t);)r[e>>0]=0|r[A>>0],r[e+1>>0]=0|r[A+1>>0],r[e+2>>0]=0|r[A+2>>0],r[e+3>>0]=0|r[A+3>>0],e=e+4|0,A=A+4|0;for(;(0|e)<(0|n);)r[e>>0]=0|r[A>>0],e=e+1|0,A=A+1|0;return 0|a}function te(e,A){e|=0;var t,n,a=0;t=l,n=l=l+63&-64,l=l+48|0,function(e,A){var t,r,n,a,o,s,f,c,h,u,g;e|=0,h=0|i[(A|=0)>>2],g=0|i[A+4>>2],f=0|i[A+8>>2],s=0|i[A+12>>2],o=0|i[A+16>>2],u=0|i[A+20>>2],n=0|i[A+24>>2],r=0|i[A+28>>2],t=0|i[A+32>>2],a=(((((c=((19*((((((((((((16777216+(19*(A=0|i[A+36>>2])|0)|0)>>>25)+h>>26)+g>>25)+f>>26)+s>>25)+o>>26)+u>>25)+n>>26)+r>>25)+t>>26)+A>>25)|0)+h>>26)+g|0)>>25)+f>>26)+s>>25)+o>>26)+u|0,i[e>>2]=(19*((((((((((((16777216+(19*A|0)|0)>>>25)+h>>26)+g>>25)+f>>26)+s>>25)+o>>26)+u>>25)+n>>26)+r>>25)+t>>26)+A>>25)|0)+h&67108863,i[e+4>>2]=33554431&c,i[e+8>>2]=(c>>25)+f&67108863,i[e+12>>2]=((c>>25)+f>>26)+s&33554431,i[e+16>>2]=(((c>>25)+f>>26)+s>>25)+o&67108863,i[e+20>>2]=33554431&a,i[e+24>>2]=(a>>25)+n&67108863,i[e+28>>2]=((a>>25)+n>>26)+r&33554431,i[e+32>>2]=(((a>>25)+n>>26)+r>>25)+t&67108863,i[e+36>>2]=((((a>>25)+n>>26)+r>>25)+t>>26)+A&33554431}(n,A|=0),A=0|i[n>>2],r[e>>0]=A,r[e+1>>0]=A>>>8,r[e+2>>0]=A>>>16,a=0|i[n+4>>2],r[e+3>>0]=a<<2|A>>>24,r[e+4>>0]=a>>>6,r[e+5>>0]=a>>>14,A=0|i[n+8>>2],r[e+6>>0]=A<<3|a>>>22,r[e+7>>0]=A>>>5,r[e+8>>0]=A>>>13,a=0|i[n+12>>2],r[e+9>>0]=a<<5|A>>>21,r[e+10>>0]=a>>>3,r[e+11>>0]=a>>>11,A=0|i[n+16>>2],r[e+12>>0]=A<<6|a>>>19,r[e+13>>0]=A>>>2,r[e+14>>0]=A>>>10,r[e+15>>0]=A>>>18,A=0|i[n+20>>2],r[e+16>>0]=A,r[e+17>>0]=A>>>8,r[e+18>>0]=A>>>16,a=0|i[n+24>>2],r[e+19>>0]=a<<1|A>>>24,r[e+20>>0]=a>>>7,r[e+21>>0]=a>>>15,A=0|i[n+28>>2],r[e+22>>0]=A<<3|a>>>23,r[e+23>>0]=A>>>5,r[e+24>>0]=A>>>13,a=0|i[n+32>>2],r[e+25>>0]=a<<4|A>>>21,r[e+26>>0]=a>>>4,r[e+27>>0]=a>>>12,A=0|i[n+36>>2],r[e+28>>0]=A<<6|a>>>20,r[e+29>>0]=A>>>2,r[e+30>>0]=A>>>10,r[e+31>>0]=A>>>18,l=t}function re(e,A,t){e|=0,A|=0,t|=0;var r,a,o=0,s=0,c=0;if(r=l,a=l=l+63&-64,l=l+4096|0,hr(a+3072|0),hr(a+2048|0),0!=(0|e)&0!=(0|A)&&(i[a+2048>>2]=i[A>>2],i[a+2048+4>>2]=0,i[a+2048+8>>2]=i[A+4>>2],i[a+2048+8+4>>2]=0,i[a+2048+16>>2]=n[A+8>>0],i[a+2048+16+4>>2]=0,i[a+2048+24>>2]=i[e+16>>2],i[a+2048+24+4>>2]=0,i[a+2048+32>>2]=i[e+8>>2],i[a+2048+32+4>>2]=0,i[a+2048+40>>2]=i[e+36>>2],i[a+2048+40+4>>2]=0,0|i[e+20>>2])){A=0;do{(o=127&A)||(c=0|St(0|i[a+2048+48>>2],0|i[a+2048+48+4>>2],1,0),s=0|f(),i[a+2048+48>>2]=c,i[a+2048+48+4>>2]=s,hr(a),hr(a+1024|0),Q(a+3072|0,a+2048|0,a),Q(a+3072|0,a,a+1024|0)),s=0|i[a+1024+(o<<3)+4>>2],i[(c=t+(A<<3)|0)>>2]=i[a+1024+(o<<3)>>2],i[c+4>>2]=s,A=A+1|0}while(A>>>0<(0|i[e+20>>2])>>>0)}l=r}function ie(e,A,t,r){e|=0,A|=0,t|=0,r|=0;var n,a,o,s,f=0,c=0,h=0;s=l,o=l=l+63&-64,l=l+64|0,c=52+(f=o+8|0)|0;do{i[f>>2]=0,f=f+4|0}while((0|f)<(0|c));f=0|qe(e),i[o+36>>2]=f,i[o+20>>2]=f,i[o+4>>2]=f,c=0|C(f),i[o+32>>2]=c,n=0|C(f),i[o+16>>2]=n,a=0|C(f),i[o>>2]=a;do{if(0==(0|c)|0==(0|n)|0==(0|a))m(c),m(n),m(a),f=-22;else{if(!(h=0|C(f))){m(c),m(n),m(a),f=-22;break}if(0|(f=0|U(o,e,r))){m(0|i[o+32>>2]),m(0|i[o+16>>2]),m(0|i[o>>2]),m(h);break}r=0|ce(0|i[o+40>>2],0|i[o+44>>2],0|i[o+52>>2],A,t,0|i[o+16>>2],0|i[o+20>>2],h,0|i[o+4>>2],0,0,r),m(0|i[o+32>>2]),m(0|i[o+16>>2]),f=0==(0|r)&&0==(0|AA(h,0|i[o>>2],0|i[o+4>>2]))?0:-35,m(h),m(0|i[o>>2])}}while(0);return l=s,0|f}function ne(e,A){e|=0,A|=0;var t,i,a=0,o=0,s=0;t=l,i=l=l+63&-64,l=l+464|0,a=0;do{s=0|r[A+a>>0],r[i+(o=a<<1)>>0]=15&s,r[i+(1|o)>>0]=(255&s)>>>4,a=a+1|0}while(32!=(0|a));A=0,a=0;do{A=134217728+((o=A+(0|n[(s=i+a|0)>>0])|0)<<24)>>28,r[s>>0]=o-(A<<4),a=a+1|0}while(63!=(0|a));r[i+63>>0]=A+(0|n[i+63>>0]),Xt(e),A=1;do{Ot(i+64|0,A>>>1,0|r[i+A>>0]),eA(i+304|0,e,i+64|0),et(e,i+304|0),A=A+2|0}while(A>>>0<64);rt(i+304|0,e),pt(i+184|0,i+304|0),aA(i+304|0,i+184|0),pt(i+184|0,i+304|0),aA(i+304|0,i+184|0),pt(i+184|0,i+304|0),aA(i+304|0,i+184|0),et(e,i+304|0),A=0;do{Ot(i+64|0,A>>>1,0|r[i+A>>0]),eA(i+304|0,e,i+64|0),et(e,i+304|0),A=A+2|0}while(A>>>0<64);l=t}function ae(e,A,t,r,i,n,a,o,s,c,h){var u;e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0,o|=0,s|=0,u=l,l=l+352|0,XA(u+16|0,64,0,c|=0,h|=0),Vt(u+80|0,u+16|0),wA(u+16|0,64),kt(u+80|0,a,o,s),A=0|mt(0,0,0|o,0|s),f(),kt(u+80|0,34624,15&A,0),kt(u+80|0,t,r,i),A=0|mt(0,0,0|r,0|i),f(),kt(u+80|0,34624,15&A,0),RA(u+336|0,o,s),kt(u+80|0,u+336|0,8,0),RA(u+336|0,r,i),kt(u+80|0,u+336|0,8,0),zt(u+80|0,u),wA(u+80|0,256),A=0|sr(u,n),wA(u,16);do{if(e){if(A){me(0|e,0,0|r),A=-1;break}sA(e,t,r,i,c,1,h),A=0;break}}while(0);return l=u,0|A}function oe(e){e|=0;var A=0,t=0;do{if(e)if(0|i[e>>2])if((0|i[e+4>>2])>>>0>=16){if(0==(0|i[e+8>>2])&&0|i[e+12>>2]){A=-18;break}if(A=0|i[e+20>>2],!(0|i[e+16>>2]))return 0|(0==(0|A)?-6:-19);if(A>>>0>=8){if(0==(0|i[e+24>>2])&&0|i[e+28>>2]){A=-20;break}if(0==(0|i[e+32>>2])&&0|i[e+36>>2]){A=-21;break}if((A=0|i[e+44>>2])>>>0>=8)if(A>>>0<=2097152)if(A>>>0>=(t=0|i[e+48>>2])<<3>>>0)if(0|i[e+40>>2])if(t){if(!(t>>>0>16777215))return 0|(0==(0|(e=0|i[e+52>>2]))?-28:e>>>0>16777215?-29:0);A=-17}else A=-16;else A=-12;else A=-14;else A=-15;else A=-14}else A=-6}else A=-2;else A=-1;else A=-25}while(0);return 0|A}function se(e,A,t,n,a){var o,s;e|=0,t|=0,n|=0,a|=0,o=l,s=l=l+63&-64,l=l+192|0,((A|=0)-1&255)>63&&vr(),t||vr(),r[s+128>>0]=A,r[s+128+1>>0]=32,r[s+128+2>>0]=1,r[s+128+3>>0]=1,Jt(s+128+4|0),RA(s+128+8|0,0,0),i[s+128+16>>2]=0,i[s+128+16+4>>2]=0,i[s+128+16+8>>2]=0,i[s+128+16+12>>2]=0,n?function(e,A){A|=0;var t=0;e=16+(t=32+(e|=0)|0)|0;do{r[t>>0]=0|r[A>>0],t=t+1|0,A=A+1|0}while((0|t)<(0|e))}(s+128|0,n):(i[s+128+32>>2]=0,i[s+128+32+4>>2]=0,i[s+128+32+8>>2]=0,i[s+128+32+12>>2]=0),a?function(e,A){A|=0;var t=0;e=16+(t=48+(e|=0)|0)|0;do{r[t>>0]=0|r[A>>0],t=t+1|0,A=A+1|0}while((0|t)<(0|e))}(s+128|0,a):(i[s+128+48>>2]=0,i[s+128+48+4>>2]=0,i[s+128+48+8>>2]=0,i[s+128+48+12>>2]=0),Le(e,s+128|0),a=96+(A=s+32|0)|0;do{i[A>>2]=0,A=A+4|0}while((0|A)<(0|a));a=(A=s)+32|0;do{r[A>>0]=0|r[t>>0],A=A+1|0,t=t+1|0}while((0|A)<(0|a));$(e,s,128,0),wA(s,128),l=o}function fe(e,A,t){var i,a;A|=0,t|=0,i=0|St(n[64+(e|=0)>>0]|n[e+64+1>>0]<<8|n[e+64+2>>0]<<16|n[e+64+3>>0]<<24|0,n[e+64+4>>0]|n[e+64+4+1>>0]<<8|n[e+64+4+2>>0]<<16|n[e+64+4+3>>0]<<24|0,0|A,0|t),a=0|f(),r[e+64>>0]=i,r[e+64+1>>0]=i>>8,r[e+64+2>>0]=i>>16,r[e+64+3>>0]=i>>24,r[e+64+4>>0]=a,r[e+64+4+1>>0]=a>>8,r[e+64+4+2>>0]=a>>16,r[e+64+4+3>>0]=a>>24,A=0|St(n[e+72>>0]|n[e+72+1>>0]<<8|n[e+72+2>>0]<<16|n[e+72+3>>0]<<24|0,n[e+72+4>>0]|n[e+72+4+1>>0]<<8|n[e+72+4+2>>0]<<16|n[e+72+4+3>>0]<<24|0,1&(a>>>0>>0|(0|a)==(0|t)&i>>>0>>0)|0,0),t=0|f(),r[e+72>>0]=A,r[e+72+1>>0]=A>>8,r[e+72+2>>0]=A>>16,r[e+72+3>>0]=A>>24,r[e+72+4>>0]=t,r[e+72+4+1>>0]=t>>8,r[e+72+4+2>>0]=t>>16,r[e+72+4+3>>0]=t>>24}function ce(e,A,t,r,n,a,o,s,f,c,h,u){var g,_,I;e|=0,A|=0,t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0,I=l,_=l=l+63&-64,l=l+64|0,g=0|C(f|=0);do{if(g){if(i[_>>2]=g,i[_+4>>2]=f,i[_+8>>2]=r,i[_+12>>2]=n,i[_+16>>2]=a,i[_+20>>2]=o,i[_+24>>2]=0,i[_+24+4>>2]=0,i[_+24+8>>2]=0,i[_+24+12>>2]=0,i[_+40>>2]=e,i[_+44>>2]=A,i[_+48>>2]=t,i[_+52>>2]=t,i[_+56>>2]=0,0|(A=0|ye(_,u))){wA(g,f),m(g);break}if(0|s&&Ae(0|s,0|g,0|f),0!=(0|c)&0!=(0|h)&&0|P(c,h,_,u)){wA(g,f),wA(c,h),m(g),A=-31;break}wA(g,f),m(g),A=0}else A=-22}while(0);return l=I,0|A}function he(e,A){var t,r,i=0;return r=l,t=l=l+63&-64,l=l+288|0,M(40+(e|=0)|0,A|=0),vt(e+80|0),v(t+240|0,e+40|0),b(t+192|0,t+240|0,16),be(t+240|0,t+240|0,e+80|0),Qe(t+192|0,t+192|0,e+80|0),v(t+144|0,t+192|0),b(t+144|0,t+144|0,t+192|0),v(e,t+144|0),b(e,e,t+192|0),b(e,e,t+240|0),function(e,A){e|=0;var t,r,i=0;t=l,r=l=l+63&-64,l=l+144|0,v(r+96|0,A|=0),v(r+48|0,r+96|0),v(r+48|0,r+48|0),b(r+48|0,A,r+48|0),b(r+96|0,r+96|0,r+48|0),v(r+96|0,r+96|0),b(r+96|0,r+48|0,r+96|0),v(r+48|0,r+96|0),i=1;do{v(r+48|0,r+48|0),i=i+1|0}while(5!=(0|i));b(r+96|0,r+48|0,r+96|0),v(r+48|0,r+96|0),i=1;do{v(r+48|0,r+48|0),i=i+1|0}while(10!=(0|i));b(r+48|0,r+48|0,r+96|0),v(r,r+48|0),i=1;do{v(r,r),i=i+1|0}while(20!=(0|i));b(r+48|0,r,r+48|0),v(r+48|0,r+48|0),i=1;do{v(r+48|0,r+48|0),i=i+1|0}while(10!=(0|i));b(r+96|0,r+48|0,r+96|0),v(r+48|0,r+96|0),i=1;do{v(r+48|0,r+48|0),i=i+1|0}while(50!=(0|i));b(r+48|0,r+48|0,r+96|0),v(r,r+48|0),i=1;do{v(r,r),i=i+1|0}while(100!=(0|i));b(r+48|0,r,r+48|0),v(r+48|0,r+48|0),i=1;do{v(r+48|0,r+48|0),i=i+1|0}while(50!=(0|i));b(r+96|0,r+48|0,r+96|0),v(r+96|0,r+96|0),v(r+96|0,r+96|0),b(e,r+96|0,A),l=t}(e,e),b(e,e,t+144|0),b(e,e,t+240|0),v(t+96|0,e),b(t+96|0,t+96|0,t+192|0),be(t+48|0,t+96|0,t+240|0),0|it(t+48|0)?i=4:(Qe(t,t+96|0,t+240|0),0|it(t)?(b(e,e,64),i=4):e=-1),4==(0|i)&&((0|(i=0|ut(e)))==((0|n[A+31>>0])>>>7|0)&&Ue(e,e),b(e+120|0,e,e+40|0),e=0),l=r,0|e}function ue(e,A,t){var r,n,a,o,s,f,c,h,u,g,_,I,d,l,p,B,y,C,E;A|=0,t|=0,E=0|i[(e|=0)>>2],y=0|i[e+4>>2],p=0|i[e+8>>2],d=0|i[e+12>>2],_=0|i[e+16>>2],u=0|i[e+20>>2],c=0|i[e+24>>2],s=0|i[e+28>>2],a=0|i[e+32>>2],r=0|i[e+36>>2],C=(i[A+4>>2]^y)&0-t,B=(i[A+8>>2]^p)&0-t,l=(i[A+12>>2]^d)&0-t,I=(i[A+16>>2]^_)&0-t,g=(i[A+20>>2]^u)&0-t,h=(i[A+24>>2]^c)&0-t,f=(i[A+28>>2]^s)&0-t,o=(i[A+32>>2]^a)&0-t,n=(i[A+36>>2]^r)&0-t,i[e>>2]=(i[A>>2]^E)&0-t^E,i[e+4>>2]=C^y,i[e+8>>2]=B^p,i[e+12>>2]=l^d,i[e+16>>2]=I^_,i[e+20>>2]=g^u,i[e+24>>2]=h^c,i[e+28>>2]=f^s,i[e+32>>2]=o^a,i[e+36>>2]=n^r}function ge(e,A,t,r,n,a,o,s,c,h,u,g){return e|=0,A|=0,t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,c|=0,h|=0,h=l,l=l+336|0,XA(h,64,0,u|=0,g|=0),Vt(h+64|0,h),wA(h,64),kt(h+64|0,o,s,c),o=0|mt(0,0,0|s,0|c),f(),kt(h+64|0,34624,15&o,0),sA(e,r,n,a,u,1,g),kt(h+64|0,e,n,a),u=0|mt(0,0,0|n,0|a),f(),kt(h+64|0,34624,15&u,0),RA(h+320|0,s,c),kt(h+64|0,h+320|0,8,0),RA(h+320|0,n,a),kt(h+64|0,h+320|0,8,0),zt(h+64|0,A),wA(h+64|0,256),0|t&&(i[t>>2]=16,i[t+4>>2]=0),l=h,0}function _e(e){var A,t,a=0,o=0,s=0;A=l,t=l=l+63&-64,l=l+48|0,o=e|=0,s=(a=t)+32|0;do{r[a>>0]=0|r[o>>0],a=a+1|0,o=o+1|0}while((0|a)<(0|s));a=n[e+36+4>>0]|n[e+36+4+1>>0]<<8|n[e+36+4+2>>0]<<16|n[e+36+4+3>>0]<<24,i[t+32>>2]=n[e+36>>0]|n[e+36+1>>0]<<8|n[e+36+2>>0]<<16|n[e+36+3>>0]<<24,i[t+32+4>>2]=a,function(e,A,t,r){!function(e,A,t,r){fA(e|=0,A|=0,40,0,t|=0,0,r|=0)}(e|=0,A|=0,t|=0,r|=0)}(t,t,e+32|0,e),o=t,s=(a=e)+32|0;do{r[a>>0]=0|r[o>>0],a=a+1|0,o=o+1|0}while((0|a)<(0|s));o=0|i[t+32>>2],s=0|i[t+32+4>>2],r[e+36>>0]=o,r[e+36+1>>0]=o>>8,r[e+36+2>>0]=o>>16,r[e+36+3>>0]=o>>24,r[e+36+4>>0]=s,r[e+36+4+1>>0]=s>>8,r[e+36+4+2>>0]=s>>16,r[e+36+4+3>>0]=s>>24,wt(e),l=A}function Ie(e,A){e|=0,A|=0;var t=0,i=0,a=0,o=0,s=0;t=0;do{r[e+t>>0]=(0|n[A+(t>>>3)>>0])>>>(7&t)&1,t=t+1|0}while(256!=(0|t));s=0;do{a=e+s|0;e:do{if(0|r[a>>0]){o=1;do{if((t=o+s|0)>>>0>=256)break e;A=0|r[e+t>>0];A:do{if(A<<24>>24){if(((i=A<<24>>24<>0])|0)<16){r[a>>0]=i+A,r[e+t>>0]=0;break}if((A-i|0)<-15)break e;for(r[a>>0]=A-i;0|r[(A=e+t|0)>>0];)if(r[A>>0]=0,(t=t+1|0)>>>0>=256)break A;r[A>>0]=1}}while(0);o=o+1|0}while(o>>>0<7)}}while(0);s=s+1|0}while(256!=(0|s))}function de(e,A,t,r,i,n,a,o,s,f,c){var h;e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0,o|=0,s|=0,h=l,l=l+352|0,Zt(h+16|0,f|=0,c|=0),Vt(h+80|0,h+16|0),wA(h+16|0,64),kt(h+80|0,a,o,s),RA(h+336|0,o,s),kt(h+80|0,h+336|0,8,0),kt(h+80|0,t,r,i),RA(h+336|0,r,i),kt(h+80|0,h+336|0,8,0),zt(h+80|0,h),wA(h+80|0,256),A=0|sr(h,n),wA(h,16);do{if(e){if(A){me(0|e,0,0|r),A=-1;break}KA(e,t,r,i,f,c),A=0;break}}while(0);return l=h,0|A}function le(e,A,t,r,n,a,o){var s,f;e|=0,A|=0,t|=0,r|=0,n|=0,a|=0,s=l,f=l=l+63&-64,l=l+560|0,Dt(f+192|0,o|=0),FA(f+128|0,a,32,0),R(f+192|0,f+128+32|0,32,0),R(f+192|0,t,r,n),TA(f+192|0,f+64|0),QA(e+32|0,a+32|0,32),E(f+64|0),ne(f+400|0,f+64|0),uA(e,f+400|0),Dt(f+192|0,o),R(f+192|0,e,64,0),R(f+192|0,t,r,n),TA(f+192|0,f),E(f),Nt(f+128|0),B(e+32|0,f,f+128|0,f+64|0),wA(f+128|0,64),wA(f+64|0,64),0|A&&(i[A>>2]=64,i[A+4>>2]=0),l=s}function pe(e,A,t,r,n,o){e|=0,A|=0,t|=0,r|=0,n|=0,o|=0;var s=0;do{if(A){if(s=(0|i[e+24>>2])-(0|i[e+20>>2])|0,o){s=r+-1+s|0;break}s=s+((0==(0|r))<<31>>31)|0;break}if(!(t<<24>>24)){s=r+-1|0;break}if(s=0|a(0|i[e+20>>2],255&t),o){s=r+-1+s|0;break}s=s+((0==(0|r))<<31>>31)|0;break}while(0);return ZA(0|n,0,0|n,0),ZA(0|f(),0,0|s,0),o=0|mt(s+-1|0,0,0|f(),0),n=0|f(),0==(0|A)|t<<24>>24==3?(s=0,r=0):(s=0|a(0|i[e+20>>2],1+(255&t)|0),r=0),e=0|qA(0|(A=0|St(0|o,0|n,0|s,0|r)),0|(t=0|f()),0|i[e+24>>2],0),f(),0|e}function Be(e,A,t,r,n){r|=0,n|=0;var a,o,s,f=0;if(s=l,o=l=l+63&-64,l=l+64|0,(t|=0)>>>0>0|0==(0|t)&(A|=0)>>>0>4294967295|(a=0|qe(e|=0))>>>0>127)i[8678]=28,t=-1;else{f=(t=o)+60|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|f));(f=0|function(e){var A;return(A=0|C(e|=0))&&3&i[A+-4>>2]?(me(0|A,0,0|e),0|A):0|A}(a))?(i[o+16>>2]=f,i[o+8>>2]=f,i[o>>2]=f,i[o+20>>2]=a,i[o+12>>2]=a,i[o+4>>2]=a,i[o+24>>2]=0,i[o+24+4>>2]=0,i[o+24+8>>2]=0,i[o+24+12>>2]=0,0|U(o,e,n)?(i[8678]=28,t=-1):t=(0|i[o+40>>2])==(0|A)?(0|i[o+44>>2])!=(r>>>10|0)&1:1,m(f)):t=-1}return l=s,0|t}function ye(e,A){A|=0;var t,r,n=0,o=0,s=0;if(r=l,t=l=l+63&-64,l=l+48|0,!(n=0|oe(e|=0)))if((A+-1|0)>>>0<=1){if(o=0|i[e+44>>2],n=0|i[e+48>>2],s=0|a(o=((o>>>0>>0?n<<3:o)>>>0)/(n<<2>>>0)|0,n<<2),i[t>>2]=0,i[t+8>>2]=i[e+40>>2],i[t+12>>2]=-1,i[t+16>>2]=s,i[t+20>>2]=o,i[t+24>>2]=o<<2,i[t+28>>2]=n,i[t+32>>2]=i[e+52>>2],i[t+36>>2]=A,!(n=0|function(e,A){e|=0,A|=0;var t,r,n=0;r=l,t=l=l+63&-64,l=l+80|0;do{if(0==(0|e)|0==(0|A))n=-25;else{if(n=0|C(i[e+20>>2]<<3),i[e+4>>2]=n,n){if(n=0|Fe(e,0|i[e+16>>2])){lt(e,0|i[A+56>>2]);break}K(t,A,0|i[e+36>>2]),wA(t+64|0,8),Ne(t,e),wA(t,72),n=0;break}n=-22}}while(0);return l=r,0|n}(t,e))){if(0|i[t+8>>2]){n=0;do{De(t,n),n=n+1|0}while(n>>>0<(0|i[t+8>>2])>>>0)}!function(e,A){var t,r,n=0,o=0;if(t=l,r=l=l+63&-64,l=l+2048|0,0!=(0|(e|=0))&0!=(0|(A|=0))){if(fr(r+1024|0,(0|i[4+(0|i[A>>2])>>2])+(i[A+24>>2]<<10)-1024|0),(0|i[A+28>>2])>>>0>1){n=1;do{o=(o=0|i[A+24>>2])-1+(0|a(o,n))|0,vA(r+1024|0,(0|i[4+(0|i[A>>2])>>2])+(o<<10)|0),n=n+1|0}while(n>>>0<(0|i[A+28>>2])>>>0)}!function(e,A){e|=0,A|=0;var t=0,r=0;t=0;do{RA(e+(t<<3)|0,0|i[(r=A+(t<<3)|0)>>2],0|i[r+4>>2]),t=t+1|0}while(128!=(0|t))}(r,r+1024|0),J(0|i[e>>2],0|i[e+4>>2],r,1024),wA(r+1024|0,1024),wA(r,1024),lt(A,0|i[e+56>>2])}l=t}(e,t),n=0}}else n=-26;return l=r,0|n}function Ce(e,A,t,r,i,n){var a,o;return A|=0,t|=0,r|=0,i|=0,n|=0,o=l,a=l=l+63&-64,l=l+592|0,0!=(0|dA(32+(e|=0)|0))&&0==(0|we(e))&&0!=(0|JA(i))&&0==(0|we(i))&&0==(0|he(a+424|0,i))?(Dt(a+96|0,n),R(a+96|0,e,32,0),R(a+96|0,i,32,0),R(a+96|0,A,t,r),TA(a+96|0,a+32|0),E(a+32|0),Y(a+304|0,a+32|0,a+424|0,e+32|0),uA(a,a+304|0),t=0|or(a,e),t=0|((0|a)==(0|e)?-1:t)|AA(e,a,32)):t=-1,l=o,0|t}function Ee(e,A){A|=0;var t,n=0,a=0;t=l,l=l+192|0,MA(e|=0),a=128+(n=t+64|0)|0;do{i[n>>2]=909522486,n=n+4|0}while((0|n)<(0|a));r[t+64>>0]=54^r[A>>0],n=1;do{r[(a=t+64+n|0)>>0]=r[a>>0]^r[A+n>>0],n=n+1|0}while(32!=(0|n));R(e,t+64|0,128,0),MA(e+208|0),a=128+(n=t+64|0)|0;do{i[n>>2]=1549556828,n=n+4|0}while((0|n)<(0|a));r[t+64>>0]=92^r[A>>0],n=1;do{r[(a=t+64+n|0)>>0]=r[a>>0]^r[A+n>>0],n=n+1|0}while(32!=(0|n));R(e+208|0,t+64|0,128,0),wA(t+64|0,128),wA(t,64),l=t}function be(e,A,t){var r,n,a,o,s,f,c,h,u;e|=0,t|=0,u=(0|i[4+(A|=0)>>2])-(0|i[t+4>>2])|0,h=(0|i[A+8>>2])-(0|i[t+8>>2])|0,c=(0|i[A+12>>2])-(0|i[t+12>>2])|0,f=(0|i[A+16>>2])-(0|i[t+16>>2])|0,s=(0|i[A+20>>2])-(0|i[t+20>>2])|0,o=(0|i[A+24>>2])-(0|i[t+24>>2])|0,a=(0|i[A+28>>2])-(0|i[t+28>>2])|0,n=(0|i[A+32>>2])-(0|i[t+32>>2])|0,r=(0|i[A+36>>2])-(0|i[t+36>>2])|0,i[e>>2]=(0|i[A>>2])-(0|i[t>>2]),i[e+4>>2]=u,i[e+8>>2]=h,i[e+12>>2]=c,i[e+16>>2]=f,i[e+20>>2]=s,i[e+24>>2]=o,i[e+28>>2]=a,i[e+32>>2]=n,i[e+36>>2]=r}function Qe(e,A,t){var r,n,a,o,s,f,c,h,u;e|=0,A|=0,u=(0|i[4+(t|=0)>>2])+(0|i[A+4>>2])|0,h=(0|i[t+8>>2])+(0|i[A+8>>2])|0,c=(0|i[t+12>>2])+(0|i[A+12>>2])|0,f=(0|i[t+16>>2])+(0|i[A+16>>2])|0,s=(0|i[t+20>>2])+(0|i[A+20>>2])|0,o=(0|i[t+24>>2])+(0|i[A+24>>2])|0,a=(0|i[t+28>>2])+(0|i[A+28>>2])|0,n=(0|i[t+32>>2])+(0|i[A+32>>2])|0,r=(0|i[t+36>>2])+(0|i[A+36>>2])|0,i[e>>2]=(0|i[t>>2])+(0|i[A>>2]),i[e+4>>2]=u,i[e+8>>2]=h,i[e+12>>2]=c,i[e+16>>2]=f,i[e+20>>2]=s,i[e+24>>2]=o,i[e+28>>2]=a,i[e+32>>2]=n,i[e+36>>2]=r}function we(e){e|=0;var A,t,i=0,a=0,o=0,s=0;A=l,t=l=l+63&-64,l=l+16|0,r[t>>0]=0,r[t+1>>0]=0,r[t+2>>0]=0,r[t+3>>0]=0,r[t+4>>0]=0,r[t+5>>0]=0,r[t+6>>0]=0,o=0;do{i=0|r[e+o>>0],a=0;do{r[(s=t+a|0)>>0]=r[s>>0]|r[32096+(a<<5)+o>>0]^i,a=a+1|0}while(7!=(0|a));o=o+1|0}while(31!=(0|o));i=127&r[e+31>>0],a=0;do{r[(s=t+a|0)>>0]=r[s>>0]|i^r[32096+(a<<5)+31>>0],a=a+1|0}while(7!=(0|a));i=0,a=0;do{a=(0|n[t+i>>0])-1|a,i=i+1|0}while(7!=(0|i));return l=A,a>>>8&1|0}function ve(e,A,t,r,n,a,o,s,f,c,h,u){return e|=0,A|=0,t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,f|=0,c|=0,c=l,l=l+336|0,Zt(c,h|=0,u|=0),Vt(c+64|0,c),wA(c,64),kt(c+64|0,o,s,f),RA(c+320|0,s,f),kt(c+64|0,c+320|0,8,0),KA(e,r,n,a,h,u),kt(c+64|0,e,n,a),RA(c+320|0,n,a),kt(c+64|0,c+320|0,8,0),zt(c+64|0,A),wA(c+64|0,256),0|t&&(i[t>>2]=16,i[t+4>>2]=0),l=c,0}function me(e,A,t){A|=0;var n,a=0;if(n=(e|=0)+(t|=0)|0,A&=255,(0|t)>=67){for(;3&e;)r[e>>0]=A,e=e+1|0;for(a=A|A<<8|A<<16|A<<24;(0|e)<=((-4&n)-64|0);)i[e>>2]=a,i[e+4>>2]=a,i[e+8>>2]=a,i[e+12>>2]=a,i[e+16>>2]=a,i[e+20>>2]=a,i[e+24>>2]=a,i[e+28>>2]=a,i[e+32>>2]=a,i[e+36>>2]=a,i[e+40>>2]=a,i[e+44>>2]=a,i[e+48>>2]=a,i[e+52>>2]=a,i[e+56>>2]=a,i[e+60>>2]=a,e=e+64|0;for(;(0|e)<(-4&n|0);)i[e>>2]=a,e=e+4|0}for(;(0|e)<(0|n);)r[e>>0]=A,e=e+1|0;return n-t|0}function Se(e,A){e|=0;var t=0;t=67108863&(0|Tt(A|=0)),i[e>>2]=t,t=(0|Tt(A+3|0))>>>2&67108611,i[e+4>>2]=t,t=(0|Tt(A+6|0))>>>4&67092735,i[e+8>>2]=t,t=(0|Tt(A+9|0))>>>6&66076671,i[e+12>>2]=t,t=(0|Tt(A+12|0))>>>8&1048575,i[e+16>>2]=t,i[e+20>>2]=0,i[e+20+4>>2]=0,i[e+20+8>>2]=0,i[e+20+12>>2]=0,i[e+20+16>>2]=0,t=0|Tt(A+16|0),i[e+40>>2]=t,t=0|Tt(A+20|0),i[e+44>>2]=t,t=0|Tt(A+24|0),i[e+48>>2]=t,A=0|Tt(A+28|0),i[e+52>>2]=A,i[e+56>>2]=0,i[e+56+4>>2]=0,r[e+80>>0]=0}function ke(e,A,t,r,n,a){e|=0,A|=0,t|=0,r|=0,n|=0,a|=0;var o=0,s=0,c=0;do{if(n>>>0<0|0==(0|n)&r>>>0<64||(o=0|St(0|r,0|n,-64,-1),(s=0|f())>>>0>0|0==(0|s)&o>>>0>4294967231))c=10;else{if(0|bt(t,t+64|0,o,s,a)){if(!e){c=10;break}me(0|e,0,0|o),c=10;break}0|A&&(i[A>>2]=o,i[A+4>>2]=s),e?(QA(0|e,t+64|0,0|o),r=0):r=0}}while(0);return 10==(0|c)&&(A?(i[A>>2]=0,i[A+4>>2]=0,r=-1):r=-1),0|r}function De(e,A){A|=0;var t,n,a=0,o=0;if(t=l,n=l=l+63&-64,l=l+32|0,0|(e|=0)&&0|(a=0|i[e+28>>2])){i[n>>2]=A,o=0;do{if(r[n+8>>0]=o,a){A=0;do{i[n+4>>2]=A,i[n+12>>2]=0,i[n+16>>2]=i[n>>2],i[n+16+4>>2]=i[n+4>>2],i[n+16+8>>2]=i[n+8>>2],i[n+16+12>>2]=i[n+12>>2],T(e,n+16|0),A=A+1|0,a=0|i[e+28>>2]}while(A>>>0>>0)}else a=0;o=o+1|0}while(4!=(0|o))}l=t}function Me(e,A,t,n){e|=0,t|=0,n|=0;var a,o,s=0;if(a=l,o=l=l+63&-64,l=l+192|0,((A|=0)-1&255)>63&&vr(),!((n+-1&255)>63|0==(0|t))){r[o+128>>0]=A,r[o+128+1>>0]=n,r[o+128+2>>0]=1,r[o+128+3>>0]=1,Jt(o+128+4|0),RA(o+128+8|0,0,0),s=48+(A=o+128+16|0)|0;do{i[A>>2]=0,A=A+4|0}while((0|A)<(0|s));return Le(e,o+128|0),me(o+(255&n)|0,0,128-(255&n)|0),Ae(0|o,0|t,255&n|0),$(e,o,128,0),wA(o,128),void(l=a)}vr()}function Fe(e,A){e|=0,A|=0;var t,r,n=0;r=l,t=l=l+63&-64,l=l+16|0;do{if(0!=(0|e)&&0!=(0|A)&&1024==(0|(A<<10>>>0)/(A>>>0))&&(n=0|C(12),i[e>>2]=n,0!=(0|n))){if(i[n+4>>2]=0,i[n>>2]=0,n=0|ct(t,A<<10),i[8678]=n,n)i[t>>2]=0;else if(0|(n=0|i[t>>2])){i[i[e>>2]>>2]=n,i[4+(0|i[e>>2])>>2]=n,i[8+(0|i[e>>2])>>2]=A<<10,n=0;break}m(0|i[e>>2]),i[e>>2]=0,n=-22}else n=-22}while(0);return l=r,0|n}function He(e,A,t,r,a,o){var s,f,c;return e|=0,A|=0,t|=0,r|=0,o|=0,f=l,s=l=l+63&-64,l=l+32|0,c=n[4+(a|=0)>>0]|n[a+4+1>>0]<<8|n[a+4+2>>0]<<16|n[a+4+3>>0]<<24,i[s+16>>2]=n[a>>0]|n[a+1>>0]<<8|n[a+2>>0]<<16|n[a+3>>0]<<24,i[s+16+4>>2]=c,i[s+16+8>>2]=0,i[s+16+8+4>>2]=0,RA(s,t,r),i[s+8>>2]=0,i[s+8+4>>2]=0,(A+-16|0)>>>0>48?(i[8678]=28,t=-1):t=0|function(e,A,t,r,i){return t|=0,((A|=0)-1|0)>>>0>63?t=-1:(function(e,A,t,r,i){var n,a;if(A|=0,t|=0,r|=0,i|=0,n=l,a=l=l+63&-64,l=l+368|0,(e|=0)||vr(),(t+-1&255)>63&&vr(),A)return se(a,t,A,r,i),$(a,0,0,0),H(a,e,t),void(l=n);vr()}(e|=0,t,255&A,r|=0,i|=0),t=0),0|t}(e,A,o,s,s+16|0),l=f,0|t}function Pe(e,A,t,r,a,o,s,c,h,u,g){var _;return e|=0,A|=0,t|=0,r|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0,g|=0,_=l,l=l+48|0,i[_+32>>2]=0,x(_,u,g),A=n[u+16+4>>0]|n[u+16+4+1>>0]<<8|n[u+16+4+2>>0]<<16|n[u+16+4+3>>0]<<24,i[_+32+4>>2]=n[u+16>>0]|n[u+16+1>>0]<<8|n[u+16+2>>0]<<16|n[u+16+3>>0]<<24,i[_+32+4+4>>2]=A,A=0|function(e,A,t,r,i,n,a,o,s,c){var h;e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0,o|=0,h=l,l=l+352|0,VA(h+16|0,64,0,s|=0,c|=0),Vt(h+80|0,h+16|0),wA(h+16|0,64),kt(h+80|0,n,a,o),n=0|mt(0,0,0|a,0|o),f(),kt(h+80|0,34640,15&n,0),kt(h+80|0,A,t,r),n=0|mt(0,0,0|t,0|r),f(),kt(h+80|0,34640,15&n,0),RA(h+336|0,a,o),kt(h+80|0,h+336|0,8,0),RA(h+336|0,t,r),kt(h+80|0,h+336|0,8,0),zt(h+80|0,h),wA(h+80|0,256),a=0|sr(h,i),wA(h,16);do{if(e){if(a){me(0|e,0,0|t),a=-1;break}PA(e,A,t,r,s,1,c),a=0;break}}while(0);return l=h,0|a}(e,t,r,a,o,s,c,h,_+32|0,_),wA(_,32),l=_,0|A}function Re(e,A,t,n,a,o,s){A|=0,t|=0,n|=0,a|=0,o|=0,s|=0;var f,c,h,u=0;h=l,f=l=l+63&-64,l=l+16|0,c=128+(u=e|=0)|0;do{r[u>>0]=0,u=u+1|0}while((0|u)<(0|c));do{if(!((o|n)>>>0>0|0==(o|n|0)&(a|t)>>>0>4294967295|s>>>0>2147483648)){if(o>>>0<0|0==(0|o)&a>>>0<3|s>>>0<8192){i[8678]=28,t=-1;break}WA(f,16),t=(0!=(0|Et(a,s>>>10,A,t,f,e)))<<31>>31;break}i[8678]=22,t=-1}while(0);return l=h,0|t}function xe(e,A,t,r,a,o,s,c,h,u,g,_){return e|=0,A|=0,t|=0,r|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0,g|=0,_|=0,u=l,l=l+48|0,i[u+32>>2]=0,x(u,g,_),_=n[g+16+4>>0]|n[g+16+4+1>>0]<<8|n[g+16+4+2>>0]<<16|n[g+16+4+3>>0]<<24,i[u+32+4>>2]=n[g+16>>0]|n[g+16+1>>0]<<8|n[g+16+2>>0]<<16|n[g+16+3>>0]<<24,i[u+32+4+4>>2]=_,function(e,A,t,r,n,a,o,s,c,h,u){var g;e|=0,A|=0,t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,c|=0,g=l,l=l+336|0,VA(g,64,0,h|=0,u|=0),Vt(g+64|0,g),wA(g,64),kt(g+64|0,o,s,c),o=0|mt(0,0,0|s,0|c),f(),kt(g+64|0,34640,15&o,0),PA(e,r,n,a,h,1,u),kt(g+64|0,e,n,a),h=0|mt(0,0,0|n,0|a),f(),kt(g+64|0,34640,15&h,0),RA(g+320|0,s,c),kt(g+64|0,g+320|0,8,0),RA(g+320|0,n,a),kt(g+64|0,g+320|0,8,0),zt(g+64|0,A),wA(g+64|0,256),0|t&&(i[t>>2]=16,i[t+4>>2]=0),l=g}(e,A,t,r,a,o,s,c,h,u+32|0,u),wA(u,32),l=u,0}function Ye(e,A,t,n,a){e|=0,A|=0,t|=0,n|=0,a|=0;var o=0,s=0;e:do{if(a){for(s=0|i[t>>2];;){if(s>>>0>=A>>>0){o=4;break}if((o=0|r[e+s>>0])<<24>>24!=61){if(!n){o=9;break}if(!(0|Lt(n,o<<24>>24))){o=9;break}}else a=a+-1|0;if(s=s+1|0,i[t>>2]=s,!a){a=0;break e}}if(4==(0|o)){i[8678]=68,a=-1;break}if(9==(0|o)){i[8678]=28,a=-1;break}}else a=0}while(0);return 0|a}function Ge(e,A,t,n,a,o,s){A|=0,t|=0,n|=0,a|=0,o|=0,s|=0;var f,c,h,u=0;h=l,f=l=l+63&-64,l=l+16|0,c=128+(u=e|=0)|0;do{r[u>>0]=0,u=u+1|0}while((0|u)<(0|c));do{if(!((o|n)>>>0>0|0==(o|n|0)&(a|t)>>>0>4294967295|s>>>0>2147483648)){if(0==(0|a)&0==(0|o)|s>>>0<8192){i[8678]=28,t=-1;break}WA(f,16),t=(0!=(0|yt(a,s>>>10,A,t,f,e)))<<31>>31;break}i[8678]=22,t=-1}while(0);return l=h,0|t}function Ue(e,A){var t,r,n,a,o,s,f,c,h;e|=0,h=0-(0|i[4+(A|=0)>>2])|0,c=0-(0|i[A+8>>2])|0,f=0-(0|i[A+12>>2])|0,s=0-(0|i[A+16>>2])|0,o=0-(0|i[A+20>>2])|0,a=0-(0|i[A+24>>2])|0,n=0-(0|i[A+28>>2])|0,r=0-(0|i[A+32>>2])|0,t=0-(0|i[A+36>>2])|0,i[e>>2]=0-(0|i[A>>2]),i[e+4>>2]=h,i[e+8>>2]=c,i[e+12>>2]=f,i[e+16>>2]=s,i[e+20>>2]=o,i[e+24>>2]=a,i[e+28>>2]=n,i[e+32>>2]=r,i[e+36>>2]=t}function Ne(e,A){e|=0;var t,r,n=0;if(t=l,r=l=l+63&-64,l=l+1024|0,0|i[28+(A|=0)>>2]){n=0;do{Mt(e+64|0,0),Mt(e+68|0,n),J(r,1024,e,72),xA((0|i[4+(0|i[A>>2])>>2])+((0|a(0|i[A+24>>2],n))<<10)|0,r),Mt(e+64|0,1),J(r,1024,e,72),xA((0|i[4+(0|i[A>>2])>>2])+(1+(0|a(0|i[A+24>>2],n))<<10)|0,r),n=n+1|0}while(n>>>0<(0|i[A+28>>2])>>>0)}wA(r,1024),l=t}function Le(e,A){A|=0;var t=0,i=0,a=0,o=0;!function(e){var A,t=0,i=0;i=32352,A=64+(t=e|=0)|0;do{r[t>>0]=0|r[i>>0],t=t+1|0,i=i+1|0}while((0|t)<(0|A));me(e+64|0,0,293)}(e|=0),t=0;do{o=0|LA(A+(t<<3)|0),a=0|f(),o=(n[(i=e+(t<<3)|0)>>0]|n[i+1>>0]<<8|n[i+2>>0]<<16|n[i+3>>0]<<24)^o,a=(n[i+4>>0]|n[i+4+1>>0]<<8|n[i+4+2>>0]<<16|n[i+4+3>>0]<<24)^a,r[i>>0]=o,r[i+1>>0]=o>>8,r[i+2>>0]=o>>16,r[i+3>>0]=o>>24,r[i+4>>0]=a,r[i+4+1>>0]=a>>8,r[i+4+2>>0]=a>>16,r[i+4+3>>0]=a>>24,t=t+1|0}while(8!=(0|t))}function Te(e){var A,t,r,i,a,o,c=0;return a=0|n[7+(e|=0)>>0],o=0|ot(0|n[e+6>>0],0,8),c=0|f(),i=0|ot(0|n[e+5>>0],0,16),c=0|c|f(),r=0|ot(0|n[e+4>>0],0,24),c=0|(c=0|c|f())|n[e+3>>0],t=0|ot(0|n[e+2>>0],0,40),c=0|c|f(),A=0|ot(0|n[e+1>>0],0,48),c=0|c|f(),e=0|ot(0|n[e>>0],0,56),s(0|c|f()|0),o|a|i|r|t|A|e|0}function Ke(e,A,t,r,n,a){A|=0,n|=0,a|=0;var o,s=0;return o=l,s=l=l+63&-64,l=l+16|0,QA(64+(e|=0)|0,0|(t|=0),0|(r|=0)),Bt(e,s,e+64|0,r,n,a),64==(0|i[s>>2])&0==(0|i[s+4>>2])?0|A?(s=0|St(0|r,0|n,64,0),r=0|f(),i[A>>2]=s,i[A+4>>2]=r,r=0):r=0:(0|A&&(i[A>>2]=0,i[A+4>>2]=0),me(0|e,0,r+64|0),r=-1),l=o,0|r}function Je(e,A){A|=0;var t,n=0,a=0,o=0,s=0;t=0|r[(e|=0)>>0];e:do{if((t+-48&255)<=9){for(a=t,o=0,s=e;;){if(!(o>>>0<429496730&((a=(a<<24>>24)-48|0)>>>0>~(n=10*o|0)>>>0^1))){n=0;break e}if(o=(a>>>0>~n>>>0?0:a)+n|0,((a=0|r[(n=s+1|0)>>0])-48&255)>9)break;s=n}(0|n)!=(0|e)&&(0|s)==(0|e)|t<<24>>24!=48?i[A>>2]=o:n=0}else n=0}while(0);return 0|n}function Xe(e){return((0-((0-(95^(e|=0))|0)>>>8&63^63|(0-(45^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255))|0)>>>8&255^255)&(0-(65^e)|0)>>>8|(0-(95^e)|0)>>>8&63^63|(0-(45^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255)|0}function je(e){return((0-((0-(47^(e|=0))|0)>>>8&63^63|(0-(43^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255))|0)>>>8&255^255)&(0-(65^e)|0)>>>8|(0-(47^e)|0)>>>8&63^63|(0-(43^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255)|0}function Oe(e,A){var t,r,n,a,o,s,f,c,h;e|=0,h=0|i[4+(A|=0)>>2],c=0|i[A+8>>2],f=0|i[A+12>>2],s=0|i[A+16>>2],o=0|i[A+20>>2],a=0|i[A+24>>2],n=0|i[A+28>>2],r=0|i[A+32>>2],t=0|i[A+36>>2],i[e>>2]=i[A>>2],i[e+4>>2]=h,i[e+8>>2]=c,i[e+12>>2]=f,i[e+16>>2]=s,i[e+20>>2]=o,i[e+24>>2]=a,i[e+28>>2]=n,i[e+32>>2]=r,i[e+36>>2]=t}function qe(e){e|=0;var A=0,t=0,n=0;e:do{if(3&e)for(A=e,t=e;;){if(!(0|r[t>>0]))break e;if(!(3&(A=t=t+1|0))){A=t,n=5;break}}else A=e,n=5}while(0);if(5==(0|n)){for(;!((-2139062144&(t=0|i[A>>2])^-2139062144)&t+-16843009);)A=A+4|0;if((255&t)<<24>>24)do{A=A+1|0}while(0!=(0|r[A>>0]))}return A-e|0}function ze(e,A){A|=0;var t=0;i[(e|=0)>>2]=1634760805,i[e+4>>2]=857760878,i[e+8>>2]=2036477234,i[e+12>>2]=1797285236,t=0|Tt(A),i[e+16>>2]=t,t=0|Tt(A+4|0),i[e+20>>2]=t,t=0|Tt(A+8|0),i[e+24>>2]=t,t=0|Tt(A+12|0),i[e+28>>2]=t,t=0|Tt(A+16|0),i[e+32>>2]=t,t=0|Tt(A+20|0),i[e+36>>2]=t,t=0|Tt(A+24|0),i[e+40>>2]=t,A=0|Tt(A+28|0),i[e+44>>2]=A}function Ve(e,A,t){A|=0,t|=0;var i=0;r[7+(e|=0)>>0]=A,i=0|ht(0|A,0|t,8),f(),r[e+6>>0]=i,i=0|ht(0|A,0|t,16),f(),r[e+5>>0]=i,i=0|ht(0|A,0|t,24),f(),r[e+4>>0]=i,r[e+3>>0]=t,i=0|ht(0|A,0|t,40),f(),r[e+2>>0]=i,i=0|ht(0|A,0|t,48),f(),r[e+1>>0]=i,t=0|ht(0|A,0|t,56),f(),r[e>>0]=t}function $e(e,A,t){var r,i;t|=0,r=l,i=l=l+63&-64,l=l+48|0,Qe(e|=0,40+(A|=0)|0,A),be(e+40|0,A+40|0,A),b(e+80|0,e,t+40|0),b(e+40|0,e+40|0,t),b(e+120|0,t+120|0,A+120|0),b(e,A+80|0,t+80|0),Qe(i,e,e),be(e,e+80|0,e+40|0),Qe(e+40|0,e+80|0,e+40|0),be(e+80|0,i,e+120|0),Qe(e+120|0,i,e+120|0),l=r}function We(e,A,t){var r,i;t|=0,r=l,i=l=l+63&-64,l=l+48|0,Qe(e|=0,40+(A|=0)|0,A),be(e+40|0,A+40|0,A),b(e+80|0,e,t),b(e+40|0,e+40|0,t+40|0),b(e+120|0,t+120|0,A+120|0),b(e,A+80|0,t+80|0),Qe(i,e,e),be(e,e+80|0,e+40|0),Qe(e+40|0,e+80|0,e+40|0),Qe(e+80|0,i,e+120|0),be(e+120|0,i,e+120|0),l=r}function Ze(e,A,t){var r,i;t|=0,r=l,i=l=l+63&-64,l=l+48|0,Qe(e|=0,40+(A|=0)|0,A),be(e+40|0,A+40|0,A),b(e+80|0,e,t+40|0),b(e+40|0,e+40|0,t),b(e+120|0,t+80|0,A+120|0),Qe(i,A+80|0,A+80|0),be(e,e+80|0,e+40|0),Qe(e+40|0,e+80|0,e+40|0),be(e+80|0,i,e+120|0),Qe(e+120|0,i,e+120|0),l=r}function eA(e,A,t){var r,i;t|=0,r=l,i=l=l+63&-64,l=l+48|0,Qe(e|=0,40+(A|=0)|0,A),be(e+40|0,A+40|0,A),b(e+80|0,e,t),b(e+40|0,e+40|0,t+40|0),b(e+120|0,t+80|0,A+120|0),Qe(i,A+80|0,A+80|0),be(e,e+80|0,e+40|0),Qe(e+40|0,e+80|0,e+40|0),Qe(e+80|0,i,e+120|0),be(e+120|0,i,e+120|0),l=r}function AA(e,A,t){var a,o;if(e|=0,A|=0,t|=0,a=l,o=l=l+63&-64,l=l+16|0,i[o+4>>2]=e,i[o>>2]=A,r[o+8>>0]=0,0|t){e=0;do{r[o+8>>0]=r[o+8>>0]|r[(0|i[o>>2])+e>>0]^r[(0|i[o+4>>2])+e>>0],e=e+1|0}while((0|e)!=(0|t))}return l=a,((511+(0|n[o+8>>0])|0)>>>8&1)-1|0}function tA(e,A){e|=0;var t,n,a=0;if(t=l,n=l=l+63&-64,l=l+64|0,!(((A|=0)-1&255)>63)){r[n>>0]=A,r[n+1>>0]=0,r[n+2>>0]=1,r[n+3>>0]=1,Jt(n+4|0),RA(n+8|0,0,0),a=48+(A=n+16|0)|0;do{i[A>>2]=0,A=A+4|0}while((0|A)<(0|a));return Le(e,n),void(l=t)}vr()}function rA(e,A,t){var n,a;e|=0,A|=0,t|=0,n=l,a=l=l+63&-64,l=l+16|0,i[a+8>>2]=e,i[a+4>>2]=A,i[a>>2]=0,e=0;do{i[a>>2]=i[a>>2]|255&(r[(0|i[a+4>>2])+e>>0]^r[(0|i[a+8>>2])+e>>0]),e=e+1|0}while((0|e)!=(0|t));return l=n,((511+(0|i[a>>2])|0)>>>8&1)-1|0}function iA(e,A,t){A|=0,t|=0;var i=0,a=0;i=0|r[(e|=0)>>0];e:do{if(i<<24>>24)for(;;){if(t=t+-1|0,!(i<<24>>24==(a=0|r[A>>0])<<24>>24&0!=(0|t)&a<<24>>24!=0))break e;if(A=A+1|0,!((i=0|r[(e=e+1|0)>>0])<<24>>24)){i=0;break}}else i=0}while(0);return(255&i)-(0|n[A>>0])|0}function nA(e,A){e|=0,A|=0;var t,i,n=0,o=0,s=0,f=0;for(t=l,i=l=l+63&-64,l=l+16|0,o=10;f=255&((s=A)+(0|a(A=(A>>>0)/10|0,-10))|48),r[i+(n=o+-1|0)>>0]=f,s>>>0>9&0!=(0|n);)o=n;Ae(0|e,i+n|0,0|(f=11-o|0)),r[e+f>>0]=0,l=t}function aA(e,A){var t,r;t=l,r=l=l+63&-64,l=l+48|0,v(e|=0,A|=0),v(e+80|0,A+40|0),function(e,A){e|=0;var t,r,n,a,o,s,c,h,u,g,_,I,d,l,p,B,y,C,E,b,Q,w,v,m,S,k,D,M,F,H,P,R,x,Y,G,U,N,L,T,K,J,X,j,O,q,z,V,$,W,Z,ee,Ae,te=0,re=0,ie=0,ne=0,ae=0,oe=0,se=0,fe=0,ce=0,he=0,ue=0,ge=0,_e=0,Ie=0,de=0,le=0,pe=0,Be=0,ye=0,Ce=0,Ee=0,be=0,Qe=0,we=0,ve=0,me=0,Se=0,ke=0,De=0,Me=0,Fe=0,He=0,Pe=0,Re=0,xe=0,Ye=0,Ge=0,Ue=0,Ne=0,Le=0,Te=0,Ke=0,Je=0,Xe=0,je=0,Oe=0,qe=0,ze=0,Ve=0,$e=0,We=0,Ze=0,eA=0,AA=0,tA=0,rA=0,iA=0;fe=0|i[(A|=0)>>2],de=0|i[A+4>>2],ge=0|i[A+8>>2],Ce=0|i[A+12>>2],re=0|i[A+16>>2],Ee=0|i[A+20>>2],le=0|i[A+24>>2],oe=0|i[A+28>>2],ae=0|i[A+32>>2],A=0|i[A+36>>2],Z=0|ZA(0|fe,((0|fe)<0)<<31>>31|0,0|fe,((0|fe)<0)<<31>>31|0),iA=0|f(),O=0|ZA(fe<<1|0,0|(ce=((fe<<1|0)<0)<<31>>31),0|de,((0|de)<0)<<31>>31|0),eA=0|f(),J=0|ZA(0|ge,((0|ge)<0)<<31>>31|0,fe<<1|0,0|ce),K=0|f(),G=0|ZA(0|Ce,((0|Ce)<0)<<31>>31|0,fe<<1|0,0|ce),Y=0|f(),D=0|ZA(0|re,((0|re)<0)<<31>>31|0,fe<<1|0,0|ce),Ke=0|f(),w=0|ZA(0|Ee,((0|Ee)<0)<<31>>31|0,fe<<1|0,0|ce),Ge=0|f(),B=0|ZA(0|le,((0|le)<0)<<31>>31|0,fe<<1|0,0|ce),Pe=0|f(),_=0|ZA(0|oe,((0|oe)<0)<<31>>31|0,fe<<1|0,0|ce),ke=0|f(),o=0|ZA(0|ae,((0|ae)<0)<<31>>31|0,fe<<1|0,0|ce),we=0|f(),ce=0|ZA(0|A,((0|A)<0)<<31>>31|0,fe<<1|0,0|ce),fe=0|f(),T=0|ZA(de<<1|0,0|(te=((de<<1|0)<0)<<31>>31),0|de,((0|de)<0)<<31>>31|0),$e=0|f(),x=0|ZA(de<<1|0,0|te,0|ge,((0|ge)<0)<<31>>31|0),Oe=0|f(),H=0|ZA(Ce<<1|0,0|(ie=((Ce<<1|0)<0)<<31>>31),de<<1|0,0|te),F=0|f(),S=0|ZA(0|re,((0|re)<0)<<31>>31|0,de<<1|0,0|te),m=0|f(),y=0|ZA(Ee<<1|0,((Ee<<1|0)<0)<<31>>31|0,de<<1|0,0|te),Re=0|f(),I=0|ZA(0|le,((0|le)<0)<<31>>31|0,de<<1|0,0|te),De=0|f(),s=0|ZA(oe<<1|0,((oe<<1|0)<0)<<31>>31|0,de<<1|0,0|te),ve=0|f(),he=0|ZA(0|ae,((0|ae)<0)<<31>>31|0,de<<1|0,0|te),ue=0|f(),te=0|ZA(38*A|0,0|(Ie=((38*A|0)<0)<<31>>31),de<<1|0,0|te),de=0|f(),M=0|ZA(0|ge,((0|ge)<0)<<31>>31|0,0|ge,((0|ge)<0)<<31>>31|0),Je=0|f(),v=0|ZA(ge<<1|0,((ge<<1|0)<0)<<31>>31|0,0|Ce,((0|Ce)<0)<<31>>31|0),Ue=0|f(),C=0|ZA(0|re,((0|re)<0)<<31>>31|0,ge<<1|0,((ge<<1|0)<0)<<31>>31|0),xe=0|f(),p=0|ZA(0|Ee,((0|Ee)<0)<<31>>31|0,ge<<1|0,((ge<<1|0)<0)<<31>>31|0),l=0|f(),g=0|ZA(0|le,((0|le)<0)<<31>>31|0,ge<<1|0,((ge<<1|0)<0)<<31>>31|0),u=0|f(),t=0|ZA(0|oe,((0|oe)<0)<<31>>31|0,ge<<1|0,((ge<<1|0)<0)<<31>>31|0),be=0|f(),V=0|ZA(19*ae|0,0|(He=((19*ae|0)<0)<<31>>31),ge<<1|0,((ge<<1|0)<0)<<31>>31|0),AA=0|f(),ge=0|ZA(38*A|0,0|Ie,0|ge,((0|ge)<0)<<31>>31|0),pe=0|f(),b=0|ZA(Ce<<1|0,0|ie,0|Ce,((0|Ce)<0)<<31>>31|0),E=0|f(),d=0|ZA(Ce<<1|0,0|ie,0|re,((0|re)<0)<<31>>31|0),Me=0|f(),c=0|ZA(Ee<<1|0,((Ee<<1|0)<0)<<31>>31|0,Ce<<1|0,0|ie),me=0|f(),a=0|ZA(0|le,((0|le)<0)<<31>>31|0,Ce<<1|0,0|ie),n=0|f(),$=0|ZA(38*oe|0,0|(Te=((38*oe|0)<0)<<31>>31),Ce<<1|0,0|ie),tA=0|f(),X=0|ZA(19*ae|0,0|He,Ce<<1|0,0|ie),We=0|f(),ie=0|ZA(38*A|0,0|Ie,Ce<<1|0,0|ie),Ce=0|f(),h=0|ZA(0|re,((0|re)<0)<<31>>31|0,0|re,((0|re)<0)<<31>>31|0),Se=0|f(),r=0|ZA(re<<1|0,((re<<1|0)<0)<<31>>31|0,0|Ee,((0|Ee)<0)<<31>>31|0),Qe=0|f(),W=0|ZA(19*le|0,((19*le|0)<0)<<31>>31|0,re<<1|0,((re<<1|0)<0)<<31>>31|0),rA=0|f(),j=0|ZA(38*oe|0,0|Te,0|re,((0|re)<0)<<31>>31|0),Ze=0|f(),U=0|ZA(19*ae|0,0|He,re<<1|0,((re<<1|0)<0)<<31>>31|0),qe=0|f(),re=0|ZA(38*A|0,0|Ie,0|re,((0|re)<0)<<31>>31|0),Be=0|f(),Ae=0|ZA(38*Ee|0,((38*Ee|0)<0)<<31>>31|0,0|Ee,((0|Ee)<0)<<31>>31|0),ee=0|f(),z=0|ZA(19*le|0,((19*le|0)<0)<<31>>31|0,Ee<<1|0,((Ee<<1|0)<0)<<31>>31|0),q=0|f(),N=0|ZA(38*oe|0,0|Te,Ee<<1|0,((Ee<<1|0)<0)<<31>>31|0),ze=0|f(),P=0|ZA(19*ae|0,0|He,Ee<<1|0,((Ee<<1|0)<0)<<31>>31|0),Xe=0|f(),Ee=0|ZA(38*A|0,0|Ie,Ee<<1|0,((Ee<<1|0)<0)<<31>>31|0),_e=0|f(),L=0|ZA(19*le|0,((19*le|0)<0)<<31>>31|0,0|le,((0|le)<0)<<31>>31|0),Ve=0|f(),R=0|ZA(38*oe|0,0|Te,0|le,((0|le)<0)<<31>>31|0),je=0|f(),k=0|ZA(19*ae|0,0|He,le<<1|0,((le<<1|0)<0)<<31>>31|0),Ne=0|f(),le=0|ZA(38*A|0,0|Ie,0|le,((0|le)<0)<<31>>31|0),se=0|f(),Te=0|ZA(38*oe|0,0|Te,0|oe,((0|oe)<0)<<31>>31|0),Le=0|f(),Q=0|ZA(19*ae|0,0|He,oe<<1|0,((oe<<1|0)<0)<<31>>31|0),Ye=0|f(),oe=0|ZA(38*A|0,0|Ie,oe<<1|0,((oe<<1|0)<0)<<31>>31|0),ye=0|f(),He=0|ZA(19*ae|0,0|He,0|ae,((0|ae)<0)<<31>>31|0),Fe=0|f(),ae=0|ZA(38*A|0,0|Ie,0|ae,((0|ae)<0)<<31>>31|0),ne=0|f(),A=0|ZA(38*A|0,0|Ie,0|A,((0|A)<0)<<31>>31|0),Ie=0|f(),de=0|St(0|(AA=0|St(0|(tA=0|St(0|(rA=0|St(0|(iA=0|St(0|Ae,0|ee,0|Z,0|iA)),0|f(),0|W,0|rA)),0|f(),0|$,0|tA)),0|f(),0|V,0|AA)),0|f(),0|te,0|de),te=0|f(),pe=0|St(0|(We=0|St(0|(Ze=0|St(0|(eA=0|St(0|z,0|q,0|O,0|eA)),0|f(),0|j,0|Ze)),0|f(),0|X,0|We)),0|f(),0|ge,0|pe),ge=0|f(),Ce=0|St(0|(qe=0|St(0|(ze=0|St(0|(Ve=0|St(0|($e=0|St(0|J,0|K,0|T,0|$e)),0|f(),0|L,0|Ve)),0|f(),0|N,0|ze)),0|f(),0|U,0|qe)),0|f(),0|ie,0|Ce),ie=0|f(),Be=0|St(0|(Xe=0|St(0|(je=0|St(0|(Oe=0|St(0|G,0|Y,0|x,0|Oe)),0|f(),0|R,0|je)),0|f(),0|P,0|Xe)),0|f(),0|re,0|Be),re=0|f(),_e=0|St(0|(Ne=0|St(0|(Le=0|St(0|(Ke=0|St(0|(Je=0|St(0|H,0|F,0|M,0|Je)),0|f(),0|D,0|Ke)),0|f(),0|Te,0|Le)),0|f(),0|k,0|Ne)),0|f(),0|Ee,0|_e),Ee=0|f(),se=0|St(0|(Ye=0|St(0|(Ge=0|St(0|(Ue=0|St(0|S,0|m,0|v,0|Ue)),0|f(),0|w,0|Ge)),0|f(),0|Q,0|Ye)),0|f(),0|le,0|se),le=0|f(),ye=0|St(0|(Fe=0|St(0|(Pe=0|St(0|(Re=0|St(0|(xe=0|St(0|b,0|E,0|C,0|xe)),0|f(),0|y,0|Re)),0|f(),0|B,0|Pe)),0|f(),0|He,0|Fe)),0|f(),0|oe,0|ye),oe=0|f(),ne=0|St(0|(ke=0|St(0|(De=0|St(0|(Me=0|St(0|p,0|l,0|d,0|Me)),0|f(),0|I,0|De)),0|f(),0|_,0|ke)),0|f(),0|ae,0|ne),ae=0|f(),Ie=0|St(0|(we=0|St(0|(ve=0|St(0|(me=0|St(0|(Se=0|St(0|g,0|u,0|h,0|Se)),0|f(),0|c,0|me)),0|f(),0|s,0|ve)),0|f(),0|o,0|we)),0|f(),0|A,0|Ie),A=0|f(),fe=0|St(0|(ue=0|St(0|(be=0|St(0|(Qe=0|St(0|a,0|n,0|r,0|Qe)),0|f(),0|t,0|be)),0|f(),0|he,0|ue)),0|f(),0|ce,0|fe),ce=0|f(),te=0|ot(0|de,0|te,1),de=0|f(),ge=0|ot(0|pe,0|ge,1),pe=0|f(),ie=0|ot(0|Ce,0|ie,1),Ce=0|f(),re=0|ot(0|Be,0|re,1),Be=0|f(),Ee=0|ot(0|_e,0|Ee,1),_e=0|f(),le=0|ot(0|se,0|le,1),se=0|f(),oe=0|ot(0|ye,0|oe,1),ye=0|f(),ae=0|ot(0|ne,0|ae,1),ne=0|f(),A=0|ot(0|Ie,0|A,1),Ie=0|f(),ce=0|ot(0|fe,0|ce,1),fe=0|f(),pe=0|St(0|(be=0|At(0|(ue=0|St(0|te,0|de,33554432,0)),0|(he=0|f()),26)),0|f(),0|ge,0|pe),ge=0|f(),he=0|mt(0|te,0|de,-67108864&ue|0,0|he),ue=0|f(),se=0|St(0|(be=0|At(0|(de=0|St(0|Ee,0|_e,33554432,0)),0|(te=0|f()),26)),0|f(),0|le,0|se),le=0|f(),te=0|mt(0|Ee,0|_e,-67108864&de|0,0|te),de=0|f(),Ce=0|St(0|(Ee=0|At(0|(_e=0|St(0|pe,0|ge,16777216,0)),0|f(),25)),0|f(),0|ie,0|Ce),ie=0|f(),_e=0|mt(0|pe,0|ge,-33554432&_e|0,0),ge=0|f(),ye=0|St(0|(Ee=0|At(0|(pe=0|St(0|se,0|le,16777216,0)),0|f(),25)),0|f(),0|oe,0|ye),oe=0|f(),pe=0|mt(0|se,0|le,-33554432&pe|0,0),le=0|f(),Be=0|St(0|(Ee=0|At(0|(se=0|St(0|Ce,0|ie,33554432,0)),0|f(),26)),0|f(),0|re,0|Be),re=0|f(),se=0|mt(0|Ce,0|ie,-67108864&se|0,0),f(),ne=0|St(0|(Ce=0|At(0|(ie=0|St(0|ye,0|oe,33554432,0)),0|f(),26)),0|f(),0|ae,0|ne),ae=0|f(),ie=0|mt(0|ye,0|oe,-67108864&ie|0,0),f(),de=0|St(0|(ye=0|At(0|(oe=0|St(0|Be,0|re,16777216,0)),0|f(),25)),0|f(),0|te,0|de),te=0|f(),oe=0|mt(0|Be,0|re,-33554432&oe|0,0),f(),Ie=0|St(0|(Be=0|At(0|(re=0|St(0|ne,0|ae,16777216,0)),0|f(),25)),0|f(),0|A,0|Ie),A=0|f(),re=0|mt(0|ne,0|ae,-33554432&re|0,0),f(),ne=0|St(0|pe,0|le,0|(ne=0|ht(0|(ae=0|St(0|de,0|te,33554432,0)),0|f(),26)),0|f()),f(),ae=0|mt(0|de,0|te,-67108864&ae|0,0),f(),fe=0|St(0|(de=0|At(0|(te=0|St(0|Ie,0|A,33554432,0)),0|f(),26)),0|f(),0|ce,0|fe),ce=0|f(),te=0|mt(0|Ie,0|A,-67108864&te|0,0),f(),ue=0|St(0|(Ie=0|ZA(0|(Ie=0|At(0|(A=0|St(0|fe,0|ce,16777216,0)),0|f(),25)),0|f(),19,0)),0|f(),0|he,0|ue),he=0|f(),A=0|mt(0|fe,0|ce,-33554432&A|0,0),f(),fe=0|St(0|_e,0|ge,0|(fe=0|ht(0|(ce=0|St(0|ue,0|he,33554432,0)),0|f(),26)),0|f()),f(),ce=0|mt(0|ue,0|he,-67108864&ce|0,0),f(),i[e>>2]=ce,i[e+4>>2]=fe,i[e+8>>2]=se,i[e+12>>2]=oe,i[e+16>>2]=ae,i[e+20>>2]=ne,i[e+24>>2]=ie,i[e+28>>2]=re,i[e+32>>2]=te,i[e+36>>2]=A}(e+120|0,A+80|0),Qe(e+40|0,A,A+40|0),v(r,e+40|0),Qe(e+40|0,e+80|0,e),be(e+80|0,e+80|0,e),be(e,r,e+40|0),be(e+120|0,e+120|0,e+80|0),l=t}function oA(e,A,t){var i,a;if(e|=0,A|=0,t|=0,a=l,i=l=l+63&-64,l=l+16|0,r[i>>0]=0,0|function(e,A,t){e|=0,A|=0;var i,a,o=0;if(a=l,i=l=l+63&-64,l=l+336|0,0|function(e){e|=0;var A,t,i=0,a=0,o=0,s=0;A=l,t=l=l+63&-64,l=l+16|0,r[t>>0]=0,r[t+1>>0]=0,r[t+2>>0]=0,r[t+3>>0]=0,r[t+4>>0]=0,r[t+5>>0]=0,r[t+6>>0]=0,o=0;do{i=0|r[e+o>>0],a=0;do{r[(s=t+a|0)>>0]=r[s>>0]|r[33184+(a<<5)+o>>0]^i,a=a+1|0}while(7!=(0|a));o=o+1|0}while(31!=(0|o));i=127&r[e+31>>0],a=0;do{r[(s=t+a|0)>>0]=r[s>>0]|i^r[33184+(a<<5)+31>>0],a=a+1|0}while(7!=(0|a));i=0,a=0;do{a=(0|n[t+i>>0])-1|a,i=i+1|0}while(7!=(0|i));return l=A,a>>>8&1|0}(t|=0))o=-1;else{o=0;do{r[e+o>>0]=0|r[A+o>>0],o=o+1|0}while(32!=(0|o));for(r[e>>0]=-8&r[e>>0],r[e+31>>0]=63&r[e+31>>0]|64,M(i+288|0,t),vt(i+240|0),Yt(i+192|0),Oe(i+144|0,i+288|0),vt(i+96|0),o=254,A=0;t=A,W(i+240|0,i+144|0,t^=A=(0|n[e+(o>>>3)>>0])>>>(7&o)&1),W(i+192|0,i+96|0,t),be(i+48|0,i+144|0,i+96|0),be(i,i+240|0,i+192|0),Qe(i+240|0,i+240|0,i+192|0),Qe(i+192|0,i+144|0,i+96|0),b(i+96|0,i+48|0,i+240|0),b(i+192|0,i+192|0,i),v(i+48|0,i),v(i,i+240|0),Qe(i+144|0,i+96|0,i+192|0),be(i+192|0,i+96|0,i+192|0),b(i+240|0,i,i+48|0),be(i,i,i+48|0),v(i+192|0,i+192|0),F(i+96|0,i),v(i+144|0,i+144|0),Qe(i+48|0,i+48|0,i+96|0),b(i+96|0,i+288|0,i+192|0),b(i+192|0,i,i+48|0),o;)o=o+-1|0;W(i+240|0,i+144|0,A),W(i+192|0,i+96|0,A),q(i+192|0,i+192|0),b(i+240|0,i+240|0,i+192|0),te(e,i+240|0),o=0}return l=a,0|o}(e,A,t))A=-1;else{A=0;do{r[i>>0]=r[i>>0]|r[e+A>>0],A=A+1|0}while(32!=(0|A));A=0-((511+(0|n[i>>0])|0)>>>8&1)|0}return l=a,0|A}function sA(e,A,t,r,i,n,a){e|=0,A|=0,i|=0,n|=0,a|=0;var o,s=0;s=0|mt(0,1,0|(s=0|ht(0|(s=0|St(0|(t|=0),0|(r|=0),63,0)),0|f(),6)),0|f()),(o=0|f())>>>0<0|0==(0|o)&s>>>0>>0?vr():PA(e,A,t,r,i,n,a)}function fA(e,A,t,r,i,n,a){var o,s;e|=0,A|=0,i|=0,a|=0,o=l,s=l=l+63&-64,l=l+80|0,0==(0|(t|=0))&0==(0|(r|=0))||(Mt(s+64|0,n|=0),ze(s,a),mA(s,i,s+64|0),k(s,A,e,t,r),wA(s,64)),l=o}function cA(e,A,t){var i,n;e|=0,i=l,n=l=l+63&-64,l=l+160|0,FA(A|=0,t|=0,32,0),r[A>>0]=-8&r[A>>0],r[A+31>>0]=63&r[A+31>>0]|64,ne(n,A),uA(e,n),QA(0|A,0|t,32),QA(A+32|0,0|e,32),l=i}function hA(e,A,t,r){e|=0,A|=0,t|=0,r|=0;e:do{if(r>>>0>0|0==(0|r)&t>>>0>4294967295)i[8678]=22,t=-1;else{switch(0|rr(e,A,t)){case 0:t=0;break e;case-35:i[8678]=28}t=-1}}while(0);return 0|t}function uA(e,A){var t,i;e|=0,t=l,i=l=l+63&-64,l=l+144|0,q(i+96|0,80+(A|=0)|0),b(i+48|0,A,i+96|0),b(i,A+40|0,i+96|0),te(e,i),A=(0|ut(i+48|0))<<7,r[e+31>>0]=A^(0|n[e+31>>0]),l=t}function gA(e,A,t,r){e|=0,A|=0,t|=0,r|=0;e:do{if(r>>>0>0|0==(0|r)&t>>>0>4294967295)i[8678]=22,t=-1;else{switch(0|ir(e,A,t)){case 0:t=0;break e;case-35:i[8678]=28}t=-1}}while(0);return 0|t}function _A(e,A,t,r,i,n,a,o){var s;return e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,s=l,l=l+32|0,0|Ut(s,a|=0,o|=0)?r=-1:(r=0|at(e,A,t,r,i,n,s),wA(s,32)),l=s,0|r}function IA(e,A,t,r,i,n,a,o){var s;return e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,s=l,l=l+32|0,0|Ut(s,a|=0,o|=0)?r=-1:(st(e,A,t,r,i,n,s),wA(s,32),r=0),l=s,0|r}function dA(e){e|=0;var A=0,t=0,i=0,n=0,a=0;for(n=0,a=32,A=1;n=(255&(t=0|r[e+(a=a+-1|0)>>0]))-(255&(i=0|r[32320+a>>0]))>>8&(A&=255)|255&n,a;)A&=(65535+(255&(i^t))|0)>>>8;return 0!=(0|n)|0}function lA(e,A,t,r){return r=0|St(0|St(0|(t|=0),0|(r|=0),0|(e|=0),0|(A|=0)),0|f(),0|(r=0|ZA(-2&(r=0|ot(0|e,0|A,1))|0,1&(0|f())|0,0|t,0)),0|f()),s(0|f()),0|r}function pA(e,A,t,r){e|=0,A|=0,t|=0,r|=0;do{if(!(t>>>0>64|(r+-1|0)>>>0>63)){if(0==(0|A)|0==(0|t)){tA(e,255&r),A=0;break}Me(e,255&r,A,255&t),A=0;break}A=-1}while(0);return 0|A}function BA(e){var A,t,r,i=0;return t=0|n[(e|=0)>>0],r=0|ot(0|n[e+1>>0],0,8),i=0|f(),A=0|ot(0|n[e+2>>0],0,16),i=0|i|f(),e=0|ot(0|n[e+3>>0],0,24),s(0|i|f()|0),r|t|A|e|0}function yA(e,A){e|=0,A|=0;var t,i,a=0;t=l,i=l=l+63&-64,l=l+16|0,r[i>>0]=0,a=0;do{r[i>>0]=r[i>>0]|r[e+a>>0],a=a+1|0}while((0|a)!=(0|A));return l=t,(511+(0|n[i>>0])|0)>>>8&1|0}function CA(e,A,t){e|=0,A|=0;var r=0;(t|=0)?(r=0|Tt(t),i[e+48>>2]=r,t=0|Tt(t+4|0)):(i[e+48>>2]=0,t=0),i[e+52>>2]=t,r=0|Tt(A),i[e+56>>2]=r,r=0|Tt(A+4|0),i[e+60>>2]=r}function EA(e,A,t){var r,i;e|=0,A|=0,t|=0,r=l,i=l=l+63&-64,l=l+384|0,Rt(i,0,0,24),Ft(i,A,32,0),Ft(i,t,32,0),Kt(i,e,24),l=r}function bA(e,A,t,r,i,n,a){return A|=0,i|=0,n|=0,a|=0,0|((r|=0)>>>0<0|0==(0|r)&(t|=0)>>>0<16?-1:0|_A(e|=0,A+16|0,A,t=0|St(0|t,0|r,-16,-1),0|f(),i,n,a))}function QA(e,A,t){var i=0;if((0|(A|=0))<(0|(e|=0))&(0|e)<(A+(t|=0)|0)){for(i=e,A=A+t|0,e=e+t|0;(0|t)>0;)A=A-1|0,t=t-1|0,r[(e=e-1|0)>>0]=0|r[A>>0];e=i}else Ae(e,A,t);return 0|e}function wA(e,A){var t,n;if(e|=0,A|=0,t=l,n=l=l+63&-64,l=l+16|0,i[n>>2]=e,0|A){e=0;do{r[(0|i[n>>2])+e>>0]=0,e=e+1|0}while((0|e)!=(0|A))}l=t}function vA(e,A){e|=0,A|=0;var t=0,r=0,n=0,a=0;t=0;do{a=A+(t<<3)|0,n=i[4+(r=e+(t<<3)|0)>>2]^i[a+4>>2],i[r>>2]=i[r>>2]^i[a>>2],i[r+4>>2]=n,t=t+1|0}while(128!=(0|t))}function mA(e,A,t){e|=0,A|=0,t=(t|=0)?0|Tt(t):0,i[e+48>>2]=t,t=0|Tt(A),i[e+52>>2]=t,t=0|Tt(A+4|0),i[e+56>>2]=t,A=0|Tt(A+8|0),i[e+60>>2]=A}function SA(e,A){var t,i;A|=0,i=l,l=l+64|0,function(e,A){var t;A|=0,t=l,l=l+64|0,TA(e|=0,t),R(e+208|0,t,64,0),TA(e+208|0,A),wA(t,64),l=t}(e|=0,i),e=i,t=A+32|0;do{r[A>>0]=0|r[e>>0],A=A+1|0,e=e+1|0}while((0|A)<(0|t));l=i}function kA(e){var A;return e|=0,((A=0|i[8808])+e|0)>>>0>(0|g())>>>0&&0==(0|I(A+e|0))?(i[8678]=48,0|(e=-1)):(i[8808]=A+e,0|(e=A))}function DA(e,A,t,r,i){var n;e|=0,A|=0,t|=0,r|=0,n=l,l=l+416|0,function(e,A){Ee(e|=0,A|=0)}(n,i|=0),function(e,A,t,r){xt(e|=0,A|=0,t|=0,r|=0)}(n,A,t,r),SA(n,e),l=n}function MA(e){var A,t=0;i[64+(e|=0)>>2]=0,i[e+64+4>>2]=0,i[e+64+8>>2]=0,i[e+64+12>>2]=0,t=32352,A=e+64|0;do{i[e>>2]=i[t>>2],e=e+4|0,t=t+4|0}while((0|e)<(0|A))}function FA(e,A,t,r){var i,n;e|=0,A|=0,t|=0,r|=0,i=l,n=l=l+63&-64,l=l+208|0,MA(n),R(n,A,t,r),TA(n,e),l=i}function HA(e,A,t){e|=0,A|=0;var r=0,n=0;if((t|=0)>>>3|0){r=0;do{Ve(e+(r<<3)|0,0|i[(n=A+(r<<3)|0)>>2],0|i[n+4>>2]),r=r+1|0}while((0|r)!=(t>>>3|0))}}function PA(e,A,t,r,i,n,a){e|=0,A|=0,i|=0,n|=0,a|=0,(r|=0)>>>0>0|0==(0|r)&(t|=0)>>>0>4294967295?vr():fA(e,A,t,r,i,n,a)}function RA(e,A,t){A|=0,t|=0,r[(e|=0)>>0]=A,r[e+1>>0]=A>>8,r[e+2>>0]=A>>16,r[e+3>>0]=A>>24,r[e+4>>0]=t,r[e+4+1>>0]=t>>8,r[e+4+2>>0]=t>>16,r[e+4+3>>0]=t>>24}function xA(e,A){e|=0,A|=0;var t=0,r=0,n=0,a=0;t=0;do{a=0|LA(A+(t<<3)|0),n=0|f(),i[(r=e+(t<<3)|0)>>2]=a,i[r+4>>2]=n,t=t+1|0}while(128!=(0|t))}function YA(e,A,t,r,i,n,a){return e|=0,A|=0,i|=0,n|=0,a|=0,(r|=0)>>>0>0|0==(0|r)&(t|=0)>>>0>4294967279?(vr(),0):0|IA(e+16|0,e,A,t,r,i,n,a)}function GA(e){return(0-(62^(e|=0))|0)>>>8&45^45|(e+65510|0)>>>8&255&e+65|(0-(63^e)|0)>>>8&95^95|(e+65484|0)>>>8&e+71&((e+65510|0)>>>8&255^255)|(e+65474|0)>>>8&e+252&((e+65484|0)>>>8&255^255)|0}function UA(e){return(0-(62^(e|=0))|0)>>>8&43^43|(e+65510|0)>>>8&255&e+65|(0-(63^e)|0)>>>8&47^47|(e+65484|0)>>>8&e+71&((e+65510|0)>>>8&255^255)|(e+65474|0)>>>8&e+252&((e+65484|0)>>>8&255^255)|0}function NA(e,A,t,r,i,n,a){return r|=0,((A|=0)-1|0)>>>0>63|(a|=0)>>>0>64?r=-1:(function(e,A,t,r,i,n,a){var o,s;e|=0,t|=0,r|=0,a|=0,o=l,s=l=l+63&-64,l=l+368|0,0==(0|(A|=0))&(0!=(0|(i|=0))|0!=(0|(n|=0)))&&vr(),e||vr(),(r+-1&255)>63&&vr(),0!=(0|t)|a<<24>>24==0||vr(),(255&a)>64&&vr(),a<<24>>24?Me(s,r,t,a):tA(s,r),$(s,A,i,n),H(s,e,r),l=o}(e|=0,t|=0,n|=0,255&A,r,i|=0,255&a),r=0),0|r}function LA(e){var A;return A=n[(e|=0)>>0]|n[e+1>>0]<<8|n[e+2>>0]<<16|n[e+3>>0]<<24,s(n[e+4>>0]|n[e+4+1>>0]<<8|n[e+4+2>>0]<<16|n[e+4+3>>0]<<24|0),0|A}function TA(e,A){var t,r;A|=0,t=l,r=l=l+63&-64,l=l+704|0,function(e,A){A|=0;var t=0,r=0;if(t=0|ht(0|i[72+(e|=0)>>2],0|i[e+72+4>>2],3),f(),(127&t)>>>0<112)112-(127&t)|0&&Ae(e+80+(127&t)|0,33056,112-(127&t)|0);else{128-(127&t)|0&&Ae(e+80+(127&t)|0,33056,128-(127&t)|0),y(e,e+80|0,A,A+640|0),r=112+(t=e+80|0)|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|r))}HA(e+192|0,e+64|0,16),y(e,e+80|0,A,A+640|0)}(e|=0,r),HA(A,e,64),wA(r,704),wA(e,208),l=t}function KA(e,A,t,r,i,n){e|=0,A|=0,i|=0,n|=0,(r|=0)>>>0>0|0==(0|r)&(t|=0)>>>0>4294967295?vr():function(e,A,t,r,i,n,a,o){var s,f;e|=0,A|=0,i|=0,o|=0,s=l,f=l=l+63&-64,l=l+80|0,0==(0|(t|=0))&0==(0|(r|=0))||(Mt(f+64|0,1),Mt(f+64+4|0,0),ze(f,o),CA(f,i,f+64|0),k(f,A,e,t,r),wA(f,64)),l=s}(e,A,t,r,i,0,0,n)}function JA(e){var A=0,t=0;A=127&r[31+(e|=0)>>0]^127,t=30;do{A|=~r[e+t>>0],t=t+-1|0}while(0!=(0|t));return(236-(0|n[e>>0])&511+(255&A))>>>8&1^1|0}function XA(e,A,t,r,i){e|=0,r|=0,i|=0,(t|=0)>>>0>0|0==(0|t)&(A|=0)>>>0>4294967295?vr():VA(e,A,t,r,i)}function jA(e,A,t){var r,i;return r=0|ht(0|(e|=0),0|(A|=0),0|(t|=0)),i=0|f(),t=0|ot(0|e,0|A,64-t|0),s(0|f()|i|0),t|r|0}function OA(e,A,t){var r,i;return r=0|ot(0|(e|=0),0|(A|=0),0|(t|=0)),i=0|f(),t=0|ht(0|e,0|A,64-t|0),s(0|f()|i|0),t|r|0}function qA(e,A,t,r){var n;return n=l,l=l+16|0,function(e,A,t,r,n){e|=0,t|=0,r|=0,n|=0;var a=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0;if(!(A|=0))return r?n?(i[n>>2]=0|e,i[n+4>>2]=0&A,n=0,0|(s(0|(r=0)),n)):(n=0,0|(s(0|(r=0)),n)):(0|n&&(i[n>>2]=(e>>>0)%(t>>>0),i[n+4>>2]=0),n=(e>>>0)/(t>>>0)>>>0,0|(s(0|(r=0)),n));do{if(t){if(0|r){if((c=(0|o(0|r))-(0|o(0|A))|0)>>>0<=31){d=c+1|0,h=e>>>((c+1|0)>>>0)&c-31>>31|A<<31-c,I=A>>>((c+1|0)>>>0)&c-31>>31,a=0,c=e<<31-c;break}return n?(i[n>>2]=0|e,i[n+4>>2]=A|0&A,n=0,0|(s(0|(r=0)),n)):(n=0,0|(s(0|(r=0)),n))}if(t-1&t|0){d=c=33+(0|o(0|t))-(0|o(0|A))|0,h=32-c-1>>31&A>>>((c-32|0)>>>0)|(A<<32-c|e>>>(c>>>0))&c-32>>31,I=c-32>>31&A>>>(c>>>0),a=e<<64-c&32-c>>31,c=(A<<64-c|e>>>((c-32|0)>>>0))&32-c>>31|e<<32-c&c-33>>31;break}return 0|n&&(i[n>>2]=t-1&e,i[n+4>>2]=0),1==(0|t)?(n=0|e,0|(s(0|(r=A|0&A)),n)):(r=A>>>((n=0|ar(0|t))>>>0)|0,n=A<<32-n|e>>>(n>>>0)|0,0|(s(0|r),n))}if(!r)return 0|n&&(i[n>>2]=(A>>>0)%(t>>>0),i[n+4>>2]=0),n=(A>>>0)/(t>>>0)>>>0,0|(s(0|(r=0)),n);if(!e)return 0|n&&(i[n>>2]=0,i[n+4>>2]=(A>>>0)%(r>>>0)),n=(A>>>0)/(r>>>0)>>>0,0|(s(0|(t=0)),n);if(!(r-1&r))return 0|n&&(i[n>>2]=0|e,i[n+4>>2]=r-1&A|0&A),t=0,n=A>>>((0|ar(0|r))>>>0),0|(s(0|t),n);if((c=(0|o(0|r))-(0|o(0|A))|0)>>>0<=30){d=c+1|0,h=A<<31-c|e>>>((c+1|0)>>>0),I=A>>>((c+1|0)>>>0),a=0,c=e<<31-c;break}return n?(i[n>>2]=0|e,i[n+4>>2]=A|0&A,n=0,0|(s(0|(r=0)),n)):(n=0,0|(s(0|(r=0)),n))}while(0);if(d){g=0|St(0|t,r|0&r|0,-1,-1),_=0|f(),u=c,A=I,e=d,c=0;do{p=u,u=a>>>31|u<<1,a=c|a<<1,mt(0|g,0|_,0|(p=h<<1|p>>>31|0),0|(l=h>>>31|A<<1|0)),c=1&(I=(d=0|f())>>31|((0|d)<0?-1:0)<<1),h=0|mt(0|p,0|l,I&(0|t)|0,(((0|d)<0?-1:0)>>31|((0|d)<0?-1:0)<<1)&(r|0&r)|0),A=0|f(),e=e-1|0}while(0!=(0|e));e=0}else u=c,A=I,e=0,c=0;0|n&&(i[n>>2]=h,i[n+4>>2]=A),p=-2&(a<<1|0)|c,s(0|(l=(0|a)>>>31|u<<1|0&(0|a>>>31)|e))}(e|=0,A|=0,t|=0,r|=0,0|n),l=n,0|(s(0|i[n+4>>2]),0|i[n>>2])}function zA(e){e|=0;var A=0,t=0,i=0;for(A=1,t=0;A=A+(0|n[(i=e+t|0)>>0])|0,r[i>>0]=A,4!=(0|(t=t+1|0));)A>>>=8}function VA(e,A,t,r,i){e|=0,r|=0,i|=0,(t|=0)>>>0>0|0==(0|t)&(A|=0)>>>0>4294967295?vr():function(e,A,t,r,i){var n,a;e|=0,r|=0,n=l,a=l=l+63&-64,l=l+64|0,0==(0|(A|=0))&0==(0|(t|=0))||(ze(a,i|=0),mA(a,r,0),me(0|e,0,0|A),k(a,e,e,A,t),wA(a,64)),l=n}(e,A,t,r,i)}function $A(e,A,t){var r;return e|=0,t|=0,A=0|ot(255&(A|=0)|0,0,8),r=0|f(),t=0|ot(255&t|0,0,16),s(0|r|f()|0),A|255&e|t|0}function WA(e,A){e|=0;var t=0,i=0;if(0|(A|=0)){t=0;do{i=255&(0|_r()),r[e+t>>0]=i,t=t+1|0}while((0|t)!=(0|A))}}function ZA(e,A,t,r){var i,n;return A|=0,r|=0,i=0|function(e,A){var t,r,i;return i=((t=0|a(65535&(A|=0),65535&(e|=0)))>>>16)+(0|a(65535&A,e>>>16))|0,r=0|a(A>>>16,65535&e),0|(s((i>>>16)+(0|a(A>>>16,e>>>16))+(((65535&i)+r|0)>>>16)|0),i+r<<16|65535&t|0)}(e|=0,t|=0),n=0|f(),0|(s((0|a(A,t))+(0|a(r,e))+n|0&n|0),0|i)}function et(e,A){b(e|=0,A|=0,A+120|0),b(e+40|0,A+40|0,A+80|0),b(e+80|0,A+80|0,A+120|0),b(e+120|0,A,A+40|0)}function At(e,A,t){return e|=0,A|=0,(0|(t|=0))<32?(s(A>>t|0),e>>>t|(A&(1<>t-32|0)}function tt(e,A){Qe(e|=0,40+(A|=0)|0,A),be(e+40|0,A+40|0,A),Oe(e+80|0,A+80|0),b(e+120|0,A+120|0,112)}function rt(e,A){var t,r;e|=0,t=l,r=l=l+63&-64,l=l+128|0,function(e,A){Oe(e|=0,A|=0),Oe(e+40|0,A+40|0),Oe(e+80|0,A+80|0)}(r,A|=0),aA(e,r),l=t}function it(e){var A,t;return A=l,t=l=l+63&-64,l=l+32|0,te(t,e|=0),e=0|yA(t,32),l=A,0|e}function nt(e,A){e|=0,A|=0;var t=0,i=0;t=0;do{r[(i=e+t|0)>>0]=r[i>>0]^r[A+t>>0],t=t+1|0}while(8!=(0|t))}function at(e,A,t,r,i,n,a){return 0|ee(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0)}function ot(e,A,t){return e|=0,(0|(t|=0))<32?(s((A|=0)<>>32-t|0),e<>>0<256?0|H(e|=0,A|=0,255&t):(c(33547,33567,107,33620),0)}function ct(e,A){e|=0;var t=0;return(A|=0)>>>0<=4294967168&&0!=(0|(t=0|function(e){var A,t=0,r=0,n=0,a=0;if((e|=0)>>>0>=4294967168)return i[8678]=48,0;if(!(r=0|C(76+(A=e>>>0<11?16:e+11&-8)|0)))return 0;do{if(63&r){if(t=(n=((r+63&-64)-8-(r+-8)|0)>>>0>15?(r+63&-64)-8|0:56+(r+63&-64)|0)-(r+-8)|0,3&(e=0|i[r+-4>>2])){i[n+4>>2]=(-8&e)-t|1&i[n+4>>2]|2,i[n+((-8&e)-t)+4>>2]=1|i[n+((-8&e)-t)+4>>2],i[r+-4>>2]=t|1&i[r+-4>>2]|2,i[n+4>>2]=1|i[n+4>>2],S(r+-8|0,t),a=n,e=n;break}i[n>>2]=(0|i[r+-8>>2])+t,i[n+4>>2]=(-8&e)-t,a=n,e=n;break}a=r+-8|0,e=r+-8|0}while(0);return 3&(e=0|i[(t=e+4|0)>>2])|0&&(-8&e)>>>0>(A+16|0)>>>0&&(n=a+A|0,i[t>>2]=A|1&e|2,i[n+4>>2]=(-8&e)-A|3,i[(r=a+(-8&e)+4|0)>>2]=1|i[r>>2],S(n,(-8&e)-A|0)),0|a+8}(A)))?(i[e>>2]=t,A=0):A=48,0|A}function ht(e,A,t){return e|=0,A|=0,(0|(t|=0))<32?(s(A>>>t|0),e>>>t|(A&(1<>>t-32|0)}function ut(e){var A,t;return t=l,A=l=l+63&-64,l=l+32|0,te(A,e|=0),l=t,1&r[A>>0]|0}function gt(e,A,t){ue(e|=0,A|=0,255&(t|=0)),ue(e+40|0,A+40|0,255&t),ue(e+80|0,A+80|0,255&t)}function _t(e,A,t,r,i,n,a){return 0|NA(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0)}function It(e,A,t,r,i,n,a){return 0|ce(e|=0,A|=0,1,t|=0,r|=0,i|=0,16,n|=0,a|=0,0,0,2)}function dt(e,A,t,r,i,n,a){return 0|ce(e|=0,A|=0,1,t|=0,r|=0,i|=0,16,n|=0,a|=0,0,0,1)}function lt(e,A){(function(e,A){e|=0,0|(A|=0)&&(0|(A=0|i[e>>2])&&wA(0|i[A+4>>2],i[e+16>>2]<<10),0|(A=0|i[e+4>>2])&&wA(A,i[e+20>>2]<<3))})(e|=0,4&(A|=0)),m(0|i[e+4>>2]),i[e+4>>2]=0,function(e){var A=0;0|(e|=0)&&0|(A=0|i[e>>2])&&m(A),m(e)}(0|i[e>>2]),i[e>>2]=0}function pt(e,A){b(e|=0,A|=0,A+120|0),b(e+40|0,A+40|0,A+80|0),b(e+80|0,A+80|0,A+120|0)}function Bt(e,A,t,r,i,n){le(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,0)}function yt(e,A,t,r,i,n){return 0|ce(e|=0,A|=0,1,t|=0,r|=0,i|=0,16,0,32,n|=0,128,2)}function Ct(e,A,t,r,i,n){j(e|=0,A|=0,t|=0,r|=0,i|=0,1,0,n|=0)}function Et(e,A,t,r,i,n){return 0|ce(e|=0,A|=0,1,t|=0,r|=0,i|=0,16,0,32,n|=0,128,1)}function bt(e,A,t,r,i){return 0|Ce(e|=0,A|=0,t|=0,r|=0,i|=0,0)}function Qt(e,A,t,r,i,n){j(e|=0,A|=0,t|=0,r|=0,i|=0,0,0,n|=0)}function wt(e){r[32+(e|=0)>>0]=1,r[e+32+1>>0]=0,r[e+32+2>>0]=0,r[e+32+3>>0]=0}function vt(e){var A;i[(e|=0)>>2]=1,A=36+(e=e+4|0)|0;do{i[e>>2]=0,e=e+4|0}while((0|e)<(0|A))}function mt(e,A,t,r){return 0|(s(0|(r=(A|=0)-(r|=0)-((t|=0)>>>0>(e|=0)>>>0|0)>>>0)),e-t>>>0|0)}function St(e,A,t,r){return 0|(s((A|=0)+(r|=0)+((e|=0)+(t|=0)>>>0>>>0>>0|0)>>>0|0),e+t>>>0|0)}function kt(e,A,t,r){!function(e,A,t,r){L(e|=0,A|=0,t|=0,r|=0)}(e|=0,A|=0,t|=0,r|=0)}function Dt(e,A){A|=0,MA(e|=0),0|A&&R(e,33408,34,0)}function Mt(e,A){A|=0,r[(e|=0)>>0]=A,r[e+1>>0]=A>>8,r[e+2>>0]=A>>16,r[e+3>>0]=A>>24}function Ft(e,A,t,r){return Gt(e|=0,A|=0,t|=0,r|=0),0}function Ht(e,A,t,r){return 0|Be(e|=0,A|=0,t|=0,r|=0,2)}function Pt(e,A,t,r){return 0|Be(e|=0,A|=0,t|=0,r|=0,1)}function Rt(e,A,t,r){return 0|pA(e|=0,A|=0,t|=0,r|=0)}function xt(e,A,t,r){R(e|=0,A|=0,t|=0,r|=0)}function Yt(e){var A;A=40+(e|=0)|0;do{i[e>>2]=0,e=e+4|0}while((0|e)<(0|A))}function Gt(e,A,t,r){$(e|=0,A|=0,t|=0,r|=0)}function Ut(e,A,t){return 0|function(e,A,t){var r,i;return e|=0,i=l,r=l=l+63&-64,l=l+32|0,0|oA(r,t|=0,A|=0)?e=-1:(N(e,34656,r),e=0),l=i,0|e}(e|=0,A|=0,t|=0)}function Nt(e){r[(e|=0)>>0]=-8&r[e>>0],r[e+31>>0]=63&r[e+31>>0]|64}function Lt(e,A){return e=0|function(e,A){e|=0,A|=0;var t=0,n=0;e:do{if(255&A){if(3&e)do{if((n=0|r[e>>0])<<24>>24==0||n<<24>>24==(255&A)<<24>>24)break e;e=e+1|0}while(0!=(3&e|0));n=0|a(255&A,16843009),t=0|i[e>>2];A:do{if(!((-2139062144&t^-2139062144)&t+-16843009))do{if((-2139062144&(t^=n)^-2139062144)&t+-16843009|0)break A;t=0|i[(e=e+4|0)>>2]}while(!((-2139062144&t^-2139062144)&t+-16843009|0))}while(0);for(;(n=0|r[e>>0])<<24>>24!=0&&n<<24>>24!=(255&A)<<24>>24;)e=e+1|0}else e=e+(0|qe(e))|0}while(0);return 0|e}(e|=0,A|=0),0|((0|r[e>>0])==(255&A)<<24>>24?e:0)}function Tt(e){return n[(e|=0)>>0]|n[e+1>>0]<<8|n[e+2>>0]<<16|n[e+3>>0]<<24|0}function Kt(e,A,t){return 0|ft(e|=0,A|=0,t|=0)}function Jt(e){r[(e|=0)>>0]=0,r[e+1>>0]=0,r[e+2>>0]=0,r[e+3>>0]=0}function Xt(e){Yt(e|=0),vt(e+40|0),vt(e+80|0),Yt(e+120|0)}function jt(e){i[(e|=0)>>2]=0,i[e+4>>2]=0,i[e+8>>2]=0,i[e+12>>2]=0}function Ot(e,A,t){!function(e,A,t){var r,i,n;e|=0,A|=0,r=l,n=l=l+63&-64,l=l+128|0,t=((t|=0)<<24>>24)-((0-(255&(i=0|function(e){return(255&(e|=0))>>>7|0}(t)))&t<<24>>24)<<1)&255,function(e){vt(e|=0),vt(e+40|0),Yt(e+80|0)}(e),gt(e,A,0|nr(t,1)),gt(e,A+120|0,0|nr(t,2)),gt(e,A+240|0,0|nr(t,3)),gt(e,A+360|0,0|nr(t,4)),gt(e,A+480|0,0|nr(t,5)),gt(e,A+600|0,0|nr(t,6)),gt(e,A+720|0,0|nr(t,7)),gt(e,A+840|0,0|nr(t,8)),Oe(n,e+40|0),Oe(n+40|0,e),Ue(n+80|0,e+80|0),gt(e,n,i),l=r}(e|=0,1120+(960*(A|=0)|0)|0,t|=0)}function qt(e,A){return 0|function(e,A){e|=0,A|=0;var t,i,n=0;t=l,i=l=l+63&-64,l=l+208|0,n=0;do{r[e+n>>0]=0|r[A+n>>0],n=n+1|0}while(32!=(0|n));return r[e>>0]=-8&r[e>>0],r[e+31>>0]=63&r[e+31>>0]|64,ne(i+40|0,e),function(e,A,t){var r,i;e|=0,r=l,i=l=l+63&-64,l=l+96|0,Qe(i+48|0,t|=0,A|=0),be(i,t,A),q(i,i),b(e,i+48|0,i),l=r}(i,i+40+40|0,i+40+80|0),te(e,i),l=t,0}(e|=0,A|=0)}function zt(e,A){!function(e,A){O(e|=0,A|=0)}(e|=0,A|=0)}function Vt(e,A){!function(e,A){Se(e|=0,A|=0)}(e|=0,A|=0)}function $t(e,A,t){return 0|oA(e|=0,A|=0,t|=0)}function Wt(e,A){return 0|function(e,A){return e|=0,WA(A|=0,32),0|qt(e,A)}(e|=0,A|=0)}function Zt(e,A,t){!function(e,A,t,r,i){var n,a;e|=0,r|=0,n=l,a=l=l+63&-64,l=l+64|0,0==(0|(A|=0))&0==(0|(t|=0))||(ze(a,i|=0),CA(a,r,0),me(0|e,0,64),k(a,e,e,64,0),wA(a,64)),l=n}(e|=0,64,0,A|=0,t|=0)}function er(e){1!=(-7&(e|=0)|0)&&vr()}function Ar(e,A,t){!function(e,A,t){e|=0,A|=0;var r,i,n,a,o,s,f,c,h,u,g,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0,Q=0,w=0,v=0,m=0,S=0,k=0,D=0,M=0,F=0,H=0,P=0,R=0,x=0,Y=0,G=0,U=0,N=0,L=0,T=0,K=0,J=0,X=0;g=0|Tt(t|=0),o=0|Tt(t+4|0),s=0|Tt(t+8|0),f=0|Tt(t+12|0),c=0|Tt(t+16|0),h=0|Tt(t+20|0),u=0|Tt(t+24|0),r=0|Tt(t+28|0),i=0|Tt(A),n=0|Tt(A+4|0),a=0|Tt(A+8|0),t=0|Tt(A+12|0),A=0,_=1634760805,I=g,d=2036477234,l=c,p=h,B=u,y=r,C=1797285236,E=o,b=s,Q=f,w=857760878,v=i,m=n,S=a,k=t;do{T=(0|cr((H=(0|cr((x=(0|cr((U=(0|cr(_+p|0,7))^Q)+_|0,9))^S)+U|0,13))^p)+x|0,18))^_,G=(0|cr((X=(0|cr((F=(0|cr((R=(0|cr(I+w|0,7))^k)+w|0,9))^B)+R|0,13))^I)+F|0,18))^w,P=(0|cr((L=(0|cr((J=(0|cr((M=(0|cr(v+d|0,7))^y)+d|0,9))^E)+M|0,13))^v)+J|0,18))^d,D=(0|cr((Y=(0|cr((N=(0|cr((K=(0|cr(l+C|0,7))^b)+C|0,9))^m)+K|0,13))^l)+N|0,18))^C,_=(0|cr((b=(0|cr((E=(0|cr((I=(0|cr(K+T|0,7))^X)+T|0,9))^J)+I|0,13))^K)+E|0,18))^T,w=(0|cr((Q=(0|cr((m=(0|cr((v=(0|cr(G+U|0,7))^L)+G|0,9))^N)+v|0,13))^U)+m|0,18))^G,d=(0|cr((k=(0|cr((S=(0|cr((l=(0|cr(P+R|0,7))^Y)+P|0,9))^x)+l|0,13))^R)+S|0,18))^P,C=(0|cr((y=(0|cr((B=(0|cr((p=(0|cr(D+M|0,7))^H)+D|0,9))^F)+p|0,13))^M)+B|0,18))^D,A=A+2|0}while(A>>>0<20);Mt(e,_+1634760805|0),Mt(e+4|0,I+g|0),Mt(e+8|0,E+o|0),Mt(e+12|0,b+s|0),Mt(e+16|0,Q+f|0),Mt(e+20|0,w+857760878|0),Mt(e+24|0,v+i|0),Mt(e+28|0,m+n|0),Mt(e+32|0,S+a|0),Mt(e+36|0,k+t|0),Mt(e+40|0,d+2036477234|0),Mt(e+44|0,l+c|0),Mt(e+48|0,p+h|0),Mt(e+52|0,B+u|0),Mt(e+56|0,y+r|0),Mt(e+60|0,C+1797285236|0)}(e|=0,A|=0,t|=0)}function tr(e,A){return 0|qt(e|=0,A|=0)}function rr(e,A,t){return 0|ie(e|=0,A|=0,t|=0,2)}function ir(e,A,t){return 0|ie(e|=0,A|=0,t|=0,1)}function nr(e,A){return((255&((A|=0)^(e|=0)))-1|0)>>>31&255|0}function ar(e){return 0|((e|=0)?31-(0|o(e^e-1))|0:32)}function or(e,A){return 0|rA(e|=0,A|=0,32)}function sr(e,A){return 0|rA(e|=0,A|=0,16)}function fr(e,A){Ae(0|(e|=0),0|(A|=0),1024)}function cr(e,A){return(e|=0)>>>(32-(A|=0)|0)|e<>>0>0|0==(0|a)&(n|=0)>>>0>15?(a=0|de(e|=0,0,r,t=0|St(0|n,0|a,-16,-1),g=0|f(),r+n+-16|0,o,s,c,h,u),A&&(n=0==(0|a)?t:0,t=0==(0|a)?g:0,_=4)):A?(n=0,t=0,a=-1,_=4):a=-1,4==(0|_)&&(i[A>>2]=n,i[A+4>>2]=t),0|a},_crypto_aead_chacha20poly1305_decrypt_detached:de,_crypto_aead_chacha20poly1305_encrypt:function(e,A,t,r,n,a,o,s,c,h,u){return e|=0,A|=0,t|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0,(n|=0)>>>0>0|0==(0|n)&(r|=0)>>>0>4294967279&&vr(),ve(e,e+r|0,0,t,r,n,a,o,s,0,h,u),0|A&&(h=0|St(0|r,0|n,16,0),c=0|f(),i[A>>2]=h,i[A+4>>2]=c),0},_crypto_aead_chacha20poly1305_encrypt_detached:ve,_crypto_aead_chacha20poly1305_ietf_abytes:Er,_crypto_aead_chacha20poly1305_ietf_decrypt:function(e,A,t,r,n,a,o,s,c,h,u){A|=0,t|=0,r|=0,o|=0,s|=0,c|=0,h|=0,u|=0;var g=0,_=0;return(a|=0)>>>0>0|0==(0|a)&(n|=0)>>>0>15?(a=0|ae(e|=0,0,r,t=0|St(0|n,0|a,-16,-1),g=0|f(),r+n+-16|0,o,s,c,h,u),A&&(n=0==(0|a)?t:0,t=0==(0|a)?g:0,_=4)):A?(n=0,t=0,a=-1,_=4):a=-1,4==(0|_)&&(i[A>>2]=n,i[A+4>>2]=t),0|a},_crypto_aead_chacha20poly1305_ietf_decrypt_detached:ae,_crypto_aead_chacha20poly1305_ietf_encrypt:function(e,A,t,r,n,a,o,s,c,h,u){return e|=0,A|=0,t|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0,(n|=0)>>>0>0|0==(0|n)&(r|=0)>>>0>4294967279&&vr(),ge(e,e+r|0,0,t,r,n,a,o,s,0,h,u),0|A&&(h=0|St(0|r,0|n,16,0),c=0|f(),i[A>>2]=h,i[A+4>>2]=c),0},_crypto_aead_chacha20poly1305_ietf_encrypt_detached:ge,_crypto_aead_chacha20poly1305_ietf_keybytes:Qr,_crypto_aead_chacha20poly1305_ietf_keygen:ur,_crypto_aead_chacha20poly1305_ietf_messagebytes_max:Ir,_crypto_aead_chacha20poly1305_ietf_npubbytes:function(){return 12},_crypto_aead_chacha20poly1305_ietf_nsecbytes:wr,_crypto_aead_chacha20poly1305_keybytes:Qr,_crypto_aead_chacha20poly1305_keygen:ur,_crypto_aead_chacha20poly1305_messagebytes_max:Ir,_crypto_aead_chacha20poly1305_npubbytes:yr,_crypto_aead_chacha20poly1305_nsecbytes:wr,_crypto_aead_xchacha20poly1305_ietf_abytes:Er,_crypto_aead_xchacha20poly1305_ietf_decrypt:function(e,A,t,r,n,a,o,s,c,h,u){A|=0,t|=0,r|=0,o|=0,s|=0,c|=0,h|=0,u|=0;var g=0,_=0;return(a|=0)>>>0>0|0==(0|a)&(n|=0)>>>0>15?(a=0|Pe(e|=0,0,r,t=0|St(0|n,0|a,-16,-1),g=0|f(),r+n+-16|0,o,s,c,h,u),A&&(n=0==(0|a)?t:0,t=0==(0|a)?g:0,_=4)):A?(n=0,t=0,a=-1,_=4):a=-1,4==(0|_)&&(i[A>>2]=n,i[A+4>>2]=t),0|a},_crypto_aead_xchacha20poly1305_ietf_decrypt_detached:Pe,_crypto_aead_xchacha20poly1305_ietf_encrypt:function(e,A,t,r,n,a,o,s,c,h,u){return e|=0,A|=0,t|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0,(n|=0)>>>0>0|0==(0|n)&(r|=0)>>>0>4294967279&&vr(),xe(e,e+r|0,0,t,r,n,a,o,s,0,h,u),0|A&&(h=0|St(0|r,0|n,16,0),c=0|f(),i[A>>2]=h,i[A+4>>2]=c),0},_crypto_aead_xchacha20poly1305_ietf_encrypt_detached:xe,_crypto_aead_xchacha20poly1305_ietf_keybytes:Qr,_crypto_aead_xchacha20poly1305_ietf_keygen:ur,_crypto_aead_xchacha20poly1305_ietf_messagebytes_max:Ir,_crypto_aead_xchacha20poly1305_ietf_npubbytes:Cr,_crypto_aead_xchacha20poly1305_ietf_nsecbytes:wr,_crypto_auth:function(e,A,t,r,i){return DA(e|=0,A|=0,t|=0,r|=0,i|=0),0},_crypto_auth_bytes:Qr,_crypto_auth_keybytes:Qr,_crypto_auth_keygen:ur,_crypto_auth_verify:function(e,A,t,r,i){return 0|function(e,A,t,r,i){var n;return e|=0,n=l,l=l+32|0,DA(n,A|=0,t|=0,r|=0,i|=0),i=0|or(e,n),i=0|((0|n)==(0|e)?-1:i)|AA(n,e,32),l=n,0|i}(e|=0,A|=0,t|=0,r|=0,i|=0)},_crypto_box_beforenm:Ut,_crypto_box_beforenmbytes:Qr,_crypto_box_detached:IA,_crypto_box_detached_afternm:st,_crypto_box_easy:YA,_crypto_box_easy_afternm:function(e,A,t,r,i,n){return e|=0,A|=0,i|=0,n|=0,(r|=0)>>>0>0|0==(0|r)&(t|=0)>>>0>4294967279?(vr(),0):(st(e+16|0,e,A,t,r,i,n),0)},_crypto_box_keypair:Wt,_crypto_box_macbytes:Er,_crypto_box_messagebytes_max:Ir,_crypto_box_noncebytes:Cr,_crypto_box_open_detached:_A,_crypto_box_open_detached_afternm:at,_crypto_box_open_easy:bA,_crypto_box_open_easy_afternm:function(e,A,t,r,i,n){return A|=0,i|=0,n|=0,0|((r|=0)>>>0<0|0==(0|r)&(t|=0)>>>0<16?-1:0|at(e|=0,A+16|0,A,t=0|St(0|t,0|r,-16,-1),0|f(),i,n))},_crypto_box_publickeybytes:Qr,_crypto_box_seal:function(e,A,t,i,n){e|=0,A|=0,t|=0,i|=0,n|=0;var a,o=0,s=0,f=0;if(a=l,l=l+96|0,0|Wt(a+32|0,a))t=-1;else{s=a+32|0,f=(o=e)+32|0;do{r[o>>0]=0|r[s>>0],o=o+1|0,s=s+1|0}while((0|o)<(0|f));EA(a+64|0,a+32|0,n),t=0|YA(e+32|0,A,t,i,a+64|0,n,a),wA(a,32),wA(a+32|0,32),wA(a+64|0,24)}return l=a,0|t},_crypto_box_seal_open:function(e,A,t,r,i,n){var a,o;return e|=0,A|=0,i|=0,n|=0,o=l,a=l=l+63&-64,l=l+32|0,(r|=0)>>>0<0|0==(0|r)&(t|=0)>>>0<48?t=-1:(r=0|St(0|t,0|r,-32,-1),t=0|f(),EA(a,A,i),t=0|bA(e,A+32|0,r,t,a,A,n)),l=o,0|t},_crypto_box_sealbytes:function(){return 48},_crypto_box_secretkeybytes:Qr,_crypto_box_seed_keypair:function(e,A,t){return 0|function(e,A,t){e|=0,A|=0;var i,n,a=0,o=0;n=l,o=l=l+63&-64,l=l+64|0,FA(o,t|=0,32,0),a=o,i=(t=A)+32|0;do{r[t>>0]=0|r[a>>0],t=t+1|0,a=a+1|0}while((0|t)<(0|i));return wA(o,64),o=0|qt(e,A),l=n,0|o}(e|=0,A|=0,t|=0)},_crypto_box_seedbytes:Qr,_crypto_generichash:_t,_crypto_generichash_bytes:Qr,_crypto_generichash_bytes_max:br,_crypto_generichash_bytes_min:Er,_crypto_generichash_final:Kt,_crypto_generichash_init:Rt,_crypto_generichash_keybytes:Qr,_crypto_generichash_keybytes_max:br,_crypto_generichash_keybytes_min:Er,_crypto_generichash_keygen:ur,_crypto_generichash_statebytes:function(){return 384},_crypto_generichash_update:Ft,_crypto_hash:function(e,A,t,r){return FA(e|=0,A|=0,t|=0,r|=0),0},_crypto_hash_bytes:br,_crypto_kdf_bytes_max:br,_crypto_kdf_bytes_min:Er,_crypto_kdf_contextbytes:yr,_crypto_kdf_derive_from_key:function(e,A,t,r,i,n){return 0|He(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0)},_crypto_kdf_keybytes:Qr,_crypto_kdf_keygen:ur,_crypto_kx_client_session_keys:function(e,A,t,i,n){var a,o,s;if(A|=0,t|=0,i|=0,n|=0,s=l,o=l=l+63&-64,l=l+480|0,a=0==(0|(e|=0))?A:e,A=0==(0|A)?a:A,a||vr(),0|$t(o+448|0,i,n))e=-1;else{Rt(o,0,0,64),Ft(o,o+448|0,32,0),wA(o+448|0,32),Ft(o,t,32,0),Ft(o,n,32,0),Kt(o,o+384|0,64),wA(o,384),e=0;do{r[a+e>>0]=0|r[o+384+e>>0],r[A+e>>0]=0|r[o+384+(e+32)>>0],e=e+1|0}while(32!=(0|e));wA(o+384|0,64),e=0}return l=s,0|e},_crypto_kx_keypair:function(e,A){return e|=0,WA(A|=0,32),0|tr(e,A)},_crypto_kx_publickeybytes:Qr,_crypto_kx_secretkeybytes:Qr,_crypto_kx_seed_keypair:function(e,A,t){return e|=0,_t(A|=0,32,t|=0,32,0,0,0),0|tr(e,A)},_crypto_kx_seedbytes:Qr,_crypto_kx_server_session_keys:function(e,A,t,i,n){var a,o,s;if(A|=0,t|=0,i|=0,n|=0,s=l,o=l=l+63&-64,l=l+480|0,a=0==(0|(e|=0))?A:e,A=0==(0|A)?a:A,a||vr(),0|$t(o+448|0,i,n))e=-1;else{Rt(o,0,0,64),Ft(o,o+448|0,32,0),wA(o+448|0,32),Ft(o,n,32,0),Ft(o,t,32,0),Kt(o,o+384|0,64),wA(o,384),e=0;do{r[A+e>>0]=0|r[o+384+e>>0],r[a+e>>0]=0|r[o+384+(e+32)>>0],e=e+1|0}while(32!=(0|e));wA(o+384|0,64),e=0}return l=s,0|e},_crypto_kx_sessionkeybytes:Qr,_crypto_pwhash:function(e,A,t,r,n,a,o,s,f,c,h){switch(e|=0,A|=0,t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,f|=0,c|=0,0|(h|=0)){case 1:A=0|function(e,A,t,r,n,a,o,s,f,c){t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,f|=0,c|=0,me(0|(e|=0),0,0|(A|=0));do{if(!(t>>>0>0|0==(0|t)&A>>>0>4294967295)){if(t>>>0<0|0==(0|t)&A>>>0<16){i[8678]=28,A=-1;break}if((f|a)>>>0>0|0==(f|a|0)&(s|n)>>>0>4294967295|c>>>0>2147483648){i[8678]=22,A=-1;break}if(f>>>0<0|0==(0|f)&s>>>0<3|c>>>0<8192){i[8678]=28,A=-1;break}A=(0!=(0|dt(s,c>>>10,r,n,o,e,A)))<<31>>31;break}i[8678]=22,A=-1}while(0);return 0|A}(e,A,t,r,n,a,o,s,f,c);break;case 2:A=0|function(e,A,t,r,n,a,o,s,f,c){t|=0,r|=0,n|=0,a|=0,o|=0,s|=0,f|=0,c|=0,me(0|(e|=0),0,0|(A|=0));do{if(!(t>>>0>0|0==(0|t)&A>>>0>4294967295)){if(t>>>0<0|0==(0|t)&A>>>0<16){i[8678]=28,A=-1;break}if((f|a)>>>0>0|0==(f|a|0)&(s|n)>>>0>4294967295|c>>>0>2147483648){i[8678]=22,A=-1;break}if(0==(0|s)&0==(0|f)|c>>>0<8192){i[8678]=28,A=-1;break}A=(0!=(0|It(s,c>>>10,r,n,o,e,A)))<<31>>31;break}i[8678]=22,A=-1}while(0);return 0|A}(e,A,t,r,n,a,o,s,f,c);break;default:i[8678]=28,A=-1}return 0|A},_crypto_pwhash_alg_argon2i13:Br,_crypto_pwhash_alg_argon2id13:lr,_crypto_pwhash_alg_default:lr,_crypto_pwhash_bytes_max:pr,_crypto_pwhash_bytes_min:Er,_crypto_pwhash_memlimit_interactive:function(){return 67108864},_crypto_pwhash_memlimit_max:function(){return-2147483648},_crypto_pwhash_memlimit_min:function(){return 8192},_crypto_pwhash_memlimit_moderate:function(){return 268435456},_crypto_pwhash_memlimit_sensitive:function(){return 1073741824},_crypto_pwhash_opslimit_interactive:lr,_crypto_pwhash_opslimit_max:pr,_crypto_pwhash_opslimit_min:Br,_crypto_pwhash_opslimit_moderate:dr,_crypto_pwhash_opslimit_sensitive:function(){return 4},_crypto_pwhash_passwd_max:pr,_crypto_pwhash_passwd_min:wr,_crypto_pwhash_saltbytes:Er,_crypto_pwhash_str:function(e,A,t,r,i,n,a){return 0|Ge(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0)},_crypto_pwhash_str_alg:function(e,A,t,r,i,n,a,o){e|=0,A|=0,t|=0,r|=0,i|=0,n|=0,a|=0;var s=0;switch(0|(o|=0)){case 1:s=0|Re(e,A,t,r,i,n,a);break;case 2:s=0|Ge(e,A,t,r,i,n,a);break;default:vr()}return 0|s},_crypto_pwhash_str_needs_rehash:function(e,A,t,r){e|=0,A|=0,t|=0,r|=0;do{if(0|iA(e,33713,10)){if(0|iA(e,33724,9)){i[8678]=28,A=-1;break}A=0|Pt(e,A,t,r);break}A=0|Ht(e,A,t,r)}while(0);return 0|A},_crypto_pwhash_str_verify:function(e,A,t,r){e|=0,A|=0,t|=0,r|=0;do{if(0|iA(e,33713,10)){if(0|iA(e,33724,9)){i[8678]=28,t=-1;break}t=0|gA(e,A,t,r);break}t=0|hA(e,A,t,r)}while(0);return 0|t},_crypto_pwhash_strbytes:function(){return 128},_crypto_pwhash_strprefix:function(){return 33713},_crypto_scalarmult:$t,_crypto_scalarmult_base:tr,_crypto_scalarmult_bytes:Qr,_crypto_scalarmult_scalarbytes:Qr,_crypto_secretbox_detached:V,_crypto_secretbox_easy:function(e,A,t,r,i,n){return e|=0,A|=0,i|=0,n|=0,(r|=0)>>>0>0|0==(0|r)&(t|=0)>>>0>4294967279?(vr(),0):(V(e+16|0,e,A,t,r,i,n),0)},_crypto_secretbox_keybytes:Qr,_crypto_secretbox_keygen:ur,_crypto_secretbox_macbytes:Er,_crypto_secretbox_messagebytes_max:Ir,_crypto_secretbox_noncebytes:Cr,_crypto_secretbox_open_detached:ee,_crypto_secretbox_open_easy:function(e,A,t,r,i,n){return A|=0,i|=0,n|=0,0|((r|=0)>>>0<0|0==(0|r)&(t|=0)>>>0<16?-1:0|ee(e|=0,A+16|0,A,t=0|St(0|t,0|r,-16,-1),0|f(),i,n))},_crypto_secretstream_xchacha20poly1305_abytes:function(){return 17},_crypto_secretstream_xchacha20poly1305_headerbytes:Cr,_crypto_secretstream_xchacha20poly1305_init_pull:function(e,A,t){var i;return x(e|=0,A|=0,t|=0),wt(e),i=n[A+16>>0]|n[A+16+1>>0]<<8|n[A+16+2>>0]<<16|n[A+16+3>>0]<<24,t=n[A+16+4>>0]|n[A+16+4+1>>0]<<8|n[A+16+4+2>>0]<<16|n[A+16+4+3>>0]<<24,r[e+36>>0]=i,r[e+36+1>>0]=i>>8,r[e+36+2>>0]=i>>16,r[e+36+3>>0]=i>>24,r[e+36+4>>0]=t,r[e+36+4+1>>0]=t>>8,r[e+36+4+2>>0]=t>>16,r[e+36+4+3>>0]=t>>24,r[e+44>>0]=0,r[e+44+1>>0]=0,r[e+44+2>>0]=0,r[e+44+3>>0]=0,r[e+44+4>>0]=0,r[e+44+4+1>>0]=0,r[e+44+4+2>>0]=0,r[e+44+4+3>>0]=0,0},_crypto_secretstream_xchacha20poly1305_init_push:function(e,A,t){return e|=0,t|=0,WA(A|=0,24),x(e,A,t),wt(e),t=n[A+16>>0]|n[A+16+1>>0]<<8|n[A+16+2>>0]<<16|n[A+16+3>>0]<<24,A=n[A+16+4>>0]|n[A+16+4+1>>0]<<8|n[A+16+4+2>>0]<<16|n[A+16+4+3>>0]<<24,r[e+36>>0]=t,r[e+36+1>>0]=t>>8,r[e+36+2>>0]=t>>16,r[e+36+3>>0]=t>>24,r[e+36+4>>0]=A,r[e+36+4+1>>0]=A>>8,r[e+36+4+2>>0]=A>>16,r[e+36+4+3>>0]=A>>24,r[e+44>>0]=0,r[e+44+1>>0]=0,r[e+44+2>>0]=0,r[e+44+3>>0]=0,r[e+44+4>>0]=0,r[e+44+4+1>>0]=0,r[e+44+4+2>>0]=0,r[e+44+4+3>>0]=0,0},_crypto_secretstream_xchacha20poly1305_keybytes:Qr,_crypto_secretstream_xchacha20poly1305_keygen:ur,_crypto_secretstream_xchacha20poly1305_messagebytes_max:function(){return-18},_crypto_secretstream_xchacha20poly1305_pull:function(e,A,t,n,a,o,s,c,h,u){e|=0,A|=0,n|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0;var g,_,I=0,d=0,p=0;_=l,g=l=l+63&-64,l=l+352|0,0|(t|=0)&&(i[t>>2]=0,i[t+4>>2]=0),0|n&&(r[n>>0]=-1);do{if(s>>>0<0|0==(0|s)&o>>>0<17)c=-1;else{d=0|St(0|o,0|s,-17,-1),(p=0|f())>>>0>0|0==(0|p)&d>>>0>4294967278&&vr(),XA(g+16|0,64,0,e+32|0,e),Vt(g+80|0,g+16|0),wA(g+16|0,64),kt(g+80|0,c,h,u),c=0|mt(0,0,0|h,0|u),f(),kt(g+80|0,34672,15&c,0),I=64+(c=g+16|0)|0;do{i[c>>2]=0,c=c+4|0}while((0|c)<(0|I));if(r[g+16>>0]=0|r[a>>0],sA(g+16|0,g+16|0,64,0,e+32|0,1,e),c=0|r[g+16>>0],r[g+16>>0]=0|r[a>>0],kt(g+80|0,g+16|0,64,0),kt(g+80|0,a+1|0,d,p),I=0|St(0|o,0|s,15,0),f(),kt(g+80|0,34672,15&I,0),RA(g+336|0,h,u),kt(g+80|0,g+336|0,8,0),RA(g+336|0,u=0|St(0|o,0|s,47,0),0|f()),kt(g+80|0,g+336|0,8,0),zt(g+80|0,g),wA(g+80|0,256),0|AA(g,a+1+d|0,16)){wA(g,16),c=-1;break}sA(A,a+1|0,d,p,e+32|0,2,e),nt(e+36|0,g),zA(e+32|0),(0!=(2&c)||0|yA(e+32|0,4))&&_e(e),0|t&&(i[t>>2]=d,i[t+4>>2]=p),0|n?(r[n>>0]=c,c=0):c=0}}while(0);return l=_,0|c},_crypto_secretstream_xchacha20poly1305_push:function(e,A,t,n,a,o,s,c,h,u){e|=0,A|=0,n|=0,a|=0,o|=0,s|=0,c|=0,h|=0,u|=0;var g,_,I=0;_=l,I=l=l+63&-64,l=l+336|0,0|(t|=0)&&(i[t>>2]=0,i[t+4>>2]=0),o>>>0>0|0==(0|o)&a>>>0>4294967278&&vr(),XA(I,64,0,e+32|0,e),Vt(I+64|0,I),wA(I,64),kt(I+64|0,s,c,h),s=0|mt(0,0,0|c,0|h),f(),kt(I+64|0,34672,15&s,0),g=(s=I)+64|0;do{i[s>>2]=0,s=s+4|0}while((0|s)<(0|g));return r[I>>0]=u,sA(I,I,64,0,e+32|0,1,e),kt(I+64|0,I,64,0),r[A>>0]=0|r[I>>0],sA(A+1|0,n,a,o,e+32|0,2,e),kt(I+64|0,A+1|0,a,o),kt(I+64|0,34672,15&a,0),RA(I+320|0,c,h),kt(I+64|0,I+320|0,8,0),RA(I+320|0,n=0|St(0|a,0|o,64,0),0|f()),kt(I+64|0,I+320|0,8,0),zt(I+64|0,A+1+a|0),wA(I+64|0,256),nt(e+36|0,A+1+a|0),zA(e+32|0),(0!=(2&u)||0|yA(e+32|0,4))&&_e(e),0|t&&(u=0|St(0|a,0|o,17,0),I=0|f(),i[t>>2]=u,i[t+4>>2]=I),l=_,0},_crypto_secretstream_xchacha20poly1305_rekey:_e,_crypto_secretstream_xchacha20poly1305_statebytes:function(){return 52},_crypto_secretstream_xchacha20poly1305_tag_final:dr,_crypto_secretstream_xchacha20poly1305_tag_message:wr,_crypto_secretstream_xchacha20poly1305_tag_push:Br,_crypto_secretstream_xchacha20poly1305_tag_rekey:lr,_crypto_shorthash:function(e,A,t,r,i){return function(e,A,t,r,i){e|=0,A|=0,t|=0,r|=0;var a=0,o=0,s=0,c=0,h=0,u=0,g=0,_=0,I=0,d=0,l=0,p=0,B=0,y=0,C=0,E=0,b=0;if(u=0|LA(i|=0),_=0|f(),a=0|LA(i+8|0),o=0|f(),r=0|ot(0|t,0|r,56),i=0|f(),(A+t+(0-(7&t))|0)==(0|A))l=2037671283^a,s=1952801890^o,d=1886610805^u,g=1936682341^_,h=1852075885^a,c=1685025377^o,C=1852142177^u,a=1819895653^_,o=A;else for(y=2037671283^a,s=1952801890^o,l=1886610805^u,g=1936682341^_,h=1852075885^a,c=1685025377^o,o=1852142177^u,a=1819895653^_,d=A;;){if(b=(p=0|LA(d))^y,s^=B=0|f(),C=0|St(0|l,0|g,0|h,0|c),y=0|f(),u=0|OA(h,c,13),h=(0|f())^y,c=0|OA(C,y,32),y=0|f(),_=0|St(0|b,0|s,0|o,0|a),I=0|f(),y=0|St((s=0|OA(b,s,16))^_|0,0|(o=(0|f())^I),0|c,0|y),c=0|f(),o=0|OA(s^_,o,21),s=c^(0|f()),I=0|St(0|_,0|I,u^C|0,0|h),_=0|f(),h=0|OA(u^C,h,17),a=(0|f())^_,_=0|OA(I,_,32),C=0|f(),c=0|St(h^I|0,0|a,0|y,0|c),u=0|f(),a=0|OA(h^I,a,13),I=(0|f())^u,u=0|OA(c,u,32),h=0|f(),C=0|St(0|_,0|C,y^o|0,0|s),_=0|f(),h=0|St((s=0|OA(y^o,s,16))^C|0,0|(o=(0|f())^_),0|u,0|h),u=0|f(),o=0|OA(s^C,o,21),s=u^(0|f()),_=0|St(a^c|0,0|I,0|C,0|_),C=0|f(),I=0|OA(a^c,I,17),c=(0|f())^C,C=0|OA(_,C,32),a=0|f(),(0|(d=d+8|0))==(A+t+(0-(7&t))|0)){l=h^o,d=h^p,g=u^B,h=I^_,o=A+t+(0-(7&t))|0;break}y=h^o,l=h^p,g=u^B,h=I^_,o=C}switch(7&t){case 7:E=0|ot(0|n[o+6>>0],0,48),i=0|f()|i,r|=E,E=6;break;case 6:E=6;break;case 5:E=7;break;case 4:E=8;break;case 3:E=9;break;case 2:E=10;break;case 1:E=11}6==(0|E)&&(b=0|ot(0|n[o+5>>0],0,40),i=0|f()|i,r|=b,E=7),7==(0|E)&&(i=0|n[o+4>>0]|i,E=8),8==(0|E)&&(r|=b=0|ot(0|n[o+3>>0],0,24),i=0|f()|i,E=9),9==(0|E)&&(r|=b=0|ot(0|n[o+2>>0],0,16),i=0|f()|i,E=10),10==(0|E)&&(r|=b=0|ot(0|n[o+1>>0],0,8),i=0|f()|i,E=11),11==(0|E)&&(r=0|r|n[o>>0]),t=r^l,B=i^s,d=0|St(0|d,0|g,0|h,0|c),l=0|f(),p=0|OA(h,c,13),A=(0|f())^l,l=0|OA(d,l,32),E=0|f(),C=0|St(0|t,0|B,0|C,0|a),b=0|f(),E=0|St((B=0|OA(t,B,16))^C|0,0|(t=(0|f())^b),0|l,0|E),l=0|f(),t=0|OA(B^C,t,21),B=l^(0|f()),b=0|St(0|C,0|b,p^d|0,0|A),C=0|f(),A=0|OA(p^d,A,17),d=(0|f())^C,C=0|OA(b,C,32),p=0|f(),l=0|St(A^b|0,0|d,0|E,0|l),y=0|f(),d=0|OA(A^b,d,13),b=(0|f())^y,y=0|OA(l,y,32),A=0|f(),p=0|St(0|C,0|p,E^t|0,0|B),C=0|f(),A=0|St((B=0|OA(E^t,B,16))^p|0,0|(t=(0|f())^C),0|y,0|A),y=0|f(),t=0|OA(B^p,t,21),B=y^(0|f()),C=0|St(d^l|0,0|b,0|p,0|C),p=0|f(),b=0|OA(d^l,b,17),l=(0|f())^p,p=0|OA(C,p,32),d=0|f(),y=0|St(A^r|0,y^i|0,b^C|0,0|l),E=0|f(),l=0|OA(b^C,l,13),C=(0|f())^E,E=0|OA(y,E,32),b=0|f(),d=0|St(255^p|0,0|d,A^t|0,0|B),p=0|f(),b=0|St((B=0|OA(A^t,B,16))^d|0,0|(t=(0|f())^p),0|E,0|b),E=0|f(),t=0|OA(B^d,t,21),B=E^(0|f()),p=0|St(0|d,0|p,l^y|0,0|C),d=0|f(),C=0|OA(l^y,C,17),y=(0|f())^d,d=0|OA(p,d,32),l=0|f(),E=0|St(C^p|0,0|y,0|b,0|E),A=0|f(),y=0|OA(C^p,y,13),p=(0|f())^A,A=0|OA(E,A,32),C=0|f(),l=0|St(0|d,0|l,b^t|0,0|B),d=0|f(),C=0|St((B=0|OA(b^t,B,16))^l|0,0|(t=(0|f())^d),0|A,0|C),A=0|f(),t=0|OA(B^l,t,21),B=A^(0|f()),d=0|St(y^E|0,0|p,0|l,0|d),l=0|f(),p=0|OA(y^E,p,17),E=(0|f())^l,l=0|OA(d,l,32),y=0|f(),A=0|St(p^d|0,0|E,0|C,0|A),b=0|f(),E=0|OA(p^d,E,13),d=(0|f())^b,b=0|OA(A,b,32),p=0|f(),y=0|St(0|l,0|y,C^t|0,0|B),l=0|f(),p=0|St((B=0|OA(C^t,B,16))^y|0,0|(t=(0|f())^l),0|b,0|p),b=0|f(),t=0|OA(B^y,t,21),B=b^(0|f()),l=0|St(E^A|0,0|d,0|y,0|l),y=0|f(),d=0|OA(E^A,d,17),A=(0|f())^y,y=0|OA(l,y,32),E=0|f(),b=0|St(d^l|0,0|A,0|p,0|b),C=0|f(),A=0|OA(d^l,A,13),C=(0|f())^C,E=0|St(0|y,0|E,p^t|0,0|B),y=0|f(),B=0|OA((B=0|OA(p^t,B,16))^E,(0|f())^y,21),t=0|f(),y=0|St(A^b|0,0|C,0|E,0|y),E=0|f(),C=0|OA(A^b,C,17),b=0|f(),RA(e,B^y^C^(A=0|OA(y,E,32)),t^E^b^(0|f()))}(e|=0,A|=0,t|=0,r|=0,i|=0),0},_crypto_shorthash_bytes:yr,_crypto_shorthash_keybytes:Er,_crypto_shorthash_keygen:function(e){WA(e|=0,16)},_crypto_sign:function(e,A,t,r,i,n){return 0|Ke(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0)},_crypto_sign_bytes:br,_crypto_sign_detached:function(e,A,t,r,i,n){return Bt(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0),0},_crypto_sign_ed25519_pk_to_curve25519:function(e,A){var t,r;return e|=0,r=l,t=l=l+63&-64,l=l+256|0,0==(0|we(A|=0))&&0==(0|he(t+88|0,A))&&0!=(0|function(e){var A,t;return A=l,t=l=l+63&-64,l=l+160|0,z(t,e|=0),e=0|it(t),l=A,0|e}(t+88|0))?(vt(t),be(t,t,t+88+40|0),vt(t+48|0),Qe(t+48|0,t+48|0,t+88+40|0),q(t,t),b(t+48|0,t+48|0,t),te(e,t+48|0),e=0):e=-1,l=r,0|e},_crypto_sign_ed25519_sk_to_curve25519:function(e,A){var t,i,n;e|=0,i=l,n=l=l+63&-64,l=l+64|0,FA(n,A|=0,32,0),r[n>>0]=-8&r[n>>0],r[n+31>>0]=63&r[n+31>>0]|64,A=n,t=e+32|0;do{r[e>>0]=0|r[A>>0],e=e+1|0,A=A+1|0}while((0|e)<(0|t));return wA(n,64),l=i,0},_crypto_sign_final_create:function(e,A,t,r){return function(e,A,t,r){var i,n;A|=0,t|=0,r|=0,i=l,n=l=l+63&-64,l=l+64|0,TA(e|=0,n),le(A,t,n,64,0,r,1),l=i}(e|=0,A|=0,t|=0,r|=0),0},_crypto_sign_final_verify:function(e,A,t){return 0|function(e,A,t){var r,i;return A|=0,t|=0,r=l,i=l=l+63&-64,l=l+64|0,TA(e|=0,i),e=0|Ce(A,i,64,0,t,1),l=r,0|e}(e|=0,A|=0,t|=0)},_crypto_sign_init:function(e){return function(e){MA(e|=0)}(e|=0),0},_crypto_sign_keypair:function(e,A){return function(e,A){var t,r;e|=0,A|=0,t=l,r=l=l+63&-64,l=l+32|0,WA(r,32),cA(e,A,r),wA(r,32),l=t}(e|=0,A|=0),0},_crypto_sign_messagebytes_max:function(){return-65},_crypto_sign_open:function(e,A,t,r,i,n){return 0|ke(e|=0,A|=0,t|=0,r|=0,i|=0,n|=0)},_crypto_sign_publickeybytes:Qr,_crypto_sign_secretkeybytes:br,_crypto_sign_seed_keypair:function(e,A,t){return cA(e|=0,A|=0,t|=0),0},_crypto_sign_seedbytes:Qr,_crypto_sign_statebytes:function(){return 208},_crypto_sign_update:function(e,A,t,r){return xt(e|=0,A|=0,t|=0,r|=0),0},_crypto_sign_verify_detached:function(e,A,t,r,i){return 0|bt(e|=0,A|=0,t|=0,r|=0,i|=0)},_emscripten_get_sbrk_ptr:function(){return 35232},_emscripten_replace_memory:function(e){return r=new Int8Array(e),n=new Uint8Array(e),i=new Int32Array(e),t=e,!0},_free:m,_i64Add:St,_i64Subtract:mt,_malloc:C,_memcpy:Ae,_memmove:QA,_memset:me,_randombytes:function(e,A,t){(t|=0)>>>0<1|1==(0|t)&(A|=0)>>>0<0?WA(e|=0,A):c(34506,34526,197,34552)},_randombytes_buf:WA,_randombytes_buf_deterministic:function(e,A,t){XA(e|=0,A|=0,0,34494,t|=0)},_randombytes_close:wr,_randombytes_random:_r,_randombytes_seedbytes:Qr,_randombytes_stir:gr,_randombytes_uniform:function(e){var A=0;if((e|=0)>>>0<2)A=0;else{do{A=0|_r()}while(A>>>0<(((0-e|0)>>>0)%(e>>>0)|0)>>>0);A=(A>>>0)%(e>>>0)|0}return 0|A},_sodium_base642bin:G,_sodium_base64_encoded_len:function(e,A){var t;return e|=0,er(A|=0),(((e>>>0)/3|0)<<2|1)+(4-(3-(t=(0|a((e>>>0)/3|0,-3))+e|0)&0-(A>>>1&1))&0-(1&(t>>>1|t)))|0},_sodium_bin2base64:X,_sodium_bin2hex:function(e,A,t,i){e|=0,t|=0;var a=0,o=0;if((i|=0)>>>0<2147483647&i<<1>>>0<(A|=0)>>>0||vr(),i){A=0;do{o=0|n[t+A>>0],r[e+(a=A<<1)>>0]=87+(o>>>4)+((65526+(o>>>4)|0)>>>8&217),r[e+(1|a)>>0]=(22272+((15&o)<<8)+(65526+(15&o)&55552)|0)>>>8,A=A+1|0}while((0|A)!=(0|i));A=i<<1}else A=0;return r[e+A>>0]=0,0|e},_sodium_hex2bin:function(e,A,t,a,o,s,f){e|=0,A|=0,t|=0,a|=0,o|=0,s|=0,f|=0;var c=0,h=0,u=0,g=0,_=0,I=0,d=0;e:do{if(a){g=0,I=0,c=0,h=0;A:for(;;){for(;!(255&((_=(65526+(201+(223&(u=0|n[t+c>>0]))&255)^65520+(201+(223&u)&255))>>>8)|(65526+(48^u)|0)>>>8)|0);){if(!(0!=(0|o)&h<<24>>24==0)){u=0;break A}if(!(0|Lt(o,u))){h=g,d=17;break e}if(!((c=c+1|0)>>>0>>0)){h=g,d=17;break e}h=0}if(u=_&201+(223&u)|(65526+(48^u)|0)>>>8&(48^u),g>>>0>=A>>>0){d=9;break}if(h<<24>>24?(r[e+g>>0]=u|255&I,g=g+1|0,u=I):u=u<<4&255,h=~h,!((c=c+1|0)>>>0>>0)){u=0;break}I=u}if(9==(0|d)&&(i[8678]=68,u=-1),h<<24>>24){i[8678]=28,u=0,h=c+-1|0,c=-1;break}if(u){u=0,h=c,c=-1;break}h=g,d=17;break}h=0,c=0,d=17}while(0);return 17==(0|d)&&(u=h,h=c,c=0),f?i[f>>2]=t+h:(0|h)!=(0|a)&&(i[8678]=28,c=-1),0|s&&(i[s>>2]=u),0|c},_sodium_init:function(){var e=0;return 0|i[8676]?e=1:(function(){return e=l,A=l=l+63&-64,l=l+16|0,jt(A),0|i[A>>2]&&jt(A),void(l=e);var e,A}(),gr(),function(){var e=0;(0|(e=0|d(30)))>0?i[8677]=e:e=0|i[8677],e>>>0<16?vr():WA(34688,16)}(),i[8676]=1,e=0),0|e},_sodium_library_minimal:Br,_sodium_library_version_major:function(){return 10},_sodium_library_version_minor:dr,_sodium_pad:function(e,A,t,a,o){e|=0,A|=0,t|=0,o|=0;var s,f,c=0,h=0;if(f=l,s=l=l+63&-64,l=l+16|0,a|=0)if((h=a+-1-(c=a+-1&a?(t>>>0)%(a>>>0)|0:a+-1&t)|0)>>>0>=~t>>>0&&vr(),(h+t|0)>>>0>>0){0|e&&(i[e>>2]=h+t+1),r[s>>0]=0,c=0;do{e=((c^h)-1|0)>>>24,r[(o=A+(h+t)+(0-c)|0)>>0]=128&e|r[s>>0]&r[o>>0]&255,r[s>>0]=0|e|n[s>>0],c=c+1|0}while((0|c)!=(0|a));c=0}else c=-1;else c=-1;return l=f,0|c},_sodium_unpad:function(e,A,t,r){e|=0,A|=0,t|=0,r|=0;var a,o,s=0,f=0,c=0,h=0,u=0;if(o=l,a=l=l+63&-64,l=l+16|0,i[a>>2]=0,(r+-1|0)>>>0>>0){for(s=0,c=0,h=0;s&=255,f=0|n[A+(t+-1)+(0-c)>>0],u=(511+(0|i[a>>2])&s+511&511+(128^f))>>>8&1,i[a>>2]=c&0-u|i[a>>2],h=u|255&h,(0|(c=c+1|0))!=(0|r);)s|=f;i[e>>2]=t+-1-(0|i[a>>2]),s=h+-1|0}else s=-1;return l=o,0|s},_sodium_version_string:function(){return 34617},establishStackSpace:function(e,A){l=e|=0},stackAlloc:function(e){var A;return A=l,l=15+(l=l+(e|=0)|0)&-16,0|A},stackRestore:function(e){l=e|=0},stackSave:function(){return 0|l}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array},{a:q,b:function(e){C=e},c:function(){return C},d:function(e,A,t,r){q("Assertion failed: "+F(e)+", at: "+[A?F(A):"unknown filename",t,r?F(r):"unknown function"])},e:ae,f:function(){q()},g:function(e){return ee[e]()},h:ie,i:function(e,A,t){v.set(v.subarray(A,A+t),e)},j:function(e){var A=ie();if(e>2130706432)return!1;for(var t=Math.max(A,16777216);t>0]=A;break;case"i16":m[e>>1]=A;break;case"i32":S[e>>2]=A;break;case"i64":V=[A>>>0,(z=A,+L(z)>=1?z>0?(0|J(+K(z/4294967296),4294967295))>>>0:~~+T((z-+(~~z>>>0))/4294967296)>>>0:0)],S[e>>2]=V[0],S[e+4>>2]=V[1];break;case"float":k[e>>2]=A;break;case"double":D[e>>3]=A;break;default:q("invalid type for setValue: "+t)}},r.getValue=function(e,A,t){switch("*"===(A=A||"i8").charAt(A.length-1)&&(A="i32"),A){case"i1":case"i8":return w[e>>0];case"i16":return m[e>>1];case"i32":case"i64":return S[e>>2];case"float":return k[e>>2];case"double":return D[e>>3];default:q("invalid type for getValue: "+A)}return null},r.UTF8ToString=F,$)if(Z($)||(he=$,$=r.locateFile?r.locateFile(he,p):p+he),u||c){var Ie=I($);v.set(Ie,8)}else{X++,r.monitorRunDependencies&&r.monitorRunDependencies(X);var de=function(e){e.byteLength&&(e=new Uint8Array(e)),v.set(e,8),r.memoryInitializerRequest&&delete r.memoryInitializerRequest.response,function(e){if(X--,r.monitorRunDependencies&&r.monitorRunDependencies(X),0==X&&(null!==j&&(clearInterval(j),j=null),O)){var A=O;O=null,A()}}()},le=function(){_($,de,function(){throw"could not load memory initializer "+$})},pe=ce($);if(pe)de(pe.buffer);else if(r.memoryInitializerRequest){var Be=function(){var e=r.memoryInitializerRequest,A=e.response;if(200!==e.status&&0!==e.status){var t=ce(r.memoryInitializerRequestURL);if(!t)return void le();A=t.buffer}de(A)};r.memoryInitializerRequest.response?setTimeout(Be,0):r.memoryInitializerRequest.addEventListener("load",Be)}else le()}function ye(e){function A(){ue||(ue=!0,E||(x(G),x(U),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)e=r.postRun.shift(),N.unshift(e);var e;x(N)}()))}e=e||h,X>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)e=r.preRun.shift(),Y.unshift(e);var e;x(Y)}(),X>0||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),A()},1)):A()))}if(O=function e(){ue||ye(),ue||(O=e)},r.run=ye,r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();ye(),Object.keys(a).forEach(function(e){"getRandomValue"!==e&&delete a[e]}),Object.keys(r).forEach(function(e){a[e]=r[e]})};var i,n=void 0!==n?n:{},s={};for(i in n)n.hasOwnProperty(i)&&(s[i]=n[i]);var f,c,h=[],u=!1,g=!1,_=!1;u="object"==typeof window,g="function"==typeof importScripts,f="object"==typeof e&&"object"==typeof e.versions&&"string"==typeof e.versions.node,_=f&&!u&&!g,c=!u&&!_&&!g;var I,d,l,p,B="";_?(B=o+"/",I=function(e,A){var t;return(t=he(e))||(l||(l=_$empty_45({})),p||(p=_$pathBrowserify_138({})),e=p.normalize(e),t=l.readFileSync(e)),A?t:t.toString()},d=function(e){var A=I(e,!0);return A.buffer||(A=new Uint8Array(A)),m(A.buffer),A},e.argv.length>1&&e.argv[1].replace(/\\/g,"/"),h=e.argv.slice(2),_$libsodium_21.exports=n,e.on("unhandledRejection",W),n.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(I=function(e){var A=he(e);return A?fe(A):read(e)}),d=function(e){var A;return(A=he(e))?A:"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(m("object"==typeof(A=read(e,"binary"))),A)},"undefined"!=typeof scriptArgs?h=scriptArgs:void 0!==arguments&&(h=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(u||g)&&(g?B=self.location.href:document.currentScript&&(B=document.currentScript.src),B=0!==B.indexOf("blob:")?B.substr(0,B.lastIndexOf("/")+1):"",I=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.send(null),A.responseText}catch(A){var t=he(e);if(t)return fe(t);throw A}},g&&(d=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.responseType="arraybuffer",A.send(null),new Uint8Array(A.response)}catch(A){var t=he(e);if(t)return t;throw A}}));var y=n.print||void 0,C=n.printErr||void 0;for(i in s)s.hasOwnProperty(i)&&(n[i]=s[i]);s=null,n.arguments&&(h=n.arguments),n.thisProgram&&n.thisProgram,n.quit&&n.quit;var E,b,Q={"f64-rem":function(e,A){return e%A},debugger:function(){}};new Array(8),n.wasmBinary&&(E=n.wasmBinary),n.noExitRuntime&&n.noExitRuntime,"object"!=typeof WebAssembly&&C("no native wasm support detected");var w=new WebAssembly.Table({initial:0,maximum:0,element:"anyfunc"}),v=!1;function m(e,A){e||W("Assertion failed: "+A)}var S,k,D,M,F,H,P,R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function x(e,A){return e?function(e,A,t){for(var r=A+t,i=A;e[i]&&!(i>=r);)++i;if(i-A>16&&e.subarray&&R)return R.decode(e.subarray(A,i));for(var n="";A>10,56320|1023&f)}}else n+=String.fromCharCode((31&a)<<6|o)}else n+=String.fromCharCode(a)}return n}(D,e,A):""}function Y(e,A){return e%A>0&&(e+=A-e%A),e}function G(e){S=e,n.HEAP8=k=new Int8Array(e),n.HEAP16=M=new Int16Array(e),n.HEAP32=F=new Int32Array(e),n.HEAPU8=D=new Uint8Array(e),n.HEAPU16=new Uint16Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=H=new Float32Array(e),n.HEAPF64=P=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var U=n.TOTAL_MEMORY||16777216;function N(e){for(;e.length>0;){var A=e.shift();if("function"!=typeof A){var t=A.func;"number"==typeof t?void 0===A.arg?n.dynCall_v(t):n.dynCall_vi(t,A.arg):t(void 0===A.arg?null:A.arg)}else A()}}(b=n.wasmMemory?n.wasmMemory:new WebAssembly.Memory({initial:U/65536}))&&(S=b.buffer),U=S.byteLength,G(S),F[9312]=5280320;var L=[],T=[],K=[],J=[],X=Math.abs,j=Math.ceil,O=Math.floor,q=Math.min,z=0,V=null,$=null;function W(e){throw n.onAbort&&n.onAbort(e),y(e+=""),C(e),v=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}n.preloadedImages={},n.preloadedAudios={};var Z="data:application/octet-stream;base64,";function ee(e){return String.prototype.startsWith?e.startsWith(Z):0===e.indexOf(Z)}var Ae,te,re,ie="data:application/octet-stream;base64,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XQJxYwCIAgJyYwBeAnNjAIoCAnRjAIkCAnVjAIMCAnZjAEgCd2MA/AECeGMAbAJ5YwD/AQJ6YwD+AQJBYwD9AQq20ATgAhMAIABBwAAgAWuthiAAIAGtiIQLEAAgACABdCAAQSAgAWt2cgseACAAIAF8IAFC/////w+DIABCAYZC/v///x+DfnwLUAEDfwJ/IwAhBCMAQT9qQUBxJAAjACECIwBBEGokACACIAA2AgAgAQRAQQAhAANAIAAgAigCAGpBADoAACAAQQFqIgAgAUcNAAsLIAQLJAALCQAgACABNgAAC8UJAg1/KX4gAigCBCIDrCEQIAIoAggiBKwhGCACKAIMIgWsIRsgAigCECIGrCEdIAIoAhQiB6whHyACKAIYIgisISYgAigCHCIJrCEtIAIoAiAiCqwhMCABKAIEIgusISAgASgCDCIMrCEhIAEoAhQiDawhIiABKAIcIg6sISMgASgCJCIPrCEkIA9BAXSsIicgA0ETbKx+IAEoAgCsIhEgAigCAKwiEn58IAEoAiCsIhMgBEETbKwiLn58IA5BAXSsIiggBUETbKwiKX58IAEoAhisIhQgBkETbKwiJX58IA1BAXSsIiogB0ETbKwiHn58IAEoAhCsIhUgCEETbKwiHH58IAxBAXSsIisgCUETbKwiGX58IApBE2ysIhcgASgCCKwiFn58IAtBAXSsIiwgAigCJCIBQRNsrCIafnwhMSAQIBR+IBIgI358IBggIn58IBUgG358IB0gIX58IBYgH358ICAgJn58IBEgLX58IBcgJH58IBMgGn58IBAgKn4gEiAUfnwgFSAYfnwgGyArfnwgFiAdfnwgHyAsfnwgESAmfnwgGSAnfnwgEyAXfnwgGiAofnwgECAVfiASICJ+fCAYICF+fCAWIBt+fCAdICB+fCARIB9+fCAcICR+fCATIBl+fCAXICN+fCAUIBp+fCAQICt+IBIgFX58IBYgGH58IBsgLH58IBEgHX58IB4gJ358IBMgHH58IBkgKH58IBQgF358IBogKn58Ii9CgICAEHwiM0Iah3wiNEKAgIAIfCI1QhmHfCI2QoCAgBB8IjdCGod8ITIgLyAzQoCAgGCDfSASICF+IBAgFn58IBggIH58IBEgG358ICQgJX58IBMgHn58IBwgI358IBQgGX58IBcgIn58IBUgGn58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KAIAIgEEQCAEQQF0IQQgASgCBEF4cSADRg0CIAEhAAwBCwsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAILCyABKAIIIgAgAjYCDCABIAI2AgggAiAANgIIIAIgATYCDCACQQA2AhgLBUGQlwIgBCAGcjYCACAAIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggLQayXAkGslwIoAgBBf2oiADYCACAABEAPC0HUmgIhAANAIAAoAgAiAUEIaiEAIAENAAtBrJcCQX82AgALBABBIAvGAwEDfyACQYDAAE4EQCAAIAEgAhAFGiAADwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAsKACAAIAEgAhA7C5gCAQR/IAAgAmohBCABQf8BcSEDIAJBwwBOBEADQCAAQQNxBEAgACADOgAAIABBAWohAAwBCwsgA0EIdCADciADQRB0ciADQRh0ciEBIARBfHEiBUFAaiEGA0AgACAGTARAIAAgATYCACAAIAE2AgQgACABNgIIIAAgATYCDCAAIAE2AhAgACABNgIUIAAgATYCGCAAIAE2AhwgACABNgIgIAAgATYCJCAAIAE2AiggACABNgIsIAAgATYCMCAAIAE2AjQgACABNgI4IAAgATYCPCAAQUBrIQAM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ACIgQQEQByElIAZBEGpBA3QgAmogHCAhfCAifCAgQQgQByAlICBCB4iFhXwiIjcDACAdQRMQByEhIB1BPRAHICEgHUIGiIWFIRwgGSkDACEhIBQpAwAiHUEBEAchJSATQRBqQQN0IAJqICAgHCAhfHwgHUEIEAcgJSAdQgeIhYV8IiA3AwAgIkETEAchHCAiQT0QByAcICJCBoiFhSEcIAdBCWpBA3QgAmopAwAhJSAHQQFqQQN0IAJqKQMAIiJBARAHISYgB0EQakEDdCACaiAdICV8IBx8ICJBCBAHICYgIkIHiIWFfCIdNwMAICBBExAHIRwgIyAgQT0QByAcICBCBoiFhXwhHCAWKQMAIiBBARAHISUgFUEQakEDdCACaiAcICJ8ICBBCBAHICUgIEIHiIWFfCIiNwMAIB1BExAHIRwgHUE9EAcgHCAdQgaIhYUhHCAIQQlqQQN0IAJqKQMAISUgCEEBakEDdCACaikDACIdQQEQByEmIAhBEGpBA3QgAmogICAlfCAcfCAdQQgQByAmIB1CB4iFhXwiIDcDACAiQRMQByEcICJBPRAHIBwgIkIGiIWFISIgDUEJakEDdCACaikDACAifCEiIB5BARAHIRwgDUEQakEDdCACaiAdICJ8IB5BCBAHIBwgHkIHiIWFfCIdNwMAICBBExAHISIgIEE9EAcgIiAgQgaIhYUhIiAJQQlqQQN0IAJqKQMAIRwgCUEBakEDdCACaikDACIgQQEQByElIAlBEGpBA3QgAmogHCAefCAifCAgQQgQByAlICBCB4iFhXwiHjcDACAdQRMQByEiIB1BPRAHICIgHUIGiIWFIR0gDkEJakEDdCACaikDACAdfCEdIB9BARAHISIgDkEQakEDdCACaiAdICB8IB9BCBAHICIgH0IHiIWFfCIdNwMAIB5BExAHISAgHkE9EAcgICAeQgaIhYUhICAKQQlqQQN0IAJqKQMAISIgCkEBakEDdCACaikDACIeQQEQByEcIApBEGpBA3QgAmogHyAifCAgfCAeQQgQByAcIB5CB4iFhXwiHzcDACAdQRMQByEgIB1BPRAHICAgHUIGiIWFIR0gD0EJakEDdCACaikDACAdfCEdICFBARAHISAgD0EQakEDdCACaiAdIB58ICFBCBAHICAgIUIHiIWFfCIeNwMAIB9BExAHIR0gH0E9EAcgHSAfQgaIhYUhHSALQQlqQQN0IAJqKQMAISAgC0EBakEDdCACaikDACIfQQEQByEiIAtBEGpBA3QgAmogICAhfCAdfCAfQQgQByAiIB9CB4iFhXwiHzcDACAeQRMQByEhIB5BPRAHICEgHkIGiIWFIR4gEEEJakEDdCACaikDACEhICNBARAHIR0gEEEQakEDdCACaiAhICR8IB58ICNBCBAHIB0gI0IHiIWFfDcDACAfQRMQByEeIB9BPRAHIB4gH0IGiIWFIR8gDEEJakEDdCACaikDACEhIAxBAWpBA3QgAmopAwAiHkEBEAchJCAMQRBqQQN0IAJqICEgI3wgH3wgHkEIEAcgJCAeQgeIhYV8NwMAIARB0ABJBEAgBCEBDAILCwtBACEBA0AgAUEDdCAAaiICIAFBA3QgA2opAwAgAikDAHw3AwAgAUEBaiIBQQhHDQALCywAIAJBgAJJBEAgACABIAJB/wFxEHMPBUH7jQJBj44CQesAQcSOAhACC0EAC0IAIANBf2pBP0sgAkHAAEtyBH9BfwUgA0H/AXEhAyACRSABRXIEQCAAIAMQrgEFIAAgAyABIAJB/wFxEK0BC0EACwsKACAAIAEgAhBNCwwAIAAgASACIAMQTgvoBAEUfyACKAAAIQ8CfyACKAAIIRYgAigADCEDQRQhFEHl8MGLBiEEQbLaiMsHIQwgAigAECEQIAIoABQhCSACKAAYIQ0gAigAHCEKQfTKgdkGIQUgAigABCECIBYLIQsgAyEIQe7IgZkDIQYgASgAACEOIAEoAAQhAyABKAAIIQcgASgADCEBA0AgBCAEIAlqQQcQCCAIcyIRakEJEAggB3MiByAHIBFqQQ0QCCAJcyIJakESEAggBHMhBCAGIAYgD2pBBxAIIAFzIhJqQQkQCCANcyIVIBIgFWpBDRAIIA9zIg1qQRIQCCAGcyEGIAwgDCAOakEHEAggCnMiE2pBCRAIIAJzIgIgAiATakENEAggDnMiCGpBEhAIIAxzIQogBSAFIBBqQQcQCCALcyILakEJEAggA3MiAyADIAtqQQ0QCCAQcyIBakESEAggBXMhBSAEIAQgC2pBBxAIIA1zIg9qQQkQCCACcyICIAIgD2pBDRAIIAtzIgtqQRIQCCAEcyEEIAYgBiARakEHEAggCHMiDmpBCRAIIANzIgMgAyAOakENEAggEXMiCGpBEhAIIAZzIQYgCiASakEHEAggAXMiECAKakEJEAggB3MiByAHIBBqQQ0QCCAScyIBakESEAggCnMhDCAFIBNqQQcQCCAJcyIJIAVqQQkQCCAVcyINIAkgDWpBDRAIIBNzIgpqQRIQCCAFcyEFIBRBfmoiFA0ACyAAIAQQCyAAQQRqIAYQCyAAQQhqIAwQCyAAQQxqIAUQCyAAQRBqIA4QCyAAQRRqIAMQCyAAQRhqIAcQCyAAQRxqIAEQCwveEwIIfx9+IAAsAAAgACwAASAAQQJqIgIsAAAQEEL///8AgyETAn4gAhARQgWIQv///wCDIScgACwABSAALAAGIABBB2oiAywAABAQQgKIQv///wCDIR8gAxARQgeIQv///wCDISAgAEEKaiIHEBFCBIhC////AIMhGSAALAANIAAsAA4gAEEPaiIELAAAEBBCAYhC////AIMhISAEEBFCBohC////AIMhFCAALAASIAAsABMgACwAFBAQQgOIQv///wCDIRogACwAFSAALAAWIABBF2oiBSwAABAQQv///wCDIRUgBRARQgWIQv///wCDIRsgACwAGiAALAAbIABBHGoiBiwAABAQQgKIQv///wCDIRYgBhARQgeIQv///wCDIRwgAEEfaiIIEBFCBIhC////AIMhECAALAAiIAAsACMgAEEkaiIBLAAAEBBCAYhC////AIMhESABEBFCBohC////AIMhEgJ+IAAsACcgACwAKCAALAApEBBCA4hC////AIMhJiAALAAqIAAsACsgAEEsaiIBLAAAEBBC////AIMhDCABEBFCBYhC////AIMhHSAALAAvIAAsADAgAEExaiIBLAAAEBBCAohC////AIMhCSABEBFCB4hC////AIMhCiAAQTRqEBFCBIhC////AIMhCyAALAA3IAAsADggAEE5aiIBLAAAEBBCAYhC////AIMhDSABEBFCBohC////AIMhDiAAQTxqEBFCA4giD0KDoVZ+IAx8IQwgC0KDoVZ+IBF8IA1C0asIfnwgD0Ln9id+fCAOQtOMQ358IApCg6FWfiAQfCALQtGrCH58IA1C04xDfnwgD0KY2hx+fCAOQuf2J358Ih5CgIBAfSIiQhWHfCERICYLIA9C0asIfnwgDkKDoVZ+fCANQoOhVn4gEnwgD0LTjEN+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fCANIBB+IA4gEX58IA8gEn58IBMgFX58IBQgGH58IBpCGohC/////w+DfCIdQhqIQv////8Pg3wiF6dB////H3EhBSANIBl+IBEgFn58IBAgEn58IA4gE358IA8gFH58IBdCGohC/////w+DfCIXp0H///8fcSEGIA0gHH4gESAZfnwgEiAWfnwgECATfnwgDiAUfnwgF0IaiEL/////D4N8Ig2nQf///x9xIQcgDUIaiKdBBWwgGqdB////H3FqIgNB////H3EhBCAdp0H///8fcSADQRp2aiEDIAFBEGohASACQnB8IgJCD1YNAAsLIAAgBDYCFCAAIAM2AhggACAFNgIcIAAgBjYCICAAIAc2AiQLMAAgAUF/akE/SyAFQcAAS3IEf0F/BSAAIAIgBCABQf8BcSADIAVB/wFxEOECQQALC4QDAQd/IwAhByMAQT9qQUBxJAAjACEDIwBBQGskACACQf8BcQRAIAJB/wFxIQggAkH/AXFBwABMBEACfyAAKQBQQgBSBH9BfwUgACgA4AIiAkGAAUsEQCAAQoABEHQgACAAQeAAaiICEHcgACAAKADgAkGAf2oiBTYA4AIgBUGBAUkEQCACIABB4AFqIAUQGBogACgA4AIhBiACIQQFQaCNAkHAjQJBsgJB7Y0CEAILBSACIQYgAEHgAGohBAsgACAGrRB0IAAiAiwA5AIEQCACQn83AFgLIAJCfzcAUCAAKADgAiICIABB4ABqakEAQYACIAJrEBoaIAAgBBB3IAMgACkAABASIANBCGogACkACBASIANBEGogACkAEBASIANBGGogACkAGBASIANBIGogACkAIBASIANBKGogACkAKBASIANBMGogACkAMBASIANBOGogACkAOBASIAEgAyAIEBgaIABBwAAQCiAEQYACEApBAAshCSAHJAAgCQsPCwsQAEEACy0CAX8BfiABIABBQGsiAikAAHwhAyACIAM3AAAgACAAKQBIIAMgAVStfDcASAsJACAAQQA2AAALNgECfyAAEOMCA0AgAkEDdCAAaiIDIAEgAkEDdGopAAAgAykAAIU3AAAgAkEBaiICQQhHDQALC4s2AgV/In4CfyMAIQYjAEE/akFAcSQAIwAhAiMAQYACaiQAIAJBgAFqIQMDQCAEQQN0IANqIAEgBEEDdGopAAA3AwAgBEEBaiIEQRBHDQALIAIgACkAADcAACACIAApAAg3AAggAiAAKQAQNwAQIAIgACkAGDcAGCACIAApACA3ACAgAiAAKQAoNwAoIAIgACkAMDcAMCACIAApADg3ADggAkLx7fT4paf9p6V/NwNYIAApAEhCn9j52cKR2oKbf4UhFyAAKQBQQuv6htq/tfbBH4UhGwJ+IAApAFhC+cL4m5Gjs/DbAIUhKCACKQMAIAIpAyAiHyADKQMAIiR8fCIeIABBQGspAABC0YWa7/rPlIfRAIWFQSAQByIYQoiS853/zPmE6gB8IRkgGSAfhUEYEAchHCACIAMpAwgiHyAcIB58fCIHIBiFQRAQByIlNwNgIAJBQGsiASAZICV8IiA3AwAgAiAcICCFQT8QByIhNwMgIAIpAwggAikDKCIcIAMpAxAiGXx8IhggF4VBIBAHIh1Cu86qptjQ67O7f3whFyAXIByFQRgQByEeIAIgAykDGCIcIBggHnx8IgsgHYVBEBAHIiY3A2ggAiAXICZ8Igo3A0ggCiAehUE/EAchHSACKQMQIAIpAzAiHiADKQMgIhd8fCIYIBuFQSAQByIiQqvw0/Sv7ry3PHwhGyAbIB6FQRgQByIaIBsgAykDKCIeIBggGnx8IhIgIoVBEBAHIg58IgmFQT8QByEiICgLIAIpAxggAikDOCIjIAMpAzAiG3x8IhqFQSAQByIIQvHt9Pilp/2npX98IRggGCAjhUEYEAciDyAYIAMpAzgiIyAPIBp8fCIPIAiFQRAQByIIfCIMhUE/EAchGiAdIAkgCCADQUBrKQMAIhggByAdfHwiCIVBIBAHIh18Ig2FQRgQByEHIAIgHSADKQNIIh0gByAIfHwiFIVBEBAHIgk3A3ggAiAJIA18Igg3A1AgByAIhUE/EAchByAiIAwgJSADKQNQIiUgCyAifHwiC4VBIBAHIiJ8IgyFQRgQByINIAwgIiADKQNYIiIgCyANfHwiDYVBEBAHIhB8IgyFQT8QByELIBogICAmIAMpA2AiJiASIBp8fCIahUEgEAciEnwiEYVBGBAHIhMgESADKQNoIiAgEyAafHwiEyAShUEQEAciFXwiEYVBPxAHIRIgAiARIBAgISAKIA4gAykDcCIaIA8gIXx8Ig6FQSAQByIhfCIKhUEYEAciDyAKICEgAykDeCIhIA4gD3x8Ig6FQRAQByIPfCIQhUE/EAciCiAUIBp8fCIUhUEgEAciFnwiESAKhUEYEAciCiARIBQgJXwgCnwiFCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAXfHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgGHwgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAsgCCATIAsgHXx8IgsgD4VBIBAHIg98IgiFQRgQByITIAggDyALICF8IBN8Ig+FQRAQByITfCILhUE/EAchCCASIAwgCSAOIBIgIHx8IgmFQSAQByISfCIOhUEYEAciDCAOIBIgCSAbfCAMfCIShUEQEAciDHwiDoVBPxAHIQkgCyAMIBQgH3wgB3wiDIVBIBAHIhR8IicgB4VBGBAHIQcgAiAMICZ8IAd8IgwgFIVBEBAHIgs3A3ggCyAnfCIUIAeFQT8QByEHIAggDiANICR8IAh8IgggFoVBIBAHIg18Ig6FQRgQByIWIA4gDSAIIBl8IBZ8Ig2FQRAQByIWfCIOhUE/EAchCCAJIBEgDyAifCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAjfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECASIAogHnx8IgogE4VBIBAHIhJ8IhCFQRgQByITIBAgEiAKIBx8IBN8IhKFQRAQByITfCIQhUE/EAciCiAMICJ8fCIMIBaFQSAQByIWfCIRIAqFQRgQByIKIBEgDCAYfCAKfCIMIBaFQRAQByIWfCIRhUE/EAciCjcDICAHIBAgDSAHICZ8fCIHIBWFQSAQByINfCIQhUEYEAciFSAQIA0gByAkfCAVfCINhUEQEAciFXwiEIVBPxAHIQcgCCAUIA8gCCAefHwiCCAThUEgEAciD3wiFIVBGBAHIhMgFCAPIAggGXwgE3wiD4VBEBAHIhN8IhSFQT8QByEIIAkgDiASIAkgIXx8IgkgC4VBIBAHIgt8IhKFQRgQByIOIBIgCSAgfCAOfCIOIAuFQRAQByILfCIShUE/EAchCSAUIAsgDCAlfCAHfCILhUEgEAciDHwiFCAHhUEYEAchByACIAwgCyAafCAHfCIMhUEQEAciCzcDeCALIBR8IhQgB4VBPxAHIQcgCCASIA0gHHwgCHwiCCAWhUEgEAciDXwiEoVBGBAHIhYgEiANIAggG3wgFnwiDYVBEBAHIhZ8IhKFQT8QByEIIAkgESAPICN8IAl8IgkgFYVBIBAHIg98IhGFQRgQByIVIBEgDyAJIB98IBV8Ig+FQRAQByIVfCIRhUE/EAchCSACIBEgCiAQIA4gCiAdfHwiCiAThUEgEAciDnwiEIVBGBAHIhMgECAOIAogF3wgE3wiDoVBEBAHIhN8IhCFQT8QByIKIAwgI3x8IgwgFoVBIBAHIhZ8IhEgCoVBGBAHIgogESAMIB18IAp8IgwgFoVBEBAHIhZ8IhGFQT8QByIKNwMgIAcgECAHIBx8IA18IgcgFYVBIBAHIg18IhCFQRgQByIVIBAgDSAHIB98IBV8Ig2FQRAQByIVfCIQhUE/EAchByAIIBQgCCAgfCAPfCIIIBOFQSAQByIPfCIUhUEYEAciEyAUIA8gCCAmfCATfCIPhUEQEAciE3wiFIVBPxAHIQggCSASIAkgInwgDnwiCSALhUEgEAciC3wiEoVBGBAHIg4gEiAJIBp8IA58Ig4gC4VBEBAHIgt8IhKFQT8QByEJIBQgCyAMIBl8IAd8IguFQSAQByIMfCIUIAeFQRgQByEHIAIgDCALIBt8IAd8IgyFQRAQByILNwN4IAsgFHwiFCAHhUE/EAchByAIIBIgDSAefCAIfCIIIBaFQSAQByINfCIShUEYEAciFiASIA0gCCAlfCAWfCINhUEQEAciFnwiEoVBPxAHIQggCSARIA8gF3wgCXwiCSAVhUEgEAciD3wiEYVBGBAHIhUgESAPIAkgJHwgFXwiD4VBEBAHIhV8IhGFQT8QByEJIAIgESAKIBAgDiAKICF8fCIKIBOFQSAQByIOfCIQhUEYEAciEyAQIA4gCiAYfCATfCIOhUEQEAciE3wiEIVBPxAHIgogDCAdfHwiDCAWhUEgEAciFnwiESAKhUEYEAciCiARIAwgJHwgCnwiDCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAefHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgI3wgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAggFCAPIAggGXx8IgggE4VBIBAHIg98IhSFQRgQByITIBQgDyAIIBd8IBN8Ig+FQRAQByITfCIUhUE/EAchCCAJIBIgDiAJICV8fCIJIAuFQSAQByILfCIShUEYEAciDiASIAkgIXwgDnwiDiALhUEQEAciC3wiEoVBPxAHIQkgFCALIAwgGnwgB3wiC4VBIBAHIgx8IhQgB4VBGBAHIQcgAiAMIAsgH3wgB3wiDIVBEBAHIgs3A3ggCyAUfCIUIAeFQT8QByEHIAggEiANICJ8IAh8IgggFoVBIBAHIg18IhKFQRgQByIWIBIgDSAIICZ8IBZ8Ig2FQRAQByIWfCIShUE/EAchCCAJIBEgDyAbfCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAYfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECAOIAogHHx8IgogE4VBIBAHIg58IhCFQRgQByITIBAgDiAKICB8IBN8Ig6FQRAQByITfCIQhUE/EAciCiAMIBl8fCIMIBaFQSAQByIWfCIRIAqFQRgQByIKIBEgDCAmfCAKfCIMIBaFQRAQByIWfCIRhUE/EAciCjcDICAHIBAgDSAHIBt8fCIHIBWFQSAQByINfCIQhUEYEAciFSAQIA0gByAlfCAVfCINhUEQEAciFXwiEIVBPxAHIQcgCCAUIA8gCCAkfHwiCCAThUEgEAciD3wiFIVBGBAHIhMgFCAPIAggInwgE3wiD4VBEBAHIhN8IhSFQT8QByEIIAkgEiAOIAkgGHx8IgkgC4VBIBAHIgt8IhKFQRgQByIOIBIgCSAcfCAOfCIOIAuFQRAQByILfCIShUE/EAchCSAUIAsgDCAXfCAHfCILhUEgEAciDHwiFCAHhUEYEAchByACIAwgCyAgfCAHfCIMhUEQEAciCzcDeCALIBR8IhQgB4VBPxAHIQcgCCASIA0gI3wgCHwiCCAWhUEgEAciDXwiEoVBGBAHIhYgEiANIAggHnwgFnwiDYVBEBAHIhZ8IhKFQT8QByEIIAkgESAPICF8IAl8IgkgFYVBIBAHIg98IhGFQRgQByIVIBEgDyAJIBp8IBV8Ig+FQRAQByIVfCIRhUE/EAchCSACIBEgCiAQIA4gCiAffHwiCiAThUEgEAciDnwiEIVBGBAHIhMgECAOIAogHXwgE3wiDoVBEBAHIhN8IhCFQT8QByIKIAwgJnx8IgwgFoVBIBAHIhZ8IhEgCoVBGBAHIgogESAMIB58IAp8IgwgFoVBEBAHIhZ8IhGFQT8QByIKNwMgIAcgECANIAcgH3x8IgcgFYVBIBAHIg18IhCFQRgQByIVIBAgDSAHICF8IBV8Ig2FQRAQByIVfCIQhUE/EAchByAIIBQgDyAIIBp8fCIIIBOFQSAQByIPfCIUhUEYEAciEyAUIA8gCCAgfCATfCIPhUEQEAciE3wiFIVBPxAHIQggCSASIA4gCSAXfHwiCSALhUEgEAciC3wiEoVBGBAHIg4gEiAJICV8IA58Ig4gC4VBEBAHIgt8IhKFQT8QByEJIBQgCyAMICR8IAd8IguFQSAQByIMfCIUIAeFQRgQByEHIAIgDCALICN8IAd8IgyFQRAQByILNwN4IAsgFHwiFCAHhUE/EAchByAIIBIgDSAbfCAIfCIIIBaFQSAQByINfCIShUEYEAciFiASIA0gCCAcfCAWfCINhUEQEAciFnwiEoVBPxAHIQggCSARIA8gHXwgCXwiCSAVhUEgEAciD3wiEYVBGBAHIhUgESAPIAkgGXwgFXwiD4VBEBAHIhV8IhGFQT8QByEJIAIgESAKIBAgDiAKIBh8fCIKIBOFQSAQByIOfCIQhUEYEAciEyAQIA4gCiAifCATfCIOhUEQEAciE3wiEIVBPxAHIgogDCAgfHwiDCAWhUEgEAciFnwiESAKhUEYEAciCiARIAwgInwgCnwiDCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAjfHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgGnwgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAggFCAPIAggJnx8IgggE4VBIBAHIg98IhSFQRgQByITIBQgDyAIIB98IBN8Ig+FQRAQByITfCIUhUE/EAchCCAJIBIgDiAJIBx8fCIJIAuFQSAQByILfCIShUEYEAciDiASIAkgHXwgDnwiDiALhUEQEAciC3wiEoVBPxAHIQkgFCALIAwgHnwgB3wiC4VBIBAHIgx8IhQgB4VBGBAHIQcgAiAMIAsgJHwgB3wiDIVBEBAHIgs3A3ggCyAUfCIUIAeFQT8QByEHIAggEiANICF8IAh8IgggFoVBIBAHIg18IhKFQRgQByIWIBIgDSAIIBd8IBZ8Ig2FQRAQByIWfCIShUE/EAchCCAJIBEgDyAYfCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAbfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECAOIAogGXx8IgogE4VBIBAHIg58IhCFQRgQByITIBAgDiAKICV8IBN8Ig6FQRAQByITfCIQhUE/EAciCiAMIBt8fCIMIBaFQSAQByIWfCIRIAqFQRgQByIKIBEgDCAhfCAKfCIMIBaFQRAQByIWfCIRhUE/EAciCjcDICAHIBAgDSAHIBp8fCIHIBWFQSAQByINfCIQhUEYEAciFSAQIA0gByAdfCAVfCINhUEQEAciFXwiEIVBPxAHIQcgCCAUIA8gCCAifHwiCCAThUEgEAciD3wiFIVBGBAHIhMgFCAPIAggHHwgE3wiD4VBEBAHIhN8IhSFQT8QByEIIAkgEiAOIAkgJHx8IgkgC4VBIBAHIgt8IhKFQRgQByIOIBIgCSAYfCAOfCIOIAuFQRAQByILfCIShUE/EAchCSAUIAsgDCAmfCAHfCILhUEgEAciDHwiFCAHhUEYEAchByACIAwgCyAZfCAHfCIMhUEQEAciCzcDeCALIBR8IhQgB4VBPxAHIQcgCCASIA0gIHwgCHwiCCAWhUEgEAciDXwiEoVBGBAHIhYgEiANIAggI3wgFnwiDYVBEBAHIhZ8IhKFQT8QByEIIAkgESAPIB98IAl8IgkgFYVBIBAHIg98IhGFQRgQByIVIBEgDyAJIBd8IBV8Ig+FQRAQByIVfCIRhUE/EAchCSACIBEgCiAQIA4gCiAlfHwiCiAThUEgEAciDnwiEIVBGBAHIhMgECAOIAogHnwgE3wiDoVBEBAHIhN8IhCFQT8QByIKIAwgJXx8IgwgFoVBIBAHIhZ8IhEgCoVBGBAHIgogESAMIBl8IAp8IgwgFoVBEBAHIhZ8IhGFQT8QByIKNwMgIAcgECANIAcgGHx8IgcgFYVBIBAHIg18IhCFQRgQByIVIBAgDSAHIBd8IBV8Ig2FQRAQByIVfCIQhUE/EAchByAIIBQgDyAIICN8fCIIIBOFQSAQByIPfCIUhUEYEAciEyAUIA8gCCAbfCATfCIPhUEQEAciE3wiFIVBPxAHIQggCSASIA4gCSAffHwiCSALhUEgEAciC3wiEoVBGBAHIg4gEiAJIB58IA58Ig4gC4VBEBAHIgt8IhKFQT8QByEJIBQgCyAMICF8IAd8IguFQSAQByIMfCIUIAeFQRgQByEHIAIgDCALICJ8IAd8IgyFQRAQByILNwN4IAsgFHwiFCAHhUE/EAchByAIIBIgDSAdfCAIfCIIIBaFQSAQByINfCIShUEYEAciFiASIA0gCCAafCAWfCINhUEQEAciFnwiEoVBPxAHIQggCSARIA8gHHwgCXwiCSAVhUEgEAciD3wiEYVBGBAHIhUgESAPIAkgJnwgFXwiD4VBEBAHIhV8IhGFQT8QByEJIAIgESAKIBAgDiAKICB8fCIKIBOFQSAQByIOfCIQhUEYEAciEyAQIA4gCiAkfCATfCIOhUEQEAciE3wiEIVBPxAHIgogDCAkfHwiDCAWhUEgEAciFnwiESAKhUEYEAciCiARIAwgH3wgCnwiDCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAZfHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgHHwgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAggFCAPIAggF3x8IgggE4VBIBAHIg98IhSFQRgQByITIBQgDyAIIB58IBN8Ig+FQRAQByITfCIUhUE/EAchCCAJIBIgDiAJIBt8fCIJIAuFQSAQByILfCIShUEYEAciDiASIAkgI3wgDnwiDiALhUEQEAciC3wiEoVBPxAHIQkgFCALIAwgGHwgB3wiC4VBIBAHIgx8IhQgB4VBGBAHIQcgAiAMIAsgHXwgB3wiDIVBEBAHIgs3A3ggCyAUfCIUIAeFQT8QByEHIAggEiANICV8IAh8IgggFoVBIBAHIg18IhKFQRgQByIWIBIgDSAIICJ8IBZ8Ig2FQRAQByIWfCIShUE/EAchCCAJIBEgDyAmfCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAgfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECAOIAogGnx8IgogE4VBIBAHIg58IhCFQRgQByITIBAgCiAhfCATfCIKIA6FQRAQByIOfCIQhUE/EAciEyAMIBp8fCIaIBaFQSAQByIMfCIRIBOFQRgQByITIBEgGiAlfCATfCIaIAyFQRAQByIMfCIRhUE/EAciJTcDICAHIBAgDSAHIBd8fCIXIBWFQSAQByIHfCINhUEYEAciECANIAcgFyAYfCAQfCIHhUEQEAciEHwiDYVBPxAHIRcgCCAUIA8gCCAdfHwiGCAOhUEgEAciHXwiCIVBGBAHIg4gCCAdIBggIXwgDnwiHYVBEBAHIiF8IgiFQT8QByEYIAkgEiAKIAkgIHx8IiAgC4VBIBAHIgp8IgmFQRgQByILIAkgGyAgfCALfCIgIAqFQRAQByIKfCIJhUE/EAchGyACIBcgCCAaIB98IBd8Ih8gCoVBIBAHIhd8IhqFQRgQByIKIB8gJnx8Ih83AwAgAiAXIB+FQRAQByIXNwN4IAIgFyAafCIXNwNQIAIgCiAXhUE/EAc3AyggAiAYIAkgByAkfCAYfCIkIAyFQSAQByIXfCIYhUEYEAciJiAZICR8fCIkNwMIIAIgFyAkhUEQEAciGTcDYCACIBggGXwiGTcDWCACIBkgJoVBPxAHNwMwIAIgGyARIB0gInwgG3wiGSAQhUEgEAciF3wiG4VBGBAHIhggGSAjfHwiGTcDECACIBcgGYVBEBAHIhk3A2ggASAZIBt8Ihk3AwAgAiAYIBmFQT8QBzcDOCACIA0gICAeICV8fCIXICGFQSAQByIefCIbICWFQRgQByIjIBcgHHx8Ihw3AxggAiAcIB6FQRAQByIcNwNwIAIgGyAcfCIcNwNIIAIgHCAjhUE/EAc3AyAgACAZIAApAAAgH4WFNwAAQQEhAQNAIAFBA3QgAGoiAyABQQhqQQN0IAJqKQMAICQgAykAAIWFNwAAIAFBAWoiAUEIRwRAIAFBA3QgAmopAwAhJAwBCwsgBgskAAsLACAAIAEgAhDmAgsTACAAIAFBwAdsQdAQaiACELcBCx0AIAAQNCAAQShqEB4gAEHQAGoQHiAAQfgAahA0C6wBAQJ/IwAhCiMAQdACaiQAIApCwAAgByAIEDYgCkFAayIJIAoQJiAKQcAAEAogCSAFIAYQDyAJQbCWAkIAIAZ9Qg+DEA8gACADIAQgB0EBIAgQLyAJIAAgBBAPIAlBsJYCQgAgBH1CD4MQDyAKQcACaiIAIAYQEiAJIABCCBAPIAAgBBASIAkgAEIIEA8gCSABECUgCUGAAhAKIAIEQCACQhA3AwALIAokAEEAC+0BAQd/A0AgACACaiABIAJBA3ZqLQAAIAJBB3F2QQFxOgAAIAJBAWoiAkGAAkcNAAtBACECA0AgACACaiIFLAAABEACQEEBIQQDQCACIARqIgFBgAJPDQEgACABaiIDLAAAIgYEQAJAIAUsAAAiByAGIAR0IgZqIghBEEgEQCAFIAg6AAAgA0EAOgAADAELIAcgBmsiA0FxSA0DIAUgAzoAAANAIAAgAWoiAywAAARAIANBADoAACABQQFqIgFBgAJPDQIMAQsLIANBAToAAAsLIARBAWoiBEEHSQ0ACwsLIAJBAWoiAkGAAkcNAAsLpQEBBn8CfyMAIQgjAEE/akFAcSQAIwAhBSMAQTBqJAAgACABQShqIgMgARATIABBKGoiBCADIAEQFSAAQdAAaiIGIAAgAkEoahAMIAQgBCACEAwgAEH4AGoiAyACQfgAaiABQfgAahAMIAAgAUHQAGogAkHQAGoQDCAFIAAgABATIAAgBiAEEBUgBCAGIAQQEyAGIAUgAxAVIAMgBSADEBMgCAskAAukAgEIfwJ/IwAhCSMAQT9qQUBxJAAjACEDIwBBoAJqJAAgAyEGIABBKGoiByABEIEBIABB0ABqIgIQHiADQfABaiIEIAcQDSADQcABaiIFIARBgAgQDCAEIAQgAhAVIAUgBSACEBMgA0GQAWoiAiAFEA0gAiACIAUQDCAAIAIQDSAAIAAgBRAMIAAgACAEEAwgACAAEL0BIAAgACACEAwgACAAIAQQDCADQeAAaiICIAAQDSACIAIgBRAMIANBMGoiAyACIAQQFQJ/AkAgAxBYDQAgBiACIAQQEyAGEFgEfyAAIABBsAgQDAwBBUF/CwwBCyAAEH8hAyABLQAfQQd2IANGBEAgACAAEIABCyAAQfgAaiAAIAcQDEEACyEAIAkLJAAgAAs2AQN/An8jACEDIwBBP2pBQHEkACMAIQEjAEEgaiQAIAEgABAuIAEsAABBAXEhACADCyQAIAALqgEBCX9BACABKAIEayECQQAgASgCCGshA0EAIAEoAgxrIQRBACABKAIQayEFQQAgASgCFGshBkEAIAEoAhhrIQdBACABKAIcayEIQQAgASgCIGshCUEAIAEoAiRrIQogAEEAIAEoAgBrNgIAIAAgAjYCBCAAIAM2AgggACAENgIMIAAgBTYCECAAIAY2AhQgACAHNgIYIAAgCDYCHCAAIAk2AiAgACAKNgIkC5kEARV+An4gARARIRYgASwABCABLAAFIAEsAAYQEEIGhiEHIAEsAAcgASwACCABLAAJEBBCBYYhAyABLAAKIAEsAAsgASwADBAQQgOGIQggASwADSABLAAOIAEsAA8QEEIChiEEIAFBEGoQESEJIAEsABQgASwAFSABLAAWEBBCB4YhBSABLAAXIAEsABggASwAGRAQQgWGIQogASwAGiABLAAbIAEsABwQEEIEhiEGIBYLQgAgASwAHSABLAAeIAEsAB8QEEIChkL8//8PgyILQoCAgAh8IgxCGYh9QhODfCINQoCAgBB8IQIgAyAHQoCAgAh8Ig5CGYd8Ig9CgICAEHwhAyAEIAhCgICACHwiEEIZh3wiEUKAgIAQfCEEIAUgCUKAgIAIfCISQhmHfCITQoCAgBB8IQUgBiAKQoCAgAh8IhRCGYd8IhVCgICAEHwhBiAAIA0gAkKAgIDgD4N9PgIAIAAgByAOQoCAgPAPg30gAkIaiHw+AgQgACAPIANCgICA4A+DfT4CCCAAIAggEEKAgIDwD4N9IANCGoh8PgIMIAAgESAEQoCAgOAPg30+AhAgACAJIBJCgICA8A+DfSAEQhqIfD4CFCAAIBMgBUKAgIDgD4N9PgIYIAAgCiAUQoCAgPAPg30gBUIaiHw+AhwgACAVIAZCgICA4A+DfT4CICAAIAsgDEKAgIAQg30gBkIaiHw+AiQLiQEBAn8jACEJIwBB0AJqJAAgCSAHIAgQmAEgCUFAayIKIAkQJiAJQcAAEAogCiAFIAYQDyAJQcACaiIFIAYQEiAKIAVCCBAPIAAgAyAEIAcgCBCXASAKIAAgBBAPIAUgBBASIAogBUIIEA8gCiABECUgCkGAAhAKIAIEQCACQhA3AwALIAkkAEEAC0sBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQYADaiQAIANBAEEAQRgQUBogAyABQiAQJxogAyACQiAQJxogAyAAQRgQTxogBQskAAskACACQhBUBH9BfwUgACABQRBqIAEgAkJwfCADIAQgBRCFAQsLPQECfyMAIQcjAEEgaiQAIAciCCAFIAYQWwRAQX8hAAUgACABIAIgAyAEIAgQWSEAIAhBIBAKCyAHJAAgAAsoACACQu////8PVgRAEAAFIABBEGogACABIAIgAyAEIAUQhwEPC0EACz4BA38jACEHIwBBIGokACAHIgggBSAGEFsEf0F/BSAAIAEgAiADIAQgCBBaGiAIQSAQCkEACyEJIAckACAJCw4AIAFBIBAfIAAgARBoCyoBAX8jACEEIwBBoANqJAAgBCADEIcCIAQgASACEB0gBCAAEPkBIAQkAAu1DAEHfyAAIAFqIQUgACgCBCIDQQFxRQRAAkAgACgCACECIANBA3FFBEAPCyABIAJqIQEgACACayIAQaCXAigCAEYEQCAFKAIEIgJBA3FBA0cNAUGUlwIgATYCACAFIAJBfnE2AgQgACABQQFyNgIEIAUgATYCAA8LIAJBA3YhBCACQYACSQRAIAAoAggiAiAAKAIMIgNGBEBBjJcCQYyXAigCAEEBIAR0QX9zcTYCAAUgAiADNgIMIAMgAjYCCAsMAQsgACgCGCEHIAAoAgwiAiAARgRAAkAgAEEQaiIDQQRqIgQoAgAiAgRAIAQhAwUgAygCACICRQRAQQAhAgwCCwsDQAJAIAJBFGoiBCgCACIGRQRAIAJBEGoiBCgCACIGRQ0BCyAEIQMgBiECDAELCyADQQA2AgALBSAAKAIIIgMgAjYCDCACIAM2AggLIAcEQCAAKAIcIgNBAnRBvJkCaiIEKAIAIABGBEAgBCACNgIAIAJFBEBBkJcCQZCXAigCAEEBIAN0QX9zcTYCAAwDCwUgB0EQaiIDIAdBFGogAygCACAARhsgAjYCACACRQ0CCyACIAc2AhggACgCECIDBEAgAiADNgIQIAMgAjYCGAsgACgCFCIDBEAgAiADNgIUIAMgAjYCGAsLCwsgBSgCBCIHQQJxBEAgBSAHQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAgASEDBUGklwIoAgAgBUYEQEGYlwJBmJcCKAIAIAFqIgE2AgBBpJcCIAA2AgAgACABQQFyNgIEIABBoJcCKAIARwRADwtBoJcCQQA2AgBBlJcCQQA2AgAPC0GglwIoAgAgBUYEQEGUlwJBlJcCKAIAIAFqIgE2AgBBoJcCIAA2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAdBA3YhBCAHQYACSQRAIAUoAggiAiAFKAIMIgNGBEBBjJcCQYyXAigCAEEBIAR0QX9zcTYCAAUgAiADNgIMIAMgAjYCCAsFAkAgBSgCGCEIIAUoAgwiAiAFRgRAAkAgBUEQaiIDQQRqIgQoAgAiAgRAIAQhAwUgAygCACICRQRAQQAhAgwCCwsDQAJAIAJBFGoiBCgCACIGRQRAIAJBEGoiBCgCACIGRQ0BCyAEIQMgBiECDAELCyADQQA2AgALBSAFKAIIIgMgAjYCDCACIAM2AggLIAgEQCAFKAIcIgNBAnRBvJkCaiIEKAIAIAVGBEAgBCACNgIAIAJFBEBBkJcCQZCXAigCAEEBIAN0QX9zcTYCAAwDCwUgCEEQaiIDIAhBFGogAygCACAFRhsgAjYCACACRQ0CCyACIAg2AhggBSgCECIDBEAgAiADNgIQIAMgAjYCGAsgBSgCFCIDBEAgAiADNgIUIAMgAjYCGAsLCwsgACAHQXhxIAFqIgNBAXI2AgQgACADaiADNgIAQaCXAigCACAARgRAQZSXAiADNgIADwsLIANBA3YhAiADQYACSQRAIAJBA3RBtJcCaiEBQYyXAigCACIDQQEgAnQiAnEEfyABQQhqIgIhAyACKAIABUGMlwIgAiADcjYCACABQQhqIQMgAQshAiADIAA2AgAgAiAANgIMIAAgAjYCCCAAIAE2AgwPCyADQQh2IgEEfyADQf///wdLBH9BHwUgASABQYD+P2pBEHZBCHEiBHQiAkGA4B9qQRB2QQRxIQEgAiABdCIGQYCAD2pBEHZBAnEhAiADQQ4gASAEciACcmsgBiACdEEPdmoiAUEHanZBAXEgAUEBdHILBUEACyICQQJ0QbyZAmohASAAIAI2AhwgAEEANgIUIABBADYCEAJAQZCXAigCACIEQQEgAnQiBnFFBEBBkJcCIAQgBnI2AgAgASAANgIADAELIAEoAgAiASgCBEF4cSADRgRAIAEhAgUCQCADQQBBGSACQQF2ayACQR9GG3QhBANAIAFBEGogBEEfdkECdGoiBigCACICBEAgBEEBdCEEIAIoAgRBeHEgA0YNAiACIQEMAQsLIAYgADYCAAwCCwsgAigCCCIBIAA2AgwgAiAANgIIIAAgATYCCCAAIAI2AgwgAEEANgIYDwsgACABNgIYIAAgADYCDCAAIAA2AggL8QIBBn8CfyMAIQsjAEE/akFAcSQAIwAhBiMAQfAAaiQAIAZB4ABqIQcgBkEgaiEIIAJCAFIEQCAGIAUpAAA3AAAgBiAFKQAINwAIIAYgBSkAEDcAECAGIAUpABg3ABggByADKQAANwMAQQghAwNAIAMgB2ogBDwAACAEQgiIIQQgA0EBaiIDQRBHDQALIAJCP1YEQANAIAggByAGEHhBACEDA0AgACADaiABIANqLAAAIAMgCGosAABzOgAAIANBAWoiA0HAAEcNAAtBCCEDQQEhBQNAIAMgB2oiCi0AACAFaiEFIAogBToAACAFQQh2IQUgA0EBaiIDQRBHDQALIABBQGshACABQUBrIQEgAkJAfCICQj9WDQALCyACQgBSBEAgCCAHIAYQeCACpyIFBEBBACEDA0AgACADaiABIANqLAAAIAMgCGosAABzOgAAIANBAWoiAyAFRw0ACwsLIAhBwAAQCiAGQSAQCgsgCwskAAs0AQN/QQEhAQNAIAEgACACaiIBLQAAaiEDIAEgAzoAACADQQh2IQEgAkEBaiICQQRHDQALCxAAIABCADcCACAAQgA3AggLdwEBfyAAQfwBaiAAQcL/A2pBCHZxIABBzP8DakEIdiIBQf8BcUH/AXNxIABBxwBqIAFxIABB5v8DakEIdkH/AXEiAUH/AXNxIABBwQBqIAFxQQAgAEE+c2tBCHZBK3FBK3NyQQAgAEE/c2tBCHZBL3FBL3NycnILeQEBfyAAQfwBaiAAQcL/A2pBCHZxIABBzP8DakEIdiIBQf8BcUH/AXNxIABBxwBqIAFxIABB5v8DakEIdkH/AXEiAUH/AXNxIABBwQBqIAFxQQAgAEE+c2tBCHZBLXFBLXNyQQAgAEE/c2tBCHZB3wBxQd8Ac3JycgsHAEEBEAEaCwsAIAAgAUEgEJIBC4oBAQN/An8jACEFIwBBP2pBQHEkACMAIQMjAEEQaiQAIAMgADYCCCADIAE2AgQgAyIBQQA2AgBBACEAA0AgASABKAIAIAAgAygCCGosAAAgACADKAIEaiwAAHNB/wFxcjYCACAAQQFqIgAgAkcNAAsgASgCAEH/A2pBCHZBAXFBf2ohACAFCyQAIAALEQAgACABIAIgA0IBIAQQiwELOQAgACACBH8gACACKAAANgIwIAIoAAQFIABBADYCMEEACzYCNCAAIAEoAAA2AjggACABKAAENgI8CzIAIAAgAgR/IAIoAAAFQQALNgIwIAAgASgAADYCNCAAIAEoAAQ2AjggACABKAAINgI8C1oBBH8CfyMAIQkjAEE/akFAcSQAIwAhBiMAQdAAaiQAIAZBQGshByACQgBSBEAgByAEEAsgBiAFEEUgBiADIAcQlQEgBiABIAAgAhBEIAZBwAAQCgsgCQskAAseACACQv////8PVgRAEAAFIAAgASACIAMgBBCPAgsLCwAgACABIAIQkQILEQAgACABIAIgAyAEQQAQmgEL6QEBB38CfyMAIQwjAEE/akFAcSQAIwAhBiMAQbAEaiQAIAZBwAFqIgcgBRBjIAZBgAFqIgggBEIgEDkgByAIQSBqQiAQHSAHIAIgAxAdIAcgBkFAayIJECogAEEgaiILIARBIGpBIBAsGiAJEFIgBkGQA2oiBCAJEFQgACAEEFYgByAFEGMgByAAQsAAEB0gByACIAMQHSAHIAYQKiAGEFIgCCAILAAAQXhxOgAAIAggCCwAH0E/cUHAAHI6AB8gCyAGIAggCRCyASAIQcAAEAogCUHAABAKIAEEQCABQsAANwMACyAMCyQACw8AIAAgASACIANBABCcAQvcAQEIfwJ/IwAhDCMAQT9qQUBxJAAjACEFIwBB0ARqJAAgBUHgAGohBiAFQSBqIQggBSEHIAVBqANqIQkgBUGwAmohBSAAQSBqIgsQsQEEfyAAEFMEf0F/BSADELMBBH8gAxBTBH9BfwUgCSADEH4Ef0F/BSAGIAQQYyAGIABCIBAdIAYgA0IgEB0gBiABIAIQHSAGIAgQKiAIEFIgBSAIIAkgCxC7ASAHIAUQVkF/IAcgABCRASAAIAdGGyEBIAAgB0EgEEEgAXILCwVBfwsLBUF/CyEAIAwLJAAgAAtOAQN/IwAhCCMAQTBqJAAgCEEgaiIJQQA2AgAgCCAGIAcQPCAJIAYpABA3AgQgACABIAIgAyAEIAUgCSAIEJICIQogCEEgEAogCCQAIAoLbAEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBBoAFqJAAgASACQiAQOSABIAEsAABBeHE6AAAgASABLAAfQT9xQcAAcjoAHyADIAEQVCAAIAMQViABIAJBIBAsGiABQSBqIABBIBAsGiAFCyQACysBAn8DQCAAIAJqIgMgASACaiwAACADLAAAczoAACACQQFqIgJBCEcNAAsLTgECfyMAIQkjAEEwaiQAIAlBIGoiCkEANgIAIAkgByAIEDwgCiAHKQAQNwIEIAAgASACIAMgBCAFIAYgCiAJEKgCIAlBIBAKIAkkAEEAC3YBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQRBqJAAgA0EAOgAAIAAgASACELICBH9BfwVBACEBA0AgAyAAIAFqLAAAIAMsAAByOgAAIAFBAWoiAUEgRw0AC0EAIAMtAABB/wNqQQh2QQFxawshACAFCyQAIAALiwIBA38CfyMAIQcjAEE/akFAcSQAIwAhBSMAQRBqJAAgAEIANwAAIABCADcACCAAQgA3ABAgAEIANwAYIABCADcAICAAQgA3ACggAEIANwAwIABCADcAOCAAQUBrQgA3AAAgAEIANwBIIABCADcAUCAAQgA3AFggAEIANwBgIABCADcAaCAAQgA3AHAgAEIANwB4IARBgICAgHhLIAIgA4RC/////w9WcgR/QYiXAkEWNgIAQX8FIARBgMAASSADQgBRcgR/QYiXAkEcNgIAQX8FIAVBEBAfIAOnIARBCnZBASABIAKnIAVBEEEAQSAgAEGAAUECEDhBAEdBH3RBH3ULCyEAIAcLJAAgAAuGAgEFfwJ/IwAhCCMAQT9qQUBxJAAjACEEIwBBQGskACACQQp2IQIgABAjIgVB/wBLIAFC/////w9WcgRAQYiXAkEcNgIAQX8hAAUgBEIANwIAIARCADcCCCAEQgA3AhAgBEIANwIYIARCADcCICAEQgA3AiggBEIANwIwIARBADYCOCAFEPcBIgYEQCAEIAY2AhAgBCAGNgIIIAQgBjYCACAEIAU2AhQgBCAFNgIMIAQgBTYCBCAEQgA3AhggBEIANwIgIAQgACADEKUBBH9BiJcCQRw2AgBBfwUgBCgCKCABp0YEfyAEKAIsIAJHBUEBCwshACAGEBYFQX8hAAsLIAgLJAAgAAvhAgEHfwJ/IwAhCiMAQT9qQUBxJAAjACEEIwBBQGskACAEQgA3AgggBEIANwIQIARCADcCGCAEQgA3AiAgBEIANwIoIARCADcCMCAEQQA2AjggBCAAECMiBTYCJCAEIAU2AhQgBCAFNgIEIAQgBRAhIgY2AiAgBCAFECEiBzYCECAEIAUQISIINgIAIAZFIAhFIAdFcnIEQCAGEBYgBxAWIAgQFkFqIQAFAkAgBRAhIgVFBEAgBhAWIAcQFiAIEBZBaiEADAELIAQgACADEKUBIgAEQCAEKAIgEBYgBCgCEBAWIAQoAgAQFiAFEBYMAQsgBCgCKCAEKAIsIAQoAjQgASACIAQoAhAgBCgCFCAFIAQoAgRBAEEAIAMQOCEAIAQoAiAQFiAEKAIQEBYCfwJAIAANACAFIAQoAgAgBCgCBBBBDQBBAAwBC0FdCyEAIAUQFiAEKAIAEBYLCyAKCyQAIAALuQQBBn8CfyMAIQgjAEE/akFAcSQAIwAhBCMAQRBqJAAgBEEEaiEDIAAoAhQhBSAAKAIEIQYgAEEANgIUIABBADYCBAJAAkACQAJAAkAgAkEBaw4CAQACCyABQQlqIQIgAUHljgJBCRAiRQ0CQWAhAAwDCyABQQhqIQIgAUHvjgJBCBAiRQ0BQWAhAAwCC0FmIQAMAQsgAiEBIAFB+I4CQQMQIgRAQWAhAAUgAUEDaiADEEshASADKAIAIQIgAQRAIAJBE0YEQCABQfyOAkEDECIEQEFgIQAFIAFBA2ogAxBLIgFFBEBBYCEADAULIAAgAygCADYCLCABQYCPAkEDECIEQEFgIQAFIAFBA2ogAxBLIgFFBEBBYCEADAYLIAAgAygCADYCKCABQYSPAkEDECIEQEFgIQAFIAFBA2ogAxBLIgFFBEBBYCEADAcLIAAgAygCACICNgIwIAAgAjYCNCABQQFqIAEgASwAAEEkRiICGyEBIAIEQCADIAU2AgAgACgCECAFIAEgARAjQQAgAyAEQQMQXQRAQWAhAAwICyAAIAMoAgA2AhQgBCgCACIBLAAAQSRGIQIgAUEBaiABIAIbIQEgAgRAIAMgBjYCACAAKAIAIAYgASABECNBACADIARBAxBdBEBBYCEADAkLIAAgAygCADYCBCAEKAIAIQEgABBwIgBFBEBBYEEAIAEsAAAbIQALBUFgIQALBUFgIQALCwsLBUFmIQALBUFgIQALCwsgCAskACAACyoBAX8DQCACQQN0IABqIAEgAkEDdGopAAA3AwAgAkEBaiICQYABRw0ACws/AQF/IAAgAUEEcRDPAiAAKAIEEBYgAEEANgIEIAAoAgAiAQRAIAEoAgAiAgRAIAIQFgsLIAEQFiAAQQA2AgALqAEAIAAgASgAAEH///8fcTYCACAAIAEoAANBAnZBg/7/H3E2AgQgACABKAAGQQR2Qf+B/x9xNgIIIAAgASgACUEGdkH//8AfcTYCDCAAIAEoAAxBCHZB//8/cTYCECAAQgA3AhQgAEIANwIcIABBADYCJCAAIAEoABA2AiggACABKAAUNgIsIAAgASgAGDYCMCAAIAEoABw2AjQgAEIANwM4IABBADoAUAuCAgEDfgJAAkAgACkDOCIEQgBRDQAgAkIQIAR9IgMgAyACVhsiBUIAUgRAQgAhAwNAIAMgBHynIABBQGtqIAEgA6dqLAAAOgAAIAApAzghBCADQgF8IgMgBVQNAAsLIAAgBCAFfCIENwM4IARCEFoEQCAAIABBQGtCEBBxIABCADcDOCACIAV9IQIgASAFp2ohAQwBCwwBCyACQnCDIQMgAkIPVgR+IAAgASADEHEgA6cgAWohASACIAN9BSACCyIEQgBSBEBCACECA0AgACkDOCACfKcgAEFAa2ogAqcgAWosAAA6AAAgAkIBfCICIARUDQALIAAgACkDOCAEfDcDOAsLC7kDAgx/A34gACkDOCIOQgBSBEAgDqciAiAAQUBrakEBOgAAIA5CAXwiDkIQVARAIA6nIABBQGtqQQBBDyACaxAaGgsgAEEBOgBQIAAgAEFAa0IQEHELIAAoAhwgACgCGCICQRp2aiIDQf///x9xIQQgACgCICADQRp2aiIDQf///x9xIQYgACgCFCAAKAIkIANBGnZqIgdBGnZBBWxqIgNB////H3EhCCAHQYCAgGByIAYgBCACQf///x9xIANBGnZqIgMgCEEFaiIKQRp2aiIFQRp2aiILQRp2aiIMQRp2aiIJQR92QX9qIg1B////H3EhAiACIAVxIAMgCUEfdSIDcXIhBSACIAtxIAMgBHFyIgRBFHQgBUEGdnKtIAAoAiytfCACIApxIAMgCHFyIAVBGnRyrSAAKAIorXwiEEIgiHwhDiACIAxxIAMgBnFyIgJBDnQgBEEMdnKtIAAoAjCtfCAOQiCIfCEPIAkgDXEgAyAHcXJBCHQgAkESdnKtIAAoAjStfCAPQiCIfKchAiABIBCnEAsgAUEEaiAOpxALIAFBCGogD6cQCyABQQxqIAIQCyAAQdgAEAoLNwEBfyACQQN2IgMEQEEAIQIDQCAAIAJBA3RqIAJBA3QgAWopAwAQ2gIgAkEBaiICIANHDQALCwvPAQEDfyMAIQkjAEHgAmokACAJQRBqIgpCwAAgBiAHEDYgCUHQAGoiCCAKECYgCkHAABAKIAggBCAFEA8gCEGwlgJCACAFfUIPgxAPIAggASACEA8gCEGwlgJCACACfUIPgxAPIAlB0AJqIgQgBRASIAggBEIIEA8gBCACEBIgCCAEQggQDyAIIAkQJSAIQYACEAogCSADEEMhAyAJQRAQCiAABEAgAwR/IABBACACpxAaGkF/BSAAIAEgAiAGQQEgBxAvQQALIQMLIAkkACADC+gBAQN/IwAhBiMAQT9qQUBxJAAjACEFIwBBwAFqJAAgAUF/akEYdEEYdUH/AXFBP0oEQBAACyAFQYABaiEEIAJFIANBf2pBGHRBGHVB/wFxQT9KcgRAEAAFIAQgAToAACAEIAM6AAEgBEEBOgACIARBAToAAyAEQQRqEHUgBEEIakIAEBIgBEIANwMQIARCADcDGCAEQgA3AyAgBEIANwMoIARCADcDMCAEQgA3AzggACAEEHYgBSADQf8BcSIBakEAQYABIAFrEBoaIAUgAiABEBgaIAAgBUKAARA7IAVBgAEQCiAGJAALC5UBAQJ/IwAhAyMAQT9qQUBxJAAjACECIwBBQGskACABQX9qQRh0QRh1Qf8BcUE/SgRAEAAFIAIgAToAACACQQA6AAEgAkEBOgACIAJBAToAAyACQQRqEHUgAkEIakIAEBIgAkIANwMQIAJCADcDGCACQgA3AyAgAkIANwMoIAJCADcDMCACQgA3AzggACACEHYgAyQACwsQACAAIAEgAiADIAQgBRByC6wBAQN/IwAhCCMAQeACaiQAIAhBEGoiCiAGIAcQmAEgCEHQAGoiCSAKECYgCkHAABAKIAkgBCAFEA8gCEHQAmoiBCAFEBIgCSAEQggQDyAJIAEgAhAPIAQgAhASIAkgBEIIEA8gCSAIECUgCUGAAhAKIAggAxBDIQMgCEEQEAogAARAIAMEfyAAQQAgAqcQGhpBfwUgACABIAIgBiAHEJcBQQALIQMLIAgkACADC2MBBX9BICEBQQEhAgNAIAJB/wFxIgIgACABQX9qIgFqLAAAIgRB/wFxIAFBsIQCaiwAACIFQf8BcWtBCHVxIANyIQMgBCAFc0H/AXFB//8DakEIdiACcSECIAENAAsgA0EARwvlIAIBfzd+IAEsAAAgASwAASABQQJqIgQsAAAQEEL///8AgyEFIAQQEUIFiEL///8AgyEGIAEsAAUgASwABiABQQdqIgQsAAAQEEICiEL///8AgyEOIAQQEUIHiEL///8AgyEPIAFBCmoQEUIEiEL///8AgyEKIAEsAA0gASwADiABQQ9qIgQsAAAQEEIBiEL///8AgyEHIAQQEUIGiEL///8AgyELIAEsABIgASwAEyABLAAUEBBCA4hC////AIMhDSABLAAVIAEsABYgAUEXaiIELAAAEBBC////AIMhCCAEEBFCBYhC////AIMhECABLAAaIAEsABsgAUEcaiIBLAAAEBBCAohC////AIMhDCABEBFCB4ghCSACLAAAIAIsAAEgAkECaiIBLAAAEBBC////AIMhGCABEBFCBYhC////AIMhGSACLAAFIAIsAAYgAkEHaiIBLAAAEBBCAohC////AIMhGyABEBFCB4hC////AIMhHCACQQpqEBFCBIhC////AIMhGiACLAANIAIsAA4gAkEPaiIBLAAAEBBCAYhC////AIMhFSABEBFCBohC////AIMhFiACLAASIAIsABMgAiwAFBAQQgOIQv///wCDIREgAiwAFSACLAAWIAJBF2oiASwAABAQQv///wCDIRMgARARQgWIQv///wCDIRQgAiwAGiACLAAbIAJBHGoiASwAABAQQgKIQv///wCDIRIgARARQgeIIRcgAywAACADLAABIANBAmoiASwAABAQQv///wCDIR0gARARQgWIQv///wCDIR4gAywABSADLAAGIANBB2oiASwAABAQQgKIQv///wCDITEgARARQgeIQv///wCDITIgA0EKahARQgSIQv///wCDITMgAywADSADLAAOIANBD2oiASwAABAQQgGIQv///wCDITQgARARQgaIQv///wCDISogAywAEiADLAATIAMsABQQEEIDiEL///8AgyE1IAMsABUgAywAFiADQRdqIgEsAAAQEEL///8AgyErIAEQEUIFiEL///8AgyEsIBAgGX4gDCAYfnwgCCAbfnwgDSAcfnwgCyAafnwgByAVfnwgCiAWfnwgDiATfnwgDyARfnwgBiAUfnwgBSASfnwgAywAGiADLAAbIANBHGoiASwAABAQQgKIQv///wCDfCItQoCAQH0hJSAMIBR+IAkgE358IBAgEn58IAggF358IAwgE34gCSARfnwgECAUfnwgCCASfnwgDSAXfnwiH0KAgEB9IiZCFYd8ISEgDCAXfiAJIBJ+fCAMIBJ+IAkgFH58IBAgF358IiJCgIBAfSIkQhWHfCEgIAkgF34iJ0KAgEB9IihCFYchIyAFIBl+IAYgGH58IB58IB0gBSAYfnwiNkKAgEB9IjdCFYh8IjhCgIBAfSEwIB8gJkKAgIB/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IAVB////H3E2AgggACAGQf///w9xNgIMIAAgB0H///8fcTYCECAAIAhB////D3E2AhQgACAJQf///x9xNgIYIAAgAUH///8PcTYCHCAAIANB////H3E2AiAgACAKIANBGnVqQf///w9xNgIkC0MBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQSBqJAAgAyACIAEQoQEEf0F/BSAAQdCWAiADEFFBAAshACAFCyQAIAALZQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBBQGskACADIAJCIBA5IAEgAykAADcAACABIAMpAAg3AAggASADKQAQNwAQIAEgAykAGDcAGCADQcAAEAogACABEGghACAFCyQAIAALBABBMAtRAQN/An8jACEHIwBBP2pBQHEkACMAIQUjAEEgaiQAIAJCMFQEf0F/BSAFIAEgAxCDASAAIAFBIGogAkJgfCAFIAEgBBCEAQshACAHCyQAIAALigEBBH8jACEFIwBB4ABqJAAgBUFAayEGIAVBIGoiBCAFIgcQiAEEQEF/IQAFIAAgBCkAADcAACAAIAQpAAg3AAggACAEKQAQNwAQIAAgBCkAGDcAGCAGIAQgAxCDASAAQSBqIAEgAiAGIAMgBxCGASEAIAdBIBAKIARBIBAKIAZBGBAKCyAFJAAgAAshACACQhBUBH9BfwUgACABQRBqIAEgAkJwfCADIAQQWQsLKAAgAkLv////D1YEQBAABSAAQRBqIAAgASACIAMgBBBaGkEADwtBAAszAQF+IAGtIAKtQiCGhCIDQoCAgIAQVARAIAAgA6cQHwVBupUCQc6VAkHFAUHolQIQAgsLFQAgACABIAKtIAOtQiCGhCAEEJsBCxQAIAAgASACrSADrUIghoQQHUEACxcAIAAgASACIAOtIAStQiCGhCAFEJQCCxkAIAAgASACIAOtIAStQiCGhCAFEJkBQQALFwAgACABIAIgA60gBK1CIIaEIAUQkwILFwAgACABIAKtIAOtQiCGhCAEEKICQQALJQAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCRCpAgslACAAIAEgAiADIAQgBa0gBq1CIIaEIAcgCK0gCa1CIIaEEKcCCxcAIAAgASACrSADrUIghoQgBCAFEKwCCxgAIAAgASACIAOtIAStQiCGhCAFIAYQZgsXACAAIAEgAq0gA61CIIaEIAQgBRCtAgsYACAAIAEgAiADrSAErUIghoQgBSAGEGcLEwAgACABIAKtIAOtQiCGhBC0AgsTACAAIAGtIAKtQiCGhCADELMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxC1AgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEKIBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChC2AgsXACAAIAEgAq0gA61CIIaEIAQgBRDZAgsUACAAIAEgAq0gA61CIIaEEDlBAAsSACAAIAEgAq0gA61CIIaEECcLGQAgACABIAIgA60gBK1CIIaEIAUgBhCvAQsXACAAIAEgAq0gA61CIIaEIAQgBRDCAQsVACAAIAEgAq0gA61CIIaEIAQQwwELFwAgACABIAKtIAOtQiCGhCAEIAUQxAELGQAgACABIAKtIAOtQiCGhCAEIAUgBhCEAQsYACAAIAEgAiADrSAErUIghoQgBSAGEFkLGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEIUBCwsAIAAgASACEMABCxcAIAAgASACrSADrUIghoQgBCAFEMUBCxkAIAAgASACrSADrUIghoQgBCAFIAYQhgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBaCxsAIAAgASACIAOtIAStQiCGhCAFIAYgBxCHAQsVACAAIAEgAq0gA61CIIaEIAQQ7QELFwAgACABIAKtIAOtQiCGhCAEEIkBQQALJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQnwILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEI4CCz4BAn8jACEEIwBBIGokACAEIAEgAiADEIkBQX8gACAEEJEBIAAgBEYbIQEgBCAAQSAQQSABciEFIAQkACAFCyYAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxB7CyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQtQELJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCsAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEN0CCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCCAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKELwBCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQsAELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDkAgvQAgEGfyAAQYB/TwRAQYiXAkEwNgIAQQAPC0EQIABBC2pBeHEgAEELSRsiBEHMAGoQISIARQRAQQAPCyAAQXhqIQEgAEE/cQR/IABBfGoiBSgCACIGQXhxIABBP2pBQHEiAEF4aiICIABBOGogAiABa0EPSxsiACABayICayEDIAZBA3EEQCAAIAAoAgRBAXEgA3JBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSAFKAIAQQFxIAJyQQJyNgIAIAAgACgCBEEBcjYCBCABIAIQigEFIAAgASgCACACajYCACAAIAM2AgQLIAAFIAEiAAshAiAAKAIEIgFBA3EEQCABQXhxIgMgBEEQaksEQCAAIAFBAXEgBHJBAnI2AgQgAiAEaiIAIAMgBGsiAUEDcjYCBCACIANqIgQgBCgCBEEBcjYCBCAAIAEQigELCyACQQhqCy4BAX8gABAhIgFFBEAgAQ8LIAFBfGooAgBBA3FFBEAgAQ8LIAFBACAAEBoaIAEL+gEBA38gAUH/AXEiAgRAAkAgAEEDcQRAIAFB/wFxIQMDQCAALAAAIgQgA0EYdEEYdUYgBEVyDQIgAEEBaiIAQQNxDQALCyACQYGChAhsIQMgACgCACICQYCBgoR4cUGAgYKEeHMgAkH//ft3anFFBEADQCACIANzIgJBgIGChHhxQYCBgoR4cyACQf/9+3dqcUUEQCAAQQRqIgAoAgAiAkGAgYKEeHFBgIGChHhzIAJB//37d2pxRQ0BCwsLIAFB/wFxIQIDQCAAQQFqIQEgACwAACIDIAJBGHRBGHVGIANFckUEQCABIQAMAQsLCwUgABAjIABqIQALIAALQgEBfyMAIQIjAEFAayQAIAAgAhCBAiABIAIpAAA3AAAgASACKQAINwAIIAEgAikAEDcAECABIAIpABg3ABggAiQACwYAQYiXAguhAQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBB8ABqJAAgAyACKQAANwAAIAMgAikACDcACCADIAIpABA3ABAgAyACKQAYNwAYIANB4ABqIgIgASkAADcDACACQgA3AwggA0EgaiIBIAIgAxB4QQAhAgNAIAAgAmogASACaiwAADoAACACQQFqIgJBIEcNAAsgAUHAABAKIANBIBAKIAULJAALBABBCgsGAEGplgILyAEBCH8CfyMAIQsjAEE/akFAcSQAIwAhBCMAQRBqJAAgBEEANgIAIANBf2ogAkkEfyABIAJBf2oiCGohCUEAIQJBACEBA0AgCSABay0AACIKQYABc0H/A2ogAkH/AXEiAkH/A2ogBCgCAEH/A2pxcUEIdkEBcSEGIAIgCnIhAiAEIAQoAgBBACAGayABcXI2AgAgBiAFQf8BcXIhBSABQQFqIgEgA0cNAAsgACAIIAQoAgBrNgIAIAVBf2oFQX8LIQAgCwskACAAC9YBAQV/An8jACEJIwBBP2pBQHEkACMAIQYjAEEQaiQAIAMEfyADIANBf2oiBXEEfyACIANwBSACIAVxCyEIIAUgCGsiBSACQX9zTwRAEAALIAIgBWoiAiAESQR/IAAEQCAAIAJBAWo2AgALIAEgAmohASAGQQA6AABBACEAA38gASAAayICIAIsAAAgBiwAAHFB/wFxIAAgBXNBf2pBGHYiAkGAAXFyOgAAIAYgBi0AACACcjoAACAAQQFqIgAgA0cNAEEACwVBfwsFQX8LIQAgCQskACAACzYBAX9BHhADIgBBAEoEQEGElwIgADYCAAVBhJcCKAIAIQALIABBEEkEQBAABUHwlgJBEBAfCws1AQF/IwAhAiMAQUBrJAAgACACECogAEHQAWoiACACQsAAEB0gACABECogAkHAABAKIAIkAAs2AQN/An8jACECIwBBP2pBQHEkACMAIQAjAEEQaiQAIAAQjQEgACgCAARAIAAQjQELIAILJAALIwBBgJcCKAIABH9BAQUQggIQkAEQgAJBgJcCQQE2AgBBAAsLgQEBBH8gBAR/An8gA0UhBiACKAIAIQUCQANAIAUgAUkEQCAAIAVqLAAAIgchCCAHQT1GBEAgBEF/aiEEBSAGDQMgAyAIEEBF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BMUAKNUyAdRghP9YirT+5JJ8/7j29wBBdVb//WbS/v55JACJcwP/PBjYAIYSHQA74mEAsI5HAAfRoQC9VDP+m/pIANVU6/8t3uAA7pSP/6oqNf9Op3UAugAo/32xZ/9F4UIA4wdYAUusBgCpLeMBECRG/zICCf+LwRYAj7fn/tpFMgDsOKEB1YMqAIqRLP6I5Sj/MT8j/z2R9f9lwAL+6KdxAJhoJgF5udoAeYvT/nfwIwBBvdn+u7Oi/6C75gA++A7/PE5hAP/3o//hO1v/a0c6//EvIQEydewA27E//vRaswAjwtf/vUMy/xeHgQBovSX/uTnCACM+5//c+GwADOeyAI9QWwGDXWX/kCcCAf/6sgAFEez+iyAuAMy8Jv71czT/v3FJ/r9sRf8WRfUBF8uyAKpjqgBB+G8AJWyZ/0AlRQAAWD7+WZSQ/79E4AHxJzUAKcvt/5F+wv/dKv3/GWOXAGH93wFKczH/Bq9I/zuwywB8t/kB5ORjAIEMz/6owMP/zLAQ/pjqqwBNJVX/IXiH/47C4wEf1joA1bt9/+guPP++dCr+l7IT/zM+7f7M7MEAwug8AKwinf+9ELj+ZwNf/43pJP4pGQv/FcOmAHb1LQBD1ZX/nwwS/7uk4wGgGQUADE7DASvF4QAwjin+xJs8/9/HEgGRiJwA/HWp/pHi7gDvF2sAbbW8/+ZwMf5Jqu3/57fj/1DcFADCa38Bf81lAC40xQHSqyT/WANa/ziXjQBgu///Kk7IAP5GRgH0fagAzESKAXzXRgBmQsj+ETTkAHXcj/7L+HsAOBKu/7qXpP8z6NABoOQr//kdGQFEvj8ADQAAAAD/AAAAAPUAAAAAAAD7AAAAAAAA/QAAAADzAAAAAAcAAAAAAAMAAAAA8wAAAAAFAEGLgQILQAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAQcyCAgsBAQBB8IICCwEBAEGQgwILsAEm6JWPwrInsEXD9Iny75jw1d+sBdPGMzmxOAKIbVP8BccXanA9TdhPujwLdg0QZw8qIFP6LDnMxk7H/XeSrAN67P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBz4QCC8IFEAjJvPNn5glqO6fKhIWuZ7sr+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/LXxdYR0qMGURsgABBsIsCCwEBAEHQiwILwQHg63p8O0G4rhZW4/rxn8Rq2gmN65wysf2GYgUWX0m4AF+clbyjUIwksdCxVZyD71sERFzEWByOhtgiTt3QnxFX7P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBAEGgjQILjwlTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAb3V0bGVuIDw9IFVJTlQ4X01BWABjcnlwdG9fZ2VuZXJpY2hhc2gvYmxha2UyYi9yZWYvZ2VuZXJpY2hhc2hfYmxha2UyYi5jAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX2ZpbmFsACRhcmdvbjJpZAAkYXJnb24yaQAkdj0AJG09ACx0PQAscD0AJGFyZ29uMmlkJHY9ACRhcmdvbjJpJHY9ACRhcmdvbjJpZCQAJGFyZ29uMmkkACJ7IHJldHVybiBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUoKTsgfSIAeyBpZiAoTW9kdWxlLmdldFJhbmRvbVZhbHVlID09PSB1bmRlZmluZWQpIHsgdHJ5IHsgdmFyIHdpbmRvd18gPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdyA6IHNlbGY7IHZhciBjcnlwdG9fID0gdHlwZW9mIHdpbmRvd18uY3J5cHRvICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvd18uY3J5cHRvIDogd2luZG93Xy5tc0NyeXB0bzsgdmFyIHJhbmRvbVZhbHVlc1N0YW5kYXJkID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBuZXcgVWludDMyQXJyYXkoMSk7IGNyeXB0b18uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7IHJldHVybiBidWZbMF0gPj4+IDA7IH07IHJhbmRvbVZhbHVlc1N0YW5kYXJkKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlc1N0YW5kYXJkOyB9IGNhdGNoIChlKSB7IHRyeSB7IHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTsgdmFyIHJhbmRvbVZhbHVlTm9kZUpTID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBjcnlwdG9bJ3JhbmRvbUJ5dGVzJ10oNCk7IHJldHVybiAoYnVmWzBdIDw8IDI0IHwgYnVmWzFdIDw8IDE2IHwgYnVmWzJdIDw8IDggfCBidWZbM10pID4+PiAwOyB9OyByYW5kb21WYWx1ZU5vZGVKUygpOyBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPSByYW5kb21WYWx1ZU5vZGVKUzsgfSBjYXRjaCAoZSkgeyB0aHJvdyAnTm8gc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvdW5kJzsgfSB9IH0gfQBMaWJzb2RpdW1EUkdidWZfbGVuIDw9IFNJWkVfTUFYAHJhbmRvbWJ5dGVzL3JhbmRvbWJ5dGVzLmMAcmFuZG9tYnl0ZXMAYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAxLjAuMTg=";function ne(){try{if(E)return new Uint8Array(E);var e=he(ie);if(e)return e;if(d)return d(ie);throw"both async and sync fetching of the wasm failed"}catch(e){W(e)}}ee(ie)||(Ae=ie,ie=n.locateFile?n.locateFile(Ae,B):B+Ae),n.asm=function(){var e={env:ge,wasi_unstable:ge,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:Q};function A(e,A){var t=e.exports;n.asm=t,function(e){if(z--,n.monitorRunDependencies&&n.monitorRunDependencies(z),0==z&&(null!==V&&(clearInterval(V),V=null),$)){var A=$;$=null,A()}}()}function t(e){A(e.instance)}function r(A){return(E||!u&&!g||"function"!=typeof fetch?new Promise(function(e,A){e(ne())}):fetch(ie,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+ie+"'";return e.arrayBuffer()}).catch(function(){return ne()})).then(function(A){return WebAssembly.instantiate(A,e)}).then(A,function(e){C("failed to asynchronously prepare wasm: "+e),W(e)})}if(z++,n.monitorRunDependencies&&n.monitorRunDependencies(z),n.instantiateWasm)try{return n.instantiateWasm(e,A)}catch(e){return C("Module.instantiateWasm callback failed with error: "+e),!1}return function(){if(E||"function"!=typeof WebAssembly.instantiateStreaming||ee(ie)||"function"!=typeof fetch)return r(t);fetch(ie,{credentials:"same-origin"}).then(function(A){return WebAssembly.instantiateStreaming(A,e).then(t,function(e){C("wasm streaming compile failed: "+e),C("falling back to ArrayBuffer instantiation"),r(t)})})}(),{}};var ae=[function(){return n.getRandomValue()},function(){if(void 0===n.getRandomValue)try{var e="object"==typeof window?window:self,A=void 0!==e.crypto?e.crypto:e.msCrypto,t=function(){var e=new Uint32Array(1);return A.getRandomValues(e),e[0]>>>0};t(),n.getRandomValue=t}catch(e){try{var r=_$cryptoBrowserify_82({}),i=function(){var e=r.randomBytes(4);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0};i(),n.getRandomValue=i}catch(e){throw"No secure random number generator found"}}}];function oe(){return k.length}var se=!1;function fe(e){for(var A=[],t=0;t255&&(se&&m(!1,"Character code "+r+" ("+String.fromCharCode(r)+") at offset "+t+" not in 0x00-0xFF."),r&=255),A.push(String.fromCharCode(r))}return A.join("")}var ce="function"==typeof atob?atob:function(e){var A,t,r,i,n,a,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",s="",f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{A=o.indexOf(e.charAt(f++))<<2|(i=o.indexOf(e.charAt(f++)))>>4,t=(15&i)<<4|(n=o.indexOf(e.charAt(f++)))>>2,r=(3&n)<<6|(a=o.indexOf(e.charAt(f++))),s+=String.fromCharCode(A),64!==n&&(s+=String.fromCharCode(t)),64!==a&&(s+=String.fromCharCode(r))}while(f2147418112)return!1;for(var t=Math.max(A,16777216);t>16),G(b.buffer),1}catch(e){}}(t)},d:function(e){switch(e){case 30:return 16384;case 85:return 131068;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:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return n.___errno_location&&(F[n.___errno_location()>>2]=28),-1},memory:b,table:w},_e=n.asm({},ge,S);function Ie(e){function A(){ue||(ue=!0,v||(N(T),N(K),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)e=n.postRun.shift(),J.unshift(e);var e;N(J)}()))}e=e||h,z>0||(function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)e=n.preRun.shift(),L.unshift(e);var e;N(L)}(),z>0||(n.setStatus?(n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),A()},1)):A()))}if(n.asm=_e,n.___errno_location=function(){return n.asm.h.apply(null,arguments)},n._crypto_aead_chacha20poly1305_abytes=function(){return n.asm.i.apply(null,arguments)},n._crypto_aead_chacha20poly1305_decrypt=function(){return n.asm.j.apply(null,arguments)},n._crypto_aead_chacha20poly1305_decrypt_detached=function(){return n.asm.k.apply(null,arguments)},n._crypto_aead_chacha20poly1305_encrypt=function(){return n.asm.l.apply(null,arguments)},n._crypto_aead_chacha20poly1305_encrypt_detached=function(){return n.asm.m.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_abytes=function(){return n.asm.n.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_decrypt=function(){return n.asm.o.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_decrypt_detached=function(){return n.asm.p.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_encrypt=function(){return n.asm.q.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_encrypt_detached=function(){return n.asm.r.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_keybytes=function(){return n.asm.s.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_keygen=function(){return n.asm.t.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_messagebytes_max=function(){return n.asm.u.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_npubbytes=function(){return n.asm.v.apply(null,arguments)},n._crypto_aead_chacha20poly1305_ietf_nsecbytes=function(){return n.asm.w.apply(null,arguments)},n._crypto_aead_chacha20poly1305_keybytes=function(){return n.asm.x.apply(null,arguments)},n._crypto_aead_chacha20poly1305_keygen=function(){return n.asm.y.apply(null,arguments)},n._crypto_aead_chacha20poly1305_messagebytes_max=function(){return n.asm.z.apply(null,arguments)},n._crypto_aead_chacha20poly1305_npubbytes=function(){return n.asm.A.apply(null,arguments)},n._crypto_aead_chacha20poly1305_nsecbytes=function(){return n.asm.B.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_abytes=function(){return n.asm.C.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_decrypt=function(){return n.asm.D.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_decrypt_detached=function(){return n.asm.E.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_encrypt=function(){return n.asm.F.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_encrypt_detached=function(){return n.asm.G.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_keybytes=function(){return n.asm.H.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_keygen=function(){return n.asm.I.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_messagebytes_max=function(){return n.asm.J.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_npubbytes=function(){return n.asm.K.apply(null,arguments)},n._crypto_aead_xchacha20poly1305_ietf_nsecbytes=function(){return n.asm.L.apply(null,arguments)},n._crypto_auth=function(){return n.asm.M.apply(null,arguments)},n._crypto_auth_bytes=function(){return n.asm.N.apply(null,arguments)},n._crypto_auth_keybytes=function(){return n.asm.O.apply(null,arguments)},n._crypto_auth_keygen=function(){return n.asm.P.apply(null,arguments)},n._crypto_auth_verify=function(){return n.asm.Q.apply(null,arguments)},n._crypto_box_beforenm=function(){return n.asm.R.apply(null,arguments)},n._crypto_box_beforenmbytes=function(){return n.asm.S.apply(null,arguments)},n._crypto_box_detached=function(){return n.asm.T.apply(null,arguments)},n._crypto_box_detached_afternm=function(){return n.asm.U.apply(null,arguments)},n._crypto_box_easy=function(){return n.asm.V.apply(null,arguments)},n._crypto_box_easy_afternm=function(){return n.asm.W.apply(null,arguments)},n._crypto_box_keypair=function(){return n.asm.X.apply(null,arguments)},n._crypto_box_macbytes=function(){return n.asm.Y.apply(null,arguments)},n._crypto_box_messagebytes_max=function(){return n.asm.Z.apply(null,arguments)},n._crypto_box_noncebytes=function(){return n.asm._.apply(null,arguments)},n._crypto_box_open_detached=function(){return n.asm.$.apply(null,arguments)},n._crypto_box_open_detached_afternm=function(){return n.asm.aa.apply(null,arguments)},n._crypto_box_open_easy=function(){return n.asm.ba.apply(null,arguments)},n._crypto_box_open_easy_afternm=function(){return n.asm.ca.apply(null,arguments)},n._crypto_box_publickeybytes=function(){return n.asm.da.apply(null,arguments)},n._crypto_box_seal=function(){return n.asm.ea.apply(null,arguments)},n._crypto_box_seal_open=function(){return n.asm.fa.apply(null,arguments)},n._crypto_box_sealbytes=function(){return n.asm.ga.apply(null,arguments)},n._crypto_box_secretkeybytes=function(){return n.asm.ha.apply(null,arguments)},n._crypto_box_seed_keypair=function(){return n.asm.ia.apply(null,arguments)},n._crypto_box_seedbytes=function(){return n.asm.ja.apply(null,arguments)},n._crypto_generichash=function(){return n.asm.ka.apply(null,arguments)},n._crypto_generichash_bytes=function(){return n.asm.la.apply(null,arguments)},n._crypto_generichash_bytes_max=function(){return n.asm.ma.apply(null,arguments)},n._crypto_generichash_bytes_min=function(){return n.asm.na.apply(null,arguments)},n._crypto_generichash_final=function(){return n.asm.oa.apply(null,arguments)},n._crypto_generichash_init=function(){return n.asm.pa.apply(null,arguments)},n._crypto_generichash_keybytes=function(){return n.asm.qa.apply(null,arguments)},n._crypto_generichash_keybytes_max=function(){return n.asm.ra.apply(null,arguments)},n._crypto_generichash_keybytes_min=function(){return n.asm.sa.apply(null,arguments)},n._crypto_generichash_keygen=function(){return n.asm.ta.apply(null,arguments)},n._crypto_generichash_statebytes=function(){return n.asm.ua.apply(null,arguments)},n._crypto_generichash_update=function(){return n.asm.va.apply(null,arguments)},n._crypto_hash=function(){return n.asm.wa.apply(null,arguments)},n._crypto_hash_bytes=function(){return n.asm.xa.apply(null,arguments)},n._crypto_kdf_bytes_max=function(){return n.asm.ya.apply(null,arguments)},n._crypto_kdf_bytes_min=function(){return n.asm.za.apply(null,arguments)},n._crypto_kdf_contextbytes=function(){return n.asm.Aa.apply(null,arguments)},n._crypto_kdf_derive_from_key=function(){return n.asm.Ba.apply(null,arguments)},n._crypto_kdf_keybytes=function(){return n.asm.Ca.apply(null,arguments)},n._crypto_kdf_keygen=function(){return n.asm.Da.apply(null,arguments)},n._crypto_kx_client_session_keys=function(){return n.asm.Ea.apply(null,arguments)},n._crypto_kx_keypair=function(){return n.asm.Fa.apply(null,arguments)},n._crypto_kx_publickeybytes=function(){return n.asm.Ga.apply(null,arguments)},n._crypto_kx_secretkeybytes=function(){return n.asm.Ha.apply(null,arguments)},n._crypto_kx_seed_keypair=function(){return n.asm.Ia.apply(null,arguments)},n._crypto_kx_seedbytes=function(){return n.asm.Ja.apply(null,arguments)},n._crypto_kx_server_session_keys=function(){return n.asm.Ka.apply(null,arguments)},n._crypto_kx_sessionkeybytes=function(){return n.asm.La.apply(null,arguments)},n._crypto_pwhash=function(){return n.asm.Ma.apply(null,arguments)},n._crypto_pwhash_alg_argon2i13=function(){return n.asm.Na.apply(null,arguments)},n._crypto_pwhash_alg_argon2id13=function(){return n.asm.Oa.apply(null,arguments)},n._crypto_pwhash_alg_default=function(){return n.asm.Pa.apply(null,arguments)},n._crypto_pwhash_bytes_max=function(){return n.asm.Qa.apply(null,arguments)},n._crypto_pwhash_bytes_min=function(){return n.asm.Ra.apply(null,arguments)},n._crypto_pwhash_memlimit_interactive=function(){return n.asm.Sa.apply(null,arguments)},n._crypto_pwhash_memlimit_max=function(){return n.asm.Ta.apply(null,arguments)},n._crypto_pwhash_memlimit_min=function(){return n.asm.Ua.apply(null,arguments)},n._crypto_pwhash_memlimit_moderate=function(){return n.asm.Va.apply(null,arguments)},n._crypto_pwhash_memlimit_sensitive=function(){return n.asm.Wa.apply(null,arguments)},n._crypto_pwhash_opslimit_interactive=function(){return n.asm.Xa.apply(null,arguments)},n._crypto_pwhash_opslimit_max=function(){return n.asm.Ya.apply(null,arguments)},n._crypto_pwhash_opslimit_min=function(){return n.asm.Za.apply(null,arguments)},n._crypto_pwhash_opslimit_moderate=function(){return n.asm._a.apply(null,arguments)},n._crypto_pwhash_opslimit_sensitive=function(){return n.asm.$a.apply(null,arguments)},n._crypto_pwhash_passwd_max=function(){return n.asm.ab.apply(null,arguments)},n._crypto_pwhash_passwd_min=function(){return n.asm.bb.apply(null,arguments)},n._crypto_pwhash_saltbytes=function(){return n.asm.cb.apply(null,arguments)},n._crypto_pwhash_str=function(){return n.asm.db.apply(null,arguments)},n._crypto_pwhash_str_alg=function(){return n.asm.eb.apply(null,arguments)},n._crypto_pwhash_str_needs_rehash=function(){return n.asm.fb.apply(null,arguments)},n._crypto_pwhash_str_verify=function(){return n.asm.gb.apply(null,arguments)},n._crypto_pwhash_strbytes=function(){return n.asm.hb.apply(null,arguments)},n._crypto_pwhash_strprefix=function(){return n.asm.ib.apply(null,arguments)},n._crypto_scalarmult=function(){return n.asm.jb.apply(null,arguments)},n._crypto_scalarmult_base=function(){return n.asm.kb.apply(null,arguments)},n._crypto_scalarmult_bytes=function(){return n.asm.lb.apply(null,arguments)},n._crypto_scalarmult_scalarbytes=function(){return n.asm.mb.apply(null,arguments)},n._crypto_secretbox_detached=function(){return n.asm.nb.apply(null,arguments)},n._crypto_secretbox_easy=function(){return n.asm.ob.apply(null,arguments)},n._crypto_secretbox_keybytes=function(){return n.asm.pb.apply(null,arguments)},n._crypto_secretbox_keygen=function(){return n.asm.qb.apply(null,arguments)},n._crypto_secretbox_macbytes=function(){return n.asm.rb.apply(null,arguments)},n._crypto_secretbox_messagebytes_max=function(){return n.asm.sb.apply(null,arguments)},n._crypto_secretbox_noncebytes=function(){return n.asm.tb.apply(null,arguments)},n._crypto_secretbox_open_detached=function(){return n.asm.ub.apply(null,arguments)},n._crypto_secretbox_open_easy=function(){return n.asm.vb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_abytes=function(){return n.asm.wb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_headerbytes=function(){return n.asm.xb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_init_pull=function(){return n.asm.yb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_init_push=function(){return n.asm.zb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_keybytes=function(){return n.asm.Ab.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_keygen=function(){return n.asm.Bb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_messagebytes_max=function(){return n.asm.Cb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_pull=function(){return n.asm.Db.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_push=function(){return n.asm.Eb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_rekey=function(){return n.asm.Fb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_statebytes=function(){return n.asm.Gb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_tag_final=function(){return n.asm.Hb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_tag_message=function(){return n.asm.Ib.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_tag_push=function(){return n.asm.Jb.apply(null,arguments)},n._crypto_secretstream_xchacha20poly1305_tag_rekey=function(){return n.asm.Kb.apply(null,arguments)},n._crypto_shorthash=function(){return n.asm.Lb.apply(null,arguments)},n._crypto_shorthash_bytes=function(){return n.asm.Mb.apply(null,arguments)},n._crypto_shorthash_keybytes=function(){return n.asm.Nb.apply(null,arguments)},n._crypto_shorthash_keygen=function(){return n.asm.Ob.apply(null,arguments)},n._crypto_sign=function(){return n.asm.Pb.apply(null,arguments)},n._crypto_sign_bytes=function(){return n.asm.Qb.apply(null,arguments)},n._crypto_sign_detached=function(){return n.asm.Rb.apply(null,arguments)},n._crypto_sign_ed25519_pk_to_curve25519=function(){return n.asm.Sb.apply(null,arguments)},n._crypto_sign_ed25519_sk_to_curve25519=function(){return n.asm.Tb.apply(null,arguments)},n._crypto_sign_final_create=function(){return n.asm.Ub.apply(null,arguments)},n._crypto_sign_final_verify=function(){return n.asm.Vb.apply(null,arguments)},n._crypto_sign_init=function(){return n.asm.Wb.apply(null,arguments)},n._crypto_sign_keypair=function(){return n.asm.Xb.apply(null,arguments)},n._crypto_sign_messagebytes_max=function(){return n.asm.Yb.apply(null,arguments)},n._crypto_sign_open=function(){return n.asm.Zb.apply(null,arguments)},n._crypto_sign_publickeybytes=function(){return n.asm._b.apply(null,arguments)},n._crypto_sign_secretkeybytes=function(){return n.asm.$b.apply(null,arguments)},n._crypto_sign_seed_keypair=function(){return n.asm.ac.apply(null,arguments)},n._crypto_sign_seedbytes=function(){return n.asm.bc.apply(null,arguments)},n._crypto_sign_statebytes=function(){return n.asm.cc.apply(null,arguments)},n._crypto_sign_update=function(){return n.asm.dc.apply(null,arguments)},n._crypto_sign_verify_detached=function(){return n.asm.ec.apply(null,arguments)},n._free=function(){return n.asm.fc.apply(null,arguments)},n._malloc=function(){return n.asm.gc.apply(null,arguments)},n._randombytes=function(){return n.asm.hc.apply(null,arguments)},n._randombytes_buf=function(){return n.asm.ic.apply(null,arguments)},n._randombytes_buf_deterministic=function(){return n.asm.jc.apply(null,arguments)},n._randombytes_close=function(){return n.asm.kc.apply(null,arguments)},n._randombytes_random=function(){return n.asm.lc.apply(null,arguments)},n._randombytes_seedbytes=function(){return n.asm.mc.apply(null,arguments)},n._randombytes_stir=function(){return n.asm.nc.apply(null,arguments)},n._randombytes_uniform=function(){return n.asm.oc.apply(null,arguments)},n._sodium_base642bin=function(){return n.asm.pc.apply(null,arguments)},n._sodium_base64_encoded_len=function(){return n.asm.qc.apply(null,arguments)},n._sodium_bin2base64=function(){return n.asm.rc.apply(null,arguments)},n._sodium_bin2hex=function(){return n.asm.sc.apply(null,arguments)},n._sodium_hex2bin=function(){return n.asm.tc.apply(null,arguments)},n._sodium_init=function(){return n.asm.uc.apply(null,arguments)},n._sodium_library_minimal=function(){return n.asm.vc.apply(null,arguments)},n._sodium_library_version_major=function(){return n.asm.wc.apply(null,arguments)},n._sodium_library_version_minor=function(){return n.asm.xc.apply(null,arguments)},n._sodium_pad=function(){return n.asm.yc.apply(null,arguments)},n._sodium_unpad=function(){return n.asm.zc.apply(null,arguments)},n._sodium_version_string=function(){return n.asm.Ac.apply(null,arguments)},n.asm=_e,n.setValue=function(e,A,t,r){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":k[e>>0]=A;break;case"i16":M[e>>1]=A;break;case"i32":F[e>>2]=A;break;case"i64":re=[A>>>0,(te=A,+X(te)>=1?te>0?(0|q(+O(te/4294967296),4294967295))>>>0:~~+j((te-+(~~te>>>0))/4294967296)>>>0:0)],F[e>>2]=re[0],F[e+4>>2]=re[1];break;case"float":H[e>>2]=A;break;case"double":P[e>>3]=A;break;default:W("invalid type for setValue: "+t)}},n.getValue=function(e,A,t){switch("*"===(A=A||"i8").charAt(A.length-1)&&(A="i32"),A){case"i1":case"i8":return k[e>>0];case"i16":return M[e>>1];case"i32":case"i64":return F[e>>2];case"float":return H[e>>2];case"double":return P[e>>3];default:W("invalid type for getValue: "+A)}return null},n.UTF8ToString=x,$=function e(){ue||Ie(),ue||($=e)},n.run=Ie,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();Ie()}).catch(function(){a.useBackupModule()}),"object"==typeof e&&"function"==typeof e.removeAllListeners&&(e.removeAllListeners("uncaughtException"),e.removeAllListeners("unhandledRejection")),i}"function"==typeof define&&define.amd?define(["exports"],i):"object"==typeof _$libsodium_21.exports&&"string"!=typeof _$libsodium_21.exports.nodeName?i(_$libsodium_21.exports):r.libsodium=i(r.libsodium_mod||(r.commonJsStrict={}))}(this)}).call(this,_$browser_145,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},_$buffer_74({}).Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/libsodium/dist/modules"),_$libsodium_21=_$libsodium_21.exports;var _$libsodiumWrappers_20={};!function(e){function A(e,A){"use strict";var t,r="uint8array",i=A.ready.then(function(){function r(){if(0!==t._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var A=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha512","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],r=[E,b,Q,w,v,m,S,k,D,M,F,H,P,R,x,Y,G,U,N,L,T,K,J,X,j,O,q,z,V,$,W,Z,ee,Ae,te,re,ie,ne,ae,oe,se,fe,ce,he,ue,ge,_e,Ie,de,le,pe,Be,ye,Ce,Ee,be,Qe,we,ve,me,Se,ke,De,Me,Fe,He,Pe,Re,xe,Ye,Ge,Ue,Ne,Le,Te,Ke,Je,Xe,je,Oe,qe,ze,Ve,$e,We,Ze,eA,AA,tA,rA,iA,nA,aA,oA,sA,fA,cA,hA,uA,gA,_A,IA,dA,lA,pA,BA,yA,CA,EA,bA,QA,wA,vA,mA,SA,kA,DA,MA,FA,HA,PA,RA,xA,YA,GA,UA,NA,LA,TA],i=0;i=240?(f=4,o=!0):c>=224?(f=3,o=!0):c>=192?(f=2,o=!0):c<128&&(f=1,o=!0)}while(!o);for(var h=f-(n.length-s),u=0;u>8&-39)<<8|87+(A=e[n]>>>4)+(A-10>>8&-39),i+=String.fromCharCode(255&r)+String.fromCharCode(r>>>8);return i}var s={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function f(e){if(null==e)return s.URLSAFE_NO_PADDING;if(e!==s.ORIGINAL&&e!==s.ORIGINAL_NO_PADDING&&e!==s.URLSAFE&&e!=s.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function c(e,A){A=f(A),e=C(i,e,"input");var r,i=[],n=0|Math.floor(e.length/3),o=e.length-3*n,s=4*n+(0!==o?0==(2&A)?4:2+(o>>>1):0),c=new _(s+1),h=I(e);return i.push(h),i.push(c.address),0===t._sodium_bin2base64(c.address,c.length,h,e.length,A)&&p(i,"conversion failed"),c.length=s,r=a(c.to_Uint8Array()),l(i),r}function h(e,A){var t=A||r;if(!u(t))throw new Error(t+" output format is not available");if(e instanceof _){if("uint8array"===t)return e.to_Uint8Array();if("text"===t)return a(e.to_Uint8Array());if("hex"===t)return o(e.to_Uint8Array());if("base64"===t)return c(e.to_Uint8Array(),s.URLSAFE_NO_PADDING);throw new Error('What is output format "'+t+'"?')}if("object"==typeof e){for(var i=Object.keys(e),n={},f=0;f>>24>>>8,s,f);var p=h(u,a);return l(o),p}function ke(e){var A=[];g(e);var r=new _(0|t._crypto_kdf_keybytes()),i=r.address;A.push(i),t._crypto_kdf_keygen(i);var n=h(r,e);return l(A),n}function De(e,A,r,i){var n=[];g(i),e=C(n,e,"clientPublicKey");var a,o=0|t._crypto_kx_publickeybytes();e.length!==o&&B(n,"invalid clientPublicKey length"),a=I(e),n.push(a),A=C(n,A,"clientSecretKey");var s,f=0|t._crypto_kx_secretkeybytes();A.length!==f&&B(n,"invalid clientSecretKey length"),s=I(A),n.push(s),r=C(n,r,"serverPublicKey");var c,u=0|t._crypto_kx_publickeybytes();r.length!==u&&B(n,"invalid serverPublicKey length"),c=I(r),n.push(c);var d=new _(0|t._crypto_kx_sessionkeybytes()),y=d.address;n.push(y);var E=new _(0|t._crypto_kx_sessionkeybytes()),b=E.address;if(n.push(b),0==(0|t._crypto_kx_client_session_keys(y,b,a,s,c))){var Q=h({sharedRx:d,sharedTx:E},i);return l(n),Q}p(n,"invalid usage")}function Me(e){var A=[];g(e);var r=new _(0|t._crypto_kx_publickeybytes()),i=r.address;A.push(i);var n=new _(0|t._crypto_kx_secretkeybytes()),a=n.address;if(A.push(a),0==(0|t._crypto_kx_keypair(i,a))){var o={publicKey:h(r,e),privateKey:h(n,e),keyType:"x25519"};return l(A),o}p(A,"internal error")}function Fe(e,A){var r=[];g(A),e=C(r,e,"seed");var i,n=0|t._crypto_kx_seedbytes();e.length!==n&&B(r,"invalid seed length"),i=I(e),r.push(i);var a=new _(0|t._crypto_kx_publickeybytes()),o=a.address;r.push(o);var s=new _(0|t._crypto_kx_secretkeybytes()),f=s.address;if(r.push(f),0==(0|t._crypto_kx_seed_keypair(o,f,i))){var c={publicKey:h(a,A),privateKey:h(s,A),keyType:"x25519"};return l(r),c}p(r,"internal error")}function He(e,A,r,i){var n=[];g(i),e=C(n,e,"serverPublicKey");var a,o=0|t._crypto_kx_publickeybytes();e.length!==o&&B(n,"invalid serverPublicKey length"),a=I(e),n.push(a),A=C(n,A,"serverSecretKey");var s,f=0|t._crypto_kx_secretkeybytes();A.length!==f&&B(n,"invalid serverSecretKey length"),s=I(A),n.push(s),r=C(n,r,"clientPublicKey");var c,u=0|t._crypto_kx_publickeybytes();r.length!==u&&B(n,"invalid clientPublicKey length"),c=I(r),n.push(c);var d=new _(0|t._crypto_kx_sessionkeybytes()),y=d.address;n.push(y);var E=new _(0|t._crypto_kx_sessionkeybytes()),b=E.address;if(n.push(b),0==(0|t._crypto_kx_server_session_keys(y,b,a,s,c))){var Q=h({sharedRx:d,sharedTx:E},i);return l(n),Q}p(n,"invalid usage")}function Pe(e,A,r){var i=[];g(r);var n=I(e=C(i,e,"message")),a=e.length;i.push(n),A=C(i,A,"key");var o,s=0|t._crypto_onetimeauth_keybytes();A.length!==s&&B(i,"invalid key length"),o=I(A),i.push(o);var f=new _(0|t._crypto_onetimeauth_bytes()),c=f.address;if(i.push(c),0==(0|t._crypto_onetimeauth(c,n,a,0,o))){var u=h(f,r);return l(i),u}p(i,"invalid usage")}function Re(e,A){var r=[];g(A),y(r,e,"state_address");var i=new _(0|t._crypto_onetimeauth_bytes()),n=i.address;if(r.push(n),0==(0|t._crypto_onetimeauth_final(e,n))){var a=(t._free(e),h(i,A));return l(r),a}p(r,"invalid usage")}function xe(e,A){var r=[];g(A);var i=null;null!=e&&(i=I(e=C(r,e,"key")),e.length,r.push(i));var n=new _(144).address;if(0==(0|t._crypto_onetimeauth_init(n,i))){var a=n;return l(r),a}p(r,"invalid usage")}function Ye(e){var A=[];g(e);var r=new _(0|t._crypto_onetimeauth_keybytes()),i=r.address;A.push(i),t._crypto_onetimeauth_keygen(i);var n=h(r,e);return l(A),n}function Ge(e,A,r){var i=[];g(r),y(i,e,"state_address");var n=I(A=C(i,A,"message_chunk")),a=A.length;i.push(n),0!=(0|t._crypto_onetimeauth_update(e,n,a))&&p(i,"invalid usage"),l(i)}function Ue(e,A,r){var i=[];e=C(i,e,"hash");var n,a=0|t._crypto_onetimeauth_bytes();e.length!==a&&B(i,"invalid hash length"),n=I(e),i.push(n);var o=I(A=C(i,A,"message")),s=A.length;i.push(o),r=C(i,r,"key");var f,c=0|t._crypto_onetimeauth_keybytes();r.length!==c&&B(i,"invalid key length"),f=I(r),i.push(f);var h=0==(0|t._crypto_onetimeauth_verify(n,o,s,0,f));return l(i),h}function Ne(e,A,r,i,n,a,o){var s=[];g(o),y(s,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&B(s,"keyLength must be an unsigned integer");var f=I(A=C(s,A,"password")),c=A.length;s.push(f),r=C(s,r,"salt");var u,d=0|t._crypto_pwhash_saltbytes();r.length!==d&&B(s,"invalid salt length"),u=I(r),s.push(u),y(s,i,"opsLimit"),("number"!=typeof i||(0|i)!==i||i<0)&&B(s,"opsLimit must be an unsigned integer"),y(s,n,"memLimit"),("number"!=typeof n||(0|n)!==n||n<0)&&B(s,"memLimit must be an unsigned integer"),y(s,a,"algorithm"),("number"!=typeof a||(0|a)!==a||a<0)&&B(s,"algorithm must be an unsigned integer");var E=new _(0|e),b=E.address;if(s.push(b),0==(0|t._crypto_pwhash(b,e,0,f,c,0,u,i,0,n,a))){var Q=h(E,o);return l(s),Q}p(s,"invalid usage")}function Le(e,A,r,i,n,a){var o=[];g(a),y(o,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&B(o,"keyLength must be an unsigned integer");var s=I(A=C(o,A,"password")),f=A.length;o.push(s),r=C(o,r,"salt");var c,u=0|t._crypto_pwhash_scryptsalsa208sha256_saltbytes();r.length!==u&&B(o,"invalid salt length"),c=I(r),o.push(c),y(o,i,"opsLimit"),("number"!=typeof i||(0|i)!==i||i<0)&&B(o,"opsLimit must be an unsigned integer"),y(o,n,"memLimit"),("number"!=typeof n||(0|n)!==n||n<0)&&B(o,"memLimit must be an unsigned integer");var d=new _(0|e),E=d.address;if(o.push(E),0==(0|t._crypto_pwhash_scryptsalsa208sha256(E,e,0,s,f,0,c,i,0,n))){var b=h(d,a);return l(o),b}p(o,"invalid usage")}function Te(e,A,r,i,n,a,o){var s=[];g(o);var f=I(e=C(s,e,"password")),c=e.length;s.push(f);var u=I(A=C(s,A,"salt")),d=A.length;s.push(u),y(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&B(s,"opsLimit must be an unsigned integer"),y(s,i,"r"),("number"!=typeof i||(0|i)!==i||i<0)&&B(s,"r must be an unsigned integer"),y(s,n,"p"),("number"!=typeof n||(0|n)!==n||n<0)&&B(s,"p must be an unsigned integer"),y(s,a,"keyLength"),("number"!=typeof a||(0|a)!==a||a<0)&&B(s,"keyLength must be an unsigned integer");var E=new _(0|a),b=E.address;if(s.push(b),0==(0|t._crypto_pwhash_scryptsalsa208sha256_ll(f,c,u,d,r,0,i,n,b,a))){var Q=h(E,o);return l(s),Q}p(s,"invalid usage")}function Ke(e,A,r,i){var n=[];g(i);var a=I(e=C(n,e,"password")),o=e.length;n.push(a),y(n,A,"opsLimit"),("number"!=typeof A||(0|A)!==A||A<0)&&B(n,"opsLimit must be an unsigned integer"),y(n,r,"memLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&B(n,"memLimit must be an unsigned integer");var s=new _(0|t._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(n.push(s),0==(0|t._crypto_pwhash_scryptsalsa208sha256_str(s,a,o,0,A,0,r))){var f=t.UTF8ToString(s);return l(n),f}p(n,"invalid usage")}function Je(e,A,r){var i=[];g(r),"string"!=typeof e&&B(i,"hashed_password must be a string");var a=I(e=n(e+"\0"));e.length,i.push(a);var o=I(A=C(i,A,"password")),s=A.length;i.push(o);var f=0==(0|t._crypto_pwhash_scryptsalsa208sha256_str_verify(a,o,s,0));return l(i),f}function Xe(e,A,r,i){var n=[];g(i);var a=I(e=C(n,e,"password")),o=e.length;n.push(a),y(n,A,"opsLimit"),("number"!=typeof A||(0|A)!==A||A<0)&&B(n,"opsLimit must be an unsigned integer"),y(n,r,"memLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&B(n,"memLimit must be an unsigned integer");var s=new _(0|t._crypto_pwhash_strbytes()).address;if(n.push(s),0==(0|t._crypto_pwhash_str(s,a,o,0,A,0,r))){var f=t.UTF8ToString(s);return l(n),f}p(n,"invalid usage")}function je(e,A,r){var i=[];g(r),"string"!=typeof e&&B(i,"hashed_password must be a string");var a=I(e=n(e+"\0"));e.length,i.push(a);var o=I(A=C(i,A,"password")),s=A.length;i.push(o);var f=0==(0|t._crypto_pwhash_str_verify(a,o,s,0));return l(i),f}function Oe(e,A,r){var i=[];g(r),e=C(i,e,"privateKey");var n,a=0|t._crypto_scalarmult_scalarbytes();e.length!==a&&B(i,"invalid privateKey length"),n=I(e),i.push(n),A=C(i,A,"publicKey");var o,s=0|t._crypto_scalarmult_scalarbytes();A.length!==s&&B(i,"invalid publicKey length"),o=I(A),i.push(o);var f=new _(0|t._crypto_scalarmult_bytes()),c=f.address;if(i.push(c),0==(0|t._crypto_scalarmult(c,n,o))){var u=h(f,r);return l(i),u}p(i,"weak public key")}function qe(e,A){var r=[];g(A),e=C(r,e,"privateKey");var i,n=0|t._crypto_scalarmult_scalarbytes();e.length!==n&&B(r,"invalid privateKey length"),i=I(e),r.push(i);var a=new _(0|t._crypto_scalarmult_scalarbytes()),o=a.address;if(r.push(o),0==(0|t._crypto_scalarmult_base(o,i))){var s=h(a,A);return l(r),s}p(r,"insecure scalar")}function ze(e,A,r){var i=[];g(r),e=C(i,e,"scalar");var n,a=0|t._crypto_scalarmult_ristretto255_scalarbytes();e.length!==a&&B(i,"invalid scalar length"),n=I(e),i.push(n),A=C(i,A,"privateKey");var o,s=0|t._crypto_scalarmult_ristretto255_bytes();A.length!==s&&B(i,"invalid privateKey length"),o=I(A),i.push(o);var f=new _(0|t._crypto_scalarmult_ristretto255_bytes()),c=f.address;if(i.push(c),0==(0|t._crypto_scalarmult_ristretto255(c,n,o))){var u=h(f,r);return l(i),u}p(i,"input is zero element")}function Ve(e,A){var r=[];g(A);var i=I(e=C(r,e,"scalar"));e.length,r.push(i);var n=new _(0|t._crypto_core_ristretto255_bytes()),a=n.address;if(r.push(a),0==(0|t._crypto_scalarmult_ristretto255_base(a,i))){var o=h(n,A);return l(r),o}p(r,"scalar is 0")}function $e(e,A,r,i){var n=[];g(i);var a=I(e=C(n,e,"message")),o=e.length;n.push(a),A=C(n,A,"nonce");var s,f=0|t._crypto_secretbox_noncebytes();A.length!==f&&B(n,"invalid nonce length"),s=I(A),n.push(s),r=C(n,r,"key");var c,u=0|t._crypto_secretbox_keybytes();r.length!==u&&B(n,"invalid key length"),c=I(r),n.push(c);var d=new _(0|o),y=d.address;n.push(y);var E=new _(0|t._crypto_secretbox_macbytes()),b=E.address;if(n.push(b),0==(0|t._crypto_secretbox_detached(y,b,a,o,0,s,c))){var Q=h({mac:E,cipher:d},i);return l(n),Q}p(n,"invalid usage")}function We(e,A,r,i){var n=[];g(i);var a=I(e=C(n,e,"message")),o=e.length;n.push(a),A=C(n,A,"nonce");var s,f=0|t._crypto_secretbox_noncebytes();A.length!==f&&B(n,"invalid nonce length"),s=I(A),n.push(s),r=C(n,r,"key");var c,u=0|t._crypto_secretbox_keybytes();r.length!==u&&B(n,"invalid key length"),c=I(r),n.push(c);var d=new _(o+t._crypto_secretbox_macbytes()|0),y=d.address;if(n.push(y),0==(0|t._crypto_secretbox_easy(y,a,o,0,s,c))){var E=h(d,i);return l(n),E}p(n,"invalid usage")}function Ze(e){var A=[];g(e);var r=new _(0|t._crypto_secretbox_keybytes()),i=r.address;A.push(i),t._crypto_secretbox_keygen(i);var n=h(r,e);return l(A),n}function eA(e,A,r,i,n){var a=[];g(n);var o=I(e=C(a,e,"ciphertext")),s=e.length;a.push(o),A=C(a,A,"mac");var f,c=0|t._crypto_secretbox_macbytes();A.length!==c&&B(a,"invalid mac length"),f=I(A),a.push(f),r=C(a,r,"nonce");var u,d=0|t._crypto_secretbox_noncebytes();r.length!==d&&B(a,"invalid nonce length"),u=I(r),a.push(u),i=C(a,i,"key");var y,E=0|t._crypto_secretbox_keybytes();i.length!==E&&B(a,"invalid key length"),y=I(i),a.push(y);var b=new _(0|s),Q=b.address;if(a.push(Q),0==(0|t._crypto_secretbox_open_detached(Q,o,f,s,0,u,y))){var w=h(b,n);return l(a),w}p(a,"wrong secret key for the given ciphertext")}function AA(e,A,r,i){var n=[];g(i),e=C(n,e,"ciphertext");var a,o=t._crypto_secretbox_macbytes(),s=e.length;s>>0;return l([]),A}function UA(e,A){var r=[];g(A);for(var i=t._malloc(24),n=0;n<6;n++)t.setValue(i+4*n,t.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][n]]),"i32");0!=(0|t._randombytes_set_implementation(i))&&p(r,"unsupported implementation"),l(r)}function NA(e){g(e),t._randombytes_stir()}function LA(e,A){var r=[];g(A),y(r,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&B(r,"upper_bound must be an unsigned integer");var i=t._randombytes_uniform(e)>>>0;return l(r),i}function TA(){var e=t._sodium_version_string(),A=t.UTF8ToString(e);return l([]),A}return _.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(t.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,A){if(!(e instanceof Uint8Array&&A instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var t=e.length,r=0,i=0;if(A.length!=e.length)throw new TypeError("Arguments must have the same length");for(i=0;i>=8,r+=e[i]+A[i],e[i]=255&r},e.base64_variants=s,e.compare=function(e,A){if(!(e instanceof Uint8Array&&A instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==A.length)throw new TypeError("Only instances of identical length can be compared");for(var t=0,r=1,i=e.length;i-- >0;)t|=A[i]-e[i]>>8&r,r&=(A[i]^e[i])-1>>8;return t+t+r-1},e.from_base64=function(e,A){A=f(A);var r,i=[],n=new _(3*(e=C(i,e,"input")).length/4),a=I(e),o=d(4),s=d(4);return i.push(a),i.push(n.address),i.push(n.result_bin_len_p),i.push(n.b64_end_p),0!==t._sodium_base642bin(n.address,n.length,a,e.length,0,o,s,A)&&p(i,"invalid input"),t.getValue(s,"i32")-a!==e.length&&p(i,"incomplete input"),n.length=t.getValue(o,"i32"),r=n.to_Uint8Array(),l(i),r},e.from_hex=function(e){var A,r=[],i=new _((e=C(r,e,"input")).length/2),n=I(e),a=d(4);return r.push(n),r.push(i.address),r.push(i.hex_end_p),0!==t._sodium_hex2bin(i.address,i.length,n,e.length,0,0,a)&&p(r,"invalid input"),t.getValue(a,"i32")-n!==e.length&&p(r,"incomplete input"),A=i.to_Uint8Array(),l(r),A},e.from_string=n,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var A=256,t=0,r=e.length;t>=8,A+=e[t],e[t]=255&A},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var A=0,t=0,r=e.length;t 0");var r,i=[],n=d(4),a=1,o=0,s=0|e.length,f=new _(s+A);i.push(n),i.push(f.address);for(var c=f.address,h=f.address+s+A;c>>48|s>>>32|s>>>16|s))-1>>16);return 0!==t._sodium_pad(n,f.address,e.length,A,f.length)&&p(i,"internal error"),f.length=t.getValue(n,"i32"),r=f.to_Uint8Array(),l(i),r},e.unpad=function(e,A){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((A|=0)<=0)throw new Error("block size must be > 0");var r=[],i=I(e),n=d(4);return r.push(i),r.push(n),0!==t._sodium_unpad(n,i,e.length,A)&&p(r,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,t.getValue(n,"i32")),l(r),e},e.ready=i,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=c,e.to_hex=o,e.to_string=a,e}var t="object"==typeof e.sodium&&"function"==typeof e.sodium.onload?e.sodium.onload:null;"function"==typeof define&&define.amd?define(["exports","libsodium"],A):"object"==typeof _$libsodiumWrappers_20&&"string"!=typeof _$libsodiumWrappers_20.nodeName?A(_$libsodiumWrappers_20,_$libsodium_21):e.sodium=A(e.commonJsStrict={},e.libsodium),t&&e.sodium.ready.then(function(){t(e.sodium)})}(this);var _$BigInteger_16={exports:{}},bigInt=function(e){"use strict";var A=1e7,t=7,r=9007199254740992,i=u(r),n="0123456789abcdefghijklmnopqrstuvwxyz",a="function"==typeof BigInt;function o(e,A,t,r){return void 0===e?o[0]:void 0===A||10==+A&&!t?q(e):K(e,A,t,r)}function s(e,A){this.value=e,this.sign=A,this.isSmall=!1}function f(e){this.value=e,this.sign=e<0,this.isSmall=!0}function c(e){this.value=e}function h(e){return-r0?Math.floor(e):Math.ceil(e)}function l(e,t){var r,i,n=e.length,a=t.length,o=new Array(n),s=0,f=A;for(i=0;i=f?1:0,o[i]=r-s*f;for(;i0&&o.push(s),o}function p(e,A){return e.length>=A.length?l(e,A):l(A,e)}function B(e,t){var r,i,n=e.length,a=new Array(n),o=A;for(i=0;i0;)a[i++]=t%o,t=Math.floor(t/o);return a}function y(e,t){var r,i,n=e.length,a=t.length,o=new Array(n),s=0,f=A;for(r=0;r0;)a[i++]=s%o,s=Math.floor(s/o);return a}function Q(e,A){for(var t=[];A-- >0;)t.push(0);return t.concat(e)}function w(e,t,r){return new s(e=0;--r)n=(a=n*f+e[r])-(i=d(a/t))*t,s[r]=0|i;return[s,0|n]}function S(e,t){var r,i=q(t);if(a)return[new c(e.value/i.value),new c(e.value%i.value)];var n,h=e.value,l=i.value;if(0===l)throw new Error("Cannot divide by zero");if(e.isSmall)return i.isSmall?[new f(d(h/l)),new f(h%l)]:[o[0],e];if(i.isSmall){if(1===l)return[e,o[0]];if(-1==l)return[e.negate(),o[0]];var p=Math.abs(l);if(p=0;i--){for(r=u-1,p[i+h]!==d&&(r=Math.floor((p[i+h]*u+p[i+h-1])/d)),n=0,a=0,s=B.length,o=0;of&&(n=(n+1)*u),r=Math.ceil(n/a);do{if(k(o=b(t,r),h)<=0)break;r--}while(r);c.push(r),h=y(h,o)}return c.reverse(),[g(c),g(h)]}(h,l))[0];var E=e.sign!==i.sign,Q=r[1],w=e.sign;return"number"==typeof n?(E&&(n=-n),n=new f(n)):n=new s(n,E),"number"==typeof Q?(w&&(Q=-Q),Q=new f(Q)):Q=new s(Q,w),[n,Q]}function k(e,A){if(e.length!==A.length)return e.length>A.length?1:-1;for(var t=e.length-1;t>=0;t--)if(e[t]!==A[t])return e[t]>A[t]?1:-1;return 0}function D(e){var A=e.abs();return!A.isUnit()&&(!!(A.equals(2)||A.equals(3)||A.equals(5))||!(A.isEven()||A.isDivisibleBy(3)||A.isDivisibleBy(5))&&(!!A.lesser(49)||void 0))}function M(e,A){for(var t,r,i,n=e.prev(),a=n,o=0;a.isEven();)a=a.divide(2),o++;e:for(r=0;r=0?r=y(e,A):(r=y(A,e),t=!t),"number"==typeof(r=g(r))?(t&&(r=-r),new f(r)):new s(r,t)}(t,r,this.sign)},s.prototype.minus=s.prototype.subtract,f.prototype.subtract=function(e){var A=q(e),t=this.value;if(t<0!==A.sign)return this.add(A.negate());var r=A.value;return A.isSmall?new f(t-r):C(r,Math.abs(t),t>=0)},f.prototype.minus=f.prototype.subtract,c.prototype.subtract=function(e){return new c(this.value-q(e).value)},c.prototype.minus=c.prototype.subtract,s.prototype.negate=function(){return new s(this.value,!this.sign)},f.prototype.negate=function(){var e=this.sign,A=new f(-this.value);return A.sign=!e,A},c.prototype.negate=function(){return new c(-this.value)},s.prototype.abs=function(){return new s(this.value,!1)},f.prototype.abs=function(){return new f(Math.abs(this.value))},c.prototype.abs=function(){return new c(this.value>=0?this.value:-this.value)},s.prototype.multiply=function(e){var t,r,i,n=q(e),a=this.value,f=n.value,c=this.sign!==n.sign;if(n.isSmall){if(0===f)return o[0];if(1===f)return this;if(-1===f)return this.negate();if((t=Math.abs(f))0?function e(A,t){var r=Math.max(A.length,t.length);if(r<=30)return E(A,t);r=Math.ceil(r/2);var i=A.slice(r),n=A.slice(0,r),a=t.slice(r),o=t.slice(0,r),s=e(n,o),f=e(i,a),c=e(p(n,i),p(o,a)),h=p(p(s,Q(y(y(c,s),f),r)),Q(f,2*r));return _(h),h}(a,f):E(a,f),c)},s.prototype.times=s.prototype.multiply,f.prototype._multiplyBySmall=function(e){return h(e.value*this.value)?new f(e.value*this.value):w(Math.abs(e.value),u(Math.abs(this.value)),this.sign!==e.sign)},s.prototype._multiplyBySmall=function(e){return 0===e.value?o[0]:1===e.value?this:-1===e.value?this.negate():w(Math.abs(e.value),this.value,this.sign!==e.sign)},f.prototype.multiply=function(e){return q(e)._multiplyBySmall(this)},f.prototype.times=f.prototype.multiply,c.prototype.multiply=function(e){return new c(this.value*q(e).value)},c.prototype.times=c.prototype.multiply,s.prototype.square=function(){return new s(v(this.value),!1)},f.prototype.square=function(){var e=this.value*this.value;return h(e)?new f(e):new s(v(u(Math.abs(this.value))),!1)},c.prototype.square=function(e){return new c(this.value*this.value)},s.prototype.divmod=function(e){var A=S(this,e);return{quotient:A[0],remainder:A[1]}},c.prototype.divmod=f.prototype.divmod=s.prototype.divmod,s.prototype.divide=function(e){return S(this,e)[0]},c.prototype.over=c.prototype.divide=function(e){return new c(this.value/q(e).value)},f.prototype.over=f.prototype.divide=s.prototype.over=s.prototype.divide,s.prototype.mod=function(e){return S(this,e)[1]},c.prototype.mod=c.prototype.remainder=function(e){return new c(this.value%q(e).value)},f.prototype.remainder=f.prototype.mod=s.prototype.remainder=s.prototype.mod,s.prototype.pow=function(e){var A,t,r,i=q(e),n=this.value,a=i.value;if(0===a)return o[1];if(0===n)return o[0];if(1===n)return o[1];if(-1===n)return i.isEven()?o[1]:o[-1];if(i.sign)return o[0];if(!i.isSmall)throw new Error("The exponent "+i.toString()+" is too large.");if(this.isSmall&&h(A=Math.pow(n,a)))return new f(d(A));for(t=this,r=o[1];!0&a&&(r=r.times(t),--a),0!==a;)a/=2,t=t.square();return r},f.prototype.pow=s.prototype.pow,c.prototype.pow=function(e){var A=q(e),t=this.value,r=A.value,i=BigInt(0),n=BigInt(1),a=BigInt(2);if(r===i)return o[1];if(t===i)return o[0];if(t===n)return o[1];if(t===BigInt(-1))return A.isEven()?o[1]:o[-1];if(A.isNegative())return new c(i);for(var s=this,f=o[1];(r&n)===n&&(f=f.times(s),--r),r!==i;)r/=a,s=s.square();return f},s.prototype.modPow=function(e,A){if(e=q(e),(A=q(A)).isZero())throw new Error("Cannot take modPow with modulus 0");var t=o[1],r=this.mod(A);for(e.isNegative()&&(e=e.multiply(o[-1]),r=r.modInv(A));e.isPositive();){if(r.isZero())return o[0];e.isOdd()&&(t=t.multiply(r).mod(A)),e=e.divide(2),r=r.square().mod(A)}return t},c.prototype.modPow=f.prototype.modPow=s.prototype.modPow,s.prototype.compareAbs=function(e){var A=q(e),t=this.value,r=A.value;return A.isSmall?1:k(t,r)},f.prototype.compareAbs=function(e){var A=q(e),t=Math.abs(this.value),r=A.value;return A.isSmall?t===(r=Math.abs(r))?0:t>r?1:-1:-1},c.prototype.compareAbs=function(e){var A=this.value,t=q(e).value;return(A=A>=0?A:-A)===(t=t>=0?t:-t)?0:A>t?1:-1},s.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var A=q(e),t=this.value,r=A.value;return this.sign!==A.sign?A.sign?1:-1:A.isSmall?this.sign?-1:1:k(t,r)*(this.sign?-1:1)},s.prototype.compareTo=s.prototype.compare,f.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var A=q(e),t=this.value,r=A.value;return A.isSmall?t==r?0:t>r?1:-1:t<0!==A.sign?t<0?-1:1:t<0?1:-1},f.prototype.compareTo=f.prototype.compare,c.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var A=this.value,t=q(e).value;return A===t?0:A>t?1:-1},c.prototype.compareTo=c.prototype.compare,s.prototype.equals=function(e){return 0===this.compare(e)},c.prototype.eq=c.prototype.equals=f.prototype.eq=f.prototype.equals=s.prototype.eq=s.prototype.equals,s.prototype.notEquals=function(e){return 0!==this.compare(e)},c.prototype.neq=c.prototype.notEquals=f.prototype.neq=f.prototype.notEquals=s.prototype.neq=s.prototype.notEquals,s.prototype.greater=function(e){return this.compare(e)>0},c.prototype.gt=c.prototype.greater=f.prototype.gt=f.prototype.greater=s.prototype.gt=s.prototype.greater,s.prototype.lesser=function(e){return this.compare(e)<0},c.prototype.lt=c.prototype.lesser=f.prototype.lt=f.prototype.lesser=s.prototype.lt=s.prototype.lesser,s.prototype.greaterOrEquals=function(e){return this.compare(e)>=0},c.prototype.geq=c.prototype.greaterOrEquals=f.prototype.geq=f.prototype.greaterOrEquals=s.prototype.geq=s.prototype.greaterOrEquals,s.prototype.lesserOrEquals=function(e){return this.compare(e)<=0},c.prototype.leq=c.prototype.lesserOrEquals=f.prototype.leq=f.prototype.lesserOrEquals=s.prototype.leq=s.prototype.lesserOrEquals,s.prototype.isEven=function(){return 0==(1&this.value[0])},f.prototype.isEven=function(){return 0==(1&this.value)},c.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},s.prototype.isOdd=function(){return 1==(1&this.value[0])},f.prototype.isOdd=function(){return 1==(1&this.value)},c.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},s.prototype.isPositive=function(){return!this.sign},f.prototype.isPositive=function(){return this.value>0},c.prototype.isPositive=f.prototype.isPositive,s.prototype.isNegative=function(){return this.sign},f.prototype.isNegative=function(){return this.value<0},c.prototype.isNegative=f.prototype.isNegative,s.prototype.isUnit=function(){return!1},f.prototype.isUnit=function(){return 1===Math.abs(this.value)},c.prototype.isUnit=function(){return this.abs().value===BigInt(1)},s.prototype.isZero=function(){return!1},f.prototype.isZero=function(){return 0===this.value},c.prototype.isZero=function(){return this.value===BigInt(0)},s.prototype.isDivisibleBy=function(e){var A=q(e);return!A.isZero()&&(!!A.isUnit()||(0===A.compareAbs(2)?this.isEven():this.mod(A).isZero()))},c.prototype.isDivisibleBy=f.prototype.isDivisibleBy=s.prototype.isDivisibleBy,s.prototype.isPrime=function(e){var A=D(this);if(void 0!==A)return A;var t=this.abs(),r=t.bitLength();if(r<=64)return M(t,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var i=Math.log(2)*r.toJSNumber(),n=Math.ceil(!0===e?2*Math.pow(i,2):i),a=[],o=0;o-r?new f(e-1):new s(i,!0)},c.prototype.prev=function(){return new c(this.value-BigInt(1))};for(var F=[1];2*F[F.length-1]<=A;)F.push(2*F[F.length-1]);var H=F.length,P=F[H-1];function R(e){return Math.abs(e)<=A}function x(e,A,t){A=q(A);for(var r=e.isNegative(),i=A.isNegative(),n=r?e.not():e,a=i?A.not():A,o=0,s=0,f=null,c=null,h=[];!n.isZero()||!a.isZero();)o=(f=S(n,P))[1].toJSNumber(),r&&(o=P-1-o),s=(c=S(a,P))[1].toJSNumber(),i&&(s=P-1-s),n=f[0],a=c[0],h.push(t(o,s));for(var u=0!==t(r?1:0,i?1:0)?bigInt(-1):bigInt(0),g=h.length-1;g>=0;g-=1)u=u.multiply(P).add(bigInt(h[g]));return u}s.prototype.shiftLeft=function(e){var A=q(e).toJSNumber();if(!R(A))throw new Error(String(A)+" is too large for shifting.");if(A<0)return this.shiftRight(-A);var t=this;if(t.isZero())return t;for(;A>=H;)t=t.multiply(P),A-=H-1;return t.multiply(F[A])},c.prototype.shiftLeft=f.prototype.shiftLeft=s.prototype.shiftLeft,s.prototype.shiftRight=function(e){var A,t=q(e).toJSNumber();if(!R(t))throw new Error(String(t)+" is too large for shifting.");if(t<0)return this.shiftLeft(-t);for(var r=this;t>=H;){if(r.isZero()||r.isNegative()&&r.isUnit())return r;r=(A=S(r,P))[1].isNegative()?A[0].prev():A[0],t-=H-1}return(A=S(r,F[t]))[1].isNegative()?A[0].prev():A[0]},c.prototype.shiftRight=f.prototype.shiftRight=s.prototype.shiftRight,s.prototype.not=function(){return this.negate().prev()},c.prototype.not=f.prototype.not=s.prototype.not,s.prototype.and=function(e){return x(this,e,function(e,A){return e&A})},c.prototype.and=f.prototype.and=s.prototype.and,s.prototype.or=function(e){return x(this,e,function(e,A){return e|A})},c.prototype.or=f.prototype.or=s.prototype.or,s.prototype.xor=function(e){return x(this,e,function(e,A){return e^A})},c.prototype.xor=f.prototype.xor=s.prototype.xor;var Y=1<<30,G=(A&-A)*(A&-A)|Y;function U(e){var t=e.value,r="number"==typeof t?t|Y:"bigint"==typeof t?t|BigInt(Y):t[0]+t[1]*A|G;return r&-r}function N(e,A){return e=q(e),A=q(A),e.greater(A)?e:A}function L(e,A){return e=q(e),A=q(A),e.lesser(A)?e:A}function T(e,A){if(e=q(e).abs(),A=q(A).abs(),e.equals(A))return e;if(e.isZero())return A;if(A.isZero())return e;for(var t,r,i=o[1];e.isEven()&&A.isEven();)t=L(U(e),U(A)),e=e.divide(t),A=A.divide(t),i=i.multiply(t);for(;e.isEven();)e=e.divide(U(e));do{for(;A.isEven();)A=A.divide(U(A));e.greater(A)&&(r=A,A=e,e=r),A=A.subtract(e)}while(!A.isZero());return i.isUnit()?e:e.multiply(i)}s.prototype.bitLength=function(){var e=this;return e.compareTo(bigInt(0))<0&&(e=e.negate().subtract(bigInt(1))),0===e.compareTo(bigInt(0))?bigInt(0):bigInt(function e(A,t){if(t.compareTo(A)<=0){var r=e(A,t.square(t)),i=r.p,n=r.e,a=i.multiply(t);return a.compareTo(A)<=0?{p:a,e:2*n+1}:{p:i,e:2*n}}return{p:bigInt(1),e:0}}(e,bigInt(2)).e).add(bigInt(1))},c.prototype.bitLength=f.prototype.bitLength=s.prototype.bitLength;var K=function(e,A,t,r){t=t||n,e=String(e),r||(e=e.toLowerCase(),t=t.toLowerCase());var i,a=e.length,o=Math.abs(A),s={};for(i=0;i=o){if("1"===h&&1===o)continue;throw new Error(h+" is not a valid digit in base "+A+".")}A=q(A);var f=[],c="-"===e[0];for(i=c?1:0;i"!==e[i]&&i=0;r--)i=i.add(e[r].times(n)),n=n.times(A);return t?i.negate():i}function X(e,A){if((A=bigInt(A)).isZero()){if(e.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(A.equals(-1)){if(e.isZero())return{value:[0],isNegative:!1};if(e.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-e.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var t=Array.apply(null,Array(e.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return t.unshift([1]),{value:[].concat.apply([],t),isNegative:!1}}var r=!1;if(e.isNegative()&&A.isPositive()&&(r=!0,e=e.abs()),A.isUnit())return e.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(e.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:r};for(var i,n=[],a=e;a.isNegative()||a.compareAbs(A)>=0;){i=a.divmod(A),a=i.quotient;var o=i.remainder;o.isNegative()&&(o=A.minus(o).abs(),a=a.next()),n.push(o.toJSNumber())}return n.push(a.toJSNumber()),{value:n.reverse(),isNegative:r}}function j(e,A,t){var r=X(e,A);return(r.isNegative?"-":"")+r.value.map(function(e){return function(e,A){return e<(A=A||n).length?A[e]:"<"+e+">"}(e,t)}).join("")}function O(e){if(h(+e)){var A=+e;if(A===d(A))return a?new c(BigInt(A)):new f(A);throw new Error("Invalid integer: "+e)}var r="-"===e[0];r&&(e=e.slice(1));var i=e.split(/e/i);if(i.length>2)throw new Error("Invalid integer: "+i.join("e"));if(2===i.length){var n=i[1];if("+"===n[0]&&(n=n.slice(1)),(n=+n)!==d(n)||!h(n))throw new Error("Invalid integer: "+n+" is not a valid exponent.");var o=i[0],u=o.indexOf(".");if(u>=0&&(n-=o.length-u-1,o=o.slice(0,u)+o.slice(u+1)),n<0)throw new Error("Cannot include negative exponent part for integers");e=o+=new Array(n+1).join("0")}if(!/^([0-9][0-9]*)$/.test(e))throw new Error("Invalid integer: "+e);if(a)return new c(BigInt(r?"-"+e:e));for(var g=[],I=e.length,l=t,p=I-l;I>0;)g.push(+e.slice(p,I)),(p-=l)<0&&(p=0),I-=l;return _(g),new s(g,r)}function q(e){return"number"==typeof e?function(e){if(a)return new c(BigInt(e));if(h(e)){if(e!==d(e))throw new Error(e+" is not an integer.");return new f(e)}return O(e.toString())}(e):"string"==typeof e?O(e):"bigint"==typeof e?new c(e):e}s.prototype.toArray=function(e){return X(this,e)},f.prototype.toArray=function(e){return X(this,e)},c.prototype.toArray=function(e){return X(this,e)},s.prototype.toString=function(e,A){if(void 0===e&&(e=10),10!==e)return j(this,e,A);for(var t,r=this.value,i=r.length,n=String(r[--i]);--i>=0;)t=String(r[i]),n+="0000000".slice(t.length)+t;return(this.sign?"-":"")+n},f.prototype.toString=function(e,A){return void 0===e&&(e=10),10!=e?j(this,e,A):String(this.value)},c.prototype.toString=f.prototype.toString,c.prototype.toJSON=s.prototype.toJSON=f.prototype.toJSON=function(){return this.toString()},s.prototype.valueOf=function(){return parseInt(this.toString(),10)},s.prototype.toJSNumber=s.prototype.valueOf,f.prototype.valueOf=function(){return this.value},f.prototype.toJSNumber=f.prototype.valueOf,c.prototype.valueOf=c.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var z=0;z<1e3;z++)o[z]=q(z),z>0&&(o[-z]=q(-z));return o.one=o[1],o.zero=o[0],o.minusOne=o[-1],o.max=N,o.min=L,o.gcd=T,o.lcm=function(e,A){return e=q(e).abs(),A=q(A).abs(),e.divide(T(e,A)).multiply(A)},o.isInstance=function(e){return e instanceof s||e instanceof f||e instanceof c},o.randBetween=function(e,t,r){e=q(e),t=q(t);var i=r||Math.random,n=L(e,t),a=N(e,t).subtract(n).add(1);if(a.isSmall)return n.add(Math.floor(i()*a));for(var s=X(a,A).value,f=[],c=!0,h=0;h>>16)+(A>>>16)+(t>>>16)+(r=(i=(65535&e)+(65535&A)+(65535&t))>>>16))<<16|65535&i,r=n>>>16]}static load32_le(e){return e.readInt32LE(0)>>>0}static store32_le(A){let t=e.alloc(4,0);return t[0]=255&A,t[1]=A>>>8&255,t[2]=A>>>16&255,t[3]=A>>>24&255,t}}}).call(this,_$buffer_74({}).Buffer);var _$Poly1305_23={};(function(e){"use strict";const A=_$cryptoBrowserify_82({});_$Poly1305_23=class t{static async onetimeauth(A,r){e.isBuffer(A)||(A=e.from(A));let i=new t(r);return await i.update(A),await i.finish()}static async onetimeauth_verify(r,i,n){e.isBuffer(r)||(r=e.from(r));let a=new t(i);await a.update(r);let o=await a.finish();return A.timingSafeEqual(o,n)}constructor(A){if(void 0===A)return this.buffer=e.alloc(16,0),this.h=new Uint32Array(5),this.r=[0,0,0,0,0],this.pad=[0,0,0,0],this.leftover=0,void(this.final=!1);if(!e.isBuffer(A))throw new TypeError("Poly1305 key must be a Buffer (argument 1)");if(32!==A.length)throw new Error("Poly1305 requires a 32-byte key");this.buffer=e.alloc(16,0),this.r=[67108863&_$util_24.load32_le(A.slice(0,4)),_$util_24.load32_le(A.slice(3,7))>>>2&67108611,_$util_24.load32_le(A.slice(6,10))>>>4&67092735,_$util_24.load32_le(A.slice(9,13))>>>6&66076671,_$util_24.load32_le(A.slice(12,16))>>>8&1048575],this.h=new Uint32Array(5),this.pad=[_$util_24.load32_le(A.slice(16,20)),_$util_24.load32_le(A.slice(20,24)),_$util_24.load32_le(A.slice(24,28)),_$util_24.load32_le(A.slice(28,32))],this.leftover=0,this.final=!1}clone(){let e=new t;this.buffer.copy(e.buffer,0,0,16),e.r=this.r;for(let A=0;A<5;A++)e.h[A]=this.h[A];for(let A=0;A<4;A++)e.pad[A]=this.pad[A];return e.leftover=this.leftover,e.final=this.final,e}async blocks(e,A){if(e.length<16)throw new Error("Out of range exception");let t,r,i,n,a,o,s=this.final?0:1<<24,[f,c,h,u,g]=this.r,_=5*c,I=5*h,d=5*u,l=5*g,p=_$BigInteger_16(this.h[0]),B=_$BigInteger_16(this.h[1]),y=_$BigInteger_16(this.h[2]),C=_$BigInteger_16(this.h[3]),E=_$BigInteger_16(this.h[4]),b=0;for(;A>=16;)p=p.add(67108863&_$util_24.load32_le(e.slice(b,b+4))),B=B.add(_$util_24.load32_le(e.slice(b+3,b+7))>>>2&67108863),y=y.add(_$util_24.load32_le(e.slice(b+6,b+10))>>>4&67108863),C=C.add(_$util_24.load32_le(e.slice(b+9,b+13))>>>6&67108863),E=E.add(_$util_24.load32_le(e.slice(b+12,b+16))>>>8|s),r=_$BigInteger_16(p.times(_$BigInteger_16(f))).plus(_$BigInteger_16(l).times(B)).plus(_$BigInteger_16(d).times(y)).plus(_$BigInteger_16(I).times(C)).plus(_$BigInteger_16(_).times(E)),i=_$BigInteger_16(p.times(_$BigInteger_16(c))).plus(B.times(_$BigInteger_16(f))).plus(_$BigInteger_16(l).times(y)).plus(_$BigInteger_16(d).times(C)).plus(_$BigInteger_16(I).times(E)),n=_$BigInteger_16(p.times(_$BigInteger_16(h))).plus(B.times(_$BigInteger_16(c))).plus(y.times(_$BigInteger_16(f))).plus(_$BigInteger_16(l).times(C)).plus(_$BigInteger_16(d).times(E)),a=_$BigInteger_16(p.times(_$BigInteger_16(u))).plus(B.times(_$BigInteger_16(h))).plus(y.times(_$BigInteger_16(c))).plus(C.times(_$BigInteger_16(f))).plus(_$BigInteger_16(l).times(E)),o=_$BigInteger_16(p.times(_$BigInteger_16(g))).plus(B.times(_$BigInteger_16(u))).plus(y.times(_$BigInteger_16(h))).plus(C.times(_$BigInteger_16(c))).plus(E.times(_$BigInteger_16(f))),t=r.shiftRight(26),p=r.and(67108863),t=(i=i.add(t)).shiftRight(26),B=i.and(67108863),t=(n=n.add(t)).shiftRight(26),y=n.and(67108863),t=(a=a.add(t)).shiftRight(26),C=a.and(67108863),t=(o=o.add(t)).shiftRight(26),E=o.and(67108863),p=p.add(t.multiply(5).toJSNumber()),t=p.shiftRight(26),p=p.and(67108863),B=B.add(t),b+=16,A-=16;this.h[0]=p.toJSNumber()>>>0,this.h[1]=B.toJSNumber()>>>0,this.h[2]=y.toJSNumber()>>>0,this.h[3]=C.toJSNumber()>>>0,this.h[4]=E.toJSNumber()>>>0}async update(e){let A,t=e.length;if(this.leftover>0){if((A=16-this.leftover)>t&&(A=t),e.slice(0,A).copy(this.buffer,this.leftover,0),this.leftover+=A,this.leftover<16)return this;await this.blocks(this.buffer,16),this.leftover-=16,t-=A,e=e.slice(A)}return t>=16&&(A=-16&t)>=16&&(await this.blocks(e.slice(0,A),A),t=(e=e.slice(A)).length),t>0&&(e.slice(0,t).copy(this.buffer,this.leftover,0),this.leftover+=t),this}async finish(){let A,t,r,i,n,a,o,s,f,c,h,u;if(this.leftover){let e=this.leftover;for(this.buffer[e++]=1;e<16;e++)this.buffer[e]=0;this.final=!0,await this.blocks(this.buffer,16)}return o=this.h[0],s=this.h[1],f=this.h[2],c=this.h[3],h=this.h[4],A=s>>>26,s&=67108863,s+=A=(o+=5*(A=(h+=A=(c+=A=(f+=A)>>>26)>>>26)>>>26))>>>26,A=(t=5+(o&=67108863))>>>26,t&=67108863,A=(r=s+A)>>>26,r&=67108863,A=(i=(f&=67108863)+A)>>>26,i&=67108863,A=(n=f+A)>>>26,n&=67108863,t&=u=((a=(h&=67108863)+A-(1<<26)>>>0)>>>31)-1,r&=u,i&=u,n&=u,a&=u,o=((o=o&(u=~u>>>0)|t)|(s=s&u|r)<<26)>>>0,s=(s>>>6|(f=f&u|i)<<20)>>>0,f=(f>>>12|(c=(c&=67108863)&u|n)<<14)>>>0,c=(c>>>18|(h=h&u|a)<<8)>>>0,[o,A]=_$util_24.add_overflow(o,this.pad[0]),[s,A]=_$util_24.add_overflow(s,this.pad[1],A),[f,A]=_$util_24.add_overflow(f,this.pad[2],A),[c,A]=_$util_24.add_overflow(c,this.pad[3],A),e.concat([_$util_24.store32_le(o>>>0),_$util_24.store32_le(s>>>0),_$util_24.store32_le(f>>>0),_$util_24.store32_le(c>>>0)])}}}).call(this,_$buffer_74({}).Buffer);var _$Poly1305_22=_$Poly1305_23,_$isTypedarray_19={};_$isTypedarray_19=isTypedArray,isTypedArray.strict=isStrictTypedArray,isTypedArray.loose=isLooseTypedArray;var __toString_19=Object.prototype.toString,names={"[object Int8Array]":!0,"[object Int16Array]":!0,"[object Int32Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Uint16Array]":!0,"[object Uint32Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0};function isTypedArray(e){return isStrictTypedArray(e)||isLooseTypedArray(e)}function isStrictTypedArray(e){return e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array}function isLooseTypedArray(e){return names[__toString_19.call(e)]}var _$typedarrayToBuffer_25={};(function(e){var A=_$isTypedarray_19.strict;_$typedarrayToBuffer_25=function(t){if(A(t)){var r=e.from(t.buffer);return t.byteLength!==t.buffer.byteLength&&(r=r.slice(t.byteOffset,t.byteOffset+t.byteLength)),r}return e.from(t)}}).call(this,_$buffer_74({}).Buffer);var _$util_14={};(function(e){"use strict";void 0===e&&_$buffer_17({}).Buffer,_$util_14=class{static async cloneBuffer(A){return e.from(A)}static populateConstants(e){return e.LIBRARY_VERSION_MAJOR=10,e.LIBRARY_VERSION_MINOR=2,e.VERSION_STRING="1.0.17",e.BASE64_VARIANT_ORIGINAL=1,e.BASE64_VARIANT_ORIGINAL_NO_PADDING=3,e.BASE64_VARIANT_URLSAFE=5,e.BASE64_VARIANT_URLSAFE_NO_PADDING=7,e.CRYPTO_AEAD_AES256GCM_KEYBYTES=32,e.CRYPTO_AEAD_AES256GCM_NSECBYTES=0,e.CRYPTO_AEAD_AES256GCM_NPUBBYTES=12,e.CRYPTO_AEAD_AES256GCM_ABYTES=16,e.CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES=32,e.CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES=0,e.CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES=8,e.CRYPTO_AEAD_CHACHA20POLY1305_ABYTES=16,e.CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES=32,e.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES=0,e.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES=12,e.CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES=16,e.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES=32,e.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES=0,e.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES=24,e.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES=16,e.CRYPTO_AUTH_BYTES=32,e.CRYPTO_AUTH_KEYBYTES=32,e.CRYPTO_BOX_SEALBYTES=16,e.CRYPTO_BOX_SECRETKEYBYTES=32,e.CRYPTO_BOX_PUBLICKEYBYTES=32,e.CRYPTO_BOX_KEYPAIRBYTES=64,e.CRYPTO_BOX_MACBYTES=16,e.CRYPTO_BOX_NONCEBYTES=24,e.CRYPTO_BOX_SEEDBYTES=32,e.CRYPTO_KDF_BYTES_MIN=16,e.CRYPTO_KDF_BYTES_MAX=64,e.CRYPTO_KDF_CONTEXTBYTES=8,e.CRYPTO_KDF_KEYBYTES=32,e.CRYPTO_KX_BYTES=32,e.CRYPTO_KX_PRIMITIVE="x25519blake2b",e.CRYPTO_KX_SEEDBYTES=32,e.CRYPTO_KX_KEYPAIRBYTES=64,e.CRYPTO_KX_PUBLICKEYBYTES=32,e.CRYPTO_KX_SECRETKEYBYTES=32,e.CRYPTO_KX_SESSIONKEYBYTES=32,e.CRYPTO_GENERICHASH_BYTES=32,e.CRYPTO_GENERICHASH_BYTES_MIN=16,e.CRYPTO_GENERICHASH_BYTES_MAX=64,e.CRYPTO_GENERICHASH_KEYBYTES=32,e.CRYPTO_GENERICHASH_KEYBYTES_MIN=16,e.CRYPTO_GENERICHASH_KEYBYTES_MAX=64,e.CRYPTO_GENERICHASH_STATEBYTES=384,e.CRYPTO_PWHASH_SALTBYTES=16,e.CRYPTO_PWHASH_STRPREFIX="$argon2id$",e.CRYPTO_PWHASH_ALG_ARGON2I13=1,e.CRYPTO_PWHASH_ALG_ARGON2ID13=2,e.CRYPTO_PWHASH_ALG_DEFAULT=e.CRYPTO_PWHASH_ALG_ARGON2ID13,e.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE=2,e.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE=67108864,e.CRYPTO_PWHASH_OPSLIMIT_MODERATE=3,e.CRYPTO_PWHASH_MEMLIMIT_MODERATE=268435456,e.CRYPTO_PWHASH_OPSLIMIT_SENSITIVE=4,e.CRYPTO_PWHASH_MEMLIMIT_SENSITIVE=1073741824,e.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES=32,e.CRYPTO_SCALARMULT_BYTES=32,e.CRYPTO_SCALARMULT_SCALARBYTES=32,e.CRYPTO_SHORTHASH_BYTES=8,e.CRYPTO_SHORTHASH_KEYBYTES=16,e.CRYPTO_SECRETBOX_KEYBYTES=32,e.CRYPTO_SECRETBOX_MACBYTES=16,e.CRYPTO_SECRETBOX_NONCEBYTES=24,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES=52,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES=17,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES=24,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES=32,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH=0,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL=1,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY=2,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL=3,e.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX=274877906816,e.CRYPTO_SIGN_BYTES=64,e.CRYPTO_SIGN_SEEDBYTES=32,e.CRYPTO_SIGN_PUBLICKEYBYTES=32,e.CRYPTO_SIGN_SECRETKEYBYTES=64,e.CRYPTO_SIGN_KEYPAIRBYTES=96,e.CRYPTO_STREAM_KEYBYTES=32,e.CRYPTO_STREAM_NONCEBYTES=24,e}static async toBuffer(A){if(e.isBuffer(A))return A;if(null===A)return null;if("string"==typeof A)return e.from(A,"binary");if(A instanceof Uint8Array)return _$typedarrayToBuffer_25(A);if(A instanceof Promise)return await A;throw new TypeError("Invalid type; string or buffer expected")}}}).call(this,_$buffer_74({}).Buffer);var _$xsalsa20_27={};function loadWebAssembly(e){if(!loadWebAssembly.supported)return null;var A,t=e&&e.imports,r=(A="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","function"==typeof atob?new Uint8Array(atob(A).split("").map(charCodeAt)):new(_$buffer_74({}).Buffer)(A,"base64")),i=null,n={buffer:r,memory:null,exports:null,realloc:function(e){n.exports.memory.grow(Math.ceil(Math.abs(e-n.memory.length)/65536)),n.memory=new Uint8Array(n.exports.memory.buffer)},onload:a};return a(function(){}),n;function a(A){if(n.exports)return A();if(i)i.then(A.bind(null,null)).catch(A);else{try{if(e&&e.async)throw new Error("async");o({instance:new WebAssembly.Instance(new WebAssembly.Module(r),t)})}catch(err){i=WebAssembly.instantiate(r,t).then(o)}a(A)}}function o(e){n.exports=e.instance.exports,n.memory=n.exports.memory&&n.exports.memory.buffer&&new Uint8Array(n.exports.memory.buffer)}}function charCodeAt(e){return e.charCodeAt(0)}_$xsalsa20_27=loadWebAssembly,loadWebAssembly.supported="undefined"!=typeof WebAssembly;var _$xsalsa20_26={},xsalsa20=_$xsalsa20_27(),SIGMA=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]),head=144,top=head,free=[];function XSalsa20(e,A){if(!(this instanceof XSalsa20))return new XSalsa20(e,A);if(!e||e.length<24)throw new Error("nonce must be at least 24 bytes");if(!A||A.length<32)throw new Error("key must be at least 32 bytes");this._xor=xsalsa20&&xsalsa20.exports?new WASM(e,A):new Fallback(e,A)}function WASM(e,A){free.length||(free.push(head),head+=64),this._pointer=free.pop(),this._nonce=this._pointer+8,this._key=this._nonce+24,this._overflow=0,xsalsa20.memory.fill(0,this._pointer,this._pointer+8),xsalsa20.memory.set(e,this._nonce),xsalsa20.memory.set(A,this._key)}function Fallback(e,A){this._s=new Uint8Array(32),this._z=new Uint8Array(16),this._overflow=0,core_hsalsa20(this._s,e,A,SIGMA);for(var t=0;t<8;t++)this._z[t]=e[t+16]}function core_salsa20(e,A,t,r){for(var i,n=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,o=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,s=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,f=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,c=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,h=255&A[0]|(255&A[1])<<8|(255&A[2])<<16|(255&A[3])<<24,u=255&A[4]|(255&A[5])<<8|(255&A[6])<<16|(255&A[7])<<24,g=255&A[8]|(255&A[9])<<8|(255&A[10])<<16|(255&A[11])<<24,_=255&A[12]|(255&A[13])<<8|(255&A[14])<<16|(255&A[15])<<24,I=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,d=255&t[16]|(255&t[17])<<8|(255&t[18])<<16|(255&t[19])<<24,l=255&t[20]|(255&t[21])<<8|(255&t[22])<<16|(255&t[23])<<24,p=255&t[24]|(255&t[25])<<8|(255&t[26])<<16|(255&t[27])<<24,B=255&t[28]|(255&t[29])<<8|(255&t[30])<<16|(255&t[31])<<24,y=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,C=n,E=a,b=o,Q=s,w=f,v=c,m=h,S=u,k=g,D=_,M=I,F=d,H=l,P=p,R=B,x=y,Y=0;Y<20;Y+=2)C^=(i=(H^=(i=(k^=(i=(w^=(i=C+H|0)<<7|i>>>25)+C|0)<<9|i>>>23)+w|0)<<13|i>>>19)+k|0)<<18|i>>>14,v^=(i=(E^=(i=(P^=(i=(D^=(i=v+E|0)<<7|i>>>25)+v|0)<<9|i>>>23)+D|0)<<13|i>>>19)+P|0)<<18|i>>>14,M^=(i=(m^=(i=(b^=(i=(R^=(i=M+m|0)<<7|i>>>25)+M|0)<<9|i>>>23)+R|0)<<13|i>>>19)+b|0)<<18|i>>>14,x^=(i=(F^=(i=(S^=(i=(Q^=(i=x+F|0)<<7|i>>>25)+x|0)<<9|i>>>23)+Q|0)<<13|i>>>19)+S|0)<<18|i>>>14,C^=(i=(Q^=(i=(b^=(i=(E^=(i=C+Q|0)<<7|i>>>25)+C|0)<<9|i>>>23)+E|0)<<13|i>>>19)+b|0)<<18|i>>>14,v^=(i=(w^=(i=(S^=(i=(m^=(i=v+w|0)<<7|i>>>25)+v|0)<<9|i>>>23)+m|0)<<13|i>>>19)+S|0)<<18|i>>>14,M^=(i=(D^=(i=(k^=(i=(F^=(i=M+D|0)<<7|i>>>25)+M|0)<<9|i>>>23)+F|0)<<13|i>>>19)+k|0)<<18|i>>>14,x^=(i=(R^=(i=(P^=(i=(H^=(i=x+R|0)<<7|i>>>25)+x|0)<<9|i>>>23)+H|0)<<13|i>>>19)+P|0)<<18|i>>>14;C=C+n|0,E=E+a|0,b=b+o|0,Q=Q+s|0,w=w+f|0,v=v+c|0,m=m+h|0,S=S+u|0,k=k+g|0,D=D+_|0,M=M+I|0,F=F+d|0,H=H+l|0,P=P+p|0,R=R+B|0,x=x+y|0,e[0]=C>>>0&255,e[1]=C>>>8&255,e[2]=C>>>16&255,e[3]=C>>>24&255,e[4]=E>>>0&255,e[5]=E>>>8&255,e[6]=E>>>16&255,e[7]=E>>>24&255,e[8]=b>>>0&255,e[9]=b>>>8&255,e[10]=b>>>16&255,e[11]=b>>>24&255,e[12]=Q>>>0&255,e[13]=Q>>>8&255,e[14]=Q>>>16&255,e[15]=Q>>>24&255,e[16]=w>>>0&255,e[17]=w>>>8&255,e[18]=w>>>16&255,e[19]=w>>>24&255,e[20]=v>>>0&255,e[21]=v>>>8&255,e[22]=v>>>16&255,e[23]=v>>>24&255,e[24]=m>>>0&255,e[25]=m>>>8&255,e[26]=m>>>16&255,e[27]=m>>>24&255,e[28]=S>>>0&255,e[29]=S>>>8&255,e[30]=S>>>16&255,e[31]=S>>>24&255,e[32]=k>>>0&255,e[33]=k>>>8&255,e[34]=k>>>16&255,e[35]=k>>>24&255,e[36]=D>>>0&255,e[37]=D>>>8&255,e[38]=D>>>16&255,e[39]=D>>>24&255,e[40]=M>>>0&255,e[41]=M>>>8&255,e[42]=M>>>16&255,e[43]=M>>>24&255,e[44]=F>>>0&255,e[45]=F>>>8&255,e[46]=F>>>16&255,e[47]=F>>>24&255,e[48]=H>>>0&255,e[49]=H>>>8&255,e[50]=H>>>16&255,e[51]=H>>>24&255,e[52]=P>>>0&255,e[53]=P>>>8&255,e[54]=P>>>16&255,e[55]=P>>>24&255,e[56]=R>>>0&255,e[57]=R>>>8&255,e[58]=R>>>16&255,e[59]=R>>>24&255,e[60]=x>>>0&255,e[61]=x>>>8&255,e[62]=x>>>16&255,e[63]=x>>>24&255}function core_hsalsa20(e,A,t,r){for(var i,n=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,o=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,s=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,f=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,c=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,h=255&A[0]|(255&A[1])<<8|(255&A[2])<<16|(255&A[3])<<24,u=255&A[4]|(255&A[5])<<8|(255&A[6])<<16|(255&A[7])<<24,g=255&A[8]|(255&A[9])<<8|(255&A[10])<<16|(255&A[11])<<24,_=255&A[12]|(255&A[13])<<8|(255&A[14])<<16|(255&A[15])<<24,I=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,d=255&t[16]|(255&t[17])<<8|(255&t[18])<<16|(255&t[19])<<24,l=255&t[20]|(255&t[21])<<8|(255&t[22])<<16|(255&t[23])<<24,p=255&t[24]|(255&t[25])<<8|(255&t[26])<<16|(255&t[27])<<24,B=255&t[28]|(255&t[29])<<8|(255&t[30])<<16|(255&t[31])<<24,y=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,C=0;C<20;C+=2)n^=(i=(l^=(i=(g^=(i=(f^=(i=n+l|0)<<7|i>>>25)+n|0)<<9|i>>>23)+f|0)<<13|i>>>19)+g|0)<<18|i>>>14,c^=(i=(a^=(i=(p^=(i=(_^=(i=c+a|0)<<7|i>>>25)+c|0)<<9|i>>>23)+_|0)<<13|i>>>19)+p|0)<<18|i>>>14,I^=(i=(h^=(i=(o^=(i=(B^=(i=I+h|0)<<7|i>>>25)+I|0)<<9|i>>>23)+B|0)<<13|i>>>19)+o|0)<<18|i>>>14,y^=(i=(d^=(i=(u^=(i=(s^=(i=y+d|0)<<7|i>>>25)+y|0)<<9|i>>>23)+s|0)<<13|i>>>19)+u|0)<<18|i>>>14,n^=(i=(s^=(i=(o^=(i=(a^=(i=n+s|0)<<7|i>>>25)+n|0)<<9|i>>>23)+a|0)<<13|i>>>19)+o|0)<<18|i>>>14,c^=(i=(f^=(i=(u^=(i=(h^=(i=c+f|0)<<7|i>>>25)+c|0)<<9|i>>>23)+h|0)<<13|i>>>19)+u|0)<<18|i>>>14,I^=(i=(_^=(i=(g^=(i=(d^=(i=I+_|0)<<7|i>>>25)+I|0)<<9|i>>>23)+d|0)<<13|i>>>19)+g|0)<<18|i>>>14,y^=(i=(B^=(i=(p^=(i=(l^=(i=y+B|0)<<7|i>>>25)+y|0)<<9|i>>>23)+l|0)<<13|i>>>19)+p|0)<<18|i>>>14;e[0]=n>>>0&255,e[1]=n>>>8&255,e[2]=n>>>16&255,e[3]=n>>>24&255,e[4]=c>>>0&255,e[5]=c>>>8&255,e[6]=c>>>16&255,e[7]=c>>>24&255,e[8]=I>>>0&255,e[9]=I>>>8&255,e[10]=I>>>16&255,e[11]=I>>>24&255,e[12]=y>>>0&255,e[13]=y>>>8&255,e[14]=y>>>16&255,e[15]=y>>>24&255,e[16]=h>>>0&255,e[17]=h>>>8&255,e[18]=h>>>16&255,e[19]=h>>>24&255,e[20]=u>>>0&255,e[21]=u>>>8&255,e[22]=u>>>16&255,e[23]=u>>>24&255,e[24]=g>>>0&255,e[25]=g>>>8&255,e[26]=g>>>16&255,e[27]=g>>>24&255,e[28]=_>>>0&255,e[29]=_>>>8&255,e[30]=_>>>16&255,e[31]=_>>>24&255}_$xsalsa20_26=XSalsa20,XSalsa20.NONCEBYTES=24,XSalsa20.KEYBYTES=32,XSalsa20.core_hsalsa20=core_hsalsa20,XSalsa20.SIGMA=SIGMA,XSalsa20.prototype.update=function(e,A){if(!e)throw new Error("input must be Uint8Array or Buffer");return A||(A=new Uint8Array(e.length)),e.length&&this._xor.update(e,A),A},XSalsa20.prototype.final=XSalsa20.prototype.finalize=function(){this._xor.finalize(),this._xor=null},WASM.prototype.update=function(e,A){var t=this._overflow+e.length,r=head+this._overflow;(top=head+t)>=xsalsa20.memory.length&&xsalsa20.realloc(top),xsalsa20.memory.set(e,r),xsalsa20.exports.xsalsa20_xor(this._pointer,head,head,t,this._nonce,this._key),A.set(xsalsa20.memory.subarray(r,head+t)),this._overflow=63&t},WASM.prototype.finalize=function(){xsalsa20.memory.fill(0,this._pointer,this._key+32),top>head&&(xsalsa20.memory.fill(0,head,top),top=0),free.push(this._pointer)},Fallback.prototype.update=function(e,A){for(var t=new Uint8Array(64),r=0,i=this._overflow,n=e.length+this._overflow,a=this._z,o=-this._overflow,s=-this._overflow;n>=64;){for(core_salsa20(t,a,this._s,SIGMA);i<64;i++)A[s+i]=e[o+i]^t[i];for(r=1,i=8;i<16;i++)r+=255&a[i]|0,a[i]=255&r,r>>>=8;n-=64,s+=64,o+=64,i=0}if(n>0)for(core_salsa20(t,a,this._s,SIGMA);i>10)+",t="+t+",p=1";return n.length!==i[3].length||!A.timingSafeEqual(await _$util_14.toBuffer(n),await _$util_14.toBuffer(i[3]))}}}).call(this,_$buffer_74({}).Buffer);var _$LibsodiumWrappersBackend_4={};(function(e){void 0===e&&_$buffer_17({}).Buffer,_$LibsodiumWrappersBackend_4=class A extends _$backend_3{constructor(e){super(e),this.sodium=e,this.backendName="LibsodiumWrappersBackend"}static async init(){return await _$libsodiumWrappers_20.ready,new A(_$libsodiumWrappers_20)}async crypto_aead_xchacha20poly1305_ietf_decrypt(e,A,t,r){return _$typedarrayToBuffer_25(this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(null,e,A,t,r.getBuffer()))}async crypto_aead_xchacha20poly1305_ietf_encrypt(e,A,t,r){return _$typedarrayToBuffer_25(this.sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(e,A,null,t,r.getBuffer()))}async crypto_auth(e,A){return _$typedarrayToBuffer_25(this.sodium.crypto_auth(e,A.getBuffer()))}async crypto_auth_verify(e,A,t){return this.sodium.crypto_auth_verify(e,A,t.getBuffer())}async crypto_box(e,A,t,r){return _$util_14.toBuffer(await this.sodium.crypto_box_easy(await _$util_14.toBuffer(e),await _$util_14.toBuffer(A),r.getBuffer(),t.getBuffer()))}async crypto_box_open(e,A,t,r){return _$util_14.toBuffer(await this.sodium.crypto_box_open_easy(await _$util_14.toBuffer(e),await _$util_14.toBuffer(A),r.getBuffer(),t.getBuffer()))}async crypto_box_seal(e,A){return _$util_14.toBuffer(await this.sodium.crypto_box_seal(await _$util_14.toBuffer(e),A.getBuffer()))}async crypto_box_seal_open(e,A,t){return _$util_14.toBuffer(await this.sodium.crypto_box_seal_open(await _$util_14.toBuffer(e),A.getBuffer(),t.getBuffer()))}async crypto_box_keypair(){const A=this.sodium.crypto_box_keypair();return new _$CryptographyKey_6(e.concat([await _$util_14.toBuffer(A.privateKey),await _$util_14.toBuffer(A.publicKey)]))}async crypto_generichash(e,A=null,t=32){return A?_$util_14.toBuffer(this.sodium.crypto_generichash(t,await _$util_14.toBuffer(e),A.getBuffer())):_$util_14.toBuffer(this.sodium.crypto_generichash(t,await _$util_14.toBuffer(e)))}async crypto_generichash_init(e=null,A=32){return e?this.sodium.crypto_generichash_init(e.getBuffer(),A):this.sodium.crypto_generichash_init(null,A)}async crypto_generichash_update(e,A){return this.sodium.crypto_generichash_update(e,await _$util_14.toBuffer(A))}async crypto_generichash_final(e,A=32){return _$util_14.toBuffer(this.sodium.crypto_generichash_final(e,A))}async crypto_kx_client_session_keys(e,A,t){const r=this.sodium.crypto_kx_client_session_keys(e.getBuffer(),A.getBuffer(),t.getBuffer());return[new _$CryptographyKey_6(await _$util_14.toBuffer(r.sharedRx)),new _$CryptographyKey_6(await _$util_14.toBuffer(r.sharedTx))]}async crypto_kx_server_session_keys(e,A,t){const r=this.sodium.crypto_kx_server_session_keys(e.getBuffer(),A.getBuffer(),t.getBuffer());return[new _$CryptographyKey_6(await _$util_14.toBuffer(r.sharedRx)),new _$CryptographyKey_6(await _$util_14.toBuffer(r.sharedTx))]}async crypto_kdf_derive_from_key(e,A,t,r){return new _$CryptographyKey_6(await _$util_14.toBuffer(this.sodium.crypto_kdf_derive_from_key(e,0|A,t,r.getBuffer())))}async crypto_onetimeauth(e,A){return void 0===this.sodium.crypto_onetimeauth?_$polyfill_11.crypto_onetimeauth(await _$util_14.toBuffer(e),A):this.sodium.crypto_onetimeauth(await _$util_14.toBuffer(e),A.getBuffer())}async crypto_onetimeauth_verify(e,A,t){return void 0===this.sodium.crypto_onetimeauth_verify?_$polyfill_11.crypto_onetimeauth_verify(await _$util_14.toBuffer(e),A,t):this.sodium.crypto_onetimeauth_verify(t,await _$util_14.toBuffer(e),A.getBuffer())}async crypto_pwhash(e,A,t,r,i,n){return _$util_14.toBuffer(this.sodium.crypto_pwhash(e,await _$util_14.toBuffer(A),await _$util_14.toBuffer(t),r,i,n))}async crypto_pwhash_str(e,A,t){return(await _$util_14.toBuffer(this.sodium.crypto_pwhash_str(await _$util_14.toBuffer(e),A,t))).toString("utf-8")}async crypto_pwhash_str_verify(e,A){return this.sodium.crypto_pwhash_str_verify(A.toString("utf-8"),await _$util_14.toBuffer(e))}async crypto_pwhash_str_needs_rehash(e,A,t){return"function"!=typeof this.sodium.crypto_pwhash_str_needs_rehash?await _$polyfill_11.crypto_pwhash_str_needs_rehash(e,A,t):this.sodium.crypto_pwhash_str_needs_rehash(e,A,t)}async crypto_scalarmult(e,A){return new _$CryptographyKey_6(await _$util_14.toBuffer(this.sodium.crypto_scalarmult(e.getBuffer(),A.getBuffer())))}async crypto_secretbox(e,A,t){return _$util_14.toBuffer(this.sodium.crypto_secretbox_easy(await _$util_14.toBuffer(e),A,t.getBuffer()))}async crypto_secretbox_open(e,A,t){return _$util_14.toBuffer(this.sodium.crypto_secretbox_open_easy(await _$util_14.toBuffer(e),A,t.getBuffer()))}async crypto_shorthash(e,A){return _$util_14.toBuffer(this.sodium.crypto_shorthash(await _$util_14.toBuffer(e),A.getBuffer()))}async crypto_sign(e,A){return _$util_14.toBuffer(this.sodium.crypto_sign(await _$util_14.toBuffer(e),A.getBuffer()))}async crypto_sign_open(e,A){return _$util_14.toBuffer(this.sodium.crypto_sign_open(e,A.getBuffer()))}async crypto_sign_detached(e,A){return _$util_14.toBuffer(this.sodium.crypto_sign_detached(await _$util_14.toBuffer(e),A.getBuffer()))}async crypto_sign_verify_detached(e,A,t){return this.sodium.crypto_sign_verify_detached(t,await _$util_14.toBuffer(e),A.getBuffer())}async crypto_sign_keypair(){const A=this.sodium.crypto_sign_keypair();return new _$CryptographyKey_6(e.concat([await _$util_14.toBuffer(A.privateKey),await _$util_14.toBuffer(A.publicKey)]))}async crypto_sign_seed_keypair(A){const t=this.sodium.crypto_sign_seed_keypair(A);return new _$CryptographyKey_6(e.concat([await _$util_14.toBuffer(t.privateKey),await _$util_14.toBuffer(t.publicKey)]))}async crypto_sign_ed25519_sk_to_curve25519(e){return _$util_14.toBuffer(this.sodium.crypto_sign_ed25519_sk_to_curve25519(e.getBuffer()))}async crypto_sign_ed25519_pk_to_curve25519(e){return _$util_14.toBuffer(this.sodium.crypto_sign_ed25519_pk_to_curve25519(e.getBuffer()))}async crypto_stream(A,t,r){return void 0===this.sodium.crypto_stream_xor?_$polyfill_11.crypto_stream_xor(e.alloc(A,0),await _$util_14.toBuffer(t),r):this.sodium.crypto_stream(A,await _$util_14.toBuffer(t),r.getBuffer())}async crypto_stream_xor(e,A,t){return void 0===this.sodium.crypto_stream_xor?_$polyfill_11.crypto_stream_xor(await _$util_14.toBuffer(e),await _$util_14.toBuffer(A),t):this.sodium.crypto_stream_xor(await _$util_14.toBuffer(e),await _$util_14.toBuffer(A),t.getBuffer())}async crypto_scalarmult_base(e){return _$util_14.toBuffer(this.sodium.crypto_scalarmult_base(e.getBuffer()))}async crypto_secretstream_xchacha20poly1305_init_push(e){const A=this.sodium.crypto_secretstream_xchacha20poly1305_init_push(e.getBuffer());return[A.state,await _$util_14.toBuffer(A.header)]}async crypto_secretstream_xchacha20poly1305_init_pull(e,A){if(e.length!==this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES)throw new _$sodiumError_12(`Header must be ${this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES} bytes long`);return this.sodium.crypto_secretstream_xchacha20poly1305_init_pull(e,A.getBuffer())}async crypto_secretstream_xchacha20poly1305_push(e,A,t="",r=0){return _$util_14.toBuffer(this.sodium.crypto_secretstream_xchacha20poly1305_push(e,await _$util_14.toBuffer(A),t.length>0?await _$util_14.toBuffer(t):null,r))}async crypto_secretstream_xchacha20poly1305_pull(e,A,t="",r=0){if(A.length0?await _$util_14.toBuffer(t):null,r);if(r!==i.tag)throw new _$sodiumError_12(`Invalid tag (Given: ${r}; Expected: ${i.tag})`);return _$util_14.toBuffer(i.message)}async crypto_secretstream_xchacha20poly1305_rekey(e){this.sodium.crypto_secretstream_xchacha20poly1305_rekey(e)}async randombytes_buf(e){return _$util_14.toBuffer(await this.sodium.randombytes_buf(e))}async randombytes_uniform(e){return this.sodium.randombytes_uniform(e)}async sodium_add(e,A){const t=await _$util_14.cloneBuffer(e);return this.sodium.add(t,A),t}async sodium_bin2hex(e){return this.sodium.to_hex(e)}async sodium_compare(e,A){return this.sodium.compare(e,A)}async sodium_hex2bin(A){return e.from(this.sodium.from_hex(A))}async sodium_increment(e){return this.sodium.increment(e)}async sodium_is_zero(e,A){return this.sodium.is_zero(e,A)}async sodium_memcmp(e,A){return this.sodium.memcmp(e,A)}async sodium_memzero(e){this.sodium.memzero(e)}async sodium_pad(e,A){return _$util_14.toBuffer(this.sodium.pad(await _$util_14.toBuffer(e),A))}async sodium_unpad(e,A){return _$util_14.toBuffer(this.sodium.unpad(e,A))}}}).call(this,_$buffer_74({}).Buffer);var _$X25519PublicKey_9={};(function(e){class A extends _$CryptographyKey_6{constructor(e){if(32!==e.length)throw new Error("X25519 public keys must be 32 bytes long");super(e),this.keyType="x25519",this.publicKey=!0}static from(){return new A(e.from(...arguments))}isX25519Key(){return!0}isPublicKey(){return!0}}_$X25519PublicKey_9=A}).call(this,_$buffer_74({}).Buffer);var _$X25519SecretKey_10={};(function(e){class A extends _$CryptographyKey_6{constructor(e){if(32!==e.length)throw new Error("X25519 secret keys must be 32 bytes long");super(e),this.keyType="x25519",this.publicKey=!1}static from(){return new A(e.from(...arguments))}isX25519Key(){return!0}isPublicKey(){return!1}}_$X25519SecretKey_10=A}).call(this,_$buffer_74({}).Buffer);var _$SodiumPlus_13={};(function(A){void 0===A&&_$buffer_17({}).Buffer;class t{constructor(e){if(!(e instanceof _$backend_3))throw new TypeError("Backend object must implement the backend function");this.backend=e,_$util_14.populateConstants(this)}getBackendName(){return this.backend.backendName}isSodiumNative(){return!1}isLibsodiumWrappers(){return this.backend instanceof _$LibsodiumWrappersBackend_4}static async auto(){let e=await _$LibsodiumWrappersBackend_4.init();return _$util_14.populateConstants(e),new t(e)}async ensureLoaded(){if(void 0===this.backend)try{await t.auto()}catch(e){this.backend=await _$LibsodiumWrappersBackend_4.init()}}async crypto_aead_xchacha20poly1305_ietf_decrypt(e,A,t,r=""){if(await this.ensureLoaded(),24!==A.length)throw new _$sodiumError_12("Argument 2 must be 24 bytes");if(!(t instanceof _$CryptographyKey_6))throw new TypeError("Argument 3 must be an instance of CryptographyKey");return await this.backend.crypto_aead_xchacha20poly1305_ietf_decrypt(await _$util_14.toBuffer(e),r.length>0?await _$util_14.toBuffer(r):null,await _$util_14.toBuffer(A),t)}async crypto_aead_xchacha20poly1305_ietf_encrypt(e,A,t,r=""){if(await this.ensureLoaded(),24!==A.length)throw new _$sodiumError_12("Argument 2 must be 24 bytes");if(!(t instanceof _$CryptographyKey_6))throw new TypeError("Argument 3 must be an instance of CryptographyKey");return await this.backend.crypto_aead_xchacha20poly1305_ietf_encrypt(await _$util_14.toBuffer(e),r.length>0?await _$util_14.toBuffer(r):null,await _$util_14.toBuffer(A),t)}async crypto_aead_xchacha20poly1305_ietf_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(32))}async crypto_auth(e,A){if(await this.ensureLoaded(),!(A instanceof _$CryptographyKey_6))throw new TypeError("Argument 2 must be an instance of CryptographyKey");return await this.ensureLoaded(),await this.backend.crypto_auth(await _$util_14.toBuffer(e),A)}async crypto_auth_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(32))}async crypto_auth_verify(e,A,t){if(await this.ensureLoaded(),!(A instanceof _$CryptographyKey_6))throw new TypeError("Argument 2 must be an instance of CryptographyKey");return await this.ensureLoaded(),await this.backend.crypto_auth_verify(await _$util_14.toBuffer(t),await _$util_14.toBuffer(e),A)}async crypto_box(e,A,t,r){if(await this.ensureLoaded(),!(t instanceof _$X25519SecretKey_10))throw new TypeError("Argument 3 must be an instance of X25519SecretKey");if(!(r instanceof _$X25519PublicKey_9))throw new TypeError("Argument 4 must be an instance of X25519PublicKey");if(24!==(A=await _$util_14.toBuffer(A)).length)throw new _$sodiumError_12("Nonce must be a buffer of exactly 24 bytes");return this.backend.crypto_box(await _$util_14.toBuffer(e),await _$util_14.toBuffer(A),t,r)}async crypto_box_open(e,A,t,r){if(await this.ensureLoaded(),!(t instanceof _$X25519SecretKey_10))throw new TypeError("Argument 3 must be an instance of X25519SecretKey");if(!(r instanceof _$X25519PublicKey_9))throw new TypeError("Argument 4 must be an instance of X25519PublicKey");if((e=await _$util_14.toBuffer(e)).length<16)throw new _$sodiumError_12("Ciphertext must be a buffer of at least 16 bytes");if(24!==(A=await _$util_14.toBuffer(A)).length)throw new _$sodiumError_12("Nonce must be a buffer of exactly 24 bytes");return this.backend.crypto_box_open(e,A,t,r)}async crypto_box_keypair(){return await this.ensureLoaded(),this.backend.crypto_box_keypair()}async crypto_box_keypair_from_secretkey_and_publickey(e,A){if(await this.ensureLoaded(),!(e instanceof _$X25519SecretKey_10))throw new TypeError("Argument 1 must be an instance of X25519SecretKey");if(!(A instanceof _$X25519PublicKey_9))throw new TypeError("Argument 2 must be an instance of X25519PublicKey");return await this.backend.crypto_box_keypair_from_secretkey_and_publickey(e,A)}async crypto_box_secretkey(e){if(64!==e.getLength())throw new _$sodiumError_12("Keypair must be 64 bytes");return new _$X25519SecretKey_10(A.from(e.getBuffer().slice(0,32)))}async crypto_box_publickey(e){if(64!==e.getLength())throw new _$sodiumError_12("Keypair must be 64 bytes");return new _$X25519PublicKey_9(A.from(e.getBuffer().slice(32,64)))}async crypto_box_publickey_from_secretkey(e){if(await this.ensureLoaded(),!(e instanceof _$X25519SecretKey_10))throw new TypeError("Argument 1 must be an instance of X25519SecretKey");return new _$X25519PublicKey_9(await this.backend.crypto_scalarmult_base(e))}async crypto_box_seal(e,A){if(await this.ensureLoaded(),!(A instanceof _$X25519PublicKey_9))throw new TypeError("Argument 2 must be an instance of X25519PublicKey");return await this.backend.crypto_box_seal(e,A)}async crypto_box_seal_open(e,A,t){if(await this.ensureLoaded(),!(A instanceof _$X25519PublicKey_9))throw new TypeError("Argument 2 must be an instance of X25519PublicKey");if(!(t instanceof _$X25519SecretKey_10))throw new TypeError("Argument 3 must be an instance of X25519SecretKey");return await this.backend.crypto_box_seal_open(await _$util_14.toBuffer(e),A,t)}async crypto_generichash(e,A=null,t=32){return await this.ensureLoaded(),await this.backend.crypto_generichash(e,A,t)}async crypto_generichash_init(e=null,A=32){return await this.ensureLoaded(),await this.backend.crypto_generichash_init(e,A)}async crypto_generichash_update(e,A){return await this.ensureLoaded(),await this.backend.crypto_generichash_update(e,A)}async crypto_generichash_final(e,A=32){return await this.ensureLoaded(),await this.backend.crypto_generichash_final(e,A)}async crypto_generichash_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(this.CRYPTO_GENERICHASH_KEYBYTES))}async crypto_kdf_derive_from_key(e,A,t,r){if(await this.ensureLoaded(),e<1)throw new _$sodiumError_12("Length must be a positive integer.");if(A<0)throw new _$sodiumError_12("Key ID must be an unsigned integer");return await this.backend.crypto_kdf_derive_from_key(e,A,t,r)}async crypto_kdf_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(this.CRYPTO_KDF_KEYBYTES))}async crypto_kx_keypair(){return this.crypto_box_keypair()}async crypto_kx_seed_keypair(e){await this.ensureLoaded();const t=await this.backend.crypto_generichash(e,null,this.CRYPTO_KX_SECRETKEYBYTES),r=await this.backend.crypto_scalarmult_base(new _$CryptographyKey_6(t));return new _$CryptographyKey_6(A.concat([t,r]))}async crypto_kx_client_session_keys(e,A,t){if(await this.ensureLoaded(),!(e instanceof _$X25519PublicKey_9))throw new TypeError("Argument 1 must be an instance of X25519PublicKey");if(!(A instanceof _$X25519SecretKey_10))throw new TypeError("Argument 2 must be an instance of X25519SecretKey");if(!(t instanceof _$X25519PublicKey_9))throw new TypeError("Argument 3 must be an instance of X25519PublicKey");return this.backend.crypto_kx_client_session_keys(e,A,t)}async crypto_kx_server_session_keys(e,A,t){if(await this.ensureLoaded(),!(e instanceof _$X25519PublicKey_9))throw new TypeError("Argument 1 must be an instance of X25519PublicKey");if(!(A instanceof _$X25519SecretKey_10))throw new TypeError("Argument 2 must be an instance of X25519SecretKey");if(!(t instanceof _$X25519PublicKey_9))throw new TypeError("Argument 3 must be an instance of X25519PublicKey");return this.backend.crypto_kx_server_session_keys(e,A,t)}async crypto_onetimeauth(e,A){if(!(A instanceof _$CryptographyKey_6))throw new TypeError("Argument 2 must be an instance of CryptographyKey");return await this.backend.crypto_onetimeauth(await _$util_14.toBuffer(e),A)}async crypto_onetimeauth_verify(e,A,t){if(!(A instanceof _$CryptographyKey_6))throw new TypeError("Argument 2 must be an instance of CryptographyKey");return await this.backend.crypto_onetimeauth_verify(await _$util_14.toBuffer(e),A,await _$util_14.toBuffer(t))}async crypto_onetimeauth_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(32))}async crypto_pwhash(e,A,t,r,i,n=null){return await this.ensureLoaded(),n||(n=this.CRYPTO_PWHASH_ALG_DEFAULT),new _$CryptographyKey_6(await this.backend.crypto_pwhash(e,await _$util_14.toBuffer(A),await _$util_14.toBuffer(t),r,i,n))}async crypto_pwhash_str(e,A,t){return await this.ensureLoaded(),await this.backend.crypto_pwhash_str(e,A,t)}async crypto_pwhash_str_verify(e,A){return await this.ensureLoaded(),await this.backend.crypto_pwhash_str_verify(e,A)}async crypto_pwhash_str_needs_rehash(e,A,t){return await this.ensureLoaded(),await this.backend.crypto_pwhash_str_needs_rehash(e,A,t)}async crypto_scalarmult(e,A){if(await this.ensureLoaded(),!(e instanceof _$X25519SecretKey_10))throw new TypeError("Argument 1 must be an instance of X25519SecretKey");if(!(A instanceof _$X25519PublicKey_9))throw new TypeError("Argument 2 must be an instance of X25519PublicKey");return await this.backend.crypto_scalarmult(e,A)}async crypto_scalarmult_base(e){if(await this.ensureLoaded(),!(e instanceof _$X25519SecretKey_10))throw new TypeError("Argument 1 must be an instance of X25519SecretKey");return new _$X25519PublicKey_9(await this.backend.crypto_scalarmult_base(e))}async crypto_secretbox(e,A,t){if(await this.ensureLoaded(),t.isEd25519Key()||t.isX25519Key())throw new TypeError("Argument 3 must not be an asymmetric key");if(24!==(A=await _$util_14.toBuffer(A)).length)throw new _$sodiumError_12("Nonce must be a buffer of exactly 24 bytes");return await this.backend.crypto_secretbox(e,A,t)}async crypto_secretbox_open(e,A,t){if(await this.ensureLoaded(),t.isEd25519Key()||t.isX25519Key())throw new TypeError("Argument 3 must not be an asymmetric key");if((e=await _$util_14.toBuffer(e)).length<16)throw new _$sodiumError_12("Ciphertext must be a buffer of at least 16 bytes");if(24!==(A=await _$util_14.toBuffer(A)).length)throw new _$sodiumError_12("Nonce must be a buffer of exactly 24 bytes");return await this.backend.crypto_secretbox_open(e,A,t)}async crypto_secretbox_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(this.CRYPTO_SECRETBOX_KEYBYTES))}async crypto_secretstream_xchacha20poly1305_init_push(e){if(await this.ensureLoaded(),!(e instanceof _$CryptographyKey_6))throw new TypeError("Key must be an instance of CryptographyKey");if(32!==e.getLength())throw new _$sodiumError_12("crypto_secretstream keys must be 32 bytes long");const[A,t]=await this.backend.crypto_secretstream_xchacha20poly1305_init_push(e);return Object.freeze({header:t,push:this.crypto_secretstream_xchacha20poly1305_push.bind(this,A),rekey:this.crypto_secretstream_xchacha20poly1305_rekey.bind(this,A)})}async crypto_secretstream_xchacha20poly1305_init_pull(e,A){if(await this.ensureLoaded(),24!==(A=await _$util_14.toBuffer(A)).length)throw new _$sodiumError_12("crypto_secretstream headers must be 24 bytes long");if(!(e instanceof _$CryptographyKey_6))throw new TypeError("Key must be an instance of CryptographyKey");if(32!==e.getLength())throw new _$sodiumError_12("crypto_secretstream keys must be 32 bytes long");const t=await this.backend.crypto_secretstream_xchacha20poly1305_init_pull(A,e);return Object.freeze({pull:this.crypto_secretstream_xchacha20poly1305_pull.bind(this,t)})}async crypto_secretstream_xchacha20poly1305_push(e,A,t="",r=0){return await this.ensureLoaded(),this.backend.crypto_secretstream_xchacha20poly1305_push(e,A,t,r)}async crypto_secretstream_xchacha20poly1305_pull(e,A,t="",r=0){return await this.ensureLoaded(),this.backend.crypto_secretstream_xchacha20poly1305_pull(e,A,t,r)}async crypto_secretstream_xchacha20poly1305_rekey(e){await this.ensureLoaded(),await this.backend.crypto_secretstream_xchacha20poly1305_rekey(e)}async crypto_secretstream_xchacha20poly1305_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES))}async crypto_shorthash(e,A){return await this.ensureLoaded(),await this.backend.crypto_shorthash(await _$util_14.toBuffer(e),A)}async crypto_shorthash_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(this.CRYPTO_SHORTHASH_KEYBYTES))}async crypto_sign(e,A){if(await this.ensureLoaded(),!(A instanceof _$Ed25519SecretKey_8))throw new TypeError("Argument 2 must be an instance of Ed25519SecretKey");return this.backend.crypto_sign(e,A)}async crypto_sign_open(e,A){if(await this.ensureLoaded(),!(A instanceof _$Ed25519PublicKey_7))throw new TypeError("Argument 2 must be an instance of Ed25519PublicKey");return this.backend.crypto_sign_open(e,A)}async crypto_sign_detached(e,A){if(await this.ensureLoaded(),!(A instanceof _$Ed25519SecretKey_8))throw new TypeError("Argument 2 must be an instance of Ed25519SecretKey");return this.backend.crypto_sign_detached(e,A)}async crypto_sign_verify_detached(e,A,t){if(await this.ensureLoaded(),!(A instanceof _$Ed25519PublicKey_7))throw new TypeError("Argument 2 must be an instance of Ed25519PublicKey");return this.backend.crypto_sign_verify_detached(e,A,t)}async crypto_sign_secretkey(e){if(96!==e.getLength())throw new _$sodiumError_12("Keypair must be 96 bytes");return new _$Ed25519SecretKey_8(await _$util_14.toBuffer(e.getBuffer().slice(0,64)))}async crypto_sign_publickey(e){if(96!==e.getLength())throw new _$sodiumError_12("Keypair must be 96 bytes");return new _$Ed25519PublicKey_7(e.getBuffer().slice(64,96))}async crypto_sign_keypair(){return await this.ensureLoaded(),this.backend.crypto_sign_keypair()}async crypto_sign_seed_keypair(e){if(await this.ensureLoaded(),e instanceof _$CryptographyKey_6&&(e=e.getBuffer()),32!==(e=await _$util_14.toBuffer(e)).length)throw new _$sodiumError_12(`Seed must be 32 bytes long; got ${e.length}`);return this.backend.crypto_sign_seed_keypair(e)}async crypto_sign_ed25519_sk_to_curve25519(e){return await this.ensureLoaded(),new _$X25519SecretKey_10(await this.backend.crypto_sign_ed25519_sk_to_curve25519(e))}async crypto_sign_ed25519_pk_to_curve25519(e){return await this.ensureLoaded(),new _$X25519PublicKey_9(await this.backend.crypto_sign_ed25519_pk_to_curve25519(e))}async crypto_stream(e,A,t){return await this.ensureLoaded(),this.backend.crypto_stream(e,A,t)}async crypto_stream_xor(e,A,t){return await this.ensureLoaded(),this.backend.crypto_stream_xor(e,A,t)}async crypto_stream_keygen(){return new _$CryptographyKey_6(await this.backend.randombytes_buf(this.CRYPTO_STREAM_KEYBYTES))}async randombytes_buf(e){return await this.ensureLoaded(),await this.backend.randombytes_buf(e)}async randombytes_uniform(e){return await this.ensureLoaded(),this.backend.randombytes_uniform(e)}async sodium_add(e,A){return await this.ensureLoaded(),await this.backend.sodium_add(await _$util_14.toBuffer(e),await _$util_14.toBuffer(A))}async sodium_bin2hex(e){return await this.ensureLoaded(),this.backend.sodium_bin2hex(e)}async sodium_compare(e,A){return await this.ensureLoaded(),this.backend.sodium_compare(e,A)}async sodium_hex2bin(e){return await this.ensureLoaded(),this.backend.sodium_hex2bin(e)}async sodium_increment(e){return await this.ensureLoaded(),this.backend.sodium_increment(e)}async sodium_is_zero(e,A){return await this.ensureLoaded(),this.backend.sodium_is_zero(e,A)}async sodium_memcmp(e,A){return await this.ensureLoaded(),this.backend.sodium_memcmp(e,A)}async sodium_memzero(e){await this.ensureLoaded(),await this.backend.sodium_memzero(e)}async sodium_pad(e,A){return await this.ensureLoaded(),this.backend.sodium_pad(e,A)}async sodium_unpad(e,A){return await this.ensureLoaded(),this.backend.sodium_unpad(e,A)}}_$SodiumPlus_13=t}).call(this,_$buffer_74({}).Buffer);var _$sodiumnative_5={};(function(e){void 0===e&&_$buffer_17({}).Buffer,_$sodiumnative_5=class extends _$backend_3{constructor(e){super(e),this.sodium=e,this.backendName="SodiumNativeBackend"}static async init(){throw new _$sodiumError_12("sodium-native not installed")}async crypto_aead_xchacha20poly1305_ietf_decrypt(A,t,r,i){const n=e.alloc(A.length-16,0);return this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(n,null,await _$util_14.toBuffer(A),await _$util_14.toBuffer(t),await _$util_14.toBuffer(r),i.getBuffer()),n}async crypto_aead_xchacha20poly1305_ietf_encrypt(A,t,r,i){const n=e.alloc(A.length+16,0);return this.sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(n,await _$util_14.toBuffer(A),await _$util_14.toBuffer(t),null,await _$util_14.toBuffer(r),i.getBuffer()),n}async crypto_auth(A,t){const r=e.alloc(32);return this.sodium.crypto_auth(r,await _$util_14.toBuffer(A),t.getBuffer()),_$typedarrayToBuffer_25(r)}async crypto_auth_verify(e,A,t){return this.sodium.crypto_auth_verify(e,await _$util_14.toBuffer(A),t.getBuffer())}async crypto_box(A,t,r,i){const n=e.alloc(A.length+16);return this.sodium.crypto_box_easy(n,await _$util_14.toBuffer(A),t,i.getBuffer(),r.getBuffer()),_$util_14.toBuffer(n)}async crypto_box_open(A,t,r,i){const n=e.alloc(A.length-16);if(!this.sodium.crypto_box_open_easy(n,A,t,i.getBuffer(),r.getBuffer()))throw new _$sodiumError_12("Decryption failed");return _$util_14.toBuffer(n)}async crypto_box_seal(A,t){const r=e.alloc(A.length+48);return this.sodium.crypto_box_seal(r,await _$util_14.toBuffer(A),t.getBuffer()),_$util_14.toBuffer(r)}async crypto_box_seal_open(A,t,r){const i=e.alloc(A.length-48);if(!this.sodium.crypto_box_seal_open(i,await _$util_14.toBuffer(A),t.getBuffer(),r.getBuffer()))throw new _$sodiumError_12("Decryption failed");return _$util_14.toBuffer(i)}async crypto_box_keypair(){const A=e.alloc(32,0),t=e.alloc(32,0);return this.sodium.crypto_box_keypair(A,t),new _$CryptographyKey_6(e.concat([t,A]))}async crypto_generichash(A,t=null,r=32){const i=e.alloc(r);return t?this.sodium.crypto_generichash(i,await _$util_14.toBuffer(A),t.getBuffer()):this.sodium.crypto_generichash(i,await _$util_14.toBuffer(A)),i}async crypto_generichash_init(A=null,t=32){const r=e.alloc(this.CRYPTO_GENERICHASH_STATEBYTES);return A?this.sodium.crypto_generichash_init(r,A.getBuffer(),t):this.sodium.crypto_generichash_init(r,null,t),r}async crypto_generichash_update(e,A){return this.sodium.crypto_generichash_update(e,await _$util_14.toBuffer(A)),e}async crypto_generichash_final(A,t=32){const r=e.alloc(t);return this.sodium.crypto_generichash_final(A,r),r}async crypto_kdf_derive_from_key(A,t,r,i){const n=e.alloc(A,0);return this.sodium.crypto_kdf_derive_from_key(n,0|t,await _$util_14.toBuffer(r),i.getBuffer()),new _$CryptographyKey_6(n)}async crypto_kx_client_session_keys(A,t,r){const i=e.alloc(this.CRYPTO_KX_SESSIONKEYBYTES),n=e.alloc(this.CRYPTO_KX_SESSIONKEYBYTES);return this.sodium.crypto_kx_client_session_keys(i,n,A.getBuffer(),t.getBuffer(),r.getBuffer()),[new _$CryptographyKey_6(i),new _$CryptographyKey_6(n)]}async crypto_kx_server_session_keys(A,t,r){const i=e.alloc(this.CRYPTO_KX_SESSIONKEYBYTES),n=e.alloc(this.CRYPTO_KX_SESSIONKEYBYTES);return this.sodium.crypto_kx_server_session_keys(i,n,A.getBuffer(),t.getBuffer(),r.getBuffer()),[new _$CryptographyKey_6(i),new _$CryptographyKey_6(n)]}async crypto_onetimeauth(A,t){const r=e.alloc(16);return this.sodium.crypto_onetimeauth(r,await _$util_14.toBuffer(A),t.getBuffer()),r}async crypto_onetimeauth_verify(e,A,t){return this.sodium.crypto_onetimeauth_verify(t,await _$util_14.toBuffer(e),A.getBuffer())}async crypto_pwhash(A,t,r,i,n,a){const o=e.alloc(A,0),s=await _$util_14.toBuffer(t),f=await _$util_14.toBuffer(r);return await new Promise((e,A)=>{this.sodium.crypto_pwhash_async(o,s,f,i,n,a,(t,r)=>t?A(t):e(r))}),o}async crypto_pwhash_str(A,t,r){const i=e.alloc(128,0),n=await _$util_14.toBuffer(A);return await new Promise((e,A)=>{this.sodium.crypto_pwhash_str_async(i,n,t,r,(t,r)=>t?A(t):e(r))}),i.toString()}async crypto_pwhash_str_verify(A,t){const r=e.alloc(128,0);(await _$util_14.toBuffer(t)).copy(r,0,0);const i=await _$util_14.toBuffer(A);return new Promise((e,A)=>{this.sodium.crypto_pwhash_str_verify_async(r,i,(t,r)=>t?A(t):e(r))})}async crypto_pwhash_str_needs_rehash(A,t,r){const i=e.alloc(128,0);return(await _$util_14.toBuffer(A)).copy(i,0,0),this.sodium.crypto_pwhash_str_needs_rehash(i,t,r)}async crypto_scalarmult(A,t){const r=e.alloc(32);return this.sodium.crypto_scalarmult(r,A.getBuffer(),t.getBuffer()),new _$CryptographyKey_6(await _$util_14.toBuffer(r))}async crypto_scalarmult_base(A){const t=e.alloc(32);return this.sodium.crypto_scalarmult_base(t,A.getBuffer()),t}async crypto_secretbox(A,t,r){const i=e.alloc(A.length+16);return this.sodium.crypto_secretbox_easy(i,await _$util_14.toBuffer(A),t,r.getBuffer()),i}async crypto_shorthash(A,t){const r=e.alloc(8);return this.sodium.crypto_shorthash(r,await _$util_14.toBuffer(A),t.getBuffer()),r}async crypto_secretbox_open(A,t,r){const i=e.alloc(A.length-16);if(!this.sodium.crypto_secretbox_open_easy(i,A,t,r.getBuffer()))throw new _$sodiumError_12("Decryption failure");return i}async crypto_secretstream_xchacha20poly1305_init_push(A){const t=e.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES),r=e.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES);return this.sodium.randombytes_buf(r),this.sodium.crypto_secretstream_xchacha20poly1305_init_push(t,r,A.getBuffer()),[t,r]}async crypto_secretstream_xchacha20poly1305_init_pull(A,t){if(A.length!==this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES)throw new _$sodiumError_12(`Header must be ${this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES} bytes long`);const r=e.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES);return this.sodium.crypto_secretstream_xchacha20poly1305_init_pull(r,A,t.getBuffer()),r}async crypto_secretstream_xchacha20poly1305_push(A,t,r="",i=0){const n=e.alloc(t.length+this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES);return this.sodium.crypto_secretstream_xchacha20poly1305_push(A,n,await _$util_14.toBuffer(t),r.length>0?await _$util_14.toBuffer(r):null,e.from([i])),n}async crypto_secretstream_xchacha20poly1305_pull(A,t,r="",i=0){if(t.length0?await _$util_14.toBuffer(r):null),n}async crypto_secretstream_xchacha20poly1305_rekey(e){this.sodium.crypto_secretstream_xchacha20poly1305_rekey(e)}async crypto_sign(A,t){const r=e.alloc(A.length+64);return this.sodium.crypto_sign(r,await _$util_14.toBuffer(A),t.getBuffer()),r}async crypto_sign_open(A,t){const r=e.alloc(A.length-64);return this.sodium.crypto_sign_open(r,await _$util_14.toBuffer(A),t.getBuffer()),r}async crypto_sign_detached(A,t){const r=e.alloc(64);return this.sodium.crypto_sign_detached(r,await _$util_14.toBuffer(A),t.getBuffer()),r}async crypto_sign_verify_detached(e,A,t){return this.sodium.crypto_sign_verify_detached(t,await _$util_14.toBuffer(e),A.getBuffer())}async crypto_sign_keypair(){const A=e.alloc(64,0),t=e.alloc(32,0);return this.sodium.crypto_sign_keypair(t,A),new _$CryptographyKey_6(e.concat([A,t]))}async crypto_sign_seed_keypair(A){const t=e.alloc(64,0),r=e.alloc(32,0);return this.sodium.crypto_sign_seed_keypair(r,t,A),new _$CryptographyKey_6(e.concat([t,r]))}async crypto_sign_ed25519_sk_to_curve25519(A){const t=e.alloc(32);return this.sodium.crypto_sign_ed25519_sk_to_curve25519(t,A.getBuffer()),t}async crypto_sign_ed25519_pk_to_curve25519(A){const t=e.alloc(32);return this.sodium.crypto_sign_ed25519_pk_to_curve25519(t,A.getBuffer()),t}async crypto_stream(A,t,r){const i=e.alloc(A);return this.sodium.crypto_stream(i,await _$util_14.toBuffer(t),r.getBuffer()),i}async crypto_stream_xor(A,t,r){const i=e.alloc(A.length);return this.sodium.crypto_stream_xor(i,await _$util_14.toBuffer(A),await _$util_14.toBuffer(t),r.getBuffer()),i}async randombytes_buf(A){let t=e.alloc(A);return this.sodium.randombytes_buf(t),t}async randombytes_uniform(e){return this.sodium.randombytes_uniform(e)}async sodium_add(e,A){const t=await _$util_14.cloneBuffer(e);return this.sodium.sodium_add(t,A),t}async sodium_bin2hex(e){let A,t,r,i="";for(let n=0;n>8&-39)<<8|87+(A=e[n]>>>4)+(A-10>>8&-39),i+=String.fromCharCode(255&r)+String.fromCharCode(r>>>8);return i}async sodium_compare(e,A){return this.sodium.sodium_compare(e,A)}async sodium_hex2bin(A,t=null){let r=0,i=0,n=0,a=0,o=0,s=0,f=0,c=0,h=0,u=0;const g=e.alloc(A.length>>1,0);for(;i>8)|(o=((s=(-33&n)-55)-10^s-16)>>8))){if(t&&0===u&&t.indexOf(n)>=0){i++;continue}break}h=f&c|o&s,0===u?a=16*h:g[r++]=a|h,u=~u,i++}return g}async sodium_increment(e){return this.sodium.sodium_increment(e)}async sodium_is_zero(e,A){return this.sodium.sodium_is_zero(e,A)}async sodium_memcmp(e,A){return this.sodium.sodium_memcmp(e,A)}async sodium_memzero(e){this.sodium.sodium_memzero(e)}async sodium_pad(A,t){let r=(A=await _$util_14.toBuffer(A)).length+A.length%t;r **See also:** [Libsodium's documentation on its AEAD features](https://download.libsodium.org/doc/secret-key_cryptography/aead/chacha20-poly1305/xchacha20-poly1305_construction). + +### crypto_aead_xchacha20poly1305_ietf_decrypt + +Decrypt a message (and optional associated data) with XChaCha20-Poly1305. + +**Parameters and their respective types**: + +1. `{string|Buffer}` Ciphertext +2. `{string|Buffer}` nonce (must be 24 bytes) +3. `{CryptographyKey}` key +4. `{string|Buffer}` assocData + +Returns a `Promise` that resolves to a `Buffer`. +Throws a `SodiumError` on decryption failure. + +### crypto_aead_xchacha20poly1305_ietf_encrypt + +Encrypt a message (and optional associated data) with XChaCha20-Poly1305. + +**Parameters and their respective types**: + +1. `{string|Buffer}` Plaintext +2. `{string|Buffer}` nonce (must be 24 bytes) +3. `{CryptographyKey}` key +4. `{string|Buffer}` assocData + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_aead_xchacha20poly1305_ietf_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_aead_xchacha20poly1305_ietf_` API. + +### Example for crypto_aead_xchacha20poly1305_ietf_* + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Your message goes here'; + let key = await sodium.crypto_aead_xchacha20poly1305_ietf_keygen(); + let nonce = await sodium.randombytes_buf(24); + let ciphertext = await sodium.crypto_aead_xchacha20poly1305_ietf_encrypt( + plaintext, + nonce, + key + ); + + console.log(ciphertext.toString('hex')); + + let decrypted = await sodium.crypto_aead_xchacha20poly1305_ietf_decrypt( + ciphertext, + nonce, + key + ); + + console.log(decrypted.toString()); +})(); +``` \ No newline at end of file diff --git a/library/sodium-plus/docs/SodiumPlus/README.md b/library/sodium-plus/docs/SodiumPlus/README.md new file mode 100644 index 000000000..f341b8be4 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/README.md @@ -0,0 +1,99 @@ +# SodiumPlus Methods + +This describes the methods in the public API for Sodium-Plus. +If you're not sure which method to use, please refer to the +[Libsodium Quick Reference](https://paragonie.com/blog/2017/06/libsodium-quick-reference-quick-comparison-similar-functions-and-which-one-use) +for guidance. + +* [AEAD (XChaCha20-Poly1305)](AEAD.md#aead) + * [crypto_aead_xchacha20poly1305_ietf_decrypt](AEAD.md#crypto_aead_xchacha20poly1305_ietf_decrypt) + * [crypto_aead_xchacha20poly1305_ietf_encrypt](AEAD.md#crypto_aead_xchacha20poly1305_ietf_encrypt) + * [crypto_aead_xchacha20poly1305_ietf_keygen](AEAD.md#crypto_aead_xchacha20poly1305_ietf_keygen) + * [Example for crypto_aead_xchacha20poly1305_ietf_*](AEAD.md#example-for-crypto_aead_xchacha20poly1305_ietf_) +* [Shared-key authentication](shared-key-authentication.md) + * [crypto_auth](shared-key-authentication.md#crypto_auth) + * [crypto_auth_verify](shared-key-authentication.md#crypto_auth_verify) + * [crypto_auth_keygen](shared-key-authentication.md#crypto_auth_keygen) + * [Example for crypto_auth](shared-key-authentication.md#example-for-crypto_auth) +* [Authenticated public-key encryption](authenticated-public-key-encryption.md) + * [crypto_box](authenticated-public-key-encryption.md#crypto_box) + * [crypto_box_open](authenticated-public-key-encryption.md#crypto_box_open) + * [crypto_box_keypair](authenticated-public-key-encryption.md#crypto_box_keypair) + * [crypto_box_keypair_from_secretkey_and_secretkey](authenticated-public-key-encryption.md#crypto_box_keypair_from_secretkey_and_secretkey) + * [crypto_box_publickey](authenticated-public-key-encryption.md#crypto_box_publickey) + * [crypto_box_secretkey](authenticated-public-key-encryption.md#crypto_box_secretkey) + * [crypto_box_publickey_from_secretkey](authenticated-public-key-encryption.md#crypto_box_publickey_from_secretkey) + * [Example for crypto_box](authenticated-public-key-encryption.md#example-for-crypto_box) +* [Sealed boxes (anonymous public-key encryption)](sealed-boxes.md) + * [crypto_box_seal](sealed-boxes.md#crypto_box_seal) + * [crypto_box_seal_open](sealed-boxes.md#crypto_box_seal_open) + * [Example for crypto_box_seal](sealed-boxes.md#example-for-crypto_box_seal) +* [General-purpose cryptographic hash](general-purpose-cryptographic-hash.md) + * [crypto_generichash](general-purpose-cryptographic-hash.md#crypto_generichash) + * [crypto_generichash_init](general-purpose-cryptographic-hash.md#crypto_generichash_init) + * [crypto_generichash_update](general-purpose-cryptographic-hash.md#crypto_generichash_update) + * [crypto_generichash_final](general-purpose-cryptographic-hash.md#crypto_generichash_final) + * [crypto_generichash_keygen](general-purpose-cryptographic-hash.md#crypto_generichash_keygen) + * [Example for crypto_generichash](general-purpose-cryptographic-hash.md#example-for-crypto_generichash) +* [Key derivation](key-derivation.md) + * [crypto_kdf_derive_from_key](key-derivation.md#crypto_kdf_derive_from_key) + * [crypto_kdf_keygen](key-derivation.md#crypto_kdf_keygen) + * [Example for crypto_kdf](key-derivation.md#example-for-crypto_kdf) +* [Key exchange](key-exchange.md) + * [crypto_kx_keypair](key-exchange.md#crypto_kx_keypair) + * [crypto_kx_seed_keypair](key-exchange.md#crypto_kx_seed_keypair) + * [crypto_kx_client_session_keys](key-exchange.md#crypto_kx_client_session_keys) + * [crypto_kx_server_session_keys](key-exchange.md#crypto_kx_server_session_keys) + * [Example for crypto_kx](key-exchange.md#example-for-crypto_kx) +* [One-time authentication](one-time-authentication.md) + * [crypto_onetimeauth](one-time-authentication.md#crypto_onetimeauth) + * [crypto_onetimeauth_verify](one-time-authentication.md#crypto_onetimeauth_verify) + * [crypto_onetimeauth_keygen](one-time-authentication.md#crypto_onetimeauth_keygen) + * [Example for crypto_onetimeauth](one-time-authentication.md#example-for-crypto_onetimeauth) +* [Password-based key derivation](password-based-key-derivation.md) + * [crypto_pwhash](password-based-key-derivation.md#crypto_pwhash) + * [Example for crypto_pwhash](password-based-key-derivation.md#example-for-crypto_pwhash) +* [Password hashing and storage](password-hashing-and-storage.md) + * [crypto_pwhash_str](password-hashing-and-storage.md#crypto_pwhash_str) + * [crypto_pwhash_str_needs_rehash](password-hashing-and-storage.md#crypto_pwhash_str_needs_rehash) + * [crypto_pwhash_str_verify](password-hashing-and-storage.md#crypto_pwhash_str_verify) + * [Example for crypto_pwhash_str](password-hashing-and-storage.md#example-for-crypto_pwhash_str) +* [Scalar multiplication over Curve25519 (advanced)](scalar-multiplication.md) + * [crypto_scalarmult](scalar-multiplication.md#crypto_scalarmult) + * [crypto_scalarmult_base](scalar-multiplication.md#crypto_scalarmult_base) + * [Example for crypto_scalarmult](scalar-multiplication.md#example-for-crypto_scalarmult) +* [Shared-key authenticated encryption](shared-key-authenticated-encryption.md) + * [crypto_secretbox](shared-key-authenticated-encryption.md#crypto_secretbox) + * [crypto_secretbox_open](shared-key-authenticated-encryption.md#crypto_secretbox_open) + * [crypto_secretbox_keygen](shared-key-authenticated-encryption.md#crypto_secretbox_keygen) + * [Example for crypto_secretbox](shared-key-authenticated-encryption.md#example-for-crypto_secretbox) +* [Encrypted streams](encrypted-streams.md) + * [crypto_secretstream_xchacha20poly1305_init_push](encrypted-streams.md#crypto_secretstream_xchacha20poly1305_init_push) + * [crypto_secretstream_xchacha20poly1305_init_pull](encrypted-streams.md#crypto_secretstream_xchacha20poly1305_init_pull) + * [crypto_secretstream_xchacha20poly1305_push](encrypted-streams.md#crypto_secretstream_xchacha20poly1305_push) + * [crypto_secretstream_xchacha20poly1305_pull](encrypted-streams.md#crypto_secretstream_xchacha20poly1305_pull) + * [crypto_secretstream_xchacha20poly1305_keygen](encrypted-streams.md#crypto_secretstream_xchacha20poly1305_keygen) + * [crypto_secretstream_xchacha20poly1305_rekey](encrypted-streams.md#crypto_secretstream_xchacha20poly1305_rekey) + * [Example for crypto_secretstream_xchacha20poly1305](encrypted-streams.md#example-for-crypto_secretstream_xchacha20poly1305) +* [Short-input hashing](short-input-hashing.md) + * [crypto_shorthash](short-input-hashing.md#crypto_shorthash) + * [crypto_shorthash_keygen](short-input-hashing.md#crypto_shorthash_keygen) + * [Example for crypto_shorthash](short-input-hashing.md#example-for-crypto_shorthash) +* [Digital signatures](digital-signatures.md) + * [crypto_sign](digital-signatures.md#crypto_sign) + * [crypto_sign_open](digital-signatures.md#crypto_sign_open) + * [crypto_sign_detached](digital-signatures.md#crypto_sign_detached) + * [crypto_sign_verify_detached](digital-signatures.md#crypto_sign_verify_detached) + * [crypto_sign_keypair](digital-signatures.md#crypto_sign_keypair) + * [crypto_sign_publickey](digital-signatures.md#crypto_sign_publickey) + * [crypto_sign_secretkey](digital-signatures.md#crypto_sign_secretkey) + * [crypto_sign_ed25519_sk_to_curve25519](digital-signatures.md#crypto_sign_ed25519_sk_to_curve25519) + * [crypto_sign_ed25519_pk_to_curve25519](digital-signatures.md#crypto_sign_ed25519_pk_to_curve25519) + * [Example for crypto_sign](digital-signatures.md#example-for-crypto_sign) +* [Randomness](randomness.md) + * [randombytes_buf](randomness.md#randombytes_buf) + * [randombytes_uniform](randomness.md#randombytes_uniform) + * [Example for randombytes](randomness.md#example-for-randombytes) +* [Utilities](utilities.md) + * [sodium_bin2hex](utilities.md#sodium_bin2hex) + * [sodium_hex2bin](utilities.md#sodium_bin2hex) diff --git a/library/sodium-plus/docs/SodiumPlus/authenticated-public-key-encryption.md b/library/sodium-plus/docs/SodiumPlus/authenticated-public-key-encryption.md new file mode 100644 index 000000000..0ac312e5a --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/authenticated-public-key-encryption.md @@ -0,0 +1,99 @@ +## Authenticated public-key encryption + +> **See also**: [Libsodium's documentation on its public-key authenticated encryption features](https://download.libsodium.org/doc/public-key_cryptography/authenticated_encryption). + +### crypto_box + +Public-key authenticated encryption. + +**Parameters and their respective types**: + +1. `{string|Buffer}` plaintext +2. `{Buffer}` nonce (must be 24 bytes) +3. `{X25519SecretKey}` secret key +4. `{X25519PublicKey}` public key + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_box_open + +Public-key authenticated encryption. + +**Parameters and their respective types**: + +1. `{Buffer}` ciphertext +2. `{Buffer}` nonce (must be 24 bytes) +3. `{X25519SecretKey}` secret key +4. `{X25519PublicKey}` public key + +Returns a `Promise` that resolves to a `Buffer`. +Throws a `SodiumError` on decryption failure. + +### crypto_box_keypair + +Returns a `Promise` that resolves to a `CryptographyKey` containing a 64-byte +`Buffer`. The first 32 bytes are your X25519 secret key, the latter 32 are your +X25519 public key. + +### crypto_box_keypair_from_secretkey_and_secretkey + +Combine two X25519 keys (secret, public) into a keypair object. + +**Parameters and their respective types**: + +1. `{X25519SecretKey}` secret key +2. `{X25519PublicKey}` public key + +Returns a `Promise` that resolves to a `CryptographyKey`. + +### crypto_box_publickey + +**Parameters and their respective types**: + +1. `{CryptographyKey}` (buffer must be 64 bytes long) + +Returns a `Promise` that resolves to a `X25519PublicKey`. + +### crypto_box_secretkey + +**Parameters and their respective types**: + +1. `{CryptographyKey}` (buffer must be 64 bytes long) + +Returns a `Promise` that resolves to a `X25519SecretKey`. + +### crypto_box_publickey_from_secretkey + +Derive the public key from a given X25519 secret key. + +**Parameters and their respective types**: + +1. `{X25519SecretKey}` + +Returns a `Promise` that resolves to a `X25519PublicKey`. + +### Example for crypto_box + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let aliceKeypair = await sodium.crypto_box_keypair(); + let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_box_publickey(aliceKeypair); + let bobKeypair = await sodium.crypto_box_keypair(); + let bobSecret = await sodium.crypto_box_secretkey(bobKeypair); + let bobPublic = await sodium.crypto_box_publickey(bobKeypair); + + let plaintext = 'Your message goes here'; + let nonce = await sodium.randombytes_buf(24); + + let ciphertext = await sodium.crypto_box(plaintext, nonce, aliceSecret, bobPublic); + console.log(ciphertext); + + let decrypted = await sodium.crypto_box_open(ciphertext, nonce, bobSecret, alicePublic); + console.log(decrypted.toString()); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/digital-signatures.md b/library/sodium-plus/docs/SodiumPlus/digital-signatures.md new file mode 100644 index 000000000..d1bfee5b3 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/digital-signatures.md @@ -0,0 +1,134 @@ +## Digital signatures + +> **See also**: [Libsodium's documentation on its public-key signature features](https://download.libsodium.org/doc/public-key_cryptography/public-key_signatures). + +### crypto_sign + +> See also: [the detached API](#crypto_sign_detached) below. + +Sign a message with Ed25519, returning a signed message (prefixed with the signature). + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{Ed25519SecretKey}` secretKey + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_sign_open + +Verify a signed message with Ed25519, returning the original message if the signature +is valid. + +**Parameters and their respective types**: + +1. `{string|Buffer}` signedMessage +2. `{Ed25519SecretKey}` publicKey + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_sign_detached + +Returns the Ed25519 signature of the message, for the given secret key. + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{Ed25519SecretKey}` secretKey + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_sign_verify_detached + +Returns true if the Ed25519 signature is valid for a given message and public key. + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{Ed25519PublicKey}` publicKey +3. `{Buffer}` signature + +Returns a `Promise` that resolves to a `boolean`. + +### crypto_sign_keypair + +Returns a `Promise` that resolves to a `CryptographyKey` containing a 96-byte +`Buffer`. The first 64 bytes are your Ed25519 secret key, the latter 32 are your +Ed25519 public key. + +### crypto_sign_seed_keypair + +**Parameters and their respective types**: + +1. `{Buffer}` 32 byte seed + +Returns a `Promise` that resolves to a `CryptographyKey` containing a 96-byte +`Buffer`. The first 64 bytes are your Ed25519 secret key, the latter 32 are your +Ed25519 public key. + +### crypto_sign_publickey + +**Parameters and their respective types**: + +1. `{CryptographyKey}` (buffer must be 96 bytes long) + +Returns a `Promise` that resolves to a `Ed25519PublicKey`. + + +### crypto_sign_secretkey + +**Parameters and their respective types**: + +1. `{CryptographyKey}` (buffer must be 96 bytes long) + +Returns a `Promise` that resolves to a `Ed25519SecretKey`. + +### crypto_sign_ed25519_sk_to_curve25519 + +Obtain a birationally equivalent X25519 secret key, given an Ed25519 secret key. + +**Parameters and their respective types**: + +1. `{Ed25519SecretKey}` + +Returns a `Promise` that resolves to an `X25519SecretKey`. + +### crypto_sign_ed25519_pk_to_curve25519 + +Obtain a birationally equivalent X25519 public key, given an Ed25519 public key. + +**Parameters and their respective types**: + +1. `{Ed25519PublicKey}` + +Returns a `Promise` that resolves to an `X25519PublicKey`. + +### Example for crypto_sign + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let aliceKeypair = await sodium.crypto_sign_keypair(); + let aliceSecret = await sodium.crypto_sign_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_sign_publickey(aliceKeypair); + + let message = 'This is something I need to sign publicly.'; + + // Detached mode: + let signature = await sodium.crypto_sign_detached(message, aliceSecret); + console.log(signature.toString('hex')); + if (await sodium.crypto_sign_verify_detached(message, alicePublic, signature)) { + console.log("Signature is valid."); + } else { + console.error("Invalid signature!"); + } + + // NaCl (crypto_sign / crypto_sign_open): + let signed = await sodium.crypto_sign(message, aliceSecret); + let opened = await sodium.crypto_sign_open(signed, alicePublic); + console.log(opened.toString()); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/encrypted-streams.md b/library/sodium-plus/docs/SodiumPlus/encrypted-streams.md new file mode 100644 index 000000000..25ed5039c --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/encrypted-streams.md @@ -0,0 +1,138 @@ +## Encrypted Streams + +> **See also:** [Libsodium's documentation on its encrypted streams feature](https://download.libsodium.org/doc/secret-key_cryptography/secretstream) + +### crypto_secretstream_xchacha20poly1305_init_push() + +Initialize a stream for streaming encryption. + +**Parameters and their respective types**: + +1. `{CryptographyKey}` key + +Returns a `Promise` that resolves to an `array` with 2 elements: + +1. A 24-byte header that should be included in the encrypted stream. +2. A backend-specific `state`: + * `LibsodiumWrappers` returns a `number` (a pointer to an internal buffer) + * `SodiumNative` returns a `CryptoSecretstreamXchacha20poly1305StateWrap` + object + +The `{state}` type annotation below refers to one of the backend-specific state +types. + +You'll typically want to use it with list unpacking syntax, like so: + +``` +[state, header] = await sodium.crypto_secretstream_xchacha20poly1305_init_push(key); +``` + +### crypto_secretstream_xchacha20poly1305_init_pull() + +Initialize a stream for streaming decryption. + +**Parameters and their respective types**: + +1. `{CryptographyKey}` key +2. `{Buffer}` header (must be 24 bytes) + +Returns a `Promise` that resolves to a backend-specific `state`: + +* `LibsodiumWrappers` returns a `number` (a pointer to an internal buffer) +* `SodiumNative` returns a `CryptoSecretstreamXchacha20poly1305StateWrap` + object + +The `{state}` type annotation below refers to one of the backend-specific state +types. + +### crypto_secretstream_xchacha20poly1305_push() + +Encrypt some data in a stream. + +**Parameters and their respective types**: + +1. `{state}` state +2. `{string|Buffer}` message +3. `{string|Buffer}` (optional) additional associated data +4. `{number}` tag (default = 0, see libsodium docs) + +Returns a `Promise` that resolves to a `Buffer` containing the ciphertext. + +### crypto_secretstream_xchacha20poly1305_pull() + +Decrypt some data in a stream. + +**Parameters and their respective types**: + +1. `{state}` state +2. `{string|Buffer}` ciphertext +3. `{string|Buffer}` (optional) additional associated data +4. `{number}` tag (default = 0, see libsodium docs) + +Returns a `Promise` that resolves to a `Buffer` containing +decrypted plaintext. + +### crypto_secretstream_xchacha20poly1305_keygen() + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_secretstream` API. + +### crypto_secretstream_xchacha20poly1305_rekey() + +Deterministic re-keying of the internal state. + +**Parameters and their respective types**: + +1. `{state}` state + +Returns a `Promise` that resolves to `undefined`. Instead, +the `state` variable is overwritten in-place. + +### Example for crypto_secretstream_xchacha20poly1305 + +```javascript +const fsp = require('fs').promises; +const path = require('path'); +const { SodiumPlus } = require('sodium-plus'); + +let sodium; +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + + let key = await sodium.crypto_secretstream_xchacha20poly1305_keygen(); + let pushState, pullState, header; + [pushState, header] = await sodium.crypto_secretstream_xchacha20poly1305_init_push(key); + + // Get a test input from the text file. + let longText = await fsp.readFile(path.join(__dirname, 'encrypted-streams.md')); + let chunk, readUntil; + let ciphertext = Buffer.concat([header]); + + // How big are our chunks going to be? + let PUSH_CHUNK_SIZE = await sodium.randombytes_uniform(longText.length - 32) + 32; + let PULL_CHUNK_SIZE = PUSH_CHUNK_SIZE + sodium.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES; + + // Encryption... + for (let i = 0; i < longText.length; i += PUSH_CHUNK_SIZE) { + readUntil = (i + PUSH_CHUNK_SIZE) > longText.length ? longText.length : i + PUSH_CHUNK_SIZE; + chunk = await sodium.crypto_secretstream_xchacha20poly1305_push( + pushState, + longText.slice(i, readUntil) + ); + ciphertext = Buffer.concat([ciphertext, chunk]); + } + + pullState = await sodium.crypto_secretstream_xchacha20poly1305_init_pull(key, header); + // Decrypt, starting at 24 (after the header, which we already have) + let decrypted = Buffer.alloc(0); + for (let i = 24; i < ciphertext.length; i += PULL_CHUNK_SIZE) { + readUntil = (i + PULL_CHUNK_SIZE) > ciphertext.length ? ciphertext.length : i + PULL_CHUNK_SIZE; + chunk = await sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + ciphertext.slice(i, readUntil) + ); + decrypted = Buffer.concat([decrypted, chunk]); + } + console.log(decrypted.toString()); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/general-purpose-cryptographic-hash.md b/library/sodium-plus/docs/SodiumPlus/general-purpose-cryptographic-hash.md new file mode 100644 index 000000000..12e762b5e --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/general-purpose-cryptographic-hash.md @@ -0,0 +1,82 @@ +## General-purpose cryptographic hash + +> **See also**: [Libsodium's documentation on its generic hashing features](https://download.libsodium.org/doc/hashing/generic_hashing). + +### crypto_generichash + +General-purpose cryptographic hash (powered by BLAKE2). + +**Parameters and their respective types**: + +1. `{Buffer}` message +2. `{CryptographyKey|null}` key (optional) +3. `{number}` output length (optional, defaults to 32) + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_generichash_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_generichash` API. + +### crypto_generichash_init + +Initialize a BLAKE2 hash context for stream hashing. + +**Parameters and their respective types**: + +1. `{CryptographyKey|null}` key (optional) +2. `{number}` output length (optional, defaults to 32) + +Returns a `Promise` that resolves to... well, that depends on your backend. + +* sodium-native returns a `CryptoGenericHashWrap` object. +* libsodium-wrappers returns a number (a buffer's memory address) + +### crypto_generichash_update + +Update the BLAKE2 hash state with a block of data. + +**Parameters and their respective types**: + +1. `{*}` hash state (see [crypto_generichash_init()](#crypto_generichash_init)) +2. `{string|Buffer}` message chunk + +Returns a `Promise` that resolves to `void`. Instead, `state` is updated in-place. + +### crypto_generichash_final + +Obtain the final BLAKE2 hash output. + +**Parameters and their respective types**: + +1. `{*}` hash state (see [crypto_generichash_init()](#crypto_generichash_init)) +2. `{number}` output length (optional, defaults to 32) + +Returns a `Promise` that resolves to a `Buffer`. + +### Example for crypto_generichash + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let message = 'Any message can go here'; + let hashed = await sodium.crypto_generichash(message); + console.log(hashed.toString('hex')); + + let key = await sodium.crypto_generichash_keygen(); + let hash2 = await sodium.crypto_generichash(message, key, 64); + let state = await sodium.crypto_generichash_init(key, 64); + + await sodium.crypto_generichash_update(state, 'Any message '); + await sodium.crypto_generichash_update(state, 'can go here'); + let hash3 = await sodium.crypto_generichash_final(state, 64); + if (!await sodium.sodium_memcmp(hash2, hash3)) { + throw new Error('Implementation is broken. You should never see this.'); + } + console.log(hash2.toString('hex')); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/key-derivation.md b/library/sodium-plus/docs/SodiumPlus/key-derivation.md new file mode 100644 index 000000000..72ae3c3c4 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/key-derivation.md @@ -0,0 +1,45 @@ +## Key derivation + +> **See also**: [Libsodium's documentation on its key derivation features](https://download.libsodium.org/doc/key_derivation). + +### crypto_kdf_derive_from_key + +Derive a subkey from a master key. + +**Parameters and their respective types**: + +1. `{number}` output length (typically you want `32`) +2. `{number}` subkey ID +3. `{string|Buffer}` context (must be a string/buffer of length 8) +4. `{CryptographyKey}` master key + +Returns a `Promise` that resolves to a `CryptographyKey`. + +### crypto_kdf_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_kdf` API. + +### Example for crypto_kdf + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let masterKey = await sodium.crypto_kdf_keygen(); + let context = 'Sodium++'; + + let subkey1 = await sodium.crypto_kdf_derive_from_key(32, 1, context, masterKey); + let subkey2 = await sodium.crypto_kdf_derive_from_key(32, 2, context, masterKey); + let subkey3 = await sodium.crypto_kdf_derive_from_key(32, 3, context, masterKey); + + console.log({ + 'master-key': masterKey.getBuffer().toString('hex'), + 'subkey1': subkey1.getBuffer().toString('hex'), + 'subkey2': subkey2.getBuffer().toString('hex'), + 'subkey3': subkey3.getBuffer().toString('hex') + }); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/key-exchange.md b/library/sodium-plus/docs/SodiumPlus/key-exchange.md new file mode 100644 index 000000000..20521edad --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/key-exchange.md @@ -0,0 +1,94 @@ +## Key exchange + +> **See also**: [Libsodium's documentation on its key exchange features](https://download.libsodium.org/doc/key_exchange). + +### crypto_kx_keypair + +This is functionally identical to [`crypto_box_keypair()`](#crypto_box_keypair). + +Returns a `Promise` that resolves to a `CryptographyKey` with 64 bytes. + +### crypto_kx_seed_keypair + +Generate an X25519 keypair from a seed. Unlike `crypto_kx_seedpair()`, this is +deterministic from your seed. + +**Parameters and their respective types**: + +1. `{string|Buffer}` seed + +Returns a `Promise` that resolves to a `CryptographyKey` with 64 bytes. + +### crypto_kx_client_session_keys + +Perform a key exchange from the client's perspective. + +Returns an array of two CryptographyKey objects: + + * The first is meant for data sent from the server to the client (incoming decryption). + * The second is meant for data sent from the client to the server (outgoing encryption). + +**Parameters and their respective types**: + +1. `{X25519PublicKey}` client public key (yours) +2. `{X25519SecretKey}` client secret key (yours) +1. `{X25519PublicKey}` server public key (theirs) + +Returns a `Promise` that resolves to an array of two `CryptographyKey` objects. + +### crypto_kx_server_session_keys + +Perform a key exchange from the server's perspective. + +Returns an array of two CryptographyKey objects: + + * The first is meant for data sent from the client to the server (incoming decryption). + * The second is meant for data sent from the server to the client (outgoing encryption). + +**Parameters and their respective types**: + +1. `{X25519PublicKey}` server public key (yours) +2. `{X25519SecretKey}` server secret key (yours) +1. `{X25519PublicKey}` client public key (theirs) + +Returns a `Promise` that resolves to an array of two `CryptographyKey` objects. + +### Example for crypto_kx + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let clientKeypair = await sodium.crypto_box_keypair(); + let clientSecret = await sodium.crypto_box_secretkey(clientKeypair); + let clientPublic = await sodium.crypto_box_publickey(clientKeypair); + let serverKeypair = await sodium.crypto_kx_seed_keypair('Your static input goes here'); + let serverSecret = await sodium.crypto_box_secretkey(serverKeypair); + let serverPublic = await sodium.crypto_box_publickey(serverKeypair); + let clientIKey, clientOKey, serverIKey, serverOKey; + + [clientIKey, clientOKey] = await sodium.crypto_kx_client_session_keys( + clientPublic, + clientSecret, + serverPublic + ); + [serverIKey, serverOKey] = await sodium.crypto_kx_server_session_keys( + serverPublic, + serverSecret, + clientPublic + ); + + console.log({ + 'client-sees': { + 'incoming': clientIKey.getBuffer().toString('hex'), + 'outgoing': clientOKey.getBuffer().toString('hex') + }, + 'server-sees': { + 'incoming': serverIKey.getBuffer().toString('hex'), + 'outgoing': serverOKey.getBuffer().toString('hex') + } + }); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/one-time-authentication.md b/library/sodium-plus/docs/SodiumPlus/one-time-authentication.md new file mode 100644 index 000000000..16c11d0c8 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/one-time-authentication.md @@ -0,0 +1,52 @@ +## One-time authentication + +> **See also**: [Libsodium's documentation on its one-time authentication features](https://download.libsodium.org/doc/advanced/poly1305). + +### crypto_onetimeauth + +Get an authenticator for a message for a given key. + +**Important:** In order to be secure, keys must be: + +1. Secret. +2. Unpredictable. +3. Unique. + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{CryptographyKey}` key + +Return a `Promise` that resolves to a `Buffer`. + +### crypto_onetimeauth_verify + +Verify an authenticator for a message for a given key. + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{CryptographyKey}` key +2. `{Buffer}` tag + +Return a `Promise` that resolves to a `boolean`. + +### crypto_onetimeauth_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_auth` API. + +### Example for crypto_onetimeauth + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Your message goes here'; + let key = await sodium.crypto_onetimeauth_keygen(); + let tag = await sodium.crypto_onetimeauth(plaintext, key); + console.log(await sodium.crypto_onetimeauth_verify(plaintext, key, tag)); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/password-based-key-derivation.md b/library/sodium-plus/docs/SodiumPlus/password-based-key-derivation.md new file mode 100644 index 000000000..b5c596e42 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/password-based-key-derivation.md @@ -0,0 +1,45 @@ +## Password-based key derivation + +> **See also**: [Libsodium's documentation on Argon2](https://download.libsodium.org/doc/password_hashing/the_argon2i_function). + +### crypto_pwhash + +Derive a cryptography key from a password and salt. + +**Parameters and their respective types**: + +1. `{number}` output length +2. `{string|Buffer}` password +3. `{Buffer}` salt (16 bytes) +4. `{number}` opslimit (recommeded minimum: `2`) +5. `{number}` memlimit (recommended mimimum: `67108864` a.k.a. 64MiB) +6. `{number|null}` algorithm (recommended: `this.CRYPTO_PWHASH_ALG_DEFAULT`) + +Returns a `Promise` that resolves to a `CryptographyKey`. + +### Example for crypto_pwhash + +This example is for key derivation. Look [below](#example-for-crypto_pwhash_str) +for information about password storage/verification. + +```javascript + +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + + let password = 'correct horse battery staple'; + let salt = await sodium.randombytes_buf(16); + + let key = await sodium.crypto_pwhash( + 32, + password, + salt, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + console.log(key.getBuffer().toString('hex')); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/password-hashing-and-storage.md b/library/sodium-plus/docs/SodiumPlus/password-hashing-and-storage.md new file mode 100644 index 000000000..b3efd3baa --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/password-hashing-and-storage.md @@ -0,0 +1,74 @@ +## Password hashing and storage + +> **See also**: [Libsodium's documentation on its password hashing features](https://download.libsodium.org/doc/password_hashing). + +### crypto_pwhash_str + +Get a password hash (in a safe-for-storage format). + +**Parameters and their respective types**: + +1. `{string|Buffer}` password +2. `{number}` opslimit (recommeded minimum: `2`) +3. `{number}` memlimit (recommended mimimum: `67108864` a.k.a. 64MiB) + +Returns a `Promise` that resolves to a `string`. + +### crypto_pwhash_str_needs_rehash + +Does this password need to be rehashed? (i.e. have the algorithm parameters +we want changed since the hash was generated?) + +**Parameters and their respective types**: + +1. `{string}` password hash +2. `{number}` opslimit (recommeded minimum: `2`) +3. `{number}` memlimit (recommended mimimum: `67108864` a.k.a. 64MiB) + +Returns a `Promise` that resolves to a `boolean`. + +### crypto_pwhash_str_verify + +Verify a password against a known password hash. + +1. `{string|Buffer}` password +2. `{string}` password hash + +Returns a `Promise` that resolves to a `boolean`. + +### Example for crypto_pwhash_str + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let password = 'correct horse battery staple'; + + // Generating a password hash + let pwhash = await sodium.crypto_pwhash_str( + password, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + console.log(pwhash); + + // Check that we don't need to rotate hashes + let stale = await sodium.crypto_pwhash_str_needs_rehash( + pwhash, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + if (stale) { + console.warn('Password needs to be rehashed'); + } + + // Password validation + if (await sodium.crypto_pwhash_str_verify(password, pwhash)) { + console.log("Password valid"); + } else { + console.error("Incorrect password"); + } +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/randomness.md b/library/sodium-plus/docs/SodiumPlus/randomness.md new file mode 100644 index 000000000..182753c10 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/randomness.md @@ -0,0 +1,43 @@ + +## Randomness + +> **See also:** [Libsodium's documentation on its random data features](https://download.libsodium.org/doc/generating_random_data). + +### randombytes_buf + +Obtain a buffer filled with random bytes. + +**Parameters and their respective types**: + +1. `{number}` Size of buffer to return + +Returns a `Promise` that resolves to a `Buffer` + +### randombytes_uniform + +Generate an integer between 0 and upperBound (non-inclusive). + +For example, randombytes_uniform(10) returns an integer between 0 and 9. + +**Parameters and their respective types**: + +1. `{number}` Upper bound + +Returns a `Promise` that resolves to a `number`. + +### Example for randombytes + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + + let someBuf = await sodium.randombytes_buf(32); + console.log(someBuf.toString('hex')); + + let someInt = await sodium.randombytes_uniform(65536); + console.log(someInt); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/scalar-multiplication.md b/library/sodium-plus/docs/SodiumPlus/scalar-multiplication.md new file mode 100644 index 000000000..07c20f6b5 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/scalar-multiplication.md @@ -0,0 +1,49 @@ +## Scalar multiplication over Curve25519 + +> **See also**: [Libsodium's documentation on its scalar multiplication features](https://download.libsodium.org/doc/advanced/scalar_multiplication). + +### crypto_scalarmult + +Elliptic Curve Diffie-Hellman key exchange over Curve25519. +You probably don't want to ever use this directly. + +**Parameters and their respective types**: + +1. `{X25519SecretKey}` your secret key +2. `{X25519PublicKey}` their public key + +Returns a `Promise` that resolves to a `CryptographyKey`. + +### crypto_scalarmult_base + +Generate an X25519PublicKey from an X25519SecretKey. + +**Parameters and their respective types**: + +1. `{X25519SecretKey}` your secret key + +Returns a `Promise` that resolves to an `X25519PublicKey`. + +### Example for crypto_scalarmult + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let aliceKeypair = await sodium.crypto_box_keypair(); + let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_box_publickey(aliceKeypair); + let bobKeypair = await sodium.crypto_box_keypair(); + let bobSecret = await sodium.crypto_box_secretkey(bobKeypair); + let bobPublic = await sodium.crypto_scalarmult_base(bobSecret); + + let aliceToBob = await sodium.crypto_scalarmult(aliceSecret, bobPublic); + let bobToAlice = await sodium.crypto_scalarmult(bobSecret, alicePublic); + console.log({ + 'alice-to-bob': aliceToBob.getBuffer().toString('hex'), + 'bob-to-alice': bobToAlice.getBuffer().toString('hex') + }); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/sealed-boxes.md b/library/sodium-plus/docs/SodiumPlus/sealed-boxes.md new file mode 100644 index 000000000..54ce8bb50 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/sealed-boxes.md @@ -0,0 +1,48 @@ +## Sealed boxes + +> **See also**: [Libsodium's documentation on its sealed boxes features](https://download.libsodium.org/doc/public-key_cryptography/sealed_boxes). + +### crypto_box_seal + +Anonymous public-key encryption. (Message integrity is still assured.) + +**Parameters and their respective types**: + +1. `{string|Buffer}` plaintext +2. `{X25519PublicKey}` public key + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_box_seal_open + +Anonymous public-key decryption. (Message integrity is still assured.) + +**Parameters and their respective types**: + +1. `{Buffer}` ciphertext +2. `{X25519PublicKey}` public key +3. `{X25519SecretKey}` secret key + +Returns a `Promise` that resolves to a `Buffer`. + +### Example for crypto_box_seal + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let aliceKeypair = await sodium.crypto_box_keypair(); + let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_box_publickey(aliceKeypair); + + let plaintext = 'Your message goes here'; + + let ciphertext = await sodium.crypto_box_seal(plaintext, alicePublic); + console.log(ciphertext); + + let decrypted = await sodium.crypto_box_seal_open(ciphertext, alicePublic, aliceSecret); + console.log(decrypted.toString()); +})(); +``` \ No newline at end of file diff --git a/library/sodium-plus/docs/SodiumPlus/shared-key-authenticated-encryption.md b/library/sodium-plus/docs/SodiumPlus/shared-key-authenticated-encryption.md new file mode 100644 index 000000000..688570933 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/shared-key-authenticated-encryption.md @@ -0,0 +1,62 @@ +## Shared-key authenticated encryption + +> **See also**: [Libsodium's documentation on its shared-key authenticated encryption features](https://download.libsodium.org/doc/secret-key_cryptography/secretbox). + +### crypto_secretbox + +Shared-key authenticated encryption. + +**Parameters and their respective types**: + +1. `{string|Buffer}` Plaintext +2. `{string|Buffer}` nonce (must be 24 bytes) +3. `{CryptographyKey}` key + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_secretbox_open + +Shared-key authenticated decryption. + +**Parameters and their respective types**: + +1. `{string|Buffer}` Ciphertext +2. `{string|Buffer}` nonce (must be 24 bytes) +3. `{CryptographyKey}` key + +Returns a `Promise` that resolves to a `Buffer`. +Throws a `SodiumError` on decryption failure. + +### crypto_secretbox_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_secretbox` API. + +### Example for crypto_secretbox + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Your message goes here'; + let key = await sodium.crypto_secretbox_keygen(); + let nonce = await sodium.randombytes_buf(24); + let ciphertext = await sodium.crypto_secretbox( + plaintext, + nonce, + key + ); + + console.log(ciphertext.toString('hex')); + + let decrypted = await sodium.crypto_secretbox_open( + ciphertext, + nonce, + key + ); + + console.log(decrypted.toString()); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/shared-key-authentication.md b/library/sodium-plus/docs/SodiumPlus/shared-key-authentication.md new file mode 100644 index 000000000..8dbd9a6a6 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/shared-key-authentication.md @@ -0,0 +1,46 @@ +## Shared-key authentication + +> **See also**: [Libsodium's documentation on its shared-key authentication features](https://download.libsodium.org/doc/secret-key_cryptography/secret-key_authentication). + +### crypto_auth + +Get an authenticator for a message for a given key. + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{CryptographyKey}` key + +Return a `Promise` that resolves to a `Buffer`. + +### crypto_auth_verify + +Verify an authenticator for a message for a given key. + +**Parameters and their respective types**: + +1. `{string|Buffer}` message +2. `{CryptographyKey}` key +2. `{Buffer}` mac + +Return a `Promise` that resolves to a `boolean`. + +### crypto_auth_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_auth` API. + +### Example for crypto_auth + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Your message goes here'; + let key = await sodium.crypto_auth_keygen(); + let mac = await sodium.crypto_auth(plaintext, key); + console.log(await sodium.crypto_auth_verify(plaintext, key, mac)); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/short-input-hashing.md b/library/sodium-plus/docs/SodiumPlus/short-input-hashing.md new file mode 100644 index 000000000..54c910afe --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/short-input-hashing.md @@ -0,0 +1,39 @@ +## Short-input hashing + +> **See also**: [Libsodium's documentation on its short-input hashing features](https://download.libsodium.org/doc/hashing/short-input_hashing). + +### crypto_shorthash + +Calculate a fast hash for short inputs. + +**Parameters and their respective types**: + +1. `{string|Buffer}` input +3. `{CryptographyKey}` key + +Returns a `Promise` that resolves to a `Buffer`. + +### crypto_shorthash_keygen + +Returns a `CryptographyKey` object containing a key appropriate +for the `crypto_shorthash` API. + +### Example for crypto_shorthash + +> **Warning:** You probably want [`crypto_generichash()`](general-purpose-cryptographic-hash.md) +> for most use-cases. `crypto_shorthash()` does not offer collision resistance. + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let key = await sodium.crypto_shorthash_keygen(); + let mapped = {}; + mapped['foo'] = (await sodium.crypto_shorthash('foo', key)).toString('hex'); + mapped['bar'] = (await sodium.crypto_shorthash('bar', key)).toString('hex'); + mapped['baz'] = (await sodium.crypto_shorthash('baz', key)).toString('hex'); + console.log(mapped); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/stream-ciphers.md b/library/sodium-plus/docs/SodiumPlus/stream-ciphers.md new file mode 100644 index 000000000..3dc8d47b1 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/stream-ciphers.md @@ -0,0 +1,55 @@ +## Stream Ciphers + +> **See also**: [Libsodium's documentation on its stream cipher features](https://download.libsodium.org/doc/advanced/stream_ciphers/xsalsa20). + +### crypto_stream + +Obtain an arbitrary-length stream of pseudorandom bytes from a given +nonce and key. + +**Parameters and their respective types**: + +1. `{number}` length +2. `{Buffer}` nonce (must be 24 bytes) +3. `{CryptographyKey}` key + +Returns a `Promise` that resolves to a `Buffer` containing +the pseudorandom bytes. + +### crypto_stream_xor + +Encrypt a message with a given nonce and key. + +> [**Danger: Unauthenticated encryption!**](https://tonyarcieri.com/all-the-crypto-code-youve-ever-written-is-probably-broken) +> Without a subsequent message authentication strategy, this is vulnerable to +> chosen-ciphertext attacks. Proceed with caution! + +**Parameters and their respective types**: + +1. `{string|Buffer}` plaintext +2. `{Buffer}` nonce (must be 24 bytes) +3. `{CryptographyKey}` key + +Returns a `Promise` that resolves to a `Buffer` containing +the encrypted bytes. + +### Example for crypto_stream + +```javascript +const { SodiumPlus } = require('sodium-plus'); + +let sodium; +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let key = await sodium.crypto_stream_keygen(); + let iv = await sodium.randombytes_buf(24); + let output = await sodium.crypto_stream(64, iv, key); + console.log(output); + + iv = await sodium.randombytes_buf(24); + let plaintext = 'This is a secret message'; + let ciphertext = await sodium.crypto_stream_xor(plaintext, iv, key); + let decrypted = await sodium.crypto_stream_xor(ciphertext, iv, key); + console.log(decrypted.toString()); +})(); +``` diff --git a/library/sodium-plus/docs/SodiumPlus/utilities.md b/library/sodium-plus/docs/SodiumPlus/utilities.md new file mode 100644 index 000000000..43d493b88 --- /dev/null +++ b/library/sodium-plus/docs/SodiumPlus/utilities.md @@ -0,0 +1,45 @@ +## Utilities + +### sodium_bin2hex + +Encode data into a hexadecimal string. + +**Parameters and their respective types**: + +1. `{string|Buffer}` non-hex-encoded input + +Returns a `Promise` that resolves to a `string`. + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let buf = await sodium.randombytes_buf(32); + + console.log(await sodium.sodium_bin2hex(buf)); +})(); +``` + +### sodium_hex2bin + +Decode data from a hexadecimal string to a `Buffer`. + +**Parameters and their respective types**: + +1. `{string|Buffer}` hex-encoded input + +Returns a `Promise` that resolves to a `Buffer`. + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; + +(async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let hex = '491d40c4924ba547d6f0bda9da77a539391decdc'; + + console.log(await sodium.sodium_hex2bin(hex)); +})(); +``` diff --git a/library/sodium-plus/docs/getting-started.md b/library/sodium-plus/docs/getting-started.md new file mode 100644 index 000000000..d599f7928 --- /dev/null +++ b/library/sodium-plus/docs/getting-started.md @@ -0,0 +1,100 @@ +# Getting Started + +You always want to use `SodiumPlus` from within an asynchronous function. + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; +async function myFunction() { + if (!sodium) sodium = await SodiumPlus.auto(); + + // Now you can use sodium.FUNCTION_NAME_HERE() +} +``` + +When you use `await SodiumPlus.auto()`, this will automatically load in the best +backend available for your platform. This is the recommended way to use SodiumPlus. + +If you'd rather use a specific backend, you can do the following: + +```javascript +const { SodiumPlus, SodiumUtil, getBackendObject } = require('sodium-plus'); +let sodium; + +async function myFunction() { + if (!sodium) { + let backend = getBackendObject('LibsodiumWrappers'); + SodiumUtil.populateConstants(backend); + sodium = new SodiumPlus(backend); + } + + // Now you can use sodium.FUNCTION_NAME_HERE() +} +``` + +To discover what backend you're using at runtime, invoke the `getBackendName()` +method on the `SodiumPlus` object, like so: + + +```javascript +const { SodiumPlus } = require('sodium-plus'); +let sodium; +async function whichBackend() { + if (!sodium) sodium = await SodiumPlus.auto(); + + console.log(sodium.getBackendName()); +} +``` + +## CryptographyKey + +All cryptographic secrets are contained within a `CryptographyKey` object +(or one of its derived classes). You can create and access them like so: + +```javascript +const { CryptographyKey } = require('sodium-plus'); +let buf = Buffer.alloc(32); +let key = new CryptographyKey(buf); + +// If you do this, the internal buffer will not be visible! +console.log(key); +// CryptographyKey {} + +// You'll need to do this instead: +console.log(key.getBuffer()); +// +``` + +The following classes inherit from `CryptographyKey`: + +* `Ed25519PublicKey` -- Ed25519 public key +* `Ed25519SecretKey` -- Ed25519 secret key +* `X25519PublicKey` -- X25519 public key +* `X25519SecretKey` -- X25519 secret key + +## Sodium-Plus in the Browser + +First, download [sodium-plus.min.js](../dist) (or find it on a CDN you trust). + +Next, include the following script tags in your web page: + +```html5 + + +``` + +You can then use the `sodium` API as documented. diff --git a/library/sodium-plus/index.d.ts b/library/sodium-plus/index.d.ts new file mode 100644 index 000000000..ce8154465 --- /dev/null +++ b/library/sodium-plus/index.d.ts @@ -0,0 +1,433 @@ +/// + +// Helper for defining opaque types like crypto_secretstream_xchacha20poly1305_state. +declare const brand: unique symbol; +interface Opaque { + readonly [brand]: T; +} + +// Separate the tag constants that crypto_secretstream_xchacha20poly1305_* functions +// take so that we can use them to limit the input values for those functions. +interface CryptoSecretStreamTagConstants { + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH: 0; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL: 1; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY: 2; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL: 3; +} +type CryptoSecretStreamTagValues = CryptoSecretStreamTagConstants[keyof CryptoSecretStreamTagConstants]; + +interface Constants extends CryptoSecretStreamTagConstants { + LIBRARY_VERSION_MAJOR: number; + LIBRARY_VERSION_MINOR: number; + VERSION_STRING: string; + BASE64_VARIANT_ORIGINAL: number; + BASE64_VARIANT_ORIGINAL_NO_PADDING: number; + BASE64_VARIANT_URLSAFE: number; + BASE64_VARIANT_URLSAFE_NO_PADDING: number; + CRYPTO_AEAD_AES256GCM_KEYBYTES: number; + CRYPTO_AEAD_AES256GCM_NSECBYTES: number; + CRYPTO_AEAD_AES256GCM_NPUBBYTES: number; + CRYPTO_AEAD_AES256GCM_ABYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_ABYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES: number; + CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES: number; + CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES: number; + CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES: number; + CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES: number; + CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES: number; + CRYPTO_AUTH_BYTES: number; + CRYPTO_AUTH_KEYBYTES: number; + CRYPTO_BOX_SEALBYTES: number; + CRYPTO_BOX_SECRETKEYBYTES: number; + CRYPTO_BOX_PUBLICKEYBYTES: number; + CRYPTO_BOX_KEYPAIRBYTES: number; + CRYPTO_BOX_MACBYTES: number; + CRYPTO_BOX_NONCEBYTES: number; + CRYPTO_BOX_SEEDBYTES: number; + CRYPTO_KDF_BYTES_MIN: number; + CRYPTO_KDF_BYTES_MAX: number; + CRYPTO_KDF_CONTEXTBYTES: number; + CRYPTO_KDF_KEYBYTES: number; + CRYPTO_KX_BYTES: number; + CRYPTO_KX_PRIMITIVE: string; + CRYPTO_KX_SEEDBYTES: number; + CRYPTO_KX_KEYPAIRBYTES: number; + CRYPTO_KX_PUBLICKEYBYTES: number; + CRYPTO_KX_SECRETKEYBYTES: number; + CRYPTO_KX_SESSIONKEYBYTES: number; + CRYPTO_GENERICHASH_BYTES: number; + CRYPTO_GENERICHASH_BYTES_MIN: number; + CRYPTO_GENERICHASH_BYTES_MAX: number; + CRYPTO_GENERICHASH_KEYBYTES: number; + CRYPTO_GENERICHASH_KEYBYTES_MIN: number; + CRYPTO_GENERICHASH_KEYBYTES_MAX: number; + CRYPTO_PWHASH_SALTBYTES: number; + CRYPTO_PWHASH_STRPREFIX: string; + CRYPTO_PWHASH_ALG_ARGON2I13: number; + CRYPTO_PWHASH_ALG_ARGON2ID13: number; + CRYPTO_PWHASH_ALG_DEFAULT: number; + CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE: number; + CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE: number; + CRYPTO_PWHASH_OPSLIMIT_MODERATE: number; + CRYPTO_PWHASH_MEMLIMIT_MODERATE: number; + CRYPTO_PWHASH_OPSLIMIT_SENSITIVE: number; + CRYPTO_PWHASH_MEMLIMIT_SENSITIVE: number; + CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES: number; + CRYPTO_SCALARMULT_BYTES: number; + CRYPTO_SCALARMULT_SCALARBYTES: number; + CRYPTO_SHORTHASH_BYTES: number; + CRYPTO_SHORTHASH_KEYBYTES: number; + CRYPTO_SECRETBOX_KEYBYTES: number; + CRYPTO_SECRETBOX_MACBYTES: number; + CRYPTO_SECRETBOX_NONCEBYTES: number; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES: number; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES: number; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES: number; + CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX: number; + CRYPTO_SIGN_BYTES: number; + CRYPTO_SIGN_SEEDBYTES: number; + CRYPTO_SIGN_PUBLICKEYBYTES: number; + CRYPTO_SIGN_SECRETKEYBYTES: number; + CRYPTO_SIGN_KEYPAIRBYTES: number; + CRYPTO_STREAM_KEYBYTES: number; + CRYPTO_STREAM_NONCEBYTES: number; +} + +declare namespace Module { + export type crypto_secretstream_xchacha20poly1305_state = Opaque< + "crypto_secretstream_xchacha20poly1305_state" + >; + export type crypto_generichash_state = Opaque<"crypto_generichash_state">; + export type Backend = Opaque<"Backend">; + + export class CryptographyKey { + // Deny types that would otherwise structurally match CryptographyKey. + // See: https://michalzalecki.com/nominal-typing-in-typescript/ + private readonly __nominal: void; + + constructor(buf: Buffer); + static from(...args: Parameters): CryptographyKey; + isEd25519Key(): boolean; + isX25519Key(): boolean; + isPublicKey(): boolean; + getLength(): number; + getBuffer(): Buffer; + toString(encoding?: string): string; + slice(): Buffer; + } + export class Ed25519PublicKey extends CryptographyKey { + readonly keyType: "ed25519"; + readonly publicKey: true; + static from(...args: Parameters): Ed25519PublicKey; + } + export class Ed25519SecretKey extends CryptographyKey { + readonly keyType: "ed25519"; + readonly publicKey: false; + static from(...args: Parameters): Ed25519SecretKey; + } + export class X25519PublicKey extends CryptographyKey { + readonly keyType: "x25519"; + readonly publicKey: true; + static from(...args: Parameters): X25519PublicKey; + } + export class X25519SecretKey extends CryptographyKey { + readonly keyType: "x25519"; + readonly publicKey: false; + static from(...args: Parameters): X25519SecretKey; + } + + export class SodiumError extends Error {} + + export function getBackendObject( + type?: "SodiumNative" | "LibsodiumWrappers" + ): Backend; + + // Mix in Constants.* to SodiumPlus instances. + export interface SodiumPlus extends Constants {} + export class SodiumPlus { + readonly backend: Backend; + + constructor(backend: Backend); + + getBackendName(): string; + isSodiumNative(): boolean; + isLibsodiumWrappers(): boolean; + + static auto(): Promise; + ensureLoaded(): Promise; + + crypto_aead_xchacha20poly1305_ietf_decrypt( + ciphertext: string | Buffer, + nonce: string | Buffer, + key: CryptographyKey, + assocData?: string | Buffer + ): Promise; + crypto_aead_xchacha20poly1305_ietf_encrypt( + plaintext: string | Buffer, + nonce: string | Buffer, + key: CryptographyKey, + assocData?: string | Buffer + ): Promise; + crypto_aead_xchacha20poly1305_ietf_keygen(): Promise; + + crypto_auth( + message: string | Buffer, + key: CryptographyKey + ): Promise; + crypto_auth_keygen(): Promise; + crypto_auth_verify( + message: string | Buffer, + key: CryptographyKey, + mac: Buffer + ): Promise; + crypto_box( + plaintext: string | Buffer, + nonce: Buffer, + myPrivateKey: X25519SecretKey, + theirPublicKey: X25519PublicKey + ): Promise; + crypto_box_open( + ciphertext: Buffer, + nonce: Buffer, + myPrivateKey: X25519SecretKey, + theirPublicKey: X25519PublicKey + ): Promise; + + crypto_box_keypair(): Promise; + crypto_box_keypair_from_secretkey_and_secretkey( + sKey: X25519SecretKey, + pKey: X25519PublicKey + ): Promise; + crypto_box_secretkey(keypair: CryptographyKey): Promise; + crypto_box_publickey(keypair: CryptographyKey): Promise; + crypto_box_publickey_from_secretkey( + secretKey: X25519SecretKey + ): Promise; + crypto_box_seal( + plaintext: string | Buffer, + publicKey: X25519PublicKey + ): Promise; + crypto_box_seal_open( + ciphertext: Buffer, + publicKey: X25519PublicKey, + secretKey: X25519SecretKey + ): Promise; + + crypto_generichash( + message: string | Buffer, + key?: CryptographyKey | null, + outputLength?: number + ): Promise; + + crypto_generichash_init( + key?: CryptographyKey | null, + outputLength?: number + ): Promise; + crypto_generichash_update( + state: crypto_generichash_state, + message: string | Buffer + ): Promise; + crypto_generichash_final( + state: crypto_generichash_state, + outputLength?: number + ): Promise; + crypto_generichash_keygen(): Promise; + + crypto_kdf_derive_from_key( + length: number, + subKeyId: number, + context: string | Buffer, + key: CryptographyKey + ): Promise; + crypto_kdf_keygen(): Promise; + + crypto_kx_keypair(): Promise; + crypto_kx_seed_keypair(seed: string | Buffer): Promise; + crypto_kx_client_session_keys( + clientPublicKey: X25519PublicKey, + clientSecretKey: X25519SecretKey, + serverPublicKey: X25519PublicKey + ): Promise; + crypto_kx_server_session_keys( + serverPublicKey: X25519PublicKey, + serverSecretKey: X25519SecretKey, + clientPublicKey: X25519PublicKey + ): Promise; + + crypto_onetimeauth( + message: string | Buffer, + key: CryptographyKey + ): Promise; + crypto_onetimeauth_verify( + message: string | Buffer, + key: CryptographyKey, + tag: Buffer + ): Promise; + crypto_onetimeauth_keygen(): Promise; + + crypto_pwhash( + length: number, + password: string | Buffer, + salt: Buffer, + opslimit: number, + memlimit: number, + algorithm?: number | null + ): Promise; + crypto_pwhash_str( + password: string | Buffer, + opslimit: number, + memlimit: number + ): Promise; + crypto_pwhash_str_verify( + password: string | Buffer, + hash: string | Buffer + ): Promise; + crypto_pwhash_str_needs_rehash( + hash: string | Buffer, + opslimit: number, + memlimit: number + ): Promise; + + crypto_scalarmult( + secretKey: X25519SecretKey, + publicKey: X25519PublicKey + ): Promise; + crypto_scalarmult_base( + secretKey: X25519SecretKey + ): Promise; + + crypto_secretbox( + plaintext: string | Buffer, + nonce: Buffer, + key: CryptographyKey + ): Promise; + crypto_secretbox_open( + ciphertext: Buffer, + nonce: Buffer, + key: CryptographyKey + ): Promise; + crypto_secretbox_keygen(): Promise; + + crypto_secretstream_xchacha20poly1305_init_push( + key: CryptographyKey + ): Promise; + crypto_secretstream_xchacha20poly1305_init_pull( + key: Buffer, + header: CryptographyKey + ): Promise; + crypto_secretstream_xchacha20poly1305_push( + state: crypto_secretstream_xchacha20poly1305_state, + message: string | Buffer, + ad?: string | Buffer, + tag?: CryptoSecretStreamTagValues + ): Promise; + crypto_secretstream_xchacha20poly1305_pull( + state: crypto_secretstream_xchacha20poly1305_state, + ciphertext: Buffer, + ad?: string | Buffer, + tag?: CryptoSecretStreamTagValues + ): Promise; + crypto_secretstream_xchacha20poly1305_rekey( + state: crypto_secretstream_xchacha20poly1305_state + ): Promise; + crypto_secretstream_xchacha20poly1305_keygen(): Promise; + + crypto_shorthash( + message: string | Buffer, + key: CryptographyKey + ): Promise; + crypto_shorthash_keygen(): Promise; + + crypto_sign( + message: string | Buffer, + secretKey: Ed25519SecretKey + ): Promise; + crypto_sign_open( + message: string | Buffer, + publicKey: Ed25519PublicKey + ): Promise; + crypto_sign_detached( + message: string | Buffer, + secretKey: Ed25519SecretKey + ): Promise; + crypto_sign_verify_detached( + message: string | Buffer, + publicKey: Ed25519PublicKey, + signature: Buffer + ): Promise; + crypto_sign_secretkey(keypair: CryptographyKey): Promise; + crypto_sign_publickey(keypair: CryptographyKey): Promise; + crypto_sign_seed_keypair(seed: Buffer): Promise; + crypto_sign_keypair(): Promise; + + crypto_sign_ed25519_sk_to_curve25519( + sk: Ed25519SecretKey + ): Promise; + + crypto_sign_ed25519_pk_to_curve25519( + pk: Ed25519PublicKey + ): Promise; + + crypto_stream( + length: number, + nonce: Buffer, + key: CryptographyKey + ): Promise; + crypto_stream_xor( + plaintext: string | Buffer, + nonce: Buffer, + key: CryptographyKey + ): Promise; + crypto_stream_keygen(): Promise; + + randombytes_buf(num: number): Promise; + randombytes_uniform(upperBound: number): Promise; + sodium_add(val: Buffer, addv: Buffer): Promise; + sodium_bin2hex(encoded: Buffer): Promise; + sodium_compare(b1: Buffer, b2: Buffer): Promise; + sodium_hex2bin(encoded: Buffer|string): Promise; + sodium_increment(buf: Buffer): Promise; + sodium_is_zero(buf: Buffer, len: number): Promise; + sodium_memcmp(b1: Buffer, b2: Buffer): Promise; + sodium_memzero(buf: Buffer): Promise; + sodium_pad(buf: string | Buffer, blockSize: number): Promise; + sodium_unpad(buf: string | Buffer, blockSize: number): Promise; + } + + export class SodiumUtil { + static cloneBuffer(buf: Buffer): Promise; + static populateConstants(anyobject: T): T & Constants; + static toBuffer( + stringOrBuffer: string | Buffer | Uint8Array | Promise + ): Promise; + } + + export class SodiumPolyfill { + static crypto_onetimeauth( + message: string | Buffer, + key: CryptographyKey + ): Promise; + static crypto_onetimeauth_verify( + message: string | Buffer, + key: CryptographyKey, + tag: Buffer + ): Promise; + static crypto_stream_xor( + plaintext: string | Buffer, + nonce: Buffer, + key: CryptographyKey + ): Promise; + static crypto_pwhash_str_needs_rehash( + hash: string | Buffer, + opslimit: number, + memlimit: number + ): Promise; + } +} + +export = Module; diff --git a/library/sodium-plus/index.js b/library/sodium-plus/index.js new file mode 100644 index 000000000..800347f6f --- /dev/null +++ b/library/sodium-plus/index.js @@ -0,0 +1,36 @@ +module.exports = { + /** + * This is only meant to be used for advanced users. + * + * A backend object can be passed to the SodiumPlus constructor. + * + * @param {string} type + * @return {Backend} + * @throws {SodiumError} + * @throws {Error} + */ + getBackendObject: (type = '') => { + if (type === 'SodiumNative') { + // This one may error out. You should catch it in your code. + // We won't here. Use the `await SodiumPlus.auto()` API instead! + return require('./lib/backend/sodiumnative'); + } else if (type === 'LibsodiumWrappers') { + return require('./lib/backend/libsodium-wrappers'); + } else if (type.length === 0) { + return require('./lib/backend'); + } + + // Default: Throw a SodiumError + let SodiumError = require('./lib/sodium-error'); + throw new SodiumError(`Unrecognized backend type: ${type}`); + }, + CryptographyKey: require('./lib/cryptography-key'), + Ed25519PublicKey: require('./lib/keytypes/ed25519pk'), + Ed25519SecretKey: require('./lib/keytypes/ed25519sk'), + SodiumError: require('./lib/sodium-error'), + SodiumPlus: require('./lib/sodiumplus'), + SodiumPolyfill: require('./lib/polyfill'), + SodiumUtil: require('./lib/util'), + X25519PublicKey: require('./lib/keytypes/x25519pk'), + X25519SecretKey: require('./lib/keytypes/x25519sk') +}; diff --git a/library/sodium-plus/lib/backend.js b/library/sodium-plus/lib/backend.js new file mode 100644 index 000000000..84466bf25 --- /dev/null +++ b/library/sodium-plus/lib/backend.js @@ -0,0 +1,32 @@ +const CryptographyKey = require('./cryptography-key'); +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +module.exports = class Backend { + constructor() { + // NOP + this.backendName = 'UndefinedBackend'; + } + + /** + * @param {CryptographyKey} sKey + * @param {CryptographyKey} pKey + * @return {Promise} + */ + async crypto_box_keypair_from_secretkey_and_publickey(sKey, pKey) { + /* istanbul ignore if */ + if (sKey.getLength() !== 32) { + throw new Error('Secret key must be 32 bytes'); + } + /* istanbul ignore if */ + if (pKey.getLength() !== 32) { + throw new Error('Public key must be 32 bytes'); + } + const keypair = Buffer.alloc(64); + sKey.getBuffer().copy(keypair, 0, 0, 32); + pKey.getBuffer().copy(keypair, 32, 0, 32); + return new CryptographyKey(Buffer.from(keypair)); + } +}; diff --git a/library/sodium-plus/lib/backend/libsodium-wrappers.js b/library/sodium-plus/lib/backend/libsodium-wrappers.js new file mode 100644 index 000000000..130f2e514 --- /dev/null +++ b/library/sodium-plus/lib/backend/libsodium-wrappers.js @@ -0,0 +1,782 @@ +const _sodium = require('libsodium-wrappers'); +const Backend = require('../backend'); +const CryptographyKey = require('../cryptography-key'); +const Polyfill = require('../polyfill'); +const Util = require('../util'); +const SodiumError = require('../sodium-error'); +const toBuffer = require('typedarray-to-buffer'); +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +/* istanbul ignore next */ +module.exports = class LibsodiumWrappersBackend extends Backend { + constructor(lib) { + super(lib); + this.sodium = lib; + this.backendName = 'LibsodiumWrappersBackend'; + } + + static async init() { + await _sodium.ready; + return new LibsodiumWrappersBackend(_sodium); + } + + /** + * + * @param {String|Buffer} ciphertext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, assocData, nonce, key) { + return toBuffer( + this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt( + null, + ciphertext, + assocData, + nonce, + key.getBuffer() + ) + ); + } + + /** + * + * @param {String|Buffer} plaintext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, assocData, nonce, key) { + return toBuffer( + this.sodium.crypto_aead_xchacha20poly1305_ietf_encrypt( + plaintext, + assocData, + null, + nonce, + key.getBuffer() + ) + ); + } + + /** + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth(message, key) { + return toBuffer( + this.sodium.crypto_auth( + message, + key.getBuffer() + ) + ); + } + + /** + * @param {Buffer} mac + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth_verify(mac, message, key) { + return this.sodium.crypto_auth_verify( + mac, + message, + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box(plaintext, nonce, sk, pk) { + return Util.toBuffer( + await this.sodium.crypto_box_easy( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + pk.getBuffer(), + sk.getBuffer() + ) + ); + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + */ + async crypto_box_open(ciphertext, nonce, sk, pk) { + return Util.toBuffer( + await this.sodium.crypto_box_open_easy( + await Util.toBuffer(ciphertext), + await Util.toBuffer(nonce), + pk.getBuffer(), + sk.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box_seal(plaintext, pk) { + return Util.toBuffer( + await this.sodium.crypto_box_seal( + await Util.toBuffer(plaintext), + pk.getBuffer() + ) + ); + } + + /** + * @param {Buffer} ciphertext + * @param {CryptographyKey} pk + * @param {CryptographyKey} sk + * @return {Promise} + */ + async crypto_box_seal_open(ciphertext, pk, sk) { + return Util.toBuffer( + await this.sodium.crypto_box_seal_open( + await Util.toBuffer(ciphertext), + pk.getBuffer(), + sk.getBuffer() + ) + ); + } + + /** + * @return {Promise} + */ + async crypto_box_keypair() { + const obj = this.sodium.crypto_box_keypair(); + return new CryptographyKey( + Buffer.concat([ + await Util.toBuffer(obj.privateKey), + await Util.toBuffer(obj.publicKey) + ]) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash(message, key = null, outputLength = 32) { + if (key) { + return Util.toBuffer( + this.sodium.crypto_generichash( + outputLength, + await Util.toBuffer(message), + key.getBuffer() + ) + ); + } + return Util.toBuffer( + this.sodium.crypto_generichash( + outputLength, + await Util.toBuffer(message) + ) + ); + } + + /** + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_init(key = null, outputLength = 32) { + if (key) { + return this.sodium.crypto_generichash_init(key.getBuffer(), outputLength); + } + return this.sodium.crypto_generichash_init(null, outputLength); + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @return {Promise<*>} + */ + async crypto_generichash_update(state, message) { + return this.sodium.crypto_generichash_update(state, await Util.toBuffer(message)); + } + + /** + * @param {*} state + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_final(state, outputLength = 32) { + return Util.toBuffer( + this.sodium.crypto_generichash_final(state, outputLength) + ); + } + + /** + * @param {X25519PublicKey} clientPublicKey + * @param {X25519SecretKey} clientSecretKey + * @param {X25519PublicKey} serverPublicKey + * @return {Promise} + */ + async crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey) { + const gen = this.sodium.crypto_kx_client_session_keys( + clientPublicKey.getBuffer(), + clientSecretKey.getBuffer(), + serverPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(await Util.toBuffer(gen.sharedRx)), + new CryptographyKey(await Util.toBuffer(gen.sharedTx)) + ]; + } + + /** + * @param {X25519PublicKey} serverPublicKey + * @param {X25519SecretKey} serverSecretKey + * @param {X25519PublicKey} clientPublicKey + * @return {Promise} + */ + async crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey) { + const gen = this.sodium.crypto_kx_server_session_keys( + serverPublicKey.getBuffer(), + serverSecretKey.getBuffer(), + clientPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(await Util.toBuffer(gen.sharedRx)), + new CryptographyKey(await Util.toBuffer(gen.sharedTx)) + ]; + } + + /** + * @param {number} length + * @param {number} subKeyId + * @param {string|Buffer} context + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_kdf_derive_from_key(length, subKeyId, context, key) { + return new CryptographyKey( + await Util.toBuffer( + this.sodium.crypto_kdf_derive_from_key( + length, + subKeyId | 0, + context, + key.getBuffer() + ) + ) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_onetimeauth(message, key) { + if (typeof this.sodium.crypto_onetimeauth === 'undefined') { + return Polyfill.crypto_onetimeauth( + await Util.toBuffer(message), + key + ); + } + return this.sodium.crypto_onetimeauth( + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + async crypto_onetimeauth_verify(message, key, tag) { + if (typeof this.sodium.crypto_onetimeauth_verify === 'undefined') { + return Polyfill.crypto_onetimeauth_verify( + await Util.toBuffer(message), + key, + tag + ); + } + return this.sodium.crypto_onetimeauth_verify( + tag, + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {number} length + * @param {string|Buffer} password + * @param {Buffer} salt + * @param {number} opslimit + * @param {number} memlimit + * @param {number} algorithm + * @return {Promise} + */ + async crypto_pwhash(length, password, salt, opslimit, memlimit, algorithm) { + return Util.toBuffer( + this.sodium.crypto_pwhash( + length, + await Util.toBuffer(password), + await Util.toBuffer(salt), + opslimit, + memlimit, + algorithm + ) + ); + } + + /** + * @param {string|Buffer} password + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str(password, opslimit, memlimit) { + return (await Util.toBuffer( + this.sodium.crypto_pwhash_str( + await Util.toBuffer(password), + opslimit, + memlimit + )) + ).toString('utf-8'); + } + + /** + * @param {string|Buffer} password + * @param {string|Buffer} hash + * @return {Promise} + */ + async crypto_pwhash_str_verify(password, hash) { + return this.sodium.crypto_pwhash_str_verify( + hash.toString('utf-8'), + await Util.toBuffer(password) + ); + } + + /** + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + if (typeof (this.sodium.crypto_pwhash_str_needs_rehash) !== 'function') { + return await Polyfill.crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit); + } + return this.sodium.crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit); + } + + /** + * @param {X25519SecretKey} secretKey + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_scalarmult(secretKey, publicKey) { + return new CryptographyKey( + await Util.toBuffer( + this.sodium.crypto_scalarmult(secretKey.getBuffer(), publicKey.getBuffer()) + ) + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox(plaintext, nonce, key) { + return Util.toBuffer( + this.sodium.crypto_secretbox_easy( + await Util.toBuffer(plaintext), + nonce, + key.getBuffer() + ) + ); + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox_open(ciphertext, nonce, key) { + return Util.toBuffer( + this.sodium.crypto_secretbox_open_easy( + await Util.toBuffer(ciphertext), + nonce, + key.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_shorthash(message, key) { + return Util.toBuffer( + this.sodium.crypto_shorthash( + await Util.toBuffer(message), + key.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign(message, secretKey) { + return Util.toBuffer( + this.sodium.crypto_sign( + await Util.toBuffer(message), + secretKey.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_sign_open(message, publicKey) { + return Util.toBuffer( + this.sodium.crypto_sign_open( + message, + publicKey.getBuffer() + ) + ); + } + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign_detached(message, secretKey) { + return Util.toBuffer( + this.sodium.crypto_sign_detached( + await Util.toBuffer(message), + secretKey.getBuffer() + ) + ); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @param {Buffer} signature + * @return {Promise} + */ + async crypto_sign_verify_detached(message, publicKey, signature) { + return this.sodium.crypto_sign_verify_detached( + signature, + await Util.toBuffer(message), + publicKey.getBuffer() + ); + } + + /** + * @return {Promise} + */ + async crypto_sign_keypair() { + const obj = this.sodium.crypto_sign_keypair(); + return new CryptographyKey( + Buffer.concat([ + await Util.toBuffer(obj.privateKey), + await Util.toBuffer(obj.publicKey) + ]) + ); + } + + /** + * @param {Buffer} seed + * @return {Promise} + */ + async crypto_sign_seed_keypair(seed) { + const obj = this.sodium.crypto_sign_seed_keypair(seed); + return new CryptographyKey( + Buffer.concat([ + await Util.toBuffer(obj.privateKey), + await Util.toBuffer(obj.publicKey) + ]) + ); + } + + /** + * @param {Ed25519SecretKey} sk + * @return {Promise} + */ + async crypto_sign_ed25519_sk_to_curve25519(sk) { + return Util.toBuffer( + this.sodium.crypto_sign_ed25519_sk_to_curve25519(sk.getBuffer()) + ); + } + + /** + * @param {Ed25519PublicKey} pk + * @return {Promise} + */ + async crypto_sign_ed25519_pk_to_curve25519(pk) { + return Util.toBuffer( + this.sodium.crypto_sign_ed25519_pk_to_curve25519(pk.getBuffer()) + ); + } + + + /** + * @param {number} length + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream(length, nonce, key) { + if (typeof (this.sodium.crypto_stream_xor) === 'undefined') { + return Polyfill.crypto_stream_xor( + Buffer.alloc(length, 0), + await Util.toBuffer(nonce), + key + ); + } + return this.sodium.crypto_stream( + length, + await Util.toBuffer(nonce), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream_xor(plaintext, nonce, key) { + if (typeof (this.sodium.crypto_stream_xor) === 'undefined') { + return Polyfill.crypto_stream_xor( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + key + ) + } + return this.sodium.crypto_stream_xor( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + key.getBuffer() + ); + } + + /** + * + * @param {CryptographyKey} secretKey + * @return {Promise} + */ + async crypto_scalarmult_base(secretKey) { + return Util.toBuffer( + this.sodium.crypto_scalarmult_base(secretKey.getBuffer()) + ); + } + + /** + * @param {CryptographyKey} key + * @return {Promise} [state, header] + */ + async crypto_secretstream_xchacha20poly1305_init_push(key) { + const res = this.sodium.crypto_secretstream_xchacha20poly1305_init_push(key.getBuffer()); + return [res.state, await Util.toBuffer(res.header)]; + } + + /** + * @param {Buffer} header + * @param {CryptographyKey} key + * @return {Promise<*>} Returns the opaque state object + */ + async crypto_secretstream_xchacha20poly1305_init_pull(header, key) { + if (header.length !== this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) { + throw new SodiumError(`Header must be ${this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES} bytes long`); + } + return this.sodium.crypto_secretstream_xchacha20poly1305_init_pull(header, key.getBuffer()); + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_push(state, message, ad = '', tag = 0) { + return Util.toBuffer( + this.sodium.crypto_secretstream_xchacha20poly1305_push( + state, + await Util.toBuffer(message), + ad.length > 0 ? (await Util.toBuffer(ad)) : null, + tag + ) + ); + } + + /** + * @param {*} state + * @param {Buffer} ciphertext + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad = '', tag = 0) { + if (ciphertext.length < this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES) { + throw new SodiumError('Invalid ciphertext size'); + } + const out = this.sodium.crypto_secretstream_xchacha20poly1305_pull( + state, + await Util.toBuffer(ciphertext), + ad.length > 0 ? (await Util.toBuffer(ad)) : null, + tag + ); + if (tag !== out.tag) { + throw new SodiumError(`Invalid tag (Given: ${tag}; Expected: ${out.tag})`); + } + return Util.toBuffer(out.message); + } + + /** + * @param {*} state + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_rekey(state) { + this.sodium.crypto_secretstream_xchacha20poly1305_rekey(state); + } + + /** + * @param {number} number + * @return {Promise} + */ + async randombytes_buf(number) { + return Util.toBuffer(await this.sodium.randombytes_buf(number)); + } + + /** + * @param {number} upperBound + * @return {Promise} + */ + async randombytes_uniform(upperBound) { + return this.sodium.randombytes_uniform(upperBound); + } + + /** + * @param {Uint8Array} val + * @param {Uint8Array} addv + * @return {Promise} + */ + async sodium_add(val, addv) { + const buf = await Util.cloneBuffer(val); + this.sodium.add(buf, addv); + return buf; + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_bin2hex(buf) { + return this.sodium.to_hex(buf); + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_compare(b1, b2) { + return this.sodium.compare(b1, b2); + } + + /** + * @param {Buffer|string} encoded + * @return {Promise} + */ + async sodium_hex2bin(encoded) { + return Buffer.from(this.sodium.from_hex(encoded)); + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_increment(buf) { + return this.sodium.increment(buf); + } + + /** + * @param {Buffer} buf + * @param {number} len + * @return {Promise} + */ + async sodium_is_zero(buf, len) { + return this.sodium.is_zero(buf, len); + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_memcmp(b1, b2) { + return this.sodium.memcmp(b1, b2); + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_memzero(buf) { + this.sodium.memzero(buf); + } + + + /** + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_pad(buf, blockSize) { + return Util.toBuffer( + this.sodium.pad(await Util.toBuffer(buf), blockSize) + ); + } + + /** + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_unpad(buf, blockSize) { + return Util.toBuffer(this.sodium.unpad(buf, blockSize)); + } +}; diff --git a/library/sodium-plus/lib/backend/sodiumnative.js b/library/sodium-plus/lib/backend/sodiumnative.js new file mode 100644 index 000000000..feea8b432 --- /dev/null +++ b/library/sodium-plus/lib/backend/sodiumnative.js @@ -0,0 +1,866 @@ +let loaded = false; +let _sodium; +/* istanbul ignore next */ +try { + _sodium = require('sodium-native'); + loaded = true; +} catch (e) { + _sodium = {}; +} +const Backend = require('../backend'); +const CryptographyKey = require('../cryptography-key'); +const SodiumError = require('../sodium-error'); +const Util = require('../util'); +const toBuffer = require('typedarray-to-buffer'); +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +/* istanbul ignore next */ +module.exports = class SodiumNativeBackend extends Backend { + constructor(lib) { + super(lib); + this.sodium = lib; + this.backendName = 'SodiumNativeBackend'; + } + + static async init() { + if (!loaded) { + throw new SodiumError('sodium-native not installed'); + } + return new SodiumNativeBackend(_sodium); + } + + /** + * + * @param {String|Buffer} ciphertext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, assocData, nonce, key) { + const plaintext = Buffer.alloc(ciphertext.length - 16, 0); + this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt( + plaintext, + null, + await Util.toBuffer(ciphertext), + await Util.toBuffer(assocData), + await Util.toBuffer(nonce), + key.getBuffer() + ); + return plaintext; + } + + /** + * + * @param {String|Buffer} plaintext + * @param {String|Buffer} assocData + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, assocData, nonce, key) { + const ciphertext = Buffer.alloc(plaintext.length + 16, 0); + this.sodium.crypto_aead_xchacha20poly1305_ietf_encrypt( + ciphertext, + await Util.toBuffer(plaintext), + await Util.toBuffer(assocData), + null, + await Util.toBuffer(nonce), + key.getBuffer() + ); + return ciphertext; + } + + /** + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth(message, key) { + const output = Buffer.alloc(32); + this.sodium.crypto_auth( + output, + await Util.toBuffer(message), + key.getBuffer() + ); + return toBuffer(output); + } + + /** + * @param {Buffer} mac + * @param {String|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth_verify(mac, message, key) { + return this.sodium.crypto_auth_verify( + mac, + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box(plaintext, nonce, sk, pk) { + const ciphertext = Buffer.alloc(plaintext.length + 16); + this.sodium.crypto_box_easy( + ciphertext, + await Util.toBuffer(plaintext), + nonce, + pk.getBuffer(), + sk.getBuffer() + ); + return Util.toBuffer(ciphertext); + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} sk + * @param {CryptographyKey} pk + * @return {Promise} + */ + async crypto_box_open(ciphertext, nonce, sk, pk) { + const plaintext = Buffer.alloc(ciphertext.length - 16); + const success = this.sodium.crypto_box_open_easy( + plaintext, + ciphertext, + nonce, + pk.getBuffer(), + sk.getBuffer() + ); + if (!success) { + throw new SodiumError('Decryption failed'); + } + return Util.toBuffer(plaintext); + } + + /** + * @param {string|Buffer} plaintext + * @param {CryptographyKey} pk + * @return {Promise} + * + */ + async crypto_box_seal(plaintext, pk) { + const ciphertext = Buffer.alloc(plaintext.length + 48); + this.sodium.crypto_box_seal( + ciphertext, + await Util.toBuffer(plaintext), + pk.getBuffer() + ); + return Util.toBuffer(ciphertext); + } + + /** + * @param {Buffer} ciphertext + * @param {CryptographyKey} pk + * @param {CryptographyKey} sk + * @return {Promise} + */ + async crypto_box_seal_open(ciphertext, pk, sk) { + const plaintext = Buffer.alloc(ciphertext.length - 48); + const success = this.sodium.crypto_box_seal_open( + plaintext, + await Util.toBuffer(ciphertext), + pk.getBuffer(), + sk.getBuffer() + ); + if (!success) { + throw new SodiumError('Decryption failed'); + } + return Util.toBuffer(plaintext); + } + + /** + * @return {Promise} + */ + async crypto_box_keypair() { + const sK = Buffer.alloc(32, 0); + const pK = Buffer.alloc(32, 0); + this.sodium.crypto_box_keypair(sK, pK); + return new CryptographyKey( + Buffer.concat([pK, sK]) + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash(message, key = null, outputLength = 32) { + const hash = Buffer.alloc(outputLength); + if (key) { + this.sodium.crypto_generichash(hash, await Util.toBuffer(message), key.getBuffer()); + } else { + this.sodium.crypto_generichash(hash, await Util.toBuffer(message)); + } + return hash; + } + + /** + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_init(key = null, outputLength = 32) { + const state = Buffer.alloc(this.CRYPTO_GENERICHASH_STATEBYTES); + if (key) { + this.sodium.crypto_generichash_init(state, key.getBuffer(), outputLength); + } else { + this.sodium.crypto_generichash_init(state, null, outputLength); + } + return state; + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @return {Promise<*>} + */ + async crypto_generichash_update(state, message) { + this.sodium.crypto_generichash_update(state, await Util.toBuffer(message)); + return state; + } + + /** + * @param {*} state + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_final(state, outputLength = 32) { + const output = Buffer.alloc(outputLength); + this.sodium.crypto_generichash_final(state, output); + return output; + } + + /** + * @param {number} length + * @param {number} subKeyId + * @param {string|Buffer} context + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_kdf_derive_from_key(length, subKeyId, context, key) { + const subkey = Buffer.alloc(length, 0); + this.sodium.crypto_kdf_derive_from_key( + subkey, + subKeyId | 0, + await Util.toBuffer(context), + key.getBuffer() + ); + return new CryptographyKey(subkey); + } + + /** + * @param {X25519PublicKey} clientPublicKey + * @param {X25519SecretKey} clientSecretKey + * @param {X25519PublicKey} serverPublicKey + * @return {Promise} + */ + async crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey) { + const rx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + const tx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + this.sodium.crypto_kx_client_session_keys( + rx, + tx, + clientPublicKey.getBuffer(), + clientSecretKey.getBuffer(), + serverPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(rx), + new CryptographyKey(tx) + ]; + } + + /** + * @param {X25519PublicKey} serverPublicKey + * @param {X25519SecretKey} serverSecretKey + * @param {X25519PublicKey} clientPublicKey + * @return {Promise} + */ + async crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey) { + const rx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + const tx = Buffer.alloc(this.CRYPTO_KX_SESSIONKEYBYTES); + this.sodium.crypto_kx_server_session_keys( + rx, + tx, + serverPublicKey.getBuffer(), + serverSecretKey.getBuffer(), + clientPublicKey.getBuffer(), + ); + return [ + new CryptographyKey(rx), + new CryptographyKey(tx) + ]; + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_onetimeauth(message, key) { + const output = Buffer.alloc(16); + this.sodium.crypto_onetimeauth( + output, + await Util.toBuffer(message), + key.getBuffer() + ); + return output; + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + async crypto_onetimeauth_verify(message, key, tag) { + return this.sodium.crypto_onetimeauth_verify( + tag, + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {number} length + * @param {string|Buffer} password + * @param {Buffer} salt + * @param {number} opslimit + * @param {number} memlimit + * @param {number} algorithm + * @return {Promise} + */ + async crypto_pwhash(length, password, salt, opslimit, memlimit, algorithm) { + const hashed = Buffer.alloc(length, 0); + const bufPass = await Util.toBuffer(password); + const bufSalt = await Util.toBuffer(salt); + await new Promise((resolve, reject) => { + this.sodium.crypto_pwhash_async( + hashed, + bufPass, + bufSalt, + opslimit, + memlimit, + algorithm, + (e, res) => { + if (e) return reject(e); + return resolve(res); + } + ); + }); + return hashed; + } + + /** + * @param {string|Buffer} password + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str(password, opslimit, memlimit) { + const hashed = Buffer.alloc(128, 0); + const bufPass = await Util.toBuffer(password); + await new Promise((resolve, reject) => { + this.sodium.crypto_pwhash_str_async( + hashed, + bufPass, + opslimit, + memlimit, + (e, res) => { + if (e) return reject(e); + return resolve(res); + } + ); + }); + return hashed.toString(); + + } + + /** + * @param {string|Buffer} password + * @param {string|Buffer} hash + * @return {Promise} + */ + async crypto_pwhash_str_verify(password, hash) { + const allocated = Buffer.alloc(128, 0); + (await Util.toBuffer(hash)).copy(allocated, 0, 0); + const bufPass = await Util.toBuffer(password); + return new Promise((resolve, reject) => { + this.sodium.crypto_pwhash_str_verify_async( + allocated, + bufPass, + (e, res) => { + if (e) return reject(e); + return resolve(res); + } + ); + }); + } + + /** + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + const allocated = Buffer.alloc(128, 0); + (await Util.toBuffer(hash)).copy(allocated, 0, 0); + return this.sodium.crypto_pwhash_str_needs_rehash( + allocated, + opslimit, + memlimit + ); + } + + /** + * @param {X25519SecretKey} secretKey + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_scalarmult(secretKey, publicKey) { + const shared = Buffer.alloc(32); + this.sodium.crypto_scalarmult(shared, secretKey.getBuffer(), publicKey.getBuffer()); + return new CryptographyKey( + await Util.toBuffer(shared) + ); + } + + /** + * + * @param {CryptographyKey} secretKey + * @return {Promise} + */ + async crypto_scalarmult_base(secretKey) { + const buf = Buffer.alloc(32); + this.sodium.crypto_scalarmult_base(buf, secretKey.getBuffer()); + return buf; + } + + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox(plaintext, nonce, key) { + const encrypted = Buffer.alloc(plaintext.length + 16); + this.sodium.crypto_secretbox_easy( + encrypted, + await Util.toBuffer(plaintext), + nonce, + key.getBuffer() + ); + return encrypted; + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_shorthash(message, key) { + const output = Buffer.alloc(8); + this.sodium.crypto_shorthash( + output, + await Util.toBuffer(message), + key.getBuffer() + ); + return output; + } + + /** + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox_open(ciphertext, nonce, key) { + const decrypted = Buffer.alloc(ciphertext.length - 16); + if (!this.sodium.crypto_secretbox_open_easy( + decrypted, + ciphertext, + nonce, + key.getBuffer() + )) { + throw new SodiumError('Decryption failure'); + } + return decrypted; + } + + /** + * @param {CryptographyKey} key + * @return {Promise} [state, header] + */ + async crypto_secretstream_xchacha20poly1305_init_push(key) { + const state = Buffer.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES); + const header = Buffer.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES); + this.sodium.randombytes_buf(header); + this.sodium.crypto_secretstream_xchacha20poly1305_init_push(state, header, key.getBuffer()); + return [state, header]; + } + + /** + * @param {Buffer} header + * @param {CryptographyKey} key + * @return {Promise<*>} Returns the opaque state object + */ + async crypto_secretstream_xchacha20poly1305_init_pull(header, key) { + if (header.length !== this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) { + throw new SodiumError(`Header must be ${this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES} bytes long`); + } + const state = Buffer.alloc(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES); + this.sodium.crypto_secretstream_xchacha20poly1305_init_pull(state, header, key.getBuffer()); + return state; + } + + /** + * @param {*} state + * @param {string|Buffer} message + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_push(state, message, ad = '', tag = 0) { + const ciphertext = Buffer.alloc(message.length + this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES); + this.sodium.crypto_secretstream_xchacha20poly1305_push( + state, + ciphertext, + await Util.toBuffer(message), + ad.length > 0 ? (await Util.toBuffer(ad)) : null, + Buffer.from([tag]) + ); + return ciphertext; + } + + /** + * @param {*} state + * @param {Buffer} ciphertext + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad = '', tag = 0) { + if (ciphertext.length < this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES) { + throw new SodiumError('Invalid ciphertext size'); + } + const plaintext = Buffer.alloc(ciphertext.length - this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES); + this.sodium.crypto_secretstream_xchacha20poly1305_pull( + state, + plaintext, + Buffer.from([tag]), + ciphertext, + ad.length > 0 ? (await Util.toBuffer(ad)) : null + ); + return plaintext; + } + + /** + * @param {*} state + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_rekey(state) { + this.sodium.crypto_secretstream_xchacha20poly1305_rekey(state); + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign(message, secretKey) { + const signed = Buffer.alloc(message.length + 64); + this.sodium.crypto_sign(signed, await Util.toBuffer(message), secretKey.getBuffer()); + return signed; + } + + /** + * @param {Buffer} signedMessage, + * @param {Ed25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_sign_open(signedMessage, publicKey) { + const original = Buffer.alloc(signedMessage.length - 64); + this.sodium.crypto_sign_open(original, await Util.toBuffer(signedMessage), publicKey.getBuffer()); + return original; + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign_detached(message, secretKey) { + const signature = Buffer.alloc(64); + this.sodium.crypto_sign_detached(signature, await Util.toBuffer(message), secretKey.getBuffer()); + return signature; + } + + /** + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @param {Buffer} signature + * @return {Promise} + */ + async crypto_sign_verify_detached(message, publicKey, signature) { + return this.sodium.crypto_sign_verify_detached( + signature, + await Util.toBuffer(message), + publicKey.getBuffer() + ); + } + + /** + * @return {Promise} + */ + async crypto_sign_keypair() { + const sK = Buffer.alloc(64, 0); + const pK = Buffer.alloc(32, 0); + this.sodium.crypto_sign_keypair(pK, sK); + return new CryptographyKey( + Buffer.concat([sK, pK]) + ); + } + + /** + * @param {Buffer} seed + * @return {Promise} + */ + async crypto_sign_seed_keypair(seed) { + const sK = Buffer.alloc(64, 0); + const pK = Buffer.alloc(32, 0); + this.sodium.crypto_sign_seed_keypair(pK, sK, seed); + return new CryptographyKey( + Buffer.concat([sK, pK]) + ); + } + + /** + * @param {Ed25519SecretKey} sk + * @return {Promise} + */ + async crypto_sign_ed25519_sk_to_curve25519(sk) { + const xsk = Buffer.alloc(32); + this.sodium.crypto_sign_ed25519_sk_to_curve25519(xsk, sk.getBuffer()); + return xsk; + } + + /** + * @param {Ed25519PublicKey} pk + * @return {Promise} + */ + async crypto_sign_ed25519_pk_to_curve25519(pk) { + const xpk = Buffer.alloc(32); + this.sodium.crypto_sign_ed25519_pk_to_curve25519(xpk, pk.getBuffer()); + return xpk; + } + + /** + * @param {number} length + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream(length, nonce, key) { + const output = Buffer.alloc(length); + this.sodium.crypto_stream( + output, + await Util.toBuffer(nonce), + key.getBuffer() + ); + return output; + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream_xor(plaintext, nonce, key) { + const output = Buffer.alloc(plaintext.length); + this.sodium.crypto_stream_xor( + output, + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + key.getBuffer() + ); + return output; + } + + /** + * @param {number} number + * @return {Promise} + */ + async randombytes_buf(number) { + let buf = Buffer.alloc(number); + this.sodium.randombytes_buf(buf); + return buf; + } + + /** + * @param {number} upperBound + * @return {Promise} + */ + async randombytes_uniform(upperBound) { + return this.sodium.randombytes_uniform(upperBound); + } + + /** + * @param {Uint8Array} val + * @param {Uint8Array} addv + * @return {Promise} + */ + async sodium_add(val, addv) { + const buf = await Util.cloneBuffer(val); + this.sodium.sodium_add(buf, addv); + return buf; + } + + /** + * @param {Buffer} input + * @return {Promise} + */ + async sodium_bin2hex(input) { + let str = "", b, c, x; + for (let i = 0; i < input.length; i++) { + c = input[i] & 0xf; + b = input[i] >>> 4; + x = + ((87 + c + (((c - 10) >> 8) & ~38)) << 8) | + (87 + b + (((b - 10) >> 8) & ~38)); + str += String.fromCharCode(x & 0xff) + String.fromCharCode(x >>> 8); + } + return str; + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_compare(b1, b2) { + return this.sodium.sodium_compare(b1, b2); + } + + /** + * @param {Buffer|string} hex + * @param {string|null} ignore + * @return {Promise} + */ + async sodium_hex2bin(hex, ignore = null) { + let bin_pos = 0, + hex_pos = 0, + c = 0, + c_acc = 0, + c_alpha0 = 0, + c_alpha = 0, + c_num0 = 0, + c_num = 0, + c_val = 0, + state = 0; + const bin = Buffer.alloc(hex.length >> 1, 0); + + while (hex_pos < hex.length) { + c = hex.charCodeAt(hex_pos); + c_num = c ^ 48; + c_num0 = (c_num - 10) >> 8; + c_alpha = (c & ~32) - 55; + c_alpha0 = ((c_alpha - 10) ^ (c_alpha - 16)) >> 8; + if ((c_num0 | c_alpha0) === 0) { + if (ignore && state === 0 && ignore.indexOf(c) >= 0) { + hex_pos++; + continue; + } + break; + } + c_val = (c_num0 & c_num) | (c_alpha0 & c_alpha); + if (state === 0) { + c_acc = c_val * 16; + } else { + bin[bin_pos++] = c_acc | c_val; + } + state = ~state; + hex_pos++; + } + return bin; + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_increment(buf) { + return this.sodium.sodium_increment(buf); + } + + /** + * @param {Buffer} buf + * @param {number} len + * @return {Promise} + */ + async sodium_is_zero(buf, len) { + return this.sodium.sodium_is_zero(buf, len); + } + + /** + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_memcmp(b1, b2) { + return this.sodium.sodium_memcmp(b1, b2); + } + + /** + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_memzero(buf) { + this.sodium.sodium_memzero(buf); + } + + /** + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_pad(buf, blockSize) { + buf = await Util.toBuffer(buf); + let length = buf.length + (buf.length % blockSize); + if (length < blockSize) { + length += blockSize; + } + const padded = Buffer.alloc(length + 100); + buf.copy(padded, 0, 0); + const sliceto = this.sodium.sodium_pad(padded, buf.length, blockSize); + return padded.slice(0, sliceto); + } + + /** + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_unpad(buf, blockSize) { + const outlen = this.sodium.sodium_unpad(buf, buf.length, blockSize); + return buf.slice(0, outlen); + } +}; diff --git a/library/sodium-plus/lib/cryptography-key.js b/library/sodium-plus/lib/cryptography-key.js new file mode 100644 index 000000000..8aed3a786 --- /dev/null +++ b/library/sodium-plus/lib/cryptography-key.js @@ -0,0 +1,80 @@ +"use strict"; + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} +module.exports = class CryptographyKey { + /** + * Note: We use Object.defineProperty() to hide the buffer inside of the + * CryptographyKey object to prevent accidental leaks. + * + * @param {Buffer} buf + */ + constructor(buf) { + if (!Buffer.isBuffer(buf)) { + throw new TypeError('Argument 1 must be an instance of Buffer.'); + } + Object.defineProperty(this, 'buffer', { + enumerable: false, + value: buf.slice() + }); + } + + /** + * @return {CryptographyKey} + */ + static from() { + return new CryptographyKey(Buffer.from(...arguments)); + } + + /** + * @return {boolean} + */ + isEd25519Key() { + return false; + } + + /** + * @return {boolean} + */ + isX25519Key() { + return false; + } + + /** + * @return {boolean} + */ + isPublicKey() { + return false; + } + + /** + * @return {Number} + */ + getLength() { + return this.buffer.length; + } + + /** + * @return {Buffer} + */ + getBuffer() { + return this.buffer; + } + + /** + * @param {string} encoding + */ + toString(encoding = 'utf-8') { + /* istanbul ignore if */ + return this.getBuffer().toString(encoding); + } + + /** + * @return {Buffer} + */ + slice() { + return this.buffer.slice(...arguments); + } +}; diff --git a/library/sodium-plus/lib/keytypes/ed25519pk.js b/library/sodium-plus/lib/keytypes/ed25519pk.js new file mode 100644 index 000000000..4c6dd911e --- /dev/null +++ b/library/sodium-plus/lib/keytypes/ed25519pk.js @@ -0,0 +1,28 @@ +const CryptographyKey = require('../cryptography-key'); + +class Ed25519PublicKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 32) { + throw new Error('Ed25519 public keys must be 32 bytes long'); + } + super(buf); + this.keyType = 'ed25519'; + this.publicKey = true; + } + /** + * @return {Ed25519PublicKey} + */ + static from() { + return new Ed25519PublicKey(Buffer.from(...arguments)); + } + + isEd25519Key() { + return true; + } + + isPublicKey() { + return true; + } +} + +module.exports = Ed25519PublicKey; diff --git a/library/sodium-plus/lib/keytypes/ed25519sk.js b/library/sodium-plus/lib/keytypes/ed25519sk.js new file mode 100644 index 000000000..3c67286c2 --- /dev/null +++ b/library/sodium-plus/lib/keytypes/ed25519sk.js @@ -0,0 +1,29 @@ +const CryptographyKey = require('../cryptography-key'); + +class Ed25519SecretKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 64) { + throw new Error('Ed25519 secret keys must be 64 bytes long'); + } + super(buf); + this.keyType = 'ed25519'; + this.publicKey = false; + } + + /** + * @return {Ed25519SecretKey} + */ + static from() { + return new Ed25519SecretKey(Buffer.from(...arguments)); + } + + isEd25519Key() { + return true; + } + + isPublicKey() { + return false; + } +} + +module.exports = Ed25519SecretKey; \ No newline at end of file diff --git a/library/sodium-plus/lib/keytypes/x25519pk.js b/library/sodium-plus/lib/keytypes/x25519pk.js new file mode 100644 index 000000000..322c899f8 --- /dev/null +++ b/library/sodium-plus/lib/keytypes/x25519pk.js @@ -0,0 +1,29 @@ +const CryptographyKey = require('../cryptography-key'); + +class X25519PublicKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 32) { + throw new Error('X25519 public keys must be 32 bytes long'); + } + super(buf); + this.keyType = 'x25519'; + this.publicKey = true; + } + + /** + * @return {X25519PublicKey} + */ + static from() { + return new X25519PublicKey(Buffer.from(...arguments)); + } + + isX25519Key() { + return true; + } + + isPublicKey() { + return true; + } +} + +module.exports = X25519PublicKey; diff --git a/library/sodium-plus/lib/keytypes/x25519sk.js b/library/sodium-plus/lib/keytypes/x25519sk.js new file mode 100644 index 000000000..8b8016f83 --- /dev/null +++ b/library/sodium-plus/lib/keytypes/x25519sk.js @@ -0,0 +1,29 @@ +const CryptographyKey = require('../cryptography-key'); + +class X25519SecretKey extends CryptographyKey { + constructor(buf) { + if (buf.length !== 32) { + throw new Error('X25519 secret keys must be 32 bytes long'); + } + super(buf); + this.keyType = 'x25519'; + this.publicKey = false; + } + + /** + * @return {X25519SecretKey} + */ + static from() { + return new X25519SecretKey(Buffer.from(...arguments)); + } + + isX25519Key() { + return true; + } + + isPublicKey() { + return false; + } +} + +module.exports = X25519SecretKey; diff --git a/library/sodium-plus/lib/polyfill.js b/library/sodium-plus/lib/polyfill.js new file mode 100644 index 000000000..faf6d75e5 --- /dev/null +++ b/library/sodium-plus/lib/polyfill.js @@ -0,0 +1,74 @@ +"use strict"; +const crypto = require('crypto'); +const Poly1305 = require('poly1305-js'); +const Util = require('./util'); +const XSalsa20 = require('xsalsa20'); + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +module.exports = class SodiumPolyfill { + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + static async crypto_onetimeauth(message, key) { + return Poly1305.onetimeauth( + await Util.toBuffer(message), + key.getBuffer() + ); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + static async crypto_onetimeauth_verify(message, key, tag) { + return Poly1305.onetimeauth_verify( + await Util.toBuffer(message), + key.getBuffer(), + await Util.toBuffer(tag) + ); + } + + /** + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + static async crypto_stream_xor(plaintext, nonce, key) { + const stream = XSalsa20(nonce, key.getBuffer()); + const output = stream.update(plaintext); + stream.finalize(); + return Util.toBuffer(output); + } + + /** + * Polyfill crypto_pwhash_str_needs_rehash() for bindings that don't + * include this (somewhat new) helper function. + * + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + static async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + const pwhash = (await Util.toBuffer(hash)).toString('utf-8'); + const pieces = pwhash.split('$'); + const expect = 'm=' + (memlimit >> 10) + ',t=' + opslimit + ',p=1'; + if (expect.length !== pieces[3].length) { + return true; + } + return !crypto.timingSafeEqual( + await Util.toBuffer(expect), + await Util.toBuffer(pieces[3]) + ); + } +}; diff --git a/library/sodium-plus/lib/sodium-error.js b/library/sodium-plus/lib/sodium-error.js new file mode 100644 index 000000000..a21b13b71 --- /dev/null +++ b/library/sodium-plus/lib/sodium-error.js @@ -0,0 +1 @@ +module.exports = class SodiumError extends Error {}; diff --git a/library/sodium-plus/lib/sodiumplus.js b/library/sodium-plus/lib/sodiumplus.js new file mode 100644 index 000000000..7f5bc4c08 --- /dev/null +++ b/library/sodium-plus/lib/sodiumplus.js @@ -0,0 +1,1212 @@ +const Backend = require('./backend'); +const CryptographyKey = require('./cryptography-key'); +const Ed25519SecretKey = require('./keytypes/ed25519sk'); +const Ed25519PublicKey = require('./keytypes/ed25519pk'); +const LibsodiumWrappersBackend = require('./backend/libsodium-wrappers'); +const SodiumError = require('./sodium-error'); +const SodiumNativeBackend = require('./backend/sodiumnative'); +const X25519PublicKey = require('./keytypes/x25519pk'); +const X25519SecretKey = require('./keytypes/x25519sk'); +const Util = require('./util'); + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +class SodiumPlus { + constructor(backend) { + /* istanbul ignore if */ + if (!(backend instanceof Backend)) { + throw new TypeError('Backend object must implement the backend function'); + } + this.backend = backend; + Util.populateConstants(this); + } + + /** + * Returns the name of the current active backend. + * This method is NOT async. + * + * @return {string} + */ + getBackendName() { + return this.backend.backendName; + } + + /** + * Is this powered by sodium-native? + * This method is NOT async. + * + * @return {boolean} + */ + isSodiumNative() { + return (this.backend instanceof SodiumNativeBackend); + } + + /** + * Is this powered by libsodium-wrappers? + * This method is NOT async. + * + * @return {boolean} + */ + isLibsodiumWrappers() { + return (this.backend instanceof LibsodiumWrappersBackend); + } + + /** + * Automatically select a backend. + * + * @return {Promise} + */ + static async auto() { + let backend; + try { + backend = await SodiumNativeBackend.init(); + } catch (e) { + backend = await LibsodiumWrappersBackend.init(); + } + /* istanbul ignore if */ + if (!backend) { + backend = await LibsodiumWrappersBackend.init(); + } + Util.populateConstants(backend); + return new SodiumPlus(backend); + } + + /** + * If our backend isn't defined, it will trigger an autoload. + * + * Mostly used internally. `await SodiumPlus.auto()` provides the same + * exact guarantee as this method. + * + * @return {Promise} + */ + async ensureLoaded() { + /* istanbul ignore if */ + if (typeof (this.backend) === 'undefined') { + try { + await SodiumPlus.auto(); + } catch (e) { + this.backend = await LibsodiumWrappersBackend.init(); + } + } + } + + /** + * Decrypt a message (and optional associated data) with XChaCha20-Poly1305 + * + * @param {String|Buffer} ciphertext + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @param {String|Buffer} assocData + * @return {Promise} + * @throws {SodiumError} + */ + async crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, nonce, key, assocData = '') { + await this.ensureLoaded(); + if (nonce.length !== 24) { + throw new SodiumError('Argument 2 must be 24 bytes'); + } + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 3 must be an instance of CryptographyKey'); + } + return await this.backend.crypto_aead_xchacha20poly1305_ietf_decrypt( + await Util.toBuffer(ciphertext), + assocData.length > 0 ? await Util.toBuffer(assocData) : null, + await Util.toBuffer(nonce), + key + ); + } + + /** + * Encrypt a message (and optional associated data) with XChaCha20-Poly1305. + * + * Throws a SodiumError if an invalid ciphertext/AAD is provided for this + * nonce and key. + * + * @param {String|Buffer} plaintext + * @param {String|Buffer} nonce + * @param {CryptographyKey} key + * @param {String|Buffer} assocData + * @return {Promise} + * @throws {SodiumError} + */ + async crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, nonce, key, assocData = '') { + await this.ensureLoaded(); + if (nonce.length !== 24) { + throw new SodiumError('Argument 2 must be 24 bytes'); + } + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 3 must be an instance of CryptographyKey'); + } + + return await this.backend.crypto_aead_xchacha20poly1305_ietf_encrypt( + await Util.toBuffer(plaintext), + assocData.length > 0 ? await Util.toBuffer(assocData) : null, + await Util.toBuffer(nonce), + key + ); + } + + /** + * Generate an XChaCha20-Poly1305 key. + * + * @return {Promise} + */ + async crypto_aead_xchacha20poly1305_ietf_keygen() { + return new CryptographyKey(await this.backend.randombytes_buf(32)); + } + + /** + * Get an authenticator for a message for a given key. + * + * Algorithm: HMAC-SHA512 truncated to 32 bytes. + * + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_auth(message, key) { + await this.ensureLoaded(); + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + await this.ensureLoaded(); + return await this.backend.crypto_auth( + await Util.toBuffer(message), + key + ); + } + + /** + * @return {Promise} + */ + async crypto_auth_keygen() { + return new CryptographyKey(await this.backend.randombytes_buf(32)); + } + + /** + * Verify an authenticator for a message for a given key. + * + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} mac + * @return {Promise} + */ + async crypto_auth_verify(message, key, mac) { + await this.ensureLoaded(); + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + await this.ensureLoaded(); + return await this.backend.crypto_auth_verify( + await Util.toBuffer(mac), + await Util.toBuffer(message), + key + ); + } + + /** + * Public-key authenticated encryption. + * + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {X25519SecretKey} myPrivateKey + * @param {X25519PublicKey} theirPublicKey + * @return {Promise} + */ + async crypto_box(plaintext, nonce, myPrivateKey, theirPublicKey) { + await this.ensureLoaded(); + if (!(myPrivateKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 3 must be an instance of X25519SecretKey'); + } + if (!(theirPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 4 must be an instance of X25519PublicKey'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + return this.backend.crypto_box( + await Util.toBuffer(plaintext), + await Util.toBuffer(nonce), + myPrivateKey, + theirPublicKey + ); + } + + /** + * Public-key authenticated decryption. + * + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {X25519SecretKey} myPrivateKey + * @param {X25519PublicKey} theirPublicKey + * @return {Promise} + */ + async crypto_box_open(ciphertext, nonce, myPrivateKey, theirPublicKey) { + await this.ensureLoaded(); + if (!(myPrivateKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 3 must be an instance of X25519SecretKey'); + } + if (!(theirPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 4 must be an instance of X25519PublicKey'); + } + ciphertext = await Util.toBuffer(ciphertext); + if (ciphertext.length < 16) { + throw new SodiumError('Ciphertext must be a buffer of at least 16 bytes'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + return this.backend.crypto_box_open( + ciphertext, + nonce, + myPrivateKey, + theirPublicKey + ); + } + + /** + * @return {Promise} + */ + async crypto_box_keypair() { + await this.ensureLoaded(); + return this.backend.crypto_box_keypair(); + } + + /** + * Combine two X25519 keys (secret, public) into a keypair object. + * + * @param {X25519SecretKey} sKey + * @param {X25519PublicKey} pKey + * @return {Promise} + */ + async crypto_box_keypair_from_secretkey_and_publickey(sKey, pKey) { + await this.ensureLoaded(); + if (!(sKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + if (!(pKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + return await this.backend.crypto_box_keypair_from_secretkey_and_publickey(sKey, pKey); + } + + /** + * Extract the secret key from an X25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_box_secretkey(keypair) { + if (keypair.getLength()!== 64) { + throw new SodiumError('Keypair must be 64 bytes'); + } + return new X25519SecretKey( + Buffer.from(keypair.getBuffer().slice(0, 32)) + ); + } + + /** + * Extract the public key from an X25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_box_publickey(keypair) { + if (keypair.getLength() !== 64) { + throw new SodiumError('Keypair must be 64 bytes'); + } + return new X25519PublicKey( + Buffer.from(keypair.getBuffer().slice(32, 64)) + ); + } + + /** + * Derive the public key from a given X25519 secret key. + * + * @param {X25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_box_publickey_from_secretkey(secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + return new X25519PublicKey( + await this.backend.crypto_scalarmult_base(secretKey) + ); + } + + /** + * Anonymous public-key encryption. (Message integrity is still assured.) + * + * @param {string|Buffer} plaintext + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_box_seal(plaintext, publicKey) { + await this.ensureLoaded(); + if (!(publicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + return await this.backend.crypto_box_seal(plaintext, publicKey); + } + + /** + * Anonymous public-key decryption. (Message integrity is still assured.) + * + * @param {Buffer} ciphertext + * @param {X25519PublicKey} publicKey + * @param {X25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_box_seal_open(ciphertext, publicKey, secretKey) { + await this.ensureLoaded(); + if (!(publicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 3 must be an instance of X25519SecretKey'); + } + return await this.backend.crypto_box_seal_open( + await Util.toBuffer(ciphertext), + publicKey, + secretKey + ); + } + + /** + * Generic-purpose cryptographic hash. + * + * @param {string|Buffer} message + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash(message, key = null, outputLength = 32) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash(message, key, outputLength); + } + + /** + * Initialize a BLAKE2 hash context for stream hashing. + * + * @param {CryptographyKey|null} key + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_init(key = null, outputLength = 32) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash_init(key, outputLength); + } + + + /** + * Update the BLAKE2 hash state with a block of data. + * + * @param {*} state + * @param {string|Buffer} message + * @return {Promise<*>} + */ + async crypto_generichash_update(state, message) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash_update(state, message); + } + + /** + * Obtain the final BLAKE2 hash output. + * + * @param {*} state + * @param {number} outputLength + * @return {Promise} + */ + async crypto_generichash_final(state, outputLength = 32) { + await this.ensureLoaded(); + return await this.backend.crypto_generichash_final(state, outputLength); + } + + /** + * Generate a 256-bit random key for BLAKE2. + * + * @return {Promise} + */ + async crypto_generichash_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_GENERICHASH_KEYBYTES) + ); + } + + /** + * Derive a subkey from a master key. + * + * @param {number} length + * @param {number} subKeyId + * @param {string|Buffer} context + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_kdf_derive_from_key(length, subKeyId, context, key) { + await this.ensureLoaded(); + if (length < 1) { + throw new SodiumError('Length must be a positive integer.'); + } + if (subKeyId < 0) { + throw new SodiumError('Key ID must be an unsigned integer'); + } + return await this.backend.crypto_kdf_derive_from_key( + length, + subKeyId, + context, + key + ); + } + + /** + * Generate a 256-bit random key for our KDF. + * + * @return {Promise} + */ + async crypto_kdf_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_KDF_KEYBYTES) + ); + } + + /** + * This is functionally identical to crypto_box_keypair(). + * + * @return {Promise} + */ + async crypto_kx_keypair() { + return this.crypto_box_keypair(); + } + + /** + * Generate an X25519 keypair from a seed. + * + * @param {string|Buffer} seed + * @return {Promise} + */ + async crypto_kx_seed_keypair(seed) { + await this.ensureLoaded(); + const sk = await this.backend.crypto_generichash(seed, null, this.CRYPTO_KX_SECRETKEYBYTES); + const pk = await this.backend.crypto_scalarmult_base(new CryptographyKey(sk)); + return new CryptographyKey(Buffer.concat([sk, pk])); + } + + /** + * Perform a key exchange from the client's perspective. + * + * Returns an array of two CryptographyKey objects. + * + * The first is meant for data sent from the server to the client (incoming decryption). + * The second is meant for data sent from the client to the server (outgoing encryption). + * + * @param {X25519PublicKey} clientPublicKey + * @param {X25519SecretKey} clientSecretKey + * @param {X25519PublicKey} serverPublicKey + * @return {Promise} + */ + async crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey) { + await this.ensureLoaded(); + if (!(clientPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 1 must be an instance of X25519PublicKey'); + } + if (!(clientSecretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of X25519SecretKey'); + } + if (!(serverPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 3 must be an instance of X25519PublicKey'); + } + return this.backend.crypto_kx_client_session_keys(clientPublicKey, clientSecretKey, serverPublicKey); + } + + /** + * Perform a key exchange from the server's perspective. + * + * Returns an array of two CryptographyKey objects. + * + * The first is meant for data sent from the client to the server (incoming decryption). + * The second is meant for data sent from the server to the client (outgoing encryption). + * + * @param {X25519PublicKey} serverPublicKey + * @param {X25519SecretKey} serverSecretKey + * @param {X25519PublicKey} clientPublicKey + * @return {Promise} + */ + async crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey) { + await this.ensureLoaded(); + if (!(serverPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 1 must be an instance of X25519PublicKey'); + } + if (!(serverSecretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of X25519SecretKey'); + } + if (!(clientPublicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 3 must be an instance of X25519PublicKey'); + } + return this.backend.crypto_kx_server_session_keys(serverPublicKey, serverSecretKey, clientPublicKey); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_onetimeauth(message, key) { + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + return await this.backend.crypto_onetimeauth(await Util.toBuffer(message), key); + } + + /** + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @param {Buffer} tag + * @return {Promise} + */ + async crypto_onetimeauth_verify(message, key, tag) { + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Argument 2 must be an instance of CryptographyKey'); + } + return await this.backend.crypto_onetimeauth_verify( + await Util.toBuffer(message), + key, + await Util.toBuffer(tag) + ); + } + + /** + * @return {Promise} + */ + async crypto_onetimeauth_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(32) + ); + } + + /** + * Derive a cryptography key from a password and salt. + * + * @param {number} length + * @param {string|Buffer} password + * @param {Buffer} salt + * @param {number} opslimit + * @param {number} memlimit + * @param {number|null} algorithm + * @return {Promise} + */ + async crypto_pwhash(length, password, salt, opslimit, memlimit, algorithm = null) { + await this.ensureLoaded(); + /* istanbul ignore if */ + if (!algorithm) { + algorithm = this.CRYPTO_PWHASH_ALG_DEFAULT; + } + return new CryptographyKey( + await this.backend.crypto_pwhash( + length, + await Util.toBuffer(password), + await Util.toBuffer(salt), + opslimit, + memlimit, + algorithm + ) + ); + } + + /** + * Get a password hash (in a safe-for-storage format) + * + * @param {string|Buffer} password + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str(password, opslimit, memlimit) { + await this.ensureLoaded(); + return await this.backend.crypto_pwhash_str(password, opslimit, memlimit); + } + + /** + * Verify a password against a known password hash + * + * @param {string|Buffer} password + * @param {string|Buffer} hash + * @return {Promise} + */ + async crypto_pwhash_str_verify(password, hash) { + await this.ensureLoaded(); + return await this.backend.crypto_pwhash_str_verify(password, hash); + } + + /** + * Does this password need to be rehashed? + * + * @param {string|Buffer} hash + * @param {number} opslimit + * @param {number} memlimit + * @return {Promise} + */ + async crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit) { + await this.ensureLoaded(); + return await this.backend.crypto_pwhash_str_needs_rehash(hash, opslimit, memlimit); + } + + /** + * Elliptic Curve Diffie-Hellman key exchange + * + * @param {X25519SecretKey} secretKey + * @param {X25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_scalarmult(secretKey, publicKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + if (!(publicKey instanceof X25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of X25519PublicKey'); + } + return await this.backend.crypto_scalarmult(secretKey, publicKey); + } + + /** + * Generate an X25519PublicKey from an X25519SecretKey + * + * @param {X25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_scalarmult_base(secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof X25519SecretKey)) { + throw new TypeError('Argument 1 must be an instance of X25519SecretKey'); + } + return new X25519PublicKey( + await this.backend.crypto_scalarmult_base(secretKey) + ); + } + + /** + * Shared-key authenticated encryption + * + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox(plaintext, nonce, key) { + await this.ensureLoaded(); + if (key.isEd25519Key() || key.isX25519Key()) { + throw new TypeError('Argument 3 must not be an asymmetric key'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + + return await this.backend.crypto_secretbox( + plaintext, + nonce, + key + ); + } + + /** + * Shared-key authenticated decryption + * + * @param {Buffer} ciphertext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretbox_open(ciphertext, nonce, key) { + await this.ensureLoaded(); + if (key.isEd25519Key() || key.isX25519Key()) { + throw new TypeError('Argument 3 must not be an asymmetric key'); + } + ciphertext = await Util.toBuffer(ciphertext); + if (ciphertext.length < 16) { + throw new SodiumError('Ciphertext must be a buffer of at least 16 bytes'); + } + nonce = await Util.toBuffer(nonce); + if (nonce.length !== 24) { + throw new SodiumError('Nonce must be a buffer of exactly 24 bytes'); + } + return await this.backend.crypto_secretbox_open( + ciphertext, + nonce, + key + ); + } + + /** + * Generate a key for shared-key authenticated encryption. + * + * @return {Promise} + */ + async crypto_secretbox_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_SECRETBOX_KEYBYTES) + ); + } + + /** + * Internalize the internal state and a random header for stream encryption. + * + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_init_push(key) { + await this.ensureLoaded(); + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Key must be an instance of CryptographyKey'); + } + if (key.getLength() !== 32) { + throw new SodiumError('crypto_secretstream keys must be 32 bytes long'); + } + const [state, header] = await this.backend.crypto_secretstream_xchacha20poly1305_init_push(key); + return Object.freeze({ + header: header, + push: this.crypto_secretstream_xchacha20poly1305_push.bind(this, state), + rekey: this.crypto_secretstream_xchacha20poly1305_rekey.bind(this, state) + }); + } + + /** + * Initialize the internal state for stream decryption. + * + * @param {Buffer} header + * @param {CryptographyKey} key + * @return {Promise<*>} + */ + async crypto_secretstream_xchacha20poly1305_init_pull(key, header) { + await this.ensureLoaded(); + header = await Util.toBuffer(header); + if (header.length !== 24) { + throw new SodiumError('crypto_secretstream headers must be 24 bytes long'); + } + if (!(key instanceof CryptographyKey)) { + throw new TypeError('Key must be an instance of CryptographyKey'); + } + if (key.getLength() !== 32) { + throw new SodiumError('crypto_secretstream keys must be 32 bytes long'); + } + const state = await this.backend.crypto_secretstream_xchacha20poly1305_init_pull(header, key); + return Object.freeze({ + pull: this.crypto_secretstream_xchacha20poly1305_pull.bind(this, state) + }); + } + + /** + * Stream encryption. + * + * @param {*} state + * @param {string|Buffer} message + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_push(state, message, ad = '', tag = 0) { + await this.ensureLoaded(); + return this.backend.crypto_secretstream_xchacha20poly1305_push(state, message, ad, tag); + } + + /** + * Stream decryption. + * + * @param {*} state + * @param {Buffer} ciphertext + * @param {string|Buffer} ad + * @param {number} tag + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad = '', tag = 0) { + await this.ensureLoaded(); + return this.backend.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad, tag); + } + + /** + * Deterministic rekeying. + * + * @param {*} state + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_rekey(state) { + await this.ensureLoaded(); + await this.backend.crypto_secretstream_xchacha20poly1305_rekey(state); + } + + /** + * Generate a key for shared-key authenticated encryption. + * + * @return {Promise} + */ + async crypto_secretstream_xchacha20poly1305_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES) + ); + } + + /** + * Calculate a fast hash for short inputs. + * + * Algorithm: SipHash-2-4 + * + * @param {string|Buffer} message + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_shorthash(message, key) { + await this.ensureLoaded(); + return await this.backend.crypto_shorthash(await Util.toBuffer(message), key); + } + + /** + * @return {Promise} + */ + async crypto_shorthash_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_SHORTHASH_KEYBYTES) + ); + } + + /** + * Returns a signed message. + * + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign(message, secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof Ed25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519SecretKey'); + } + return this.backend.crypto_sign(message, secretKey); + } + + /** + * Given a signed message, verify the Ed25519 signature. If it matches, return the + * bare message (no signature). + * + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @return {Promise} + */ + async crypto_sign_open(message, publicKey) { + await this.ensureLoaded(); + if (!(publicKey instanceof Ed25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519PublicKey'); + } + return this.backend.crypto_sign_open(message, publicKey); + } + + /** + * Returns the Ed25519 signature of the message, for the given secret key. + * + * @param {string|Buffer} message, + * @param {Ed25519SecretKey} secretKey + * @return {Promise} + */ + async crypto_sign_detached(message, secretKey) { + await this.ensureLoaded(); + if (!(secretKey instanceof Ed25519SecretKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519SecretKey'); + } + return this.backend.crypto_sign_detached(message, secretKey); + } + + /** + * Returns true if the Ed25519 signature is valid for a given message and public key. + * + * @param {string|Buffer} message, + * @param {Ed25519PublicKey} publicKey + * @param {Buffer} signature + * @return {Promise} + */ + async crypto_sign_verify_detached(message, publicKey, signature) { + await this.ensureLoaded(); + if (!(publicKey instanceof Ed25519PublicKey)) { + throw new TypeError('Argument 2 must be an instance of Ed25519PublicKey'); + } + return this.backend.crypto_sign_verify_detached(message, publicKey, signature); + } + + /** + * Extract the secret key from an Ed25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_sign_secretkey(keypair) { + if (keypair.getLength() !== 96) { + throw new SodiumError('Keypair must be 96 bytes'); + } + return new Ed25519SecretKey( + await Util.toBuffer( + keypair.getBuffer().slice(0, 64) + ) + ); + } + + /** + * Extract the public key from an Ed25519 keypair object. + * + * @param {CryptographyKey} keypair + * @return {Promise} + */ + async crypto_sign_publickey(keypair) { + if (keypair.getLength() !== 96) { + throw new SodiumError('Keypair must be 96 bytes'); + } + return new Ed25519PublicKey( + keypair.getBuffer().slice(64, 96) + ); + } + + /** + * Generate an Ed25519 keypair object. + * + * @return {Promise} + */ + async crypto_sign_keypair() { + await this.ensureLoaded(); + return this.backend.crypto_sign_keypair(); + } + + /** + * Generate an Ed25519 keypair object from a seed. + * + * @param {Buffer} seed + * @return {Promise} + */ + async crypto_sign_seed_keypair(seed) { + await this.ensureLoaded(); + if (seed instanceof CryptographyKey) { + seed = seed.getBuffer(); + } + seed = await Util.toBuffer(seed); + if (seed.length !== 32) { + throw new SodiumError(`Seed must be 32 bytes long; got ${seed.length}`); + } + return this.backend.crypto_sign_seed_keypair(seed); + } + + /** + * Obtain a birationally equivalent X25519 secret key, + * given an Ed25519 secret key. + * + * @param {Ed25519SecretKey} sk + * @return {Promise} + */ + async crypto_sign_ed25519_sk_to_curve25519(sk) { + await this.ensureLoaded(); + return new X25519SecretKey( + await this.backend.crypto_sign_ed25519_sk_to_curve25519(sk) + ); + } + + /** + * Obtain a birationally equivalent X25519 public key, + * given an Ed25519 public key. + * + * @param {Ed25519PublicKey} pk + * @return {Promise} + */ + async crypto_sign_ed25519_pk_to_curve25519(pk) { + await this.ensureLoaded(); + return new X25519PublicKey( + await this.backend.crypto_sign_ed25519_pk_to_curve25519(pk) + ); + } + + /** + * Generate an arbitrary number of pseudorandom bytes from a given + * nonce and key. + * + * @param {number} length + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream(length, nonce, key) { + await this.ensureLoaded(); + return this.backend.crypto_stream(length, nonce, key); + } + + /** + * Encrypts a string (without authentication). + * + * @param {string|Buffer} plaintext + * @param {Buffer} nonce + * @param {CryptographyKey} key + * @return {Promise} + */ + async crypto_stream_xor(plaintext, nonce, key) { + await this.ensureLoaded(); + return this.backend.crypto_stream_xor(plaintext, nonce, key); + } + /** + * Generate a key for stream ciphers. + * + * @return {Promise} + */ + async crypto_stream_keygen() { + return new CryptographyKey( + await this.backend.randombytes_buf(this.CRYPTO_STREAM_KEYBYTES) + ); + } + + /** + * Returns a buffer filled with random bytes. + * + * @param {number} num + * @return {Promise} + */ + async randombytes_buf(num) { + await this.ensureLoaded(); + return await this.backend.randombytes_buf(num); + } + + /** + * Generate an integer between 0 and upperBound (non-inclusive). + * + * For example, randombytes_uniform(10) returns an integer between 0 and 9. + * + * @param {number} upperBound + * @return {Promise} + */ + async randombytes_uniform(upperBound) { + await this.ensureLoaded(); + return this.backend.randombytes_uniform(upperBound); + } + + /** + * Add two buffers (little-endian). Returns the value. + * + * @param {Buffer} val + * @param {Buffer} addv + * @return {Promise} + */ + async sodium_add(val, addv) { + await this.ensureLoaded(); + return await this.backend.sodium_add( + await Util.toBuffer(val), + await Util.toBuffer(addv) + ); + } + + /** + * Convert to hex. + * + * @param {Buffer} decoded + * @return {Promise} + */ + async sodium_bin2hex(decoded) { + await this.ensureLoaded(); + return this.backend.sodium_bin2hex(decoded); + } + + /** + * Compare two buffers in constant time. + * + * Returns -1 if b1 is less than b2. + * Returns 1 if b1 is greater than b2. + * Returns 0 if b1 is equal to b2. + * + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_compare(b1, b2) { + await this.ensureLoaded(); + return this.backend.sodium_compare(b1, b2); + } + /** + * Convert to hex. + * + * @param {Buffer|string} encoded + * @return {Promise} + */ + async sodium_hex2bin(encoded) { + await this.ensureLoaded(); + return this.backend.sodium_hex2bin(encoded); + } + + /** + * Increment a buffer (little endian). Overwrites the buffer in-place. + * + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_increment(buf) { + await this.ensureLoaded(); + return this.backend.sodium_increment(buf); + } + + /** + * Returns true if the buffer is zero. + * + * @param {Buffer} buf + * @param {number} len + * @return {Promise} + */ + async sodium_is_zero(buf, len) { + await this.ensureLoaded(); + return this.backend.sodium_is_zero(buf, len); + } + + /** + * Timing-safe buffer comparison. + * + * @param {Buffer} b1 + * @param {Buffer} b2 + * @return {Promise} + */ + async sodium_memcmp(b1, b2) { + await this.ensureLoaded(); + return this.backend.sodium_memcmp(b1, b2); + } + + /** + * Zero out a buffer. Overwrites the buffer in-place. + * + * @param {Buffer} buf + * @return {Promise} + */ + async sodium_memzero(buf) { + await this.ensureLoaded(); + await this.backend.sodium_memzero(buf); + } + + /** + * Pad a string. + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_pad(buf, blockSize) { + await this.ensureLoaded(); + return this.backend.sodium_pad(buf, blockSize); + } + + /** + * Unpad a string. + * + * @param {string|Buffer} buf + * @param {number} blockSize + * @return {Promise} + */ + async sodium_unpad(buf, blockSize) { + await this.ensureLoaded(); + return this.backend.sodium_unpad(buf, blockSize); + } +} + +module.exports = SodiumPlus; diff --git a/library/sodium-plus/lib/util.js b/library/sodium-plus/lib/util.js new file mode 100644 index 000000000..e19030d0e --- /dev/null +++ b/library/sodium-plus/lib/util.js @@ -0,0 +1,133 @@ +"use strict"; + +/* istanbul ignore if */ +if (typeof (Buffer) === 'undefined') { + let Buffer = require('buffer/').Buffer; +} + +const arrayToBuffer = require('typedarray-to-buffer'); + +module.exports = class Util +{ + static async cloneBuffer(buf) { + return Buffer.from(buf); + } + + /** + * Define the sodium constants + * + * @param {object} anyobject + * @return {object} + */ + static populateConstants(anyobject) { + anyobject.LIBRARY_VERSION_MAJOR = 10; + anyobject.LIBRARY_VERSION_MINOR = 2; + anyobject.VERSION_STRING = '1.0.17'; + anyobject.BASE64_VARIANT_ORIGINAL = 1; + anyobject.BASE64_VARIANT_ORIGINAL_NO_PADDING = 3; + anyobject.BASE64_VARIANT_URLSAFE = 5; + anyobject.BASE64_VARIANT_URLSAFE_NO_PADDING = 7; + anyobject.CRYPTO_AEAD_AES256GCM_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_AES256GCM_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12; + anyobject.CRYPTO_AEAD_AES256GCM_ABYTES = 16; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = 16; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = 12; + anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = 16; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES = 32; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES = 0; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES = 24; + anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES = 16; + anyobject.CRYPTO_AUTH_BYTES = 32; + anyobject.CRYPTO_AUTH_KEYBYTES = 32; + anyobject.CRYPTO_BOX_SEALBYTES = 16; + anyobject.CRYPTO_BOX_SECRETKEYBYTES = 32; + anyobject.CRYPTO_BOX_PUBLICKEYBYTES = 32; + anyobject.CRYPTO_BOX_KEYPAIRBYTES = 64; + anyobject.CRYPTO_BOX_MACBYTES = 16; + anyobject.CRYPTO_BOX_NONCEBYTES = 24; + anyobject.CRYPTO_BOX_SEEDBYTES = 32; + anyobject.CRYPTO_KDF_BYTES_MIN = 16; + anyobject.CRYPTO_KDF_BYTES_MAX = 64; + anyobject.CRYPTO_KDF_CONTEXTBYTES = 8; + anyobject.CRYPTO_KDF_KEYBYTES = 32; + anyobject.CRYPTO_KX_BYTES = 32; + anyobject.CRYPTO_KX_PRIMITIVE = 'x25519blake2b'; + anyobject.CRYPTO_KX_SEEDBYTES = 32; + anyobject.CRYPTO_KX_KEYPAIRBYTES = 64; + anyobject.CRYPTO_KX_PUBLICKEYBYTES = 32; + anyobject.CRYPTO_KX_SECRETKEYBYTES = 32; + anyobject.CRYPTO_KX_SESSIONKEYBYTES = 32; + anyobject.CRYPTO_GENERICHASH_BYTES = 32; + anyobject.CRYPTO_GENERICHASH_BYTES_MIN = 16; + anyobject.CRYPTO_GENERICHASH_BYTES_MAX = 64; + anyobject.CRYPTO_GENERICHASH_KEYBYTES = 32; + anyobject.CRYPTO_GENERICHASH_KEYBYTES_MIN = 16; + anyobject.CRYPTO_GENERICHASH_KEYBYTES_MAX = 64; + anyobject.CRYPTO_GENERICHASH_STATEBYTES = 384; + anyobject.CRYPTO_PWHASH_SALTBYTES = 16; + anyobject.CRYPTO_PWHASH_STRPREFIX = '$argon2id$'; + anyobject.CRYPTO_PWHASH_ALG_ARGON2I13 = 1; + anyobject.CRYPTO_PWHASH_ALG_ARGON2ID13 = 2; + anyobject.CRYPTO_PWHASH_ALG_DEFAULT = anyobject.CRYPTO_PWHASH_ALG_ARGON2ID13; + anyobject.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE = 2; + anyobject.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 67108864; + anyobject.CRYPTO_PWHASH_OPSLIMIT_MODERATE = 3; + anyobject.CRYPTO_PWHASH_MEMLIMIT_MODERATE = 268435456; + anyobject.CRYPTO_PWHASH_OPSLIMIT_SENSITIVE = 4; + anyobject.CRYPTO_PWHASH_MEMLIMIT_SENSITIVE = 1073741824; + anyobject.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES = 32; + anyobject.CRYPTO_SCALARMULT_BYTES = 32; + anyobject.CRYPTO_SCALARMULT_SCALARBYTES = 32; + anyobject.CRYPTO_SHORTHASH_BYTES = 8; + anyobject.CRYPTO_SHORTHASH_KEYBYTES = 16; + anyobject.CRYPTO_SECRETBOX_KEYBYTES = 32; + anyobject.CRYPTO_SECRETBOX_MACBYTES = 16; + anyobject.CRYPTO_SECRETBOX_NONCEBYTES = 24; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES = 52; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3; + anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80; + anyobject.CRYPTO_SIGN_BYTES = 64; + anyobject.CRYPTO_SIGN_SEEDBYTES = 32; + anyobject.CRYPTO_SIGN_PUBLICKEYBYTES = 32; + anyobject.CRYPTO_SIGN_SECRETKEYBYTES = 64; + anyobject.CRYPTO_SIGN_KEYPAIRBYTES = 96; + anyobject.CRYPTO_STREAM_KEYBYTES = 32; + anyobject.CRYPTO_STREAM_NONCEBYTES = 24; + return anyobject; + } + + /** + * Coerce input to a Buffer, throwing a TypeError if it cannot be coerced. + * + * @param {string|Buffer|Uint8Array|Promise} stringOrBuffer + * @returns {Buffer} + */ + static async toBuffer(stringOrBuffer) + { + if (Buffer.isBuffer(stringOrBuffer)) { + return stringOrBuffer; + } else if (stringOrBuffer === null) { + return null; + } else if (typeof(stringOrBuffer) === 'string') { + return Buffer.from(stringOrBuffer, 'binary'); + } else if (stringOrBuffer instanceof Uint8Array) { + return arrayToBuffer(stringOrBuffer); + } else if (stringOrBuffer instanceof Promise) { + return await stringOrBuffer; + } else { + throw new TypeError('Invalid type; string or buffer expected'); + } + } +}; diff --git a/library/sodium-plus/package.json b/library/sodium-plus/package.json new file mode 100644 index 000000000..7b697253d --- /dev/null +++ b/library/sodium-plus/package.json @@ -0,0 +1,64 @@ +{ + "name": "sodium-plus", + "version": "0.9.0", + "description": "The Sodium Cryptography Library", + "author": "Paragon Initiative Enterprises, LLC", + "license": "ISC", + "keywords": [ + "easy-to-use", + "libsodium", + "sodium", + "cryptography", + "cryptography library", + "elliptic curve cryptography", + "ecdh", + "eddsa", + "diffie-hellman", + "authentication", + "encryption", + "digital signatures", + "signatures", + "curve25519", + "ed25519", + "x25519", + "xsalsa20poly1305", + "xchacha20", + "poly1305" + ], + "peerDependencies": { + "sodium-native": "^3.2.0" + }, + "dependencies": { + "buffer": "^5.6.0", + "libsodium-wrappers": "^0.7.6", + "poly1305-js": "^0.4.2", + "typedarray-to-buffer": "^3.1.5", + "xsalsa20": "^1.1.0" + }, + "repository": "https://github.com/paragonie/sodium-plus", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "build", + "build.sh", + "dist/sodium-plus.js", + "dist/sodium-plus.min.js", + "index.d.ts", + "index.js", + "lib/" + ], + "scripts": { + "test": "mocha", + "parallel-test": "mocha-parallel-tests" + }, + "devDependencies": { + "@types/node": "^14.0.24", + "assert": "^2.0.0", + "browserify": "^16.5.1", + "chai": "^4.2.0", + "mkdirp": "^1.0.4", + "mocha-parallel-tests": "^2.3.0", + "mocha": "^8.0.1", + "tinyify": "^2.5.2" + } +} diff --git a/library/sodium-plus/test/async-helper.js b/library/sodium-plus/test/async-helper.js new file mode 100644 index 000000000..d3b5ebc00 --- /dev/null +++ b/library/sodium-plus/test/async-helper.js @@ -0,0 +1,13 @@ +const { expect } = require('chai'); +module.exports = async function expectError(promised, message) { + let thrown = false; + try { + await promised; + } catch (e) { + thrown = true; + expect(message).to.be.equal(e.message); + } + if (!thrown) { + throw new Error('Function did not throw'); + } +}; diff --git a/library/sodium-plus/test/backend-test.js b/library/sodium-plus/test/backend-test.js new file mode 100644 index 000000000..f7105775c --- /dev/null +++ b/library/sodium-plus/test/backend-test.js @@ -0,0 +1,37 @@ +const { describe, it } = require('mocha'); +const { expect } = require('chai'); +const { SodiumPlus, X25519SecretKey, X25519PublicKey } = require('../index'); + +let sodium; +describe('Backend', () => { + it('crypto_box_keypair_from_secretkey_and_publickey', async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let a = Buffer.alloc(32); + let b = Buffer.alloc(32); + let c = Buffer.alloc(31); + + let d = await sodium.crypto_box_keypair_from_secretkey_and_publickey( + new X25519SecretKey(a), + new X25519PublicKey(b) + ); + expect(64).to.be.equal(d.buffer.length); + + expect(() => { + sodium.crypto_box_keypair_from_secretkey_and_publickey( + new X25519SecretKey(c), + new X25519PublicKey(b) + ) + .then(() => {}) + .catch((e) => { throw e }); + }).to.throw('X25519 secret keys must be 32 bytes long'); + + expect(() => { + sodium.crypto_box_keypair_from_secretkey_and_publickey( + new X25519SecretKey(a), + new X25519PublicKey(c) + ) + .then(() => {}) + .catch((e) => { throw e }); + }).to.throw('X25519 public keys must be 32 bytes long'); + }); +}); \ No newline at end of file diff --git a/library/sodium-plus/test/cryptography-key-test.js b/library/sodium-plus/test/cryptography-key-test.js new file mode 100644 index 000000000..5dd45d716 --- /dev/null +++ b/library/sodium-plus/test/cryptography-key-test.js @@ -0,0 +1,83 @@ +const assert = require('assert'); +const crypto = require('crypto'); +const { describe, it } = require('mocha'); +const { expect } = require('chai'); +const { + CryptographyKey, + Ed25519PublicKey, + Ed25519SecretKey, + X25519PublicKey, + X25519SecretKey +} = require('../index'); + +let sodium; +describe('CryptographyKey', () => { + it('Internal buffer is hidden from stack traces and iterators', async () => { + let bytes = await crypto.randomBytes(32); + let key = new CryptographyKey(bytes); + assert(Object.keys(key).length === 0, 'There should be no keys when you dump an object!'); + expect(bytes.toString('hex')).to.be.equals(key.getBuffer().toString('hex')); + expect(bytes.toString('hex')).to.be.equals(key.toString('hex')); + }); + it('constructor rejects invalid types', async () => { + let bytes = await crypto.randomBytes(32); + let key = new CryptographyKey(bytes); + // For test coverage + expect(bytes.toString('hex')).to.be.equal(key.slice().toString('hex')); + expect(false).to.be.equal(key.isPublicKey()); + }); + it('constructor rejects invalid types', () => { + expect(() => { + new CryptographyKey(new Uint8Array(32)) + }).to.throw('Argument 1 must be an instance of Buffer.'); + }); + + it('from()', async () => { + let key = CryptographyKey.from('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f', 'hex'); + expect(key.getBuffer().toString('hex')).to.be.equals('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f'); + + let ed25519sk = Ed25519SecretKey.from( + '88c6102ed8b3278ae7e95ebcd4ed3f1a513d2fd3c1a88f5ecbda5f95209ce709' + + '324095af3d25e0f205d1a1297d01e810940063d05fc247d2042f6fc2f98a55c2', + 'hex' + ); + expect(ed25519sk instanceof Ed25519SecretKey).to.be.equals(true); + let ed25519pk = Ed25519PublicKey.from( + '324095af3d25e0f205d1a1297d01e810940063d05fc247d2042f6fc2f98a55c2', + 'hex' + ); + expect(ed25519pk instanceof Ed25519PublicKey).to.be.equals(true); + let x25519sk = X25519SecretKey.from( + 'fcb38e648f61e145c96be1a89776754b0a2e28ba57d3024ecae892dc5d93ec26', + 'hex' + ); + expect(x25519sk instanceof X25519SecretKey).to.be.equals(true); + let x25519pk = X25519PublicKey.from( + '81149890dc709032327ab8d2628df8c0c8163f59bbb92a6fc3a83cb34864d503', + 'hex' + ); + expect(x25519pk instanceof X25519PublicKey).to.be.equals(true); + + expect(ed25519sk.isPublicKey()).to.be.equals(false); + expect(ed25519pk.isPublicKey()).to.be.equals(true); + expect(ed25519sk.isEd25519Key()).to.be.equals(true); + expect(ed25519pk.isEd25519Key()).to.be.equals(true); + expect(ed25519sk.isX25519Key()).to.be.equals(false); + expect(ed25519pk.isX25519Key()).to.be.equals(false); + + expect(x25519sk.isPublicKey()).to.be.equals(false); + expect(x25519pk.isPublicKey()).to.be.equals(true); + expect(x25519sk.isEd25519Key()).to.be.equals(false); + expect(x25519pk.isEd25519Key()).to.be.equals(false); + expect(x25519sk.isX25519Key()).to.be.equals(true); + expect(x25519pk.isX25519Key()).to.be.equals(true); + + expect(() => { + new Ed25519SecretKey(Buffer.alloc(32)) + }).to.throw('Ed25519 secret keys must be 64 bytes long'); + + expect(() => { + new Ed25519PublicKey(Buffer.alloc(64)) + }).to.throw('Ed25519 public keys must be 32 bytes long'); + }); +}); diff --git a/library/sodium-plus/test/longtext.md b/library/sodium-plus/test/longtext.md new file mode 100644 index 000000000..3dff068bb --- /dev/null +++ b/library/sodium-plus/test/longtext.md @@ -0,0 +1,135 @@ + + +It's been more than eight years since [Javascript Cryptography Considered Harmful](https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/javascript-cryptography-considered-harmful) was published. + +It's just as true today as it was eight years ago that JavaScript cryptography in a web browser is dangerous. **But the *ecosystem* itself has changed immensely in this time.** + +## JavaScript Cryptography, Considered + +Between the continued rise in popularity of JavaScript frameworks (e.g. React) and the prevalence of cross-platform development tools (Cordova, Electron), it's now possible to write JavaScript code once and deploy it on a web server, in a webpage, in a browser extension, in a native mobile app, and in desktop software... with no changes to your JavaScript code. + +Despite eight years of transformative change to the programming landscape, the JavaScript ecosystem has been severely neglected by the security industry, especially with regards to usable cryptography. + + + +## What PIE Has Already Done for JavaScript Cryptography + +### Sodium-Plus - A Positive Experience for JS Cryptography + +This month we released [Sodium-Plus](https://github.com/paragonie/sodium-plus), a pluggable, cross-platform, type-safe interface for libsodium to make it easier to write safe and secure JavaScript cryptography code. Our initial announcement was [posted on dev.to](https://dev.to/paragonie/sodium-plus-a-positive-cryptography-experience-for-javascript-developers-2p08). + +To be clear: This isn't a new libsodium binding. What sodium-plus does is wrap one of the existing bindings (e.g. [sodium-native](https://github.com/paragonie/sodium-plus)) and—regardless of how unpleasant the low-level binding's API is to work with—lets you interact with it using a sane and simple asynchronous API. + +Instead of writing code like this: + +
const sodium = require('sodium-native');
+
+// Key generation
+let aliceSecret = Buffer.alloc(32);
+let alicePublic = Buffer.alloc(32);
+let bobSecret = Buffer.alloc(32);
+let bobPublic = Buffer.alloc(32);
+sodium.crypto_box_keypair(alicePublic, aliceSecret);
+sodium.crypto_box_keypair(bobPublic, bobSecret);
+
+// Nonce
+let nonce = Buffer.alloc(24);
+sodium.randombytes_buf(nonce);
+
+// Plaintext
+let message = 'A string I want to encrypt.';
+let plaintext = Buffer.from(message);
+
+// Encrypt
+let ciphertext = Buffer.alloc(plaintext.length + 16);
+sodium.crypto_box_easy(ciphertext, plaintext, nonce, bobPublic, aliceSecret);
+console.log(ciphertext.toString('hex'));
+
+// Decrypt
+let decrypted = Buffer.alloc(ciphertext.length - 16);
+sodium.crypto_box_open_easy(decrypted, ciphertext, nonce, alicePublic, bobSecret);
+console.log(decrypted.toString());
+
+ +...you can just write this: + +
const { SodiumPlus } = require('sodium-plus');
+let sodium;
+
+(async function () {
+    if (!sodium) sodium = await SodiumPlus.auto();
+    let aliceKeypair = await sodium.crypto_box_keypair();
+        let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair);
+        let alicePublic = await sodium.crypto_box_publickey(aliceKeypair);
+    let bobKeypair = await sodium.crypto_box_keypair();
+        let bobSecret = await sodium.crypto_box_secretkey(bobKeypair);
+        let bobPublic = await sodium.crypto_box_publickey(bobKeypair);
+    
+    let nonce = await sodium.randombytes_buf(24);
+    let plaintext = 'Your message goes here';
+    let ciphertext = await sodium.crypto_box(plaintext, nonce, aliceSecret, bobPublic);    
+    console.log(ciphertext.toString('hex'));
+
+    let decrypted = await sodium.crypto_box_open(ciphertext, nonce, bobSecret, alicePublic);
+    console.log(decrypted.toString());
+})();
+
+ +The second snippet works in browsers, browser extensions, mobile apps, desktop apps, and webservers, without requiring a C compiler be integrated into your JavaScript toolkit. + +By default, Sodium-Plus uses [libsodium-wrappers](https://github.com/jedisct1/libsodium.js). However, if sodium-native is installed, it will opportunistically use that first, since sodium-native offers much better performance. + +One of the many features included in Sodium-Plus is type-safety with cryptography keys. An `Ed25519SecretKey` cannot be used by `crypto_box()`, only by `crypto_sign()`. This prevents a whole host of usage mistakes that passing around bare `Buffer` objects cannot prevent. + +Check out [the Sodium-Plus documentation](https://github.com/paragonie/sodium-plus/tree/master/docs) for more information. + +### Certainty.js: CACert Management for JavaScript Projects + +We originally created [Certainty](https://paragonie.com/blog/2017/10/certainty-automated-cacert-pem-management-for-php-software) to solve the problem of "developers disabling SSL/TLS verification", which was in many cases actually a symptom of the "unreliable/outdated CACert bundle" problem. + +Until recently, there was no congruent means for auto-updating your CACert bundles for Node.js developers. So we decided to write [certainty.js](https://github.com/paragonie/certainty-js). + +
const {Certainty} = require('certainty-js');
+const http = require('request-promise-native');
+
+(async function () {
+    let options = {
+        'ca': await Certainty.getLatestCABundle('/path/to/directory'),
+        'uri': 'https://php-chronicle.pie-hosted.com/chronicle/lasthash',
+        'minVersion': 'TLSv1.2',
+        'strictSSL': true,
+        'timeout': 30000
+    };
+
+    // Send request...
+    console.log(await http.get(options));
+})();
+ +The next releases of Certainty.js will include the LocalCACertBuilder features from the PHP version, as well as a refactor to use `Sodium-Plus`. + +### CipherSweet.js + +Scenario: You need to encrypt some of your database fields, but you still need to use those fields in SELECT queries somehow. Is there a secure way to achieve this result without having to invoke a lot of new and experimental cryptography primitives? + +It turns out: Yes, you can. Our proposed implementation is called [CipherSweet](https://paragonie.com/blog/2019/01/ciphersweet-searchable-encryption-doesn-t-have-be-bitter). + +CipherSweet has already been ported from PHP to Node.js, with other languages coming soon. + +You can find [CipherSweet-js](https://github.com/paragonie/ciphersweet-js) on Github. The documentation is available [on our website](https://ciphersweet.paragonie.com/node.js). + +## Our Work Continues + +Like many other programming languages, JavaScript has its own needs and unique challenges. We +remain committed to improving the security and usability of the languages, frameworks, and tools developers want to use, and strive towards a more private and secure Internet for everyone. + +If your company relies on PHP or JavaScript code and needs expert assistance with solving cryptography problems in your application, [reach out to us](https://paragonie.com/contact). We [write code](https://paragonie.com/service/app-dev), [audit code](https://paragonie.com/service/code-review), and [offer consultation for security designs](https://paragonie.com/service/technology-consulting). diff --git a/library/sodium-plus/test/sodiumplus-pwhash-test.js b/library/sodium-plus/test/sodiumplus-pwhash-test.js new file mode 100644 index 000000000..1d2779fc4 --- /dev/null +++ b/library/sodium-plus/test/sodiumplus-pwhash-test.js @@ -0,0 +1,33 @@ +const { describe, it } = require('mocha'); +const { expect } = require('chai'); +const { SodiumPlus } = require('../index'); +const VERBOSE = false; + +let sodium; + +(async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + if (VERBOSE) { + console.log({ + 'libsodium-wrappers': sodium.isLibsodiumWrappers(), + 'sodium-native': sodium.isSodiumNative() + }); + } +})(); + +describe('SodiumPlus', () => { + it('crypto_pwhash', async function() { + this.timeout(0); + if (!sodium) sodium = await SodiumPlus.auto(); + let password = 'correct horse battery staple'; + let salt = Buffer.from('808182838485868788898a8b8c8d8e8f', 'hex'); + let hashed = await sodium.crypto_pwhash( + 16, + password, + salt, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + expect(hashed.toString('hex')).to.be.equals('720f95400220748a811bca9b8cff5d6e'); + }); +}); diff --git a/library/sodium-plus/test/sodiumplus-pwhashstr-test.js b/library/sodium-plus/test/sodiumplus-pwhashstr-test.js new file mode 100644 index 000000000..749d168f3 --- /dev/null +++ b/library/sodium-plus/test/sodiumplus-pwhashstr-test.js @@ -0,0 +1,53 @@ +const assert = require('assert'); +const { describe, it } = require('mocha'); +const { expect } = require('chai'); +const { SodiumPlus } = require('../index'); +const VERBOSE = false; + +let sodium; + +(async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + if (VERBOSE) { + console.log({ + 'libsodium-wrappers': sodium.isLibsodiumWrappers(), + 'sodium-native': sodium.isSodiumNative() + }); + } +})(); + +describe('SodiumPlus', () => { + it('SodiumPlus.crypto_pwhash_str', async function () { + this.timeout(0); + if (!sodium) sodium = await SodiumPlus.auto(); + let password = 'correct horse battery staple'; + let hashed = await sodium.crypto_pwhash_str( + password, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + assert(hashed); + assert(await sodium.crypto_pwhash_str_verify(password, hashed)); + assert(await sodium.crypto_pwhash_str_verify('incorrect password', hashed) === false); + + let needs; + needs = await sodium.crypto_pwhash_str_needs_rehash( + hashed, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + expect(needs).to.be.equals(false); + needs = await sodium.crypto_pwhash_str_needs_rehash( + hashed, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE + 1, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE + ); + expect(needs).to.be.equals(true); + needs = await sodium.crypto_pwhash_str_needs_rehash( + hashed, + sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, + sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE << 1 + ); + expect(needs).to.be.equals(true); + }); +}); \ No newline at end of file diff --git a/library/sodium-plus/test/sodiumplus-test.js b/library/sodium-plus/test/sodiumplus-test.js new file mode 100644 index 000000000..0009b252c --- /dev/null +++ b/library/sodium-plus/test/sodiumplus-test.js @@ -0,0 +1,732 @@ +const assert = require('assert'); +const expectError = require('./async-helper'); +const fsp = require('fs').promises; +const path = require('path'); +const { describe, it } = require('mocha'); +const { expect } = require('chai'); +const { CryptographyKey, SodiumPlus, X25519PublicKey, X25519SecretKey } = require('../index'); +const Util = require('../lib/util'); +const VERBOSE = false; + +let sodium; + +(async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + if (VERBOSE) { + console.log({ + 'libsodium-wrappers': sodium.isLibsodiumWrappers(), + 'sodium-native': sodium.isSodiumNative() + }); + } +})(); + +describe('SodiumPlus', () => { + it('ensureLoaded', async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + await sodium.ensureLoaded(); + expect('string').to.be.equal(typeof sodium.getBackendName()); + expect('boolean').to.be.equal(typeof sodium.isSodiumNative()); + expect('boolean').to.be.equal(typeof sodium.isLibsodiumWrappers()); + }); + + it('index.js', async () => { + const indexFile = require('../index'); + expect(typeof indexFile.getBackendObject()).to.be.equal('function'); + expect(typeof indexFile.getBackendObject('SodiumNative')).to.be.equal('function'); + expect(typeof indexFile.getBackendObject('LibsodiumWrappers')).to.be.equal('function'); + expect(() => { + indexFile.getBackendObject('Sodium') + }).to.throw('Unrecognized backend type: Sodium'); + }); + + it('SodiumPlus.CONSTANTS', async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + let dummy = Util.populateConstants({}); + for (let val in dummy) { + expect(sodium.backend[val]).to.be.equals(dummy[val]); + expect(sodium[val]).to.be.equals(dummy[val]); + } + }); + + it('SodiumPlus.crypto_aead_xchacha20poly1305_ietf_*', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = Buffer.from( + '4c616469657320616e642047656e746c656d656e206f662074686520636c6173' + + '73206f66202739393a204966204920636f756c64206f6666657220796f75206f' + + '6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73' + + '637265656e20776f756c642062652069742e', + 'hex' + ); + let assocData = Buffer.from('50515253c0c1c2c3c4c5c6c7', 'hex'); + let nonce = Buffer.from('404142434445464748494a4b4c4d4e4f5051525354555657', 'hex'); + let key = CryptographyKey.from('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f', 'hex'); + + let ciphertext = await sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, nonce, key, assocData); + + let expected = 'bd6d179d3e83d43b9576579493c0e939572a1700252bfaccbed2902c21396cbb' + + '731c7f1b0b4aa6440bf3a82f4eda7e39ae64c6708c54c216cb96b72e1213b452' + + '2f8c9ba40db5d945b11b69b982c1bb9e3f3fac2bc369488f76b2383565d3fff9' + + '21f9664c97637da9768812f615c68b13b52e' + + 'c0875924c1c7987947deafd8780acf49'; + expect(ciphertext.toString('hex')).to.be.equals(expected); + + let decrypted = await sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, nonce, key, assocData); + expect(decrypted.toString('hex')).to.be.equals(plaintext.toString('hex')); + + let randomKey = await sodium.crypto_aead_xchacha20poly1305_ietf_keygen(); + assert(randomKey instanceof CryptographyKey); + + let ciphertext2 = await sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, nonce, randomKey); + decrypted = await sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext2, nonce, randomKey); + expect(decrypted.toString('hex')).to.be.equals(plaintext.toString('hex')); + expect(ciphertext.toString('hex')).to.not.equals(ciphertext2.toString('hex')); + + await expectError( + sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(plaintext, nonce.slice(1), randomKey), + 'Argument 2 must be 24 bytes' + ); + await expectError( + sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(plaintext, nonce, Buffer.alloc(32)), + 'Argument 3 must be an instance of CryptographyKey' + ); + + await expectError( + sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, nonce.slice(1), randomKey), + 'Argument 2 must be 24 bytes' + ); + await expectError( + sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, nonce, Buffer.alloc(32)), + 'Argument 3 must be an instance of CryptographyKey' + ); + }); + + it('SodiumPlus.crypto_auth', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let key = await sodium.crypto_auth_keygen(); + let message = 'Science, math, technology, engineering, and compassion for others.'; + let mac = await sodium.crypto_auth(message, key); + assert(await sodium.crypto_auth_verify(message, key, mac) === true); + + await expectError( + sodium.crypto_auth(message, Buffer.alloc(32)), + 'Argument 2 must be an instance of CryptographyKey' + ); + await expectError( + sodium.crypto_auth_verify(message, Buffer.alloc(32), mac), + 'Argument 2 must be an instance of CryptographyKey' + ); + }); + + it('SodiumPlus.crypto_box', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Science, math, technology, engineering, and compassion for others.'; + + let aliceKeypair = await sodium.crypto_box_keypair(); + let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_box_publickey(aliceKeypair); + + let bobKeypair = await sodium.crypto_box_keypair(); + let bobSecret = await sodium.crypto_box_secretkey(bobKeypair); + let bobPublic = await sodium.crypto_box_publickey(bobKeypair); + + let nonce = await sodium.randombytes_buf(24); + + let ciphertext = await sodium.crypto_box(plaintext, nonce, aliceSecret, bobPublic); + let decrypted = await sodium.crypto_box_open(ciphertext, nonce, bobSecret, alicePublic); + expect(decrypted.toString('hex')).to.be.equals(Buffer.from(plaintext).toString('hex')); + + let derived = await sodium.crypto_box_publickey_from_secretkey(aliceSecret); + expect(alicePublic.getBuffer().toString('hex')) + .to.be.equal(derived.getBuffer().toString('hex')); + + /* Unhappy path: */ + await expectError( + sodium.crypto_box(plaintext, nonce, alicePublic, bobPublic), + 'Argument 3 must be an instance of X25519SecretKey' + ); + await expectError( + sodium.crypto_box(plaintext, nonce, bobSecret, aliceSecret), + 'Argument 4 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_box(plaintext, nonce.slice(1), bobSecret, alicePublic), + 'Nonce must be a buffer of exactly 24 bytes' + ); + await expectError( + sodium.crypto_box_open(ciphertext, nonce, alicePublic, bobPublic), + 'Argument 3 must be an instance of X25519SecretKey' + ); + await expectError( + sodium.crypto_box_open(ciphertext, nonce, bobSecret, aliceSecret), + 'Argument 4 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_box_open(ciphertext.slice(0, 14), nonce, bobSecret, alicePublic), + 'Ciphertext must be a buffer of at least 16 bytes' + ); + await expectError( + sodium.crypto_box_open(ciphertext, nonce.slice(1), bobSecret, alicePublic), + 'Nonce must be a buffer of exactly 24 bytes' + ); + await expectError( + sodium.crypto_box_keypair_from_secretkey_and_publickey(alicePublic, alicePublic), + 'Argument 1 must be an instance of X25519SecretKey' + ); + await expectError( + sodium.crypto_box_keypair_from_secretkey_and_publickey(aliceSecret, aliceSecret), + 'Argument 2 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_box_secretkey(derived), + 'Keypair must be 64 bytes' + ); + await expectError( + sodium.crypto_box_publickey(derived), + 'Keypair must be 64 bytes' + ); + await expectError( + sodium.crypto_box_publickey_from_secretkey(derived), + 'Argument 1 must be an instance of X25519SecretKey' + ); + }); + + it('SodiumPlus.crypto_box_seal', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Science, math, technology, engineering, and compassion for others.'; + + let aliceKeypair = await sodium.crypto_box_keypair(); + let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_box_publickey(aliceKeypair); + assert(aliceSecret instanceof X25519SecretKey); + assert(alicePublic instanceof X25519PublicKey); + + let ciphertext = await sodium.crypto_box_seal(plaintext, alicePublic); + let decrypted = await sodium.crypto_box_seal_open(ciphertext, alicePublic, aliceSecret); + expect(decrypted.toString('hex')).to.be.equals(Buffer.from(plaintext).toString('hex')); + + await expectError( + sodium.crypto_box_seal(plaintext, aliceSecret), + 'Argument 2 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_box_seal_open(plaintext, aliceSecret, aliceSecret), + 'Argument 2 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_box_seal_open(plaintext, alicePublic, alicePublic), + 'Argument 3 must be an instance of X25519SecretKey' + ); + }); + + it('SodiumPlus.crypto_generichash', async() => { + let message = 'Science, math, technology, engineering, and compassion for others.'; + let piece1 = message.slice(0, 16); + let piece2 = message.slice(16); + + let hash1 = await sodium.crypto_generichash(message); + expect(hash1.toString('hex')).to.be.equals('47c1fdbde32b30b9c54dd47cf88ba92d2d05df1265e342c9563ed56aee84ab02'); + + let state = await sodium.crypto_generichash_init(); + await sodium.crypto_generichash_update(state, piece1); + await sodium.crypto_generichash_update(state, piece2); + let hash2 = await sodium.crypto_generichash_final(state); + expect(hash1.toString('hex')).to.be.equals(hash2.toString('hex')); + + let key = await sodium.crypto_generichash_keygen(); + hash1 = await sodium.crypto_generichash(message, key); + state = await sodium.crypto_generichash_init(key); + await sodium.crypto_generichash_update(state, piece1); + await sodium.crypto_generichash_update(state, piece2); + hash2 = await sodium.crypto_generichash_final(state); + expect(hash1.toString('hex')).to.be.equals(hash2.toString('hex')); + }); + + it('SodiumPlus.crypto_kdf', async function() { + if (!sodium) sodium = await SodiumPlus.auto(); + let subkey, expected; + let key = CryptographyKey.from('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f', 'hex'); + let context = 'NaClTest'; + subkey = await sodium.crypto_kdf_derive_from_key(32, 1, context, key); + expected = 'bce6fcf118cac2691bb23975a63dfac02282c1cd5de6ab9febcbb0ec4348181b'; + expect(subkey.toString('hex')).to.be.equals(expected); + + subkey = await sodium.crypto_kdf_derive_from_key(32, 2, context, key); + expected = '877cf1c1a2da9b900c79464acebc3731ed4ebe326a7951911639821d09dc6dda'; + expect(subkey.toString('hex')).to.be.equals(expected); + + let key2 = await sodium.crypto_kdf_keygen(); + let subkey2 = await sodium.crypto_kdf_derive_from_key(32, 1, context, key2); + expect(subkey2.toString('hex')).to.not.equals(key2.toString('hex')); + expect(subkey2.toString('hex')).to.not.equals(subkey.toString('hex')); + + await expectError( + sodium.crypto_kdf_derive_from_key(-32, 1, context, key2), + 'Length must be a positive integer.' + ); + await expectError( + sodium.crypto_kdf_derive_from_key(32, -1, context, key2), + 'Key ID must be an unsigned integer' + ); + }); + + it('SodiumPlus.crypto_kx', async function() { + if (!sodium) sodium = await SodiumPlus.auto(); + let clientKeys = await sodium.crypto_kx_keypair(); + let clientSecret = await sodium.crypto_box_secretkey(clientKeys); + let clientPublic = await sodium.crypto_box_publickey(clientKeys); + let seed = 'Unit test static key seed goes here. Nothing too complicated. No randomness needed, really.'; + let serverKeys = await sodium.crypto_kx_seed_keypair(seed); + let serverSecret = await sodium.crypto_box_secretkey(serverKeys); + let serverPublic = await sodium.crypto_box_publickey(serverKeys); + let clientRx, clientTx, serverRx, serverTx; + + [clientRx, clientTx] = await sodium.crypto_kx_client_session_keys(clientPublic, clientSecret, serverPublic); + [serverRx, serverTx] = await sodium.crypto_kx_server_session_keys(serverPublic, serverSecret, clientPublic); + + expect(clientRx.toString('hex')).to.be.equals(serverTx.toString('hex')); + expect(clientTx.toString('hex')).to.be.equals(serverRx.toString('hex')); + + await expectError( + sodium.crypto_kx_client_session_keys(clientSecret, clientSecret, serverPublic), + 'Argument 1 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_kx_client_session_keys(clientPublic, clientPublic, serverPublic), + 'Argument 2 must be an instance of X25519SecretKey' + ); + await expectError( + sodium.crypto_kx_client_session_keys(clientPublic, clientSecret, serverSecret), + 'Argument 3 must be an instance of X25519PublicKey' + ); + + await expectError( + sodium.crypto_kx_server_session_keys(serverSecret, serverSecret, clientPublic), + 'Argument 1 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_kx_server_session_keys(serverPublic, serverPublic, clientPublic), + 'Argument 2 must be an instance of X25519SecretKey' + ); + await expectError( + sodium.crypto_kx_server_session_keys(serverPublic, serverSecret, clientSecret), + 'Argument 3 must be an instance of X25519PublicKey' + ); + }); + + it('SodiumPlus.crypto_onetimeauth', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let key = await sodium.crypto_onetimeauth_keygen(); + let plaintext = 'Science, math, technology, engineering, and compassion for others.'; + let tag = await sodium.crypto_onetimeauth(plaintext, key); + assert(await sodium.crypto_onetimeauth_verify(plaintext, key, tag)); + assert((await sodium.crypto_onetimeauth_verify(plaintext + ' extra', key, tag)) === false); + + let msg = Buffer.alloc(32, 0); + key = CryptographyKey.from('746869732069732033322d62797465206b657920666f7220506f6c7931333035', 'hex'); + tag = await sodium.crypto_onetimeauth(msg, key); + expect(tag.toString('hex')).to.be.equals('49ec78090e481ec6c26b33b91ccc0307'); + assert(await sodium.crypto_onetimeauth_verify(msg, key, tag)); + + await expectError( + sodium.crypto_onetimeauth(msg, Buffer.alloc(32)), + 'Argument 2 must be an instance of CryptographyKey' + ); + + await expectError( + sodium.crypto_onetimeauth_verify(msg, Buffer.alloc(32), tag), + 'Argument 2 must be an instance of CryptographyKey' + ); + }); + + it('SodiumPlus.crypto_scalarmult', async() => { + let aliceKeypair = await sodium.crypto_box_keypair(); + let aliceSecret = await sodium.crypto_box_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_box_publickey(aliceKeypair); + assert(aliceSecret instanceof X25519SecretKey); + assert(alicePublic instanceof X25519PublicKey); + + // crypto_scalarmult_base test: + let testPublic = await sodium.crypto_scalarmult_base(aliceSecret); + expect(testPublic.getBuffer().toString('hex')).to.be.equals(alicePublic.getBuffer().toString('hex')); + + // crypto_scalarmult test: + let bobKeypair = await sodium.crypto_box_keypair(); + let bobSecret = await sodium.crypto_box_secretkey(bobKeypair); + let bobPublic = await sodium.crypto_box_publickey(bobKeypair); + + expect(alicePublic.getBuffer().toString('hex')).to.be.equals(alicePublic.getBuffer().toString('hex')); + + let ab = await sodium.crypto_scalarmult(aliceSecret, bobPublic); + expect(ab.toString('hex')).to.not.equals('0000000000000000000000000000000000000000000000000000000000000000'); + let ba = await sodium.crypto_scalarmult(bobSecret, alicePublic); + expect(ba.toString('hex')).to.not.equals('0000000000000000000000000000000000000000000000000000000000000000'); + expect(ab.toString('hex')).to.be.equals(ba.toString('hex')); + + await expectError( + sodium.crypto_scalarmult(alicePublic, bobPublic), + 'Argument 1 must be an instance of X25519SecretKey' + ); + await expectError( + sodium.crypto_scalarmult(aliceSecret, bobSecret), + 'Argument 2 must be an instance of X25519PublicKey' + ); + await expectError( + sodium.crypto_scalarmult_base(alicePublic), + 'Argument 1 must be an instance of X25519SecretKey' + ); + }); + + it('SodiumPlus.crypto_secretbox', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let plaintext = 'Science, math, technology, engineering, and compassion for others.'; + + let key = await sodium.crypto_secretbox_keygen(); + let nonce = await sodium.randombytes_buf(24); + + let ciphertext = await sodium.crypto_secretbox(plaintext, nonce, key); + let decrypted = await sodium.crypto_secretbox_open(ciphertext, nonce, key); + expect(decrypted.toString('hex')).to.be.equals(Buffer.from(plaintext).toString('hex')); + + // Unhappy path: + let ed25519key = await sodium.crypto_sign_secretkey(await sodium.crypto_sign_keypair()); + await expectError( + sodium.crypto_secretbox(ciphertext.slice(0, 14), nonce, ed25519key), + 'Argument 3 must not be an asymmetric key' + ); + await expectError( + sodium.crypto_secretbox(ciphertext, nonce.slice(1), key), + 'Nonce must be a buffer of exactly 24 bytes' + ); + await expectError( + sodium.crypto_secretbox_open(ciphertext.slice(0, 14), nonce, ed25519key), + 'Argument 3 must not be an asymmetric key' + ); + await expectError( + sodium.crypto_secretbox_open(ciphertext.slice(0, 14), nonce, key), + 'Ciphertext must be a buffer of at least 16 bytes' + ); + await expectError( + sodium.crypto_secretbox_open(ciphertext, nonce.slice(1), key), + 'Nonce must be a buffer of exactly 24 bytes' + ); + }); + + it('SodiumPlus.crypto_secretstream_xchacha20poly1305', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + + let key = await sodium.crypto_secretstream_xchacha20poly1305_keygen(); + let encryptor, decryptor; + encryptor = await sodium.crypto_secretstream_xchacha20poly1305_init_push(key); + decryptor = await sodium.crypto_secretstream_xchacha20poly1305_init_pull(key, encryptor.header); + + await expectError( + sodium.crypto_secretstream_xchacha20poly1305_init_push(Buffer.alloc(31)), + 'Key must be an instance of CryptographyKey' + ); + await expectError( + sodium.crypto_secretstream_xchacha20poly1305_init_pull(Buffer.alloc(31), encryptor.header), + 'Key must be an instance of CryptographyKey' + ); + + let invalidKey = new CryptographyKey(Buffer.alloc(31)); + await expectError( + sodium.crypto_secretstream_xchacha20poly1305_init_push(invalidKey), + 'crypto_secretstream keys must be 32 bytes long' + ); + await expectError( + sodium.crypto_secretstream_xchacha20poly1305_init_pull(invalidKey, encryptor.header), + 'crypto_secretstream keys must be 32 bytes long' + ); + await expectError( + sodium.crypto_secretstream_xchacha20poly1305_init_pull(key, encryptor.header.slice(1)), + 'crypto_secretstream headers must be 24 bytes long' + ); + + // Get a test input from the text file. + let longText = await fsp.readFile(path.join(__dirname, 'longtext.md')); + let chunk, readUntil; + let ciphertext = Buffer.concat([encryptor.header]); + + // How big are our chunks going to be? + let PUSH_CHUNK_SIZE = await sodium.randombytes_uniform(longText.length - 32) + 32; + let PULL_CHUNK_SIZE = PUSH_CHUNK_SIZE + sodium.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES; + + // Encrypt + for (let i = 0; i < longText.length; i += PUSH_CHUNK_SIZE) { + readUntil = (i + PUSH_CHUNK_SIZE) > longText.length ? longText.length : i + PUSH_CHUNK_SIZE; + chunk = await encryptor.push( + longText.slice(i, readUntil) + ); + ciphertext = Buffer.concat([ciphertext, chunk]); + } + expect(ciphertext.slice(0, 24).toString('hex')).to.be + .equals(encryptor.header.toString('hex')); + + // Decrypt, starting at 24 (after the header, which we already have) + let decrypted = Buffer.alloc(0); + for (let i = 24; i < ciphertext.length; i += PULL_CHUNK_SIZE) { + readUntil = (i + PULL_CHUNK_SIZE) > ciphertext.length ? ciphertext.length : i + PULL_CHUNK_SIZE; + chunk = await decryptor.pull( + ciphertext.slice(i, readUntil) + ); + decrypted = Buffer.concat([decrypted, chunk]); + } + expect(decrypted.toString('hex')).to.be.equals(longText.toString('hex')); + await encryptor.rekey(); + }); + + it('SodiumPlus.crypto_shorthash', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let key = CryptographyKey.from('808182838485868788898a8b8c8d8e8f', 'hex'); + let message; + let hash; + + message = 'This is short input0'; + hash = await sodium.crypto_shorthash(message, key); + expect(hash.toString('hex')).to.be.equals('ef589fb9ef4196b3'); + + message = 'This is short input1'; + hash = await sodium.crypto_shorthash(message, key); + expect(hash.toString('hex')).to.be.equals('5e8f01039bc53eb7'); + + let random = await sodium.crypto_shorthash_keygen(); + expect(sodium.CRYPTO_SHORTHASH_KEYBYTES).to.be.equal(random.getLength()); + }); + + it('SodiumPlus.crypto_sign_seed_keypair', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let aliceKeypair = await sodium.crypto_sign_seed_keypair( + await sodium.crypto_generichash('sodium-plus') + ); + let alicePublic = await sodium.crypto_sign_publickey(aliceKeypair); + expect(alicePublic.getBuffer().toString('hex')).to.be.equals( + '292288efba3a33275d216f2e4d9014d330f3b2852d6b767de15e43839096d6e8' + ); + await expectError( + sodium.crypto_sign_seed_keypair(Buffer.alloc(31)), + 'Seed must be 32 bytes long; got 31' + ); + // Should not throw: + await sodium.crypto_sign_seed_keypair( + new CryptographyKey(await sodium.crypto_generichash('sodium-plus')) + ); + }); + + it('SodiumPlus.crypto_sign_{secret,public}key', async() => { + await expectError( + sodium.crypto_sign_secretkey(new CryptographyKey(Buffer.alloc(16))), + 'Keypair must be 96 bytes' + ); + await expectError( + sodium.crypto_sign_publickey(new CryptographyKey(Buffer.alloc(16))), + 'Keypair must be 96 bytes' + ); + }); + + it('SodiumPlus.crypto_sign', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let aliceKeypair = await sodium.crypto_sign_keypair(); + let aliceSecret = await sodium.crypto_sign_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_sign_publickey(aliceKeypair); + + let plaintext = 'Science, math, technology, engineering, and compassion for others.'; + let signed = await sodium.crypto_sign(plaintext, aliceSecret); + let opened = await sodium.crypto_sign_open(signed, alicePublic); + expect(signed.slice(64).toString('hex')).to.be.equals(opened.toString('hex')); + expect(opened.toString()).to.be.equals(plaintext); + + let signature = await sodium.crypto_sign_detached(plaintext, aliceSecret); + let valid = await sodium.crypto_sign_verify_detached(plaintext, alicePublic, signature); + expect(valid).to.be.equals(true); + let invalid = await sodium.crypto_sign_verify_detached(plaintext + ' extra', alicePublic, signature); + expect(invalid).to.be.equals(false); + await expectError( + sodium.crypto_sign(plaintext, alicePublic), + 'Argument 2 must be an instance of Ed25519SecretKey' + ); + await expectError( + sodium.crypto_sign_open(signed, aliceSecret), + 'Argument 2 must be an instance of Ed25519PublicKey' + ); + await expectError( + sodium.crypto_sign_detached(plaintext, alicePublic), + 'Argument 2 must be an instance of Ed25519SecretKey' + ); + await expectError( + sodium.crypto_sign_verify_detached(plaintext, aliceSecret, signature), + 'Argument 2 must be an instance of Ed25519PublicKey' + ); + }); + + it('SodiumPlus.crypto_sign_ed25519_to_curve25519', async function () { + this.timeout(0); + if (!sodium) sodium = await SodiumPlus.auto(); + + let aliceKeypair = CryptographyKey.from( + '411a2c2227d2a799ebae0ed94417d8e8ed1ca9b0a9d5f4cd743cc52d961e94e2' + + 'da49154c9e700b754199df7974e9fa4ee4b6ebbc71f89d8d8938335ea4a1409d' + + 'da49154c9e700b754199df7974e9fa4ee4b6ebbc71f89d8d8938335ea4a1409d', 'hex'); + let aliceSecret = await sodium.crypto_sign_secretkey(aliceKeypair); + let alicePublic = await sodium.crypto_sign_publickey(aliceKeypair); + + let ecdhSecret = await sodium.crypto_sign_ed25519_sk_to_curve25519(aliceSecret); + expect(ecdhSecret.toString('hex')).to.be + .equals('60c783b8d1674b7081b72a105b55872502825d4ec638028152e085b54705ad7e'); + let ecdhPublic = await sodium.crypto_sign_ed25519_pk_to_curve25519(alicePublic); + expect(ecdhPublic.toString('hex')).to.be + .equals('5a791d07cfb39060c8e9b641b6a915a3126cd14ddc243a9928c490c8e1f59e7c'); + }); + + it('SodiumPlus.crypto_stream', async function () { + if (!sodium) sodium = await SodiumPlus.auto(); + let key = CryptographyKey.from('8000000000000000000000000000000000000000000000000000000000000000', 'hex'); + let iv = Buffer.alloc(24, 0); + let output = await sodium.crypto_stream(256, iv, key); + let testVector = '93D88C085B8433B1FBAD2221FAD718078D96119F727D27F0547F9F3D29DE1358' + + 'F3FE3D9EEACF59E894FA76E6507F567B4A0796DD00D8BFC736344A9906CB1F5D'; + expect(output.slice(0, 64).toString('hex').toUpperCase()).to.be.equals(testVector); + testVector = '17FD2BD86D095016D8367E0DD47D3E4A18DAE7BB24F8B5E3E9F52C4A493BE982' + + 'ECA8E89A4DEC78467E31087A1ACDA83754BEFB273AB27EB396EB4957F7166C25'; + expect(output.slice(192, 256).toString('hex').toUpperCase()).to.be.equals(testVector); + + key = CryptographyKey.from('8080808080808080808080808080808080808080808080808080808080808080', 'hex'); + output = await sodium.crypto_stream_xor('Test message', iv, key); + expect(output.toString('hex')).to.be.equals('1071d0355cb22c4c4e00303f'); + + key = await sodium.crypto_stream_keygen(); + iv = await sodium.randombytes_buf(24); + let plaintext = 'This is a secret message'; + let ciphertext = await sodium.crypto_stream_xor(plaintext, iv, key); + let decrypted = await sodium.crypto_stream_xor(ciphertext, iv, key); + expect(decrypted.toString()).to.be.equals(plaintext); + }); + + it('SodiumPlus.randombytes_buf', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let a, b; + for (let i = 0; i < 100; i++) { + a = await sodium.randombytes_buf(64); + b = await sodium.randombytes_buf(64); + expect(a.toString('hex')).to.not.equals(b.toString('hex')); + } + }); + + it('SodiumPlus.randombytes_uniform', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let a, b; + for (let i = 0; i < 100; i++) { + a = await sodium.randombytes_uniform(0x3fffffff); + b = await sodium.randombytes_uniform(0x3fffffff); + expect(a).to.not.equals(b); + } + }); + + it('SodiumPlus.sodium_bin2hex', async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + let buf = await sodium.randombytes_buf(32); + + expect(await sodium.sodium_bin2hex(buf)).to.be.equals(buf.toString('hex')); + }); + + it('SodiumPlus.sodium_add', async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + let foo = Buffer.from('ed000000', 'hex'); + let bar = Buffer.from('01000000', 'hex'); + let baz = await sodium.sodium_add(foo, bar); + expect(baz.toString('hex')).to.be.equals('ee000000'); + + bar = Buffer.from('ff000000', 'hex'); + baz = await sodium.sodium_add(baz, bar); + expect(baz.toString('hex')).to.be.equals('ed010000'); + + foo = Buffer.from('ffffffff', 'hex'); + bar = Buffer.from('01000000', 'hex'); + baz = await sodium.sodium_add(foo, bar); + expect(baz.toString('hex')).to.be.equals('00000000'); + bar = Buffer.from('02000000', 'hex'); + baz = await sodium.sodium_add(foo, bar); + expect(baz.toString('hex')).to.be.equals('01000000'); + }); + + it('SodiumPlus.sodium_compare', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let a = Buffer.from('80808080', 'hex'); + let b = Buffer.from('81808080', 'hex'); + let c = Buffer.from('80808081', 'hex'); + + expect(await sodium.sodium_compare(a, a)).to.be.equals(0); + expect(await sodium.sodium_compare(b, b)).to.be.equals(0); + expect(await sodium.sodium_compare(c, c)).to.be.equals(0); + expect(await sodium.sodium_compare(a, b)).to.be.below(0); + expect(await sodium.sodium_compare(b, a)).to.be.above(0); + expect(await sodium.sodium_compare(a, c)).to.be.below(0); + expect(await sodium.sodium_compare(c, a)).to.be.above(0); + expect(await sodium.sodium_compare(b, c)).to.be.below(0); + expect(await sodium.sodium_compare(c, b)).to.be.above(0); + }); + + it('SodiumPlus.sodium_hex2bin', async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + let buf = await sodium.randombytes_buf(32); + let hex = buf.toString('hex'); + let bin = await sodium.sodium_hex2bin(hex); + expect(Buffer.isBuffer(bin)).to.be.equals(true); + expect(bin.toString('base64')).to.be.equals(buf.toString('base64')); + }); + + it('SodiumPlus.sodium_increment', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let a = Buffer.from('80808080', 'hex'); + let b = Buffer.from('81808080', 'hex'); + await sodium.sodium_increment(a); + expect(await sodium.sodium_compare(b, a)).to.be.equals(0); + + a = Buffer.from('ffffffff', 'hex'); + b = Buffer.from('00000000', 'hex'); + await sodium.sodium_increment(a); + expect(await sodium.sodium_compare(b, a)).to.be.equals(0); + }); + it('SodiumPlus.sodium_is_zero', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let buf; + buf = Buffer.from('00', 'hex'); + expect(await sodium.sodium_is_zero(buf, 1)).to.be.equals(true); + buf = Buffer.from('01', 'hex'); + expect(await sodium.sodium_is_zero(buf, 1)).to.be.equals(false); + }); + + it('SodiumPlus.sodium_memcmp', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let a, b, c; + a = await sodium.randombytes_buf(32); + b = await sodium.randombytes_buf(32); + c = await Util.cloneBuffer(b); + + expect(await sodium.sodium_memcmp(a, b)).to.be.equals(false); + expect(await sodium.sodium_memcmp(a, c)).to.be.equals(false); + expect(await sodium.sodium_memcmp(b, c)).to.be.equals(true); + expect(await sodium.sodium_memcmp(c, b)).to.be.equals(true); + }); + + it('SodiumPlus.sodium_memzero', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let buf = await sodium.randombytes_buf(16); + expect(buf.toString('hex')).to.not.equals('00000000000000000000000000000000'); + await sodium.sodium_memzero(buf); + expect(buf.toString('hex')).to.be.equals('00000000000000000000000000000000'); + }); + + it('SodiumPlus.sodium_pad', async() => { + if (!sodium) sodium = await SodiumPlus.auto(); + let buf, size, padded, unpadded; + for (let i = 0; i < 100; i++) { + buf = await sodium.randombytes_buf( + await sodium.randombytes_uniform(96) + 16 + ); + size = await sodium.randombytes_uniform(96) + 5; + padded = await sodium.sodium_pad(buf, size); + unpadded = await sodium.sodium_unpad(padded, size); + expect(unpadded.toString('hex')).to.be.equals(buf.toString('hex')); + } + }); +}); diff --git a/library/sodium-plus/test/util-test.js b/library/sodium-plus/test/util-test.js new file mode 100644 index 000000000..f13586868 --- /dev/null +++ b/library/sodium-plus/test/util-test.js @@ -0,0 +1,30 @@ +const { describe, it } = require('mocha'); +const { expect } = require('chai'); +const { SodiumPlus } = require('../index'); +const Util = require('../lib/util'); +const VERBOSE = false; +const expectError = require('./async-helper'); + +let sodium; + +(async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + if (VERBOSE) { + console.log({ + 'libsodium-wrappers': sodium.isLibsodiumWrappers(), + 'sodium-native': sodium.isSodiumNative() + }); + } +})(); + +describe('Util', async () => { + it('toBuffer()', async () => { + if (!sodium) sodium = await SodiumPlus.auto(); + + expect(null).to.be.equal(await Util.toBuffer(null)); + + let promised = await Util.toBuffer(sodium.crypto_secretbox_keygen()); + expect(32).to.be.equal(promised.getBuffer().length); + await expectError(Util.toBuffer(12), 'Invalid type; string or buffer expected'); + }); +}); -- cgit v1.2.3